1SET @max_row = 20;
2SET @@session.default_storage_engine = 'TokuDB';
3
4#------------------------------------------------------------------------
5#  0. Setting of auxiliary variables + Creation of an auxiliary tables
6#     needed in many testcases
7#------------------------------------------------------------------------
8SELECT @max_row DIV 2 INTO @max_row_div2;
9SELECT @max_row DIV 3 INTO @max_row_div3;
10SELECT @max_row DIV 4 INTO @max_row_div4;
11SET @max_int_4 = 2147483647;
12DROP TABLE IF EXISTS t0_template;
13CREATE TABLE t0_template (
14f_int1 INTEGER,
15f_int2 INTEGER,
16f_char1 CHAR(20),
17f_char2 CHAR(20),
18f_charbig VARCHAR(1000) ,
19PRIMARY KEY(f_int1))
20ENGINE = MEMORY;
21#     Logging of <max_row> INSERTs into t0_template suppressed
22DROP TABLE IF EXISTS t0_definition;
23CREATE TABLE t0_definition (
24state CHAR(3),
25create_command VARBINARY(5000),
26file_list      VARBINARY(10000),
27PRIMARY KEY (state)
28) ENGINE = MEMORY;
29DROP TABLE IF EXISTS t0_aux;
30CREATE TABLE t0_aux ( f_int1 INTEGER,
31f_int2 INTEGER,
32f_char1 CHAR(20),
33f_char2 CHAR(20),
34f_charbig VARCHAR(1000) )
35ENGINE = MEMORY;
36SET AUTOCOMMIT= 1;
37SET @@session.sql_mode= '';
38Warnings:
39Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
40# End of basic preparations needed for all tests
41#-----------------------------------------------
42
43#========================================================================
44#  1     Increase the size of the column used in the partitioning
45#        function and/or PRIMARY KEY and/or UNIQUE INDEX
46#========================================================================
47#------------------------------------------------------------------------
48#  1.1   ALTER column f_int2 not used in partitioning function
49#------------------------------------------------------------------------
50#  1.1.1 no PRIMARY KEY or UNIQUE INDEX exists
51DROP TABLE IF EXISTS t1;
52CREATE TABLE t1 (
53f_int1 INTEGER,
54f_int2 INTEGER,
55f_char1 CHAR(20),
56f_char2 CHAR(20),
57f_charbig VARCHAR(1000)
58
59)
60PARTITION BY HASH(f_int1) PARTITIONS 2;
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 1 AND @max_row_div2 - 1;
64ALTER TABLE t1 MODIFY f_int2 BIGINT;
65INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
66SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
67WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
68# Start usability test (inc/partition_check.inc)
69create_command
70SHOW CREATE TABLE t1;
71Table	Create Table
72t1	CREATE TABLE `t1` (
73  `f_int1` int(11) DEFAULT NULL,
74  `f_int2` bigint(20) DEFAULT NULL,
75  `f_char1` char(20) DEFAULT NULL,
76  `f_char2` char(20) DEFAULT NULL,
77  `f_charbig` varchar(1000) DEFAULT NULL
78) ENGINE=TokuDB DEFAULT CHARSET=latin1
79/*!50100 PARTITION BY HASH (f_int1)
80PARTITIONS 2 */
81
82# check prerequisites-1 success:    1
83# check COUNT(*) success:    1
84# check MIN/MAX(f_int1) success:    1
85# check MIN/MAX(f_int2) success:    1
86INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
87SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
88CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
89WHERE f_int1 IN (2,3);
90# check prerequisites-3 success:    1
91DELETE FROM t1 WHERE f_charbig = 'delete me';
92# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
93# check read via f_int1 success: 1
94# check read via f_int2 success: 1
95
96# check multiple-1 success: 	1
97DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
98
99# check multiple-2 success: 	1
100INSERT INTO t1 SELECT * FROM t0_template
101WHERE MOD(f_int1,3) = 0;
102
103# check multiple-3 success: 	1
104UPDATE t1 SET f_int1 = f_int1 + @max_row
105WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
106AND @max_row_div2 + @max_row_div4;
107
108# check multiple-4 success: 	1
109DELETE FROM t1
110WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
111AND @max_row_div2 + @max_row_div4 + @max_row;
112
113# check multiple-5 success: 	1
114SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
115INSERT INTO t1
116SET f_int1 = @cur_value , f_int2 = @cur_value,
117f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
118f_charbig = '#SINGLE#';
119
120# check single-1 success: 	1
121SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
122INSERT INTO t1
123SET f_int1 = @cur_value , f_int2 = @cur_value,
124f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
125f_charbig = '#SINGLE#';
126
127# check single-2 success: 	1
128SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
129SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
130UPDATE t1 SET f_int1 = @cur_value2
131WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
132
133# check single-3 success: 	1
134SET @cur_value1= -1;
135SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
136UPDATE t1 SET f_int1 = @cur_value1
137WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
138
139# check single-4 success: 	1
140SELECT MAX(f_int1) INTO @cur_value FROM t1;
141DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
142
143# check single-5 success: 	1
144DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
145
146# check single-6 success: 	1
147INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
148
149# check single-7 success: 	1
150DELETE FROM t1 WHERE f_charbig = '#2147483647##';
151DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
152INSERT t1 SET f_int1 = 0 , f_int2 = 0,
153f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
154f_charbig = '#NULL#';
155INSERT INTO t1
156SET f_int1 = NULL , f_int2 = -@max_row,
157f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
158f_charbig = '#NULL#';
159# check null success:    1
160
161# check null-1 success: 	1
162UPDATE t1 SET f_int1 = -@max_row
163WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
164AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
165
166# check null-2 success: 	1
167UPDATE t1 SET f_int1 = NULL
168WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
169AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
170
171# check null-3 success: 	1
172DELETE FROM t1
173WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
174AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
175
176# check null-4 success: 	1
177DELETE FROM t1
178WHERE f_int1 = 0 AND f_int2 = 0
179AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
180AND f_charbig = '#NULL#';
181SET AUTOCOMMIT= 0;
182INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
183SELECT f_int1, f_int1, '', '', 'was inserted'
184FROM t0_template source_tab
185WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
186
187# check transactions-1 success: 	1
188COMMIT WORK;
189
190# check transactions-2 success: 	1
191ROLLBACK WORK;
192
193# check transactions-3 success: 	1
194DELETE FROM t1 WHERE f_charbig = 'was inserted';
195COMMIT WORK;
196ROLLBACK WORK;
197
198# check transactions-4 success: 	1
199INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
200SELECT f_int1, f_int1, '', '', 'was inserted'
201FROM t0_template source_tab
202WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
203
204# check transactions-5 success: 	1
205ROLLBACK WORK;
206
207# check transactions-6 success: 	1
208# INFO: Storage engine used for t1 seems to be transactional.
209COMMIT;
210
211# check transactions-7 success: 	1
212DELETE FROM t1 WHERE f_charbig = 'was inserted';
213COMMIT WORK;
214SET @@session.sql_mode = 'traditional';
215Warnings:
216Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
217SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
218INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
219SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
220'', '', 'was inserted' FROM t0_template
221WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
222ERROR 22012: Division by 0
223COMMIT;
224
225# check transactions-8 success: 	1
226# INFO: Storage engine used for t1 seems to be able to revert
227#       changes made by the failing statement.
228SET @@session.sql_mode = '';
229Warnings:
230Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
231SET AUTOCOMMIT= 1;
232DELETE FROM t1 WHERE f_charbig = 'was inserted';
233COMMIT WORK;
234UPDATE t1 SET f_charbig = REPEAT('b', 1000);
235
236# check special-1 success: 	1
237UPDATE t1 SET f_charbig = '';
238
239# check special-2 success: 	1
240UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
241INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
242SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
243WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
244INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
245SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
246'just inserted' FROM t0_template
247WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
248CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
249BEGIN
250UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
251f_charbig = 'updated by trigger'
252      WHERE f_int1 = new.f_int1;
253END|
254INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
255SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
256WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
257
258# check trigger-1 success: 	1
259DROP TRIGGER trg_1;
260UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
261f_int2 = CAST(f_char1 AS SIGNED INT),
262f_charbig = 'just inserted'
263   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
264DELETE FROM t0_aux
265WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
266INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
267SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
268'just inserted' FROM t0_template
269WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
270CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
271BEGIN
272UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
273f_charbig = 'updated by trigger'
274      WHERE f_int1 = new.f_int1;
275END|
276INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
277SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
278WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
279
280# check trigger-2 success: 	1
281DROP TRIGGER trg_1;
282UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
283f_int2 = CAST(f_char1 AS SIGNED INT),
284f_charbig = 'just inserted'
285   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
286DELETE FROM t0_aux
287WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
288INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
289SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
290'just inserted' FROM t0_template
291WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
292CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
293BEGIN
294UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
295f_charbig = 'updated by trigger'
296      WHERE f_int1 = new.f_int1;
297END|
298UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
299WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
300
301# check trigger-3 success: 	1
302DROP TRIGGER trg_1;
303UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
304f_int2 = CAST(f_char1 AS SIGNED INT),
305f_charbig = 'just inserted'
306   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
307DELETE FROM t0_aux
308WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
309INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
310SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
311'just inserted' FROM t0_template
312WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
313CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
314BEGIN
315UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
316f_charbig = 'updated by trigger'
317      WHERE f_int1 = - old.f_int1;
318END|
319UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
320WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
321
322# check trigger-4 success: 	1
323DROP TRIGGER trg_1;
324UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
325f_int2 = CAST(f_char1 AS SIGNED INT),
326f_charbig = 'just inserted'
327   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
328DELETE FROM t0_aux
329WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
330INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
331SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
332'just inserted' FROM t0_template
333WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
334CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
335BEGIN
336UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
337f_charbig = 'updated by trigger'
338      WHERE f_int1 = new.f_int1;
339END|
340UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
341WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
342
343# check trigger-5 success: 	1
344DROP TRIGGER trg_1;
345UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
346f_int2 = CAST(f_char1 AS SIGNED INT),
347f_charbig = 'just inserted'
348   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
349DELETE FROM t0_aux
350WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
351INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
352SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
353'just inserted' FROM t0_template
354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
355CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
356BEGIN
357UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
358f_charbig = 'updated by trigger'
359      WHERE f_int1 = - old.f_int1;
360END|
361UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
362WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
363
364# check trigger-6 success: 	1
365DROP TRIGGER trg_1;
366UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
367f_int2 = CAST(f_char1 AS SIGNED INT),
368f_charbig = 'just inserted'
369   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
370DELETE FROM t0_aux
371WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
372INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
373SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
374'just inserted' FROM t0_template
375WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
376CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
377BEGIN
378UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
379f_charbig = 'updated by trigger'
380      WHERE f_int1 = - old.f_int1;
381END|
382DELETE FROM t0_aux
383WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
384
385# check trigger-7 success: 	1
386DROP TRIGGER trg_1;
387UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
388f_int2 = CAST(f_char1 AS SIGNED INT),
389f_charbig = 'just inserted'
390   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
391DELETE FROM t0_aux
392WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
393INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
394SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
395'just inserted' FROM t0_template
396WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
397CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
398BEGIN
399UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
400f_charbig = 'updated by trigger'
401      WHERE f_int1 = - old.f_int1;
402END|
403DELETE FROM t0_aux
404WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
405
406# check trigger-8 success: 	1
407DROP TRIGGER trg_1;
408UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
409f_int2 = CAST(f_char1 AS SIGNED INT),
410f_charbig = 'just inserted'
411   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
412DELETE FROM t0_aux
413WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
414DELETE FROM t1
415WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
416CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
417BEGIN
418SET new.f_int1 = old.f_int1 + @max_row,
419new.f_int2 = old.f_int2 - @max_row,
420new.f_charbig = '####updated per update trigger####';
421END|
422UPDATE t1
423SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
424f_charbig = '####updated per update statement itself####';
425
426# check trigger-9 success: 	1
427DROP TRIGGER trg_2;
428UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
429f_int2 = CAST(f_char1 AS SIGNED INT),
430f_charbig = CONCAT('===',f_char1,'===');
431CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
432BEGIN
433SET new.f_int1 = new.f_int1 + @max_row,
434new.f_int2 = new.f_int2 - @max_row,
435new.f_charbig = '####updated per update trigger####';
436END|
437UPDATE t1
438SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
439f_charbig = '####updated per update statement itself####';
440
441# check trigger-10 success: 	1
442DROP TRIGGER trg_2;
443UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
444f_int2 = CAST(f_char1 AS SIGNED INT),
445f_charbig = CONCAT('===',f_char1,'===');
446CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
447BEGIN
448SET new.f_int1 = @my_max1 + @counter,
449new.f_int2 = @my_min2 - @counter,
450new.f_charbig = '####updated per insert trigger####';
451SET @counter = @counter + 1;
452END|
453SET @counter = 1;
454SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
455INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
456SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
457CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
459ORDER BY f_int1;
460DROP TRIGGER trg_3;
461
462# check trigger-11 success: 	1
463DELETE FROM t1
464WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
465AND f_int2 <> CAST(f_char1 AS SIGNED INT)
466AND f_charbig = '####updated per insert trigger####';
467CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
468BEGIN
469SET new.f_int1 = @my_max1 + @counter,
470new.f_int2 = @my_min2 - @counter,
471new.f_charbig = '####updated per insert trigger####';
472SET @counter = @counter + 1;
473END|
474SET @counter = 1;
475SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
476INSERT INTO t1 (f_char1, f_char2, f_charbig)
477SELECT CAST(f_int1 AS CHAR),
478CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
479WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
480ORDER BY f_int1;
481DROP TRIGGER trg_3;
482
483# check trigger-12 success: 	1
484DELETE FROM t1
485WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
486AND f_int2 <> CAST(f_char1 AS SIGNED INT)
487AND f_charbig = '####updated per insert trigger####';
488ANALYZE  TABLE t1;
489Table	Op	Msg_type	Msg_text
490test.t1	analyze	status	OK
491CHECK    TABLE t1 EXTENDED;
492Table	Op	Msg_type	Msg_text
493test.t1	check	status	OK
494CHECKSUM TABLE t1 EXTENDED;
495Table	Checksum
496test.t1	<some_value>
497OPTIMIZE TABLE t1;
498Table	Op	Msg_type	Msg_text
499test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
500test.t1	optimize	status	OK
501# check layout success:    1
502REPAIR   TABLE t1 EXTENDED;
503Table	Op	Msg_type	Msg_text
504test.t1	repair	status	OK
505# check layout success:    1
506TRUNCATE t1;
507
508# check TRUNCATE success: 	1
509# check layout success:    1
510# End usability test (inc/partition_check.inc)
511DROP TABLE t1;
512CREATE TABLE t1 (
513f_int1 INTEGER,
514f_int2 INTEGER,
515f_char1 CHAR(20),
516f_char2 CHAR(20),
517f_charbig VARCHAR(1000)
518
519)
520PARTITION BY KEY(f_int1) PARTITIONS 5;
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 1 AND @max_row_div2 - 1;
524ALTER TABLE t1 MODIFY f_int2 BIGINT;
525INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
526SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
527WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
528# Start usability test (inc/partition_check.inc)
529create_command
530SHOW CREATE TABLE t1;
531Table	Create Table
532t1	CREATE TABLE `t1` (
533  `f_int1` int(11) DEFAULT NULL,
534  `f_int2` bigint(20) DEFAULT NULL,
535  `f_char1` char(20) DEFAULT NULL,
536  `f_char2` char(20) DEFAULT NULL,
537  `f_charbig` varchar(1000) DEFAULT NULL
538) ENGINE=TokuDB DEFAULT CHARSET=latin1
539/*!50100 PARTITION BY KEY (f_int1)
540PARTITIONS 5 */
541
542# check prerequisites-1 success:    1
543# check COUNT(*) success:    1
544# check MIN/MAX(f_int1) success:    1
545# check MIN/MAX(f_int2) success:    1
546INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
547SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
548CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
549WHERE f_int1 IN (2,3);
550# check prerequisites-3 success:    1
551DELETE FROM t1 WHERE f_charbig = 'delete me';
552# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
553# check read via f_int1 success: 1
554# check read via f_int2 success: 1
555
556# check multiple-1 success: 	1
557DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
558
559# check multiple-2 success: 	1
560INSERT INTO t1 SELECT * FROM t0_template
561WHERE MOD(f_int1,3) = 0;
562
563# check multiple-3 success: 	1
564UPDATE t1 SET f_int1 = f_int1 + @max_row
565WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
566AND @max_row_div2 + @max_row_div4;
567
568# check multiple-4 success: 	1
569DELETE FROM t1
570WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
571AND @max_row_div2 + @max_row_div4 + @max_row;
572
573# check multiple-5 success: 	1
574SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
575INSERT INTO t1
576SET f_int1 = @cur_value , f_int2 = @cur_value,
577f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
578f_charbig = '#SINGLE#';
579
580# check single-1 success: 	1
581SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
582INSERT INTO t1
583SET f_int1 = @cur_value , f_int2 = @cur_value,
584f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
585f_charbig = '#SINGLE#';
586
587# check single-2 success: 	1
588SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
589SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
590UPDATE t1 SET f_int1 = @cur_value2
591WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
592
593# check single-3 success: 	1
594SET @cur_value1= -1;
595SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
596UPDATE t1 SET f_int1 = @cur_value1
597WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
598
599# check single-4 success: 	1
600SELECT MAX(f_int1) INTO @cur_value FROM t1;
601DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
602
603# check single-5 success: 	1
604DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
605
606# check single-6 success: 	1
607INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
608
609# check single-7 success: 	1
610DELETE FROM t1 WHERE f_charbig = '#2147483647##';
611DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
612INSERT t1 SET f_int1 = 0 , f_int2 = 0,
613f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
614f_charbig = '#NULL#';
615INSERT INTO t1
616SET f_int1 = NULL , f_int2 = -@max_row,
617f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
618f_charbig = '#NULL#';
619# check null success:    1
620
621# check null-1 success: 	1
622UPDATE t1 SET f_int1 = -@max_row
623WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
624AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
625
626# check null-2 success: 	1
627UPDATE t1 SET f_int1 = NULL
628WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
629AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
630
631# check null-3 success: 	1
632DELETE FROM t1
633WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
634AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
635
636# check null-4 success: 	1
637DELETE FROM t1
638WHERE f_int1 = 0 AND f_int2 = 0
639AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
640AND f_charbig = '#NULL#';
641SET AUTOCOMMIT= 0;
642INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
643SELECT f_int1, f_int1, '', '', 'was inserted'
644FROM t0_template source_tab
645WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
646
647# check transactions-1 success: 	1
648COMMIT WORK;
649
650# check transactions-2 success: 	1
651ROLLBACK WORK;
652
653# check transactions-3 success: 	1
654DELETE FROM t1 WHERE f_charbig = 'was inserted';
655COMMIT WORK;
656ROLLBACK WORK;
657
658# check transactions-4 success: 	1
659INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
660SELECT f_int1, f_int1, '', '', 'was inserted'
661FROM t0_template source_tab
662WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
663
664# check transactions-5 success: 	1
665ROLLBACK WORK;
666
667# check transactions-6 success: 	1
668# INFO: Storage engine used for t1 seems to be transactional.
669COMMIT;
670
671# check transactions-7 success: 	1
672DELETE FROM t1 WHERE f_charbig = 'was inserted';
673COMMIT WORK;
674SET @@session.sql_mode = 'traditional';
675Warnings:
676Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
677SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
678INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
679SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
680'', '', 'was inserted' FROM t0_template
681WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
682ERROR 22012: Division by 0
683COMMIT;
684
685# check transactions-8 success: 	1
686# INFO: Storage engine used for t1 seems to be able to revert
687#       changes made by the failing statement.
688SET @@session.sql_mode = '';
689Warnings:
690Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
691SET AUTOCOMMIT= 1;
692DELETE FROM t1 WHERE f_charbig = 'was inserted';
693COMMIT WORK;
694UPDATE t1 SET f_charbig = REPEAT('b', 1000);
695
696# check special-1 success: 	1
697UPDATE t1 SET f_charbig = '';
698
699# check special-2 success: 	1
700UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
701INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
702SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
704INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
705SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
706'just inserted' FROM t0_template
707WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
708CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
709BEGIN
710UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
711f_charbig = 'updated by trigger'
712      WHERE f_int1 = new.f_int1;
713END|
714INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
715SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
716WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
717
718# check trigger-1 success: 	1
719DROP TRIGGER trg_1;
720UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
721f_int2 = CAST(f_char1 AS SIGNED INT),
722f_charbig = 'just inserted'
723   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
724DELETE FROM t0_aux
725WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
726INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
727SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
728'just inserted' FROM t0_template
729WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
730CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
731BEGIN
732UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
733f_charbig = 'updated by trigger'
734      WHERE f_int1 = new.f_int1;
735END|
736INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
737SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
738WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
739
740# check trigger-2 success: 	1
741DROP TRIGGER trg_1;
742UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
743f_int2 = CAST(f_char1 AS SIGNED INT),
744f_charbig = 'just inserted'
745   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
746DELETE FROM t0_aux
747WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
748INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
749SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
750'just inserted' FROM t0_template
751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
752CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
753BEGIN
754UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
755f_charbig = 'updated by trigger'
756      WHERE f_int1 = new.f_int1;
757END|
758UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
759WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
760
761# check trigger-3 success: 	1
762DROP TRIGGER trg_1;
763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
764f_int2 = CAST(f_char1 AS SIGNED INT),
765f_charbig = 'just inserted'
766   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
767DELETE FROM t0_aux
768WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
769INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
770SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
771'just inserted' FROM t0_template
772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
773CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
774BEGIN
775UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
776f_charbig = 'updated by trigger'
777      WHERE f_int1 = - old.f_int1;
778END|
779UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
780WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
781
782# check trigger-4 success: 	1
783DROP TRIGGER trg_1;
784UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
785f_int2 = CAST(f_char1 AS SIGNED INT),
786f_charbig = 'just inserted'
787   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
788DELETE FROM t0_aux
789WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
790INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
791SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
792'just inserted' FROM t0_template
793WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
794CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
795BEGIN
796UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
797f_charbig = 'updated by trigger'
798      WHERE f_int1 = new.f_int1;
799END|
800UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
801WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
802
803# check trigger-5 success: 	1
804DROP TRIGGER trg_1;
805UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
806f_int2 = CAST(f_char1 AS SIGNED INT),
807f_charbig = 'just inserted'
808   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
809DELETE FROM t0_aux
810WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
811INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
812SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
813'just inserted' FROM t0_template
814WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
815CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
816BEGIN
817UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
818f_charbig = 'updated by trigger'
819      WHERE f_int1 = - old.f_int1;
820END|
821UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
822WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
823
824# check trigger-6 success: 	1
825DROP TRIGGER trg_1;
826UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
827f_int2 = CAST(f_char1 AS SIGNED INT),
828f_charbig = 'just inserted'
829   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
830DELETE FROM t0_aux
831WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
832INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
833SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
834'just inserted' FROM t0_template
835WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
836CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
837BEGIN
838UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
839f_charbig = 'updated by trigger'
840      WHERE f_int1 = - old.f_int1;
841END|
842DELETE FROM t0_aux
843WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
844
845# check trigger-7 success: 	1
846DROP TRIGGER trg_1;
847UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
848f_int2 = CAST(f_char1 AS SIGNED INT),
849f_charbig = 'just inserted'
850   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
851DELETE FROM t0_aux
852WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
853INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
854SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
855'just inserted' FROM t0_template
856WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
857CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
858BEGIN
859UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
860f_charbig = 'updated by trigger'
861      WHERE f_int1 = - old.f_int1;
862END|
863DELETE FROM t0_aux
864WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
865
866# check trigger-8 success: 	1
867DROP TRIGGER trg_1;
868UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
869f_int2 = CAST(f_char1 AS SIGNED INT),
870f_charbig = 'just inserted'
871   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
872DELETE FROM t0_aux
873WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
874DELETE FROM t1
875WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
876CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
877BEGIN
878SET new.f_int1 = old.f_int1 + @max_row,
879new.f_int2 = old.f_int2 - @max_row,
880new.f_charbig = '####updated per update trigger####';
881END|
882UPDATE t1
883SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
884f_charbig = '####updated per update statement itself####';
885
886# check trigger-9 success: 	1
887DROP TRIGGER trg_2;
888UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
889f_int2 = CAST(f_char1 AS SIGNED INT),
890f_charbig = CONCAT('===',f_char1,'===');
891CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
892BEGIN
893SET new.f_int1 = new.f_int1 + @max_row,
894new.f_int2 = new.f_int2 - @max_row,
895new.f_charbig = '####updated per update trigger####';
896END|
897UPDATE t1
898SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
899f_charbig = '####updated per update statement itself####';
900
901# check trigger-10 success: 	1
902DROP TRIGGER trg_2;
903UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
904f_int2 = CAST(f_char1 AS SIGNED INT),
905f_charbig = CONCAT('===',f_char1,'===');
906CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
907BEGIN
908SET new.f_int1 = @my_max1 + @counter,
909new.f_int2 = @my_min2 - @counter,
910new.f_charbig = '####updated per insert trigger####';
911SET @counter = @counter + 1;
912END|
913SET @counter = 1;
914SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
915INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
916SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
917CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
918WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
919ORDER BY f_int1;
920DROP TRIGGER trg_3;
921
922# check trigger-11 success: 	1
923DELETE FROM t1
924WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
925AND f_int2 <> CAST(f_char1 AS SIGNED INT)
926AND f_charbig = '####updated per insert trigger####';
927CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
928BEGIN
929SET new.f_int1 = @my_max1 + @counter,
930new.f_int2 = @my_min2 - @counter,
931new.f_charbig = '####updated per insert trigger####';
932SET @counter = @counter + 1;
933END|
934SET @counter = 1;
935SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
936INSERT INTO t1 (f_char1, f_char2, f_charbig)
937SELECT CAST(f_int1 AS CHAR),
938CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
940ORDER BY f_int1;
941DROP TRIGGER trg_3;
942
943# check trigger-12 success: 	1
944DELETE FROM t1
945WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
946AND f_int2 <> CAST(f_char1 AS SIGNED INT)
947AND f_charbig = '####updated per insert trigger####';
948ANALYZE  TABLE t1;
949Table	Op	Msg_type	Msg_text
950test.t1	analyze	status	OK
951CHECK    TABLE t1 EXTENDED;
952Table	Op	Msg_type	Msg_text
953test.t1	check	status	OK
954CHECKSUM TABLE t1 EXTENDED;
955Table	Checksum
956test.t1	<some_value>
957OPTIMIZE TABLE t1;
958Table	Op	Msg_type	Msg_text
959test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
960test.t1	optimize	status	OK
961# check layout success:    1
962REPAIR   TABLE t1 EXTENDED;
963Table	Op	Msg_type	Msg_text
964test.t1	repair	status	OK
965# check layout success:    1
966TRUNCATE t1;
967
968# check TRUNCATE success: 	1
969# check layout success:    1
970# End usability test (inc/partition_check.inc)
971DROP TABLE t1;
972CREATE TABLE t1 (
973f_int1 INTEGER,
974f_int2 INTEGER,
975f_char1 CHAR(20),
976f_char2 CHAR(20),
977f_charbig VARCHAR(1000)
978
979)
980PARTITION BY LIST(MOD(f_int1,4))
981(PARTITION part_3 VALUES IN (-3),
982PARTITION part_2 VALUES IN (-2),
983PARTITION part_1 VALUES IN (-1),
984PARTITION part_N VALUES IN (NULL),
985PARTITION part0 VALUES IN (0),
986PARTITION part1 VALUES IN (1),
987PARTITION part2 VALUES IN (2),
988PARTITION part3 VALUES IN (3));
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 1 AND @max_row_div2 - 1;
992ALTER TABLE t1 MODIFY f_int2 BIGINT;
993INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
994SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
995WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
996# Start usability test (inc/partition_check.inc)
997create_command
998SHOW CREATE TABLE t1;
999Table	Create Table
1000t1	CREATE TABLE `t1` (
1001  `f_int1` int(11) DEFAULT NULL,
1002  `f_int2` bigint(20) DEFAULT NULL,
1003  `f_char1` char(20) DEFAULT NULL,
1004  `f_char2` char(20) DEFAULT NULL,
1005  `f_charbig` varchar(1000) DEFAULT NULL
1006) ENGINE=TokuDB DEFAULT CHARSET=latin1
1007/*!50100 PARTITION BY LIST (MOD(f_int1,4))
1008(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB,
1009 PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB,
1010 PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB,
1011 PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB,
1012 PARTITION part0 VALUES IN (0) ENGINE = TokuDB,
1013 PARTITION part1 VALUES IN (1) ENGINE = TokuDB,
1014 PARTITION part2 VALUES IN (2) ENGINE = TokuDB,
1015 PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */
1016
1017# check prerequisites-1 success:    1
1018# check COUNT(*) success:    1
1019# check MIN/MAX(f_int1) success:    1
1020# check MIN/MAX(f_int2) success:    1
1021INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1022SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1023CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1024WHERE f_int1 IN (2,3);
1025# check prerequisites-3 success:    1
1026DELETE FROM t1 WHERE f_charbig = 'delete me';
1027# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1028# check read via f_int1 success: 1
1029# check read via f_int2 success: 1
1030
1031# check multiple-1 success: 	1
1032DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1033
1034# check multiple-2 success: 	1
1035INSERT INTO t1 SELECT * FROM t0_template
1036WHERE MOD(f_int1,3) = 0;
1037
1038# check multiple-3 success: 	1
1039UPDATE t1 SET f_int1 = f_int1 + @max_row
1040WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1041AND @max_row_div2 + @max_row_div4;
1042
1043# check multiple-4 success: 	1
1044DELETE FROM t1
1045WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1046AND @max_row_div2 + @max_row_div4 + @max_row;
1047
1048# check multiple-5 success: 	1
1049SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1050INSERT INTO t1
1051SET f_int1 = @cur_value , f_int2 = @cur_value,
1052f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1053f_charbig = '#SINGLE#';
1054
1055# check single-1 success: 	1
1056SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1057INSERT INTO t1
1058SET f_int1 = @cur_value , f_int2 = @cur_value,
1059f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1060f_charbig = '#SINGLE#';
1061
1062# check single-2 success: 	1
1063SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1064SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1065UPDATE t1 SET f_int1 = @cur_value2
1066WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1067
1068# check single-3 success: 	1
1069SET @cur_value1= -1;
1070SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1071UPDATE t1 SET f_int1 = @cur_value1
1072WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1073
1074# check single-4 success: 	1
1075SELECT MAX(f_int1) INTO @cur_value FROM t1;
1076DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1077
1078# check single-5 success: 	1
1079DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1080
1081# check single-6 success: 	1
1082INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1083
1084# check single-7 success: 	1
1085DELETE FROM t1 WHERE f_charbig = '#2147483647##';
1086DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1087INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1088f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1089f_charbig = '#NULL#';
1090INSERT INTO t1
1091SET f_int1 = NULL , f_int2 = -@max_row,
1092f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1093f_charbig = '#NULL#';
1094# check null success:    1
1095
1096# check null-1 success: 	1
1097UPDATE t1 SET f_int1 = -@max_row
1098WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1099AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1100
1101# check null-2 success: 	1
1102UPDATE t1 SET f_int1 = NULL
1103WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1104AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1105
1106# check null-3 success: 	1
1107DELETE FROM t1
1108WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1109AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1110
1111# check null-4 success: 	1
1112DELETE FROM t1
1113WHERE f_int1 = 0 AND f_int2 = 0
1114AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1115AND f_charbig = '#NULL#';
1116SET AUTOCOMMIT= 0;
1117INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1118SELECT f_int1, f_int1, '', '', 'was inserted'
1119FROM t0_template source_tab
1120WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1121
1122# check transactions-1 success: 	1
1123COMMIT WORK;
1124
1125# check transactions-2 success: 	1
1126ROLLBACK WORK;
1127
1128# check transactions-3 success: 	1
1129DELETE FROM t1 WHERE f_charbig = 'was inserted';
1130COMMIT WORK;
1131ROLLBACK WORK;
1132
1133# check transactions-4 success: 	1
1134INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1135SELECT f_int1, f_int1, '', '', 'was inserted'
1136FROM t0_template source_tab
1137WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1138
1139# check transactions-5 success: 	1
1140ROLLBACK WORK;
1141
1142# check transactions-6 success: 	1
1143# INFO: Storage engine used for t1 seems to be transactional.
1144COMMIT;
1145
1146# check transactions-7 success: 	1
1147DELETE FROM t1 WHERE f_charbig = 'was inserted';
1148COMMIT WORK;
1149SET @@session.sql_mode = 'traditional';
1150Warnings:
1151Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1152SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1153INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1154SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1155'', '', 'was inserted' FROM t0_template
1156WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1157ERROR 22012: Division by 0
1158COMMIT;
1159
1160# check transactions-8 success: 	1
1161# INFO: Storage engine used for t1 seems to be able to revert
1162#       changes made by the failing statement.
1163SET @@session.sql_mode = '';
1164Warnings:
1165Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1166SET AUTOCOMMIT= 1;
1167DELETE FROM t1 WHERE f_charbig = 'was inserted';
1168COMMIT WORK;
1169UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1170
1171# check special-1 success: 	1
1172UPDATE t1 SET f_charbig = '';
1173
1174# check special-2 success: 	1
1175UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1176INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1177SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1179INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1180SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1181'just inserted' FROM t0_template
1182WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1183CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1184BEGIN
1185UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1186f_charbig = 'updated by trigger'
1187      WHERE f_int1 = new.f_int1;
1188END|
1189INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1190SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1191WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1192
1193# check trigger-1 success: 	1
1194DROP TRIGGER trg_1;
1195UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1196f_int2 = CAST(f_char1 AS SIGNED INT),
1197f_charbig = 'just inserted'
1198   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1199DELETE FROM t0_aux
1200WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1201INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1202SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1203'just inserted' FROM t0_template
1204WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1205CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1206BEGIN
1207UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1208f_charbig = 'updated by trigger'
1209      WHERE f_int1 = new.f_int1;
1210END|
1211INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1212SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1213WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1214
1215# check trigger-2 success: 	1
1216DROP TRIGGER trg_1;
1217UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1218f_int2 = CAST(f_char1 AS SIGNED INT),
1219f_charbig = 'just inserted'
1220   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1221DELETE FROM t0_aux
1222WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1223INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1224SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1225'just inserted' FROM t0_template
1226WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1227CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1228BEGIN
1229UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1230f_charbig = 'updated by trigger'
1231      WHERE f_int1 = new.f_int1;
1232END|
1233UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1234WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1235
1236# check trigger-3 success: 	1
1237DROP TRIGGER trg_1;
1238UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1239f_int2 = CAST(f_char1 AS SIGNED INT),
1240f_charbig = 'just inserted'
1241   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1242DELETE FROM t0_aux
1243WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1244INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1245SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1246'just inserted' FROM t0_template
1247WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1248CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1249BEGIN
1250UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1251f_charbig = 'updated by trigger'
1252      WHERE f_int1 = - old.f_int1;
1253END|
1254UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1255WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1256
1257# check trigger-4 success: 	1
1258DROP TRIGGER trg_1;
1259UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1260f_int2 = CAST(f_char1 AS SIGNED INT),
1261f_charbig = 'just inserted'
1262   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1263DELETE FROM t0_aux
1264WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1265INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1266SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1267'just inserted' FROM t0_template
1268WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1269CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1270BEGIN
1271UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1272f_charbig = 'updated by trigger'
1273      WHERE f_int1 = new.f_int1;
1274END|
1275UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1276WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1277
1278# check trigger-5 success: 	1
1279DROP TRIGGER trg_1;
1280UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1281f_int2 = CAST(f_char1 AS SIGNED INT),
1282f_charbig = 'just inserted'
1283   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1284DELETE FROM t0_aux
1285WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1286INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1287SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1288'just inserted' FROM t0_template
1289WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1290CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1291BEGIN
1292UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1293f_charbig = 'updated by trigger'
1294      WHERE f_int1 = - old.f_int1;
1295END|
1296UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1297WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1298
1299# check trigger-6 success: 	1
1300DROP TRIGGER trg_1;
1301UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1302f_int2 = CAST(f_char1 AS SIGNED INT),
1303f_charbig = 'just inserted'
1304   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1305DELETE FROM t0_aux
1306WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1307INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1308SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1309'just inserted' FROM t0_template
1310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1311CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1312BEGIN
1313UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1314f_charbig = 'updated by trigger'
1315      WHERE f_int1 = - old.f_int1;
1316END|
1317DELETE FROM t0_aux
1318WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1319
1320# check trigger-7 success: 	1
1321DROP TRIGGER trg_1;
1322UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1323f_int2 = CAST(f_char1 AS SIGNED INT),
1324f_charbig = 'just inserted'
1325   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1326DELETE FROM t0_aux
1327WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1328INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1329SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1330'just inserted' FROM t0_template
1331WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1332CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1333BEGIN
1334UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1335f_charbig = 'updated by trigger'
1336      WHERE f_int1 = - old.f_int1;
1337END|
1338DELETE FROM t0_aux
1339WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1340
1341# check trigger-8 success: 	1
1342DROP TRIGGER trg_1;
1343UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1344f_int2 = CAST(f_char1 AS SIGNED INT),
1345f_charbig = 'just inserted'
1346   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1347DELETE FROM t0_aux
1348WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1349DELETE FROM t1
1350WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1351CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1352BEGIN
1353SET new.f_int1 = old.f_int1 + @max_row,
1354new.f_int2 = old.f_int2 - @max_row,
1355new.f_charbig = '####updated per update trigger####';
1356END|
1357UPDATE t1
1358SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1359f_charbig = '####updated per update statement itself####';
1360
1361# check trigger-9 success: 	1
1362DROP TRIGGER trg_2;
1363UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1364f_int2 = CAST(f_char1 AS SIGNED INT),
1365f_charbig = CONCAT('===',f_char1,'===');
1366CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1367BEGIN
1368SET new.f_int1 = new.f_int1 + @max_row,
1369new.f_int2 = new.f_int2 - @max_row,
1370new.f_charbig = '####updated per update trigger####';
1371END|
1372UPDATE t1
1373SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1374f_charbig = '####updated per update statement itself####';
1375
1376# check trigger-10 success: 	1
1377DROP TRIGGER trg_2;
1378UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1379f_int2 = CAST(f_char1 AS SIGNED INT),
1380f_charbig = CONCAT('===',f_char1,'===');
1381CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1382BEGIN
1383SET new.f_int1 = @my_max1 + @counter,
1384new.f_int2 = @my_min2 - @counter,
1385new.f_charbig = '####updated per insert trigger####';
1386SET @counter = @counter + 1;
1387END|
1388SET @counter = 1;
1389SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1390INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1391SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1392CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1393WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1394ORDER BY f_int1;
1395DROP TRIGGER trg_3;
1396
1397# check trigger-11 success: 	1
1398DELETE FROM t1
1399WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1400AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1401AND f_charbig = '####updated per insert trigger####';
1402CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1403BEGIN
1404SET new.f_int1 = @my_max1 + @counter,
1405new.f_int2 = @my_min2 - @counter,
1406new.f_charbig = '####updated per insert trigger####';
1407SET @counter = @counter + 1;
1408END|
1409SET @counter = 1;
1410SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1411INSERT INTO t1 (f_char1, f_char2, f_charbig)
1412SELECT CAST(f_int1 AS CHAR),
1413CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1414WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1415ORDER BY f_int1;
1416DROP TRIGGER trg_3;
1417
1418# check trigger-12 success: 	1
1419DELETE FROM t1
1420WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1421AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1422AND f_charbig = '####updated per insert trigger####';
1423ANALYZE  TABLE t1;
1424Table	Op	Msg_type	Msg_text
1425test.t1	analyze	status	OK
1426CHECK    TABLE t1 EXTENDED;
1427Table	Op	Msg_type	Msg_text
1428test.t1	check	status	OK
1429CHECKSUM TABLE t1 EXTENDED;
1430Table	Checksum
1431test.t1	<some_value>
1432OPTIMIZE TABLE t1;
1433Table	Op	Msg_type	Msg_text
1434test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1435test.t1	optimize	status	OK
1436# check layout success:    1
1437REPAIR   TABLE t1 EXTENDED;
1438Table	Op	Msg_type	Msg_text
1439test.t1	repair	status	OK
1440# check layout success:    1
1441TRUNCATE t1;
1442
1443# check TRUNCATE success: 	1
1444# check layout success:    1
1445# End usability test (inc/partition_check.inc)
1446DROP TABLE t1;
1447CREATE TABLE t1 (
1448f_int1 INTEGER,
1449f_int2 INTEGER,
1450f_char1 CHAR(20),
1451f_char2 CHAR(20),
1452f_charbig VARCHAR(1000)
1453
1454)
1455PARTITION BY RANGE(f_int1)
1456(PARTITION parta VALUES LESS THAN (0),
1457PARTITION partb VALUES LESS THAN (5),
1458PARTITION partc VALUES LESS THAN (10),
1459PARTITION partd VALUES LESS THAN (10 + 5),
1460PARTITION parte VALUES LESS THAN (20),
1461PARTITION partf VALUES LESS THAN (2147483646));
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 1 AND @max_row_div2 - 1;
1465ALTER TABLE t1 MODIFY f_int2 BIGINT;
1466INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1467SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1468WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1469# Start usability test (inc/partition_check.inc)
1470create_command
1471SHOW CREATE TABLE t1;
1472Table	Create Table
1473t1	CREATE TABLE `t1` (
1474  `f_int1` int(11) DEFAULT NULL,
1475  `f_int2` bigint(20) DEFAULT NULL,
1476  `f_char1` char(20) DEFAULT NULL,
1477  `f_char2` char(20) DEFAULT NULL,
1478  `f_charbig` varchar(1000) DEFAULT NULL
1479) ENGINE=TokuDB DEFAULT CHARSET=latin1
1480/*!50100 PARTITION BY RANGE (f_int1)
1481(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
1482 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
1483 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
1484 PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB,
1485 PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB,
1486 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
1487
1488# check prerequisites-1 success:    1
1489# check COUNT(*) success:    1
1490# check MIN/MAX(f_int1) success:    1
1491# check MIN/MAX(f_int2) success:    1
1492INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1493SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1494CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1495WHERE f_int1 IN (2,3);
1496# check prerequisites-3 success:    1
1497DELETE FROM t1 WHERE f_charbig = 'delete me';
1498# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1499# check read via f_int1 success: 1
1500# check read via f_int2 success: 1
1501
1502# check multiple-1 success: 	1
1503DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1504
1505# check multiple-2 success: 	1
1506INSERT INTO t1 SELECT * FROM t0_template
1507WHERE MOD(f_int1,3) = 0;
1508
1509# check multiple-3 success: 	1
1510UPDATE t1 SET f_int1 = f_int1 + @max_row
1511WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1512AND @max_row_div2 + @max_row_div4;
1513
1514# check multiple-4 success: 	1
1515DELETE FROM t1
1516WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1517AND @max_row_div2 + @max_row_div4 + @max_row;
1518
1519# check multiple-5 success: 	1
1520SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1521INSERT INTO t1
1522SET f_int1 = @cur_value , f_int2 = @cur_value,
1523f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1524f_charbig = '#SINGLE#';
1525
1526# check single-1 success: 	1
1527SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1528INSERT INTO t1
1529SET f_int1 = @cur_value , f_int2 = @cur_value,
1530f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1531f_charbig = '#SINGLE#';
1532
1533# check single-2 success: 	1
1534SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1535SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1536UPDATE t1 SET f_int1 = @cur_value2
1537WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1538
1539# check single-3 success: 	1
1540SET @cur_value1= -1;
1541SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1542UPDATE t1 SET f_int1 = @cur_value1
1543WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1544
1545# check single-4 success: 	1
1546SELECT MAX(f_int1) INTO @cur_value FROM t1;
1547DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1548
1549# check single-5 success: 	1
1550DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1551
1552# check single-6 success: 	1
1553INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1554ERROR HY000: Table has no partition for value 2147483647
1555DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1556INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1557f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1558f_charbig = '#NULL#';
1559INSERT INTO t1
1560SET f_int1 = NULL , f_int2 = -@max_row,
1561f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1562f_charbig = '#NULL#';
1563# check null success:    1
1564
1565# check null-1 success: 	1
1566UPDATE t1 SET f_int1 = -@max_row
1567WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1568AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1569
1570# check null-2 success: 	1
1571UPDATE t1 SET f_int1 = NULL
1572WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1573AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1574
1575# check null-3 success: 	1
1576DELETE FROM t1
1577WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1578AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1579
1580# check null-4 success: 	1
1581DELETE FROM t1
1582WHERE f_int1 = 0 AND f_int2 = 0
1583AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1584AND f_charbig = '#NULL#';
1585SET AUTOCOMMIT= 0;
1586INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1587SELECT f_int1, f_int1, '', '', 'was inserted'
1588FROM t0_template source_tab
1589WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1590
1591# check transactions-1 success: 	1
1592COMMIT WORK;
1593
1594# check transactions-2 success: 	1
1595ROLLBACK WORK;
1596
1597# check transactions-3 success: 	1
1598DELETE FROM t1 WHERE f_charbig = 'was inserted';
1599COMMIT WORK;
1600ROLLBACK WORK;
1601
1602# check transactions-4 success: 	1
1603INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1604SELECT f_int1, f_int1, '', '', 'was inserted'
1605FROM t0_template source_tab
1606WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1607
1608# check transactions-5 success: 	1
1609ROLLBACK WORK;
1610
1611# check transactions-6 success: 	1
1612# INFO: Storage engine used for t1 seems to be transactional.
1613COMMIT;
1614
1615# check transactions-7 success: 	1
1616DELETE FROM t1 WHERE f_charbig = 'was inserted';
1617COMMIT WORK;
1618SET @@session.sql_mode = 'traditional';
1619Warnings:
1620Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1621SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1622INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1623SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1624'', '', 'was inserted' FROM t0_template
1625WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1626ERROR 22012: Division by 0
1627COMMIT;
1628
1629# check transactions-8 success: 	1
1630# INFO: Storage engine used for t1 seems to be able to revert
1631#       changes made by the failing statement.
1632SET @@session.sql_mode = '';
1633Warnings:
1634Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1635SET AUTOCOMMIT= 1;
1636DELETE FROM t1 WHERE f_charbig = 'was inserted';
1637COMMIT WORK;
1638UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1639
1640# check special-1 success: 	1
1641UPDATE t1 SET f_charbig = '';
1642
1643# check special-2 success: 	1
1644UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1645INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1646SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1647WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1648INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1649SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1650'just inserted' FROM t0_template
1651WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1652CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1653BEGIN
1654UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1655f_charbig = 'updated by trigger'
1656      WHERE f_int1 = new.f_int1;
1657END|
1658INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1659SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1660WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1661
1662# check trigger-1 success: 	1
1663DROP TRIGGER trg_1;
1664UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1665f_int2 = CAST(f_char1 AS SIGNED INT),
1666f_charbig = 'just inserted'
1667   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1668DELETE FROM t0_aux
1669WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1670INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1671SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1672'just inserted' FROM t0_template
1673WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1674CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1675BEGIN
1676UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1677f_charbig = 'updated by trigger'
1678      WHERE f_int1 = new.f_int1;
1679END|
1680INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1681SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1682WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1683
1684# check trigger-2 success: 	1
1685DROP TRIGGER trg_1;
1686UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1687f_int2 = CAST(f_char1 AS SIGNED INT),
1688f_charbig = 'just inserted'
1689   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1690DELETE FROM t0_aux
1691WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1692INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1693SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1694'just inserted' FROM t0_template
1695WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1696CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1697BEGIN
1698UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1699f_charbig = 'updated by trigger'
1700      WHERE f_int1 = new.f_int1;
1701END|
1702UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1703WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1704
1705# check trigger-3 success: 	1
1706DROP TRIGGER trg_1;
1707UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1708f_int2 = CAST(f_char1 AS SIGNED INT),
1709f_charbig = 'just inserted'
1710   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1711DELETE FROM t0_aux
1712WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1713INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1714SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1715'just inserted' FROM t0_template
1716WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1717CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1718BEGIN
1719UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1720f_charbig = 'updated by trigger'
1721      WHERE f_int1 = - old.f_int1;
1722END|
1723UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1724WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1725
1726# check trigger-4 success: 	1
1727DROP TRIGGER trg_1;
1728UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1729f_int2 = CAST(f_char1 AS SIGNED INT),
1730f_charbig = 'just inserted'
1731   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1732DELETE FROM t0_aux
1733WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1734INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1735SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1736'just inserted' FROM t0_template
1737WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1738CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1739BEGIN
1740UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1741f_charbig = 'updated by trigger'
1742      WHERE f_int1 = new.f_int1;
1743END|
1744UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1745WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1746
1747# check trigger-5 success: 	1
1748DROP TRIGGER trg_1;
1749UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1750f_int2 = CAST(f_char1 AS SIGNED INT),
1751f_charbig = 'just inserted'
1752   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1753DELETE FROM t0_aux
1754WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1755INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1756SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1757'just inserted' FROM t0_template
1758WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1759CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1760BEGIN
1761UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1762f_charbig = 'updated by trigger'
1763      WHERE f_int1 = - old.f_int1;
1764END|
1765UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1766WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1767
1768# check trigger-6 success: 	1
1769DROP TRIGGER trg_1;
1770UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1771f_int2 = CAST(f_char1 AS SIGNED INT),
1772f_charbig = 'just inserted'
1773   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1774DELETE FROM t0_aux
1775WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1776INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1777SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1778'just inserted' FROM t0_template
1779WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1780CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1781BEGIN
1782UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1783f_charbig = 'updated by trigger'
1784      WHERE f_int1 = - old.f_int1;
1785END|
1786DELETE FROM t0_aux
1787WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1788
1789# check trigger-7 success: 	1
1790DROP TRIGGER trg_1;
1791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1792f_int2 = CAST(f_char1 AS SIGNED INT),
1793f_charbig = 'just inserted'
1794   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1795DELETE FROM t0_aux
1796WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1797INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1798SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1799'just inserted' FROM t0_template
1800WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1801CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1802BEGIN
1803UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1804f_charbig = 'updated by trigger'
1805      WHERE f_int1 = - old.f_int1;
1806END|
1807DELETE FROM t0_aux
1808WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1809
1810# check trigger-8 success: 	1
1811DROP TRIGGER trg_1;
1812UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1813f_int2 = CAST(f_char1 AS SIGNED INT),
1814f_charbig = 'just inserted'
1815   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1816DELETE FROM t0_aux
1817WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1818DELETE FROM t1
1819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1820CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1821BEGIN
1822SET new.f_int1 = old.f_int1 + @max_row,
1823new.f_int2 = old.f_int2 - @max_row,
1824new.f_charbig = '####updated per update trigger####';
1825END|
1826UPDATE t1
1827SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1828f_charbig = '####updated per update statement itself####';
1829
1830# check trigger-9 success: 	1
1831DROP TRIGGER trg_2;
1832UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1833f_int2 = CAST(f_char1 AS SIGNED INT),
1834f_charbig = CONCAT('===',f_char1,'===');
1835CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1836BEGIN
1837SET new.f_int1 = new.f_int1 + @max_row,
1838new.f_int2 = new.f_int2 - @max_row,
1839new.f_charbig = '####updated per update trigger####';
1840END|
1841UPDATE t1
1842SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1843f_charbig = '####updated per update statement itself####';
1844
1845# check trigger-10 success: 	1
1846DROP TRIGGER trg_2;
1847UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1848f_int2 = CAST(f_char1 AS SIGNED INT),
1849f_charbig = CONCAT('===',f_char1,'===');
1850CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1851BEGIN
1852SET new.f_int1 = @my_max1 + @counter,
1853new.f_int2 = @my_min2 - @counter,
1854new.f_charbig = '####updated per insert trigger####';
1855SET @counter = @counter + 1;
1856END|
1857SET @counter = 1;
1858SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1859INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1860SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1861CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1862WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1863ORDER BY f_int1;
1864DROP TRIGGER trg_3;
1865
1866# check trigger-11 success: 	1
1867DELETE FROM t1
1868WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1869AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1870AND f_charbig = '####updated per insert trigger####';
1871CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1872BEGIN
1873SET new.f_int1 = @my_max1 + @counter,
1874new.f_int2 = @my_min2 - @counter,
1875new.f_charbig = '####updated per insert trigger####';
1876SET @counter = @counter + 1;
1877END|
1878SET @counter = 1;
1879SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1880INSERT INTO t1 (f_char1, f_char2, f_charbig)
1881SELECT CAST(f_int1 AS CHAR),
1882CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1883WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1884ORDER BY f_int1;
1885DROP TRIGGER trg_3;
1886
1887# check trigger-12 success: 	1
1888DELETE FROM t1
1889WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1890AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1891AND f_charbig = '####updated per insert trigger####';
1892ANALYZE  TABLE t1;
1893Table	Op	Msg_type	Msg_text
1894test.t1	analyze	status	OK
1895CHECK    TABLE t1 EXTENDED;
1896Table	Op	Msg_type	Msg_text
1897test.t1	check	status	OK
1898CHECKSUM TABLE t1 EXTENDED;
1899Table	Checksum
1900test.t1	<some_value>
1901OPTIMIZE TABLE t1;
1902Table	Op	Msg_type	Msg_text
1903test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1904test.t1	optimize	status	OK
1905# check layout success:    1
1906REPAIR   TABLE t1 EXTENDED;
1907Table	Op	Msg_type	Msg_text
1908test.t1	repair	status	OK
1909# check layout success:    1
1910TRUNCATE t1;
1911
1912# check TRUNCATE success: 	1
1913# check layout success:    1
1914# End usability test (inc/partition_check.inc)
1915DROP TABLE t1;
1916CREATE TABLE t1 (
1917f_int1 INTEGER,
1918f_int2 INTEGER,
1919f_char1 CHAR(20),
1920f_char2 CHAR(20),
1921f_charbig VARCHAR(1000)
1922
1923)
1924PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
1925(PARTITION parta VALUES LESS THAN (0),
1926PARTITION partb VALUES LESS THAN (5),
1927PARTITION partc VALUES LESS THAN (10),
1928PARTITION partd VALUES LESS THAN (2147483646));
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 1 AND @max_row_div2 - 1;
1932ALTER TABLE t1 MODIFY f_int2 BIGINT;
1933INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1934SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1935WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1936# Start usability test (inc/partition_check.inc)
1937create_command
1938SHOW CREATE TABLE t1;
1939Table	Create Table
1940t1	CREATE TABLE `t1` (
1941  `f_int1` int(11) DEFAULT NULL,
1942  `f_int2` bigint(20) DEFAULT NULL,
1943  `f_char1` char(20) DEFAULT NULL,
1944  `f_char2` char(20) DEFAULT NULL,
1945  `f_charbig` varchar(1000) DEFAULT NULL
1946) ENGINE=TokuDB DEFAULT CHARSET=latin1
1947/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
1948SUBPARTITION BY HASH (f_int1)
1949SUBPARTITIONS 2
1950(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
1951 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
1952 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
1953 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
1954
1955# check prerequisites-1 success:    1
1956# check COUNT(*) success:    1
1957# check MIN/MAX(f_int1) success:    1
1958# check MIN/MAX(f_int2) success:    1
1959INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1960SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1961CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1962WHERE f_int1 IN (2,3);
1963# check prerequisites-3 success:    1
1964DELETE FROM t1 WHERE f_charbig = 'delete me';
1965# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1966# check read via f_int1 success: 1
1967# check read via f_int2 success: 1
1968
1969# check multiple-1 success: 	1
1970DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1971
1972# check multiple-2 success: 	1
1973INSERT INTO t1 SELECT * FROM t0_template
1974WHERE MOD(f_int1,3) = 0;
1975
1976# check multiple-3 success: 	1
1977UPDATE t1 SET f_int1 = f_int1 + @max_row
1978WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1979AND @max_row_div2 + @max_row_div4;
1980
1981# check multiple-4 success: 	1
1982DELETE FROM t1
1983WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1984AND @max_row_div2 + @max_row_div4 + @max_row;
1985
1986# check multiple-5 success: 	1
1987SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1988INSERT INTO t1
1989SET f_int1 = @cur_value , f_int2 = @cur_value,
1990f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1991f_charbig = '#SINGLE#';
1992
1993# check single-1 success: 	1
1994SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1995INSERT INTO t1
1996SET f_int1 = @cur_value , f_int2 = @cur_value,
1997f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1998f_charbig = '#SINGLE#';
1999
2000# check single-2 success: 	1
2001SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2002SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2003UPDATE t1 SET f_int1 = @cur_value2
2004WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2005
2006# check single-3 success: 	1
2007SET @cur_value1= -1;
2008SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2009UPDATE t1 SET f_int1 = @cur_value1
2010WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2011
2012# check single-4 success: 	1
2013SELECT MAX(f_int1) INTO @cur_value FROM t1;
2014DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2015
2016# check single-5 success: 	1
2017DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2018
2019# check single-6 success: 	1
2020INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2021
2022# check single-7 success: 	1
2023DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2024DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2025INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2026f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2027f_charbig = '#NULL#';
2028INSERT INTO t1
2029SET f_int1 = NULL , f_int2 = -@max_row,
2030f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2031f_charbig = '#NULL#';
2032# check null success:    1
2033
2034# check null-1 success: 	1
2035UPDATE t1 SET f_int1 = -@max_row
2036WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2037AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2038
2039# check null-2 success: 	1
2040UPDATE t1 SET f_int1 = NULL
2041WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2042AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2043
2044# check null-3 success: 	1
2045DELETE FROM t1
2046WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2047AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2048
2049# check null-4 success: 	1
2050DELETE FROM t1
2051WHERE f_int1 = 0 AND f_int2 = 0
2052AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2053AND f_charbig = '#NULL#';
2054SET AUTOCOMMIT= 0;
2055INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2056SELECT f_int1, f_int1, '', '', 'was inserted'
2057FROM t0_template source_tab
2058WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2059
2060# check transactions-1 success: 	1
2061COMMIT WORK;
2062
2063# check transactions-2 success: 	1
2064ROLLBACK WORK;
2065
2066# check transactions-3 success: 	1
2067DELETE FROM t1 WHERE f_charbig = 'was inserted';
2068COMMIT WORK;
2069ROLLBACK WORK;
2070
2071# check transactions-4 success: 	1
2072INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2073SELECT f_int1, f_int1, '', '', 'was inserted'
2074FROM t0_template source_tab
2075WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2076
2077# check transactions-5 success: 	1
2078ROLLBACK WORK;
2079
2080# check transactions-6 success: 	1
2081# INFO: Storage engine used for t1 seems to be transactional.
2082COMMIT;
2083
2084# check transactions-7 success: 	1
2085DELETE FROM t1 WHERE f_charbig = 'was inserted';
2086COMMIT WORK;
2087SET @@session.sql_mode = 'traditional';
2088Warnings:
2089Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2090SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2091INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2092SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2093'', '', 'was inserted' FROM t0_template
2094WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2095ERROR 22012: Division by 0
2096COMMIT;
2097
2098# check transactions-8 success: 	1
2099# INFO: Storage engine used for t1 seems to be able to revert
2100#       changes made by the failing statement.
2101SET @@session.sql_mode = '';
2102Warnings:
2103Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2104SET AUTOCOMMIT= 1;
2105DELETE FROM t1 WHERE f_charbig = 'was inserted';
2106COMMIT WORK;
2107UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2108
2109# check special-1 success: 	1
2110UPDATE t1 SET f_charbig = '';
2111
2112# check special-2 success: 	1
2113UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2114INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2115SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2116WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2117INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2118SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2119'just inserted' FROM t0_template
2120WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2121CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2122BEGIN
2123UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2124f_charbig = 'updated by trigger'
2125      WHERE f_int1 = new.f_int1;
2126END|
2127INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2128SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2129WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2130
2131# check trigger-1 success: 	1
2132DROP TRIGGER trg_1;
2133UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2134f_int2 = CAST(f_char1 AS SIGNED INT),
2135f_charbig = 'just inserted'
2136   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2137DELETE FROM t0_aux
2138WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2139INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2140SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2141'just inserted' FROM t0_template
2142WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2143CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2144BEGIN
2145UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2146f_charbig = 'updated by trigger'
2147      WHERE f_int1 = new.f_int1;
2148END|
2149INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2150SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2151WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2152
2153# check trigger-2 success: 	1
2154DROP TRIGGER trg_1;
2155UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2156f_int2 = CAST(f_char1 AS SIGNED INT),
2157f_charbig = 'just inserted'
2158   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2159DELETE FROM t0_aux
2160WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2161INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2162SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2163'just inserted' FROM t0_template
2164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2165CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2166BEGIN
2167UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2168f_charbig = 'updated by trigger'
2169      WHERE f_int1 = new.f_int1;
2170END|
2171UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2172WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2173
2174# check trigger-3 success: 	1
2175DROP TRIGGER trg_1;
2176UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2177f_int2 = CAST(f_char1 AS SIGNED INT),
2178f_charbig = 'just inserted'
2179   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2180DELETE FROM t0_aux
2181WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2182INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2183SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2184'just inserted' FROM t0_template
2185WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2186CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2187BEGIN
2188UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2189f_charbig = 'updated by trigger'
2190      WHERE f_int1 = - old.f_int1;
2191END|
2192UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2193WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2194
2195# check trigger-4 success: 	1
2196DROP TRIGGER trg_1;
2197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2198f_int2 = CAST(f_char1 AS SIGNED INT),
2199f_charbig = 'just inserted'
2200   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2201DELETE FROM t0_aux
2202WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2203INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2204SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2205'just inserted' FROM t0_template
2206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2207CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2208BEGIN
2209UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2210f_charbig = 'updated by trigger'
2211      WHERE f_int1 = new.f_int1;
2212END|
2213UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2214WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2215
2216# check trigger-5 success: 	1
2217DROP TRIGGER trg_1;
2218UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2219f_int2 = CAST(f_char1 AS SIGNED INT),
2220f_charbig = 'just inserted'
2221   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2222DELETE FROM t0_aux
2223WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2224INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2225SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2226'just inserted' FROM t0_template
2227WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2228CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2229BEGIN
2230UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2231f_charbig = 'updated by trigger'
2232      WHERE f_int1 = - old.f_int1;
2233END|
2234UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2235WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2236
2237# check trigger-6 success: 	1
2238DROP TRIGGER trg_1;
2239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2240f_int2 = CAST(f_char1 AS SIGNED INT),
2241f_charbig = 'just inserted'
2242   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2243DELETE FROM t0_aux
2244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2245INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2246SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2247'just inserted' FROM t0_template
2248WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2249CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2250BEGIN
2251UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2252f_charbig = 'updated by trigger'
2253      WHERE f_int1 = - old.f_int1;
2254END|
2255DELETE FROM t0_aux
2256WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2257
2258# check trigger-7 success: 	1
2259DROP TRIGGER trg_1;
2260UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2261f_int2 = CAST(f_char1 AS SIGNED INT),
2262f_charbig = 'just inserted'
2263   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2264DELETE FROM t0_aux
2265WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2266INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2267SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2268'just inserted' FROM t0_template
2269WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2270CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2271BEGIN
2272UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2273f_charbig = 'updated by trigger'
2274      WHERE f_int1 = - old.f_int1;
2275END|
2276DELETE FROM t0_aux
2277WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2278
2279# check trigger-8 success: 	1
2280DROP TRIGGER trg_1;
2281UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2282f_int2 = CAST(f_char1 AS SIGNED INT),
2283f_charbig = 'just inserted'
2284   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2285DELETE FROM t0_aux
2286WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2287DELETE FROM t1
2288WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2289CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2290BEGIN
2291SET new.f_int1 = old.f_int1 + @max_row,
2292new.f_int2 = old.f_int2 - @max_row,
2293new.f_charbig = '####updated per update trigger####';
2294END|
2295UPDATE t1
2296SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2297f_charbig = '####updated per update statement itself####';
2298
2299# check trigger-9 success: 	1
2300DROP TRIGGER trg_2;
2301UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2302f_int2 = CAST(f_char1 AS SIGNED INT),
2303f_charbig = CONCAT('===',f_char1,'===');
2304CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2305BEGIN
2306SET new.f_int1 = new.f_int1 + @max_row,
2307new.f_int2 = new.f_int2 - @max_row,
2308new.f_charbig = '####updated per update trigger####';
2309END|
2310UPDATE t1
2311SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2312f_charbig = '####updated per update statement itself####';
2313
2314# check trigger-10 success: 	1
2315DROP TRIGGER trg_2;
2316UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2317f_int2 = CAST(f_char1 AS SIGNED INT),
2318f_charbig = CONCAT('===',f_char1,'===');
2319CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2320BEGIN
2321SET new.f_int1 = @my_max1 + @counter,
2322new.f_int2 = @my_min2 - @counter,
2323new.f_charbig = '####updated per insert trigger####';
2324SET @counter = @counter + 1;
2325END|
2326SET @counter = 1;
2327SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2328INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2329SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2330CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2331WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2332ORDER BY f_int1;
2333DROP TRIGGER trg_3;
2334
2335# check trigger-11 success: 	1
2336DELETE FROM t1
2337WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2338AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2339AND f_charbig = '####updated per insert trigger####';
2340CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2341BEGIN
2342SET new.f_int1 = @my_max1 + @counter,
2343new.f_int2 = @my_min2 - @counter,
2344new.f_charbig = '####updated per insert trigger####';
2345SET @counter = @counter + 1;
2346END|
2347SET @counter = 1;
2348SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2349INSERT INTO t1 (f_char1, f_char2, f_charbig)
2350SELECT CAST(f_int1 AS CHAR),
2351CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2352WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2353ORDER BY f_int1;
2354DROP TRIGGER trg_3;
2355
2356# check trigger-12 success: 	1
2357DELETE FROM t1
2358WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2359AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2360AND f_charbig = '####updated per insert trigger####';
2361ANALYZE  TABLE t1;
2362Table	Op	Msg_type	Msg_text
2363test.t1	analyze	status	OK
2364CHECK    TABLE t1 EXTENDED;
2365Table	Op	Msg_type	Msg_text
2366test.t1	check	status	OK
2367CHECKSUM TABLE t1 EXTENDED;
2368Table	Checksum
2369test.t1	<some_value>
2370OPTIMIZE TABLE t1;
2371Table	Op	Msg_type	Msg_text
2372test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2373test.t1	optimize	status	OK
2374# check layout success:    1
2375REPAIR   TABLE t1 EXTENDED;
2376Table	Op	Msg_type	Msg_text
2377test.t1	repair	status	OK
2378# check layout success:    1
2379TRUNCATE t1;
2380
2381# check TRUNCATE success: 	1
2382# check layout success:    1
2383# End usability test (inc/partition_check.inc)
2384DROP TABLE t1;
2385CREATE TABLE t1 (
2386f_int1 INTEGER,
2387f_int2 INTEGER,
2388f_char1 CHAR(20),
2389f_char2 CHAR(20),
2390f_charbig VARCHAR(1000)
2391
2392)
2393PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
2394(PARTITION part1 VALUES LESS THAN (0)
2395(SUBPARTITION subpart11, SUBPARTITION subpart12),
2396PARTITION part2 VALUES LESS THAN (5)
2397(SUBPARTITION subpart21, SUBPARTITION subpart22),
2398PARTITION part3 VALUES LESS THAN (10)
2399(SUBPARTITION subpart31, SUBPARTITION subpart32),
2400PARTITION part4 VALUES LESS THAN (2147483646)
2401(SUBPARTITION subpart41, SUBPARTITION subpart42));
2402INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2403SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2404WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2405ALTER TABLE t1 MODIFY f_int2 BIGINT;
2406INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2407SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2408WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2409# Start usability test (inc/partition_check.inc)
2410create_command
2411SHOW CREATE TABLE t1;
2412Table	Create Table
2413t1	CREATE TABLE `t1` (
2414  `f_int1` int(11) DEFAULT NULL,
2415  `f_int2` bigint(20) DEFAULT NULL,
2416  `f_char1` char(20) DEFAULT NULL,
2417  `f_char2` char(20) DEFAULT NULL,
2418  `f_charbig` varchar(1000) DEFAULT NULL
2419) ENGINE=TokuDB DEFAULT CHARSET=latin1
2420/*!50100 PARTITION BY RANGE (f_int1)
2421SUBPARTITION BY KEY (f_int1)
2422(PARTITION part1 VALUES LESS THAN (0)
2423 (SUBPARTITION subpart11 ENGINE = TokuDB,
2424  SUBPARTITION subpart12 ENGINE = TokuDB),
2425 PARTITION part2 VALUES LESS THAN (5)
2426 (SUBPARTITION subpart21 ENGINE = TokuDB,
2427  SUBPARTITION subpart22 ENGINE = TokuDB),
2428 PARTITION part3 VALUES LESS THAN (10)
2429 (SUBPARTITION subpart31 ENGINE = TokuDB,
2430  SUBPARTITION subpart32 ENGINE = TokuDB),
2431 PARTITION part4 VALUES LESS THAN (2147483646)
2432 (SUBPARTITION subpart41 ENGINE = TokuDB,
2433  SUBPARTITION subpart42 ENGINE = TokuDB)) */
2434
2435# check prerequisites-1 success:    1
2436# check COUNT(*) success:    1
2437# check MIN/MAX(f_int1) success:    1
2438# check MIN/MAX(f_int2) success:    1
2439INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2440SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2441CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2442WHERE f_int1 IN (2,3);
2443# check prerequisites-3 success:    1
2444DELETE FROM t1 WHERE f_charbig = 'delete me';
2445# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2446# check read via f_int1 success: 1
2447# check read via f_int2 success: 1
2448
2449# check multiple-1 success: 	1
2450DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2451
2452# check multiple-2 success: 	1
2453INSERT INTO t1 SELECT * FROM t0_template
2454WHERE MOD(f_int1,3) = 0;
2455
2456# check multiple-3 success: 	1
2457UPDATE t1 SET f_int1 = f_int1 + @max_row
2458WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2459AND @max_row_div2 + @max_row_div4;
2460
2461# check multiple-4 success: 	1
2462DELETE FROM t1
2463WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2464AND @max_row_div2 + @max_row_div4 + @max_row;
2465
2466# check multiple-5 success: 	1
2467SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2468INSERT INTO t1
2469SET f_int1 = @cur_value , f_int2 = @cur_value,
2470f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2471f_charbig = '#SINGLE#';
2472
2473# check single-1 success: 	1
2474SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2475INSERT INTO t1
2476SET f_int1 = @cur_value , f_int2 = @cur_value,
2477f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2478f_charbig = '#SINGLE#';
2479
2480# check single-2 success: 	1
2481SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2482SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2483UPDATE t1 SET f_int1 = @cur_value2
2484WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2485
2486# check single-3 success: 	1
2487SET @cur_value1= -1;
2488SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2489UPDATE t1 SET f_int1 = @cur_value1
2490WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2491
2492# check single-4 success: 	1
2493SELECT MAX(f_int1) INTO @cur_value FROM t1;
2494DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2495
2496# check single-5 success: 	1
2497DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2498
2499# check single-6 success: 	1
2500INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2501ERROR HY000: Table has no partition for value 2147483647
2502DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2503INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2504f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2505f_charbig = '#NULL#';
2506INSERT INTO t1
2507SET f_int1 = NULL , f_int2 = -@max_row,
2508f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2509f_charbig = '#NULL#';
2510# check null success:    1
2511
2512# check null-1 success: 	1
2513UPDATE t1 SET f_int1 = -@max_row
2514WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2515AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2516
2517# check null-2 success: 	1
2518UPDATE t1 SET f_int1 = NULL
2519WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2520AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2521
2522# check null-3 success: 	1
2523DELETE FROM t1
2524WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2525AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2526
2527# check null-4 success: 	1
2528DELETE FROM t1
2529WHERE f_int1 = 0 AND f_int2 = 0
2530AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2531AND f_charbig = '#NULL#';
2532SET AUTOCOMMIT= 0;
2533INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2534SELECT f_int1, f_int1, '', '', 'was inserted'
2535FROM t0_template source_tab
2536WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2537
2538# check transactions-1 success: 	1
2539COMMIT WORK;
2540
2541# check transactions-2 success: 	1
2542ROLLBACK WORK;
2543
2544# check transactions-3 success: 	1
2545DELETE FROM t1 WHERE f_charbig = 'was inserted';
2546COMMIT WORK;
2547ROLLBACK WORK;
2548
2549# check transactions-4 success: 	1
2550INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2551SELECT f_int1, f_int1, '', '', 'was inserted'
2552FROM t0_template source_tab
2553WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2554
2555# check transactions-5 success: 	1
2556ROLLBACK WORK;
2557
2558# check transactions-6 success: 	1
2559# INFO: Storage engine used for t1 seems to be transactional.
2560COMMIT;
2561
2562# check transactions-7 success: 	1
2563DELETE FROM t1 WHERE f_charbig = 'was inserted';
2564COMMIT WORK;
2565SET @@session.sql_mode = 'traditional';
2566Warnings:
2567Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2568SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2569INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2570SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2571'', '', 'was inserted' FROM t0_template
2572WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2573ERROR 22012: Division by 0
2574COMMIT;
2575
2576# check transactions-8 success: 	1
2577# INFO: Storage engine used for t1 seems to be able to revert
2578#       changes made by the failing statement.
2579SET @@session.sql_mode = '';
2580Warnings:
2581Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2582SET AUTOCOMMIT= 1;
2583DELETE FROM t1 WHERE f_charbig = 'was inserted';
2584COMMIT WORK;
2585UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2586
2587# check special-1 success: 	1
2588UPDATE t1 SET f_charbig = '';
2589
2590# check special-2 success: 	1
2591UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2592INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2593SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2594WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2595INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2596SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2597'just inserted' FROM t0_template
2598WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2599CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2600BEGIN
2601UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2602f_charbig = 'updated by trigger'
2603      WHERE f_int1 = new.f_int1;
2604END|
2605INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2606SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2607WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2608
2609# check trigger-1 success: 	1
2610DROP TRIGGER trg_1;
2611UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2612f_int2 = CAST(f_char1 AS SIGNED INT),
2613f_charbig = 'just inserted'
2614   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2615DELETE FROM t0_aux
2616WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2618SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2619'just inserted' FROM t0_template
2620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2621CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2622BEGIN
2623UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2624f_charbig = 'updated by trigger'
2625      WHERE f_int1 = new.f_int1;
2626END|
2627INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2628SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2629WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2630
2631# check trigger-2 success: 	1
2632DROP TRIGGER trg_1;
2633UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2634f_int2 = CAST(f_char1 AS SIGNED INT),
2635f_charbig = 'just inserted'
2636   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2637DELETE FROM t0_aux
2638WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2639INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2640SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2641'just inserted' FROM t0_template
2642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2643CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2644BEGIN
2645UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2646f_charbig = 'updated by trigger'
2647      WHERE f_int1 = new.f_int1;
2648END|
2649UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2650WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2651
2652# check trigger-3 success: 	1
2653DROP TRIGGER trg_1;
2654UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2655f_int2 = CAST(f_char1 AS SIGNED INT),
2656f_charbig = 'just inserted'
2657   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2658DELETE FROM t0_aux
2659WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2660INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2661SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2662'just inserted' FROM t0_template
2663WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2664CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2665BEGIN
2666UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2667f_charbig = 'updated by trigger'
2668      WHERE f_int1 = - old.f_int1;
2669END|
2670UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2671WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2672
2673# check trigger-4 success: 	1
2674DROP TRIGGER trg_1;
2675UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2676f_int2 = CAST(f_char1 AS SIGNED INT),
2677f_charbig = 'just inserted'
2678   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2679DELETE FROM t0_aux
2680WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2681INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2682SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2683'just inserted' FROM t0_template
2684WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2685CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2686BEGIN
2687UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2688f_charbig = 'updated by trigger'
2689      WHERE f_int1 = new.f_int1;
2690END|
2691UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2692WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2693
2694# check trigger-5 success: 	1
2695DROP TRIGGER trg_1;
2696UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2697f_int2 = CAST(f_char1 AS SIGNED INT),
2698f_charbig = 'just inserted'
2699   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2700DELETE FROM t0_aux
2701WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2702INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2703SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2704'just inserted' FROM t0_template
2705WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2706CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2707BEGIN
2708UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2709f_charbig = 'updated by trigger'
2710      WHERE f_int1 = - old.f_int1;
2711END|
2712UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2713WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2714
2715# check trigger-6 success: 	1
2716DROP TRIGGER trg_1;
2717UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2718f_int2 = CAST(f_char1 AS SIGNED INT),
2719f_charbig = 'just inserted'
2720   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2721DELETE FROM t0_aux
2722WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2723INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2724SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2725'just inserted' FROM t0_template
2726WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2727CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2728BEGIN
2729UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2730f_charbig = 'updated by trigger'
2731      WHERE f_int1 = - old.f_int1;
2732END|
2733DELETE FROM t0_aux
2734WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2735
2736# check trigger-7 success: 	1
2737DROP TRIGGER trg_1;
2738UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2739f_int2 = CAST(f_char1 AS SIGNED INT),
2740f_charbig = 'just inserted'
2741   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2742DELETE FROM t0_aux
2743WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2744INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2745SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2746'just inserted' FROM t0_template
2747WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2748CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2749BEGIN
2750UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2751f_charbig = 'updated by trigger'
2752      WHERE f_int1 = - old.f_int1;
2753END|
2754DELETE FROM t0_aux
2755WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2756
2757# check trigger-8 success: 	1
2758DROP TRIGGER trg_1;
2759UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2760f_int2 = CAST(f_char1 AS SIGNED INT),
2761f_charbig = 'just inserted'
2762   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2763DELETE FROM t0_aux
2764WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2765DELETE FROM t1
2766WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2767CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2768BEGIN
2769SET new.f_int1 = old.f_int1 + @max_row,
2770new.f_int2 = old.f_int2 - @max_row,
2771new.f_charbig = '####updated per update trigger####';
2772END|
2773UPDATE t1
2774SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2775f_charbig = '####updated per update statement itself####';
2776
2777# check trigger-9 success: 	1
2778DROP TRIGGER trg_2;
2779UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2780f_int2 = CAST(f_char1 AS SIGNED INT),
2781f_charbig = CONCAT('===',f_char1,'===');
2782CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2783BEGIN
2784SET new.f_int1 = new.f_int1 + @max_row,
2785new.f_int2 = new.f_int2 - @max_row,
2786new.f_charbig = '####updated per update trigger####';
2787END|
2788UPDATE t1
2789SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2790f_charbig = '####updated per update statement itself####';
2791
2792# check trigger-10 success: 	1
2793DROP TRIGGER trg_2;
2794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2795f_int2 = CAST(f_char1 AS SIGNED INT),
2796f_charbig = CONCAT('===',f_char1,'===');
2797CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2798BEGIN
2799SET new.f_int1 = @my_max1 + @counter,
2800new.f_int2 = @my_min2 - @counter,
2801new.f_charbig = '####updated per insert trigger####';
2802SET @counter = @counter + 1;
2803END|
2804SET @counter = 1;
2805SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2806INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2807SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2808CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2809WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2810ORDER BY f_int1;
2811DROP TRIGGER trg_3;
2812
2813# check trigger-11 success: 	1
2814DELETE FROM t1
2815WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2816AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2817AND f_charbig = '####updated per insert trigger####';
2818CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2819BEGIN
2820SET new.f_int1 = @my_max1 + @counter,
2821new.f_int2 = @my_min2 - @counter,
2822new.f_charbig = '####updated per insert trigger####';
2823SET @counter = @counter + 1;
2824END|
2825SET @counter = 1;
2826SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2827INSERT INTO t1 (f_char1, f_char2, f_charbig)
2828SELECT CAST(f_int1 AS CHAR),
2829CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2830WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2831ORDER BY f_int1;
2832DROP TRIGGER trg_3;
2833
2834# check trigger-12 success: 	1
2835DELETE FROM t1
2836WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2837AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2838AND f_charbig = '####updated per insert trigger####';
2839ANALYZE  TABLE t1;
2840Table	Op	Msg_type	Msg_text
2841test.t1	analyze	status	OK
2842CHECK    TABLE t1 EXTENDED;
2843Table	Op	Msg_type	Msg_text
2844test.t1	check	status	OK
2845CHECKSUM TABLE t1 EXTENDED;
2846Table	Checksum
2847test.t1	<some_value>
2848OPTIMIZE TABLE t1;
2849Table	Op	Msg_type	Msg_text
2850test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2851test.t1	optimize	status	OK
2852# check layout success:    1
2853REPAIR   TABLE t1 EXTENDED;
2854Table	Op	Msg_type	Msg_text
2855test.t1	repair	status	OK
2856# check layout success:    1
2857TRUNCATE t1;
2858
2859# check TRUNCATE success: 	1
2860# check layout success:    1
2861# End usability test (inc/partition_check.inc)
2862DROP TABLE t1;
2863CREATE TABLE t1 (
2864f_int1 INTEGER,
2865f_int2 INTEGER,
2866f_char1 CHAR(20),
2867f_char2 CHAR(20),
2868f_charbig VARCHAR(1000)
2869
2870)
2871PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
2872(PARTITION part1 VALUES IN (0)
2873(SUBPARTITION sp11, SUBPARTITION sp12),
2874PARTITION part2 VALUES IN (1)
2875(SUBPARTITION sp21, SUBPARTITION sp22),
2876PARTITION part3 VALUES IN (2)
2877(SUBPARTITION sp31, SUBPARTITION sp32),
2878PARTITION part4 VALUES IN (NULL)
2879(SUBPARTITION sp41, SUBPARTITION sp42));
2880INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2881SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2882WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2883ALTER TABLE t1 MODIFY f_int2 BIGINT;
2884INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2885SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2886WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2887# Start usability test (inc/partition_check.inc)
2888create_command
2889SHOW CREATE TABLE t1;
2890Table	Create Table
2891t1	CREATE TABLE `t1` (
2892  `f_int1` int(11) DEFAULT NULL,
2893  `f_int2` bigint(20) DEFAULT NULL,
2894  `f_char1` char(20) DEFAULT NULL,
2895  `f_char2` char(20) DEFAULT NULL,
2896  `f_charbig` varchar(1000) DEFAULT NULL
2897) ENGINE=TokuDB DEFAULT CHARSET=latin1
2898/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
2899SUBPARTITION BY HASH (f_int1 + 1)
2900(PARTITION part1 VALUES IN (0)
2901 (SUBPARTITION sp11 ENGINE = TokuDB,
2902  SUBPARTITION sp12 ENGINE = TokuDB),
2903 PARTITION part2 VALUES IN (1)
2904 (SUBPARTITION sp21 ENGINE = TokuDB,
2905  SUBPARTITION sp22 ENGINE = TokuDB),
2906 PARTITION part3 VALUES IN (2)
2907 (SUBPARTITION sp31 ENGINE = TokuDB,
2908  SUBPARTITION sp32 ENGINE = TokuDB),
2909 PARTITION part4 VALUES IN (NULL)
2910 (SUBPARTITION sp41 ENGINE = TokuDB,
2911  SUBPARTITION sp42 ENGINE = TokuDB)) */
2912
2913# check prerequisites-1 success:    1
2914# check COUNT(*) success:    1
2915# check MIN/MAX(f_int1) success:    1
2916# check MIN/MAX(f_int2) success:    1
2917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2918SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2919CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2920WHERE f_int1 IN (2,3);
2921# check prerequisites-3 success:    1
2922DELETE FROM t1 WHERE f_charbig = 'delete me';
2923# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2924# check read via f_int1 success: 1
2925# check read via f_int2 success: 1
2926
2927# check multiple-1 success: 	1
2928DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2929
2930# check multiple-2 success: 	1
2931INSERT INTO t1 SELECT * FROM t0_template
2932WHERE MOD(f_int1,3) = 0;
2933
2934# check multiple-3 success: 	1
2935UPDATE t1 SET f_int1 = f_int1 + @max_row
2936WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2937AND @max_row_div2 + @max_row_div4;
2938
2939# check multiple-4 success: 	1
2940DELETE FROM t1
2941WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2942AND @max_row_div2 + @max_row_div4 + @max_row;
2943
2944# check multiple-5 success: 	1
2945SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2946INSERT INTO t1
2947SET f_int1 = @cur_value , f_int2 = @cur_value,
2948f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2949f_charbig = '#SINGLE#';
2950
2951# check single-1 success: 	1
2952SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2953INSERT INTO t1
2954SET f_int1 = @cur_value , f_int2 = @cur_value,
2955f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2956f_charbig = '#SINGLE#';
2957
2958# check single-2 success: 	1
2959SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2960SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2961UPDATE t1 SET f_int1 = @cur_value2
2962WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2963
2964# check single-3 success: 	1
2965SET @cur_value1= -1;
2966SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2967UPDATE t1 SET f_int1 = @cur_value1
2968WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2969
2970# check single-4 success: 	1
2971SELECT MAX(f_int1) INTO @cur_value FROM t1;
2972DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2973
2974# check single-5 success: 	1
2975DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2976
2977# check single-6 success: 	1
2978INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2979
2980# check single-7 success: 	1
2981DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2982DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2983INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2984f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2985f_charbig = '#NULL#';
2986INSERT INTO t1
2987SET f_int1 = NULL , f_int2 = -@max_row,
2988f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2989f_charbig = '#NULL#';
2990# check null success:    1
2991
2992# check null-1 success: 	1
2993UPDATE t1 SET f_int1 = -@max_row
2994WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2995AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2996
2997# check null-2 success: 	1
2998UPDATE t1 SET f_int1 = NULL
2999WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3000AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3001
3002# check null-3 success: 	1
3003DELETE FROM t1
3004WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3005AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3006
3007# check null-4 success: 	1
3008DELETE FROM t1
3009WHERE f_int1 = 0 AND f_int2 = 0
3010AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3011AND f_charbig = '#NULL#';
3012SET AUTOCOMMIT= 0;
3013INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3014SELECT f_int1, f_int1, '', '', 'was inserted'
3015FROM t0_template source_tab
3016WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3017
3018# check transactions-1 success: 	1
3019COMMIT WORK;
3020
3021# check transactions-2 success: 	1
3022ROLLBACK WORK;
3023
3024# check transactions-3 success: 	1
3025DELETE FROM t1 WHERE f_charbig = 'was inserted';
3026COMMIT WORK;
3027ROLLBACK WORK;
3028
3029# check transactions-4 success: 	1
3030INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3031SELECT f_int1, f_int1, '', '', 'was inserted'
3032FROM t0_template source_tab
3033WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3034
3035# check transactions-5 success: 	1
3036ROLLBACK WORK;
3037
3038# check transactions-6 success: 	1
3039# INFO: Storage engine used for t1 seems to be transactional.
3040COMMIT;
3041
3042# check transactions-7 success: 	1
3043DELETE FROM t1 WHERE f_charbig = 'was inserted';
3044COMMIT WORK;
3045SET @@session.sql_mode = 'traditional';
3046Warnings:
3047Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3048SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3049INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3050SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3051'', '', 'was inserted' FROM t0_template
3052WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3053ERROR 22012: Division by 0
3054COMMIT;
3055
3056# check transactions-8 success: 	1
3057# INFO: Storage engine used for t1 seems to be able to revert
3058#       changes made by the failing statement.
3059SET @@session.sql_mode = '';
3060Warnings:
3061Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3062SET AUTOCOMMIT= 1;
3063DELETE FROM t1 WHERE f_charbig = 'was inserted';
3064COMMIT WORK;
3065UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3066
3067# check special-1 success: 	1
3068UPDATE t1 SET f_charbig = '';
3069
3070# check special-2 success: 	1
3071UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3072INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3073SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3074WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3075INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3076SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3077'just inserted' FROM t0_template
3078WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3079CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3080BEGIN
3081UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3082f_charbig = 'updated by trigger'
3083      WHERE f_int1 = new.f_int1;
3084END|
3085INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3086SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3088
3089# check trigger-1 success: 	1
3090DROP TRIGGER trg_1;
3091UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3092f_int2 = CAST(f_char1 AS SIGNED INT),
3093f_charbig = 'just inserted'
3094   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3095DELETE FROM t0_aux
3096WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3097INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3098SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3099'just inserted' FROM t0_template
3100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3101CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3102BEGIN
3103UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3104f_charbig = 'updated by trigger'
3105      WHERE f_int1 = new.f_int1;
3106END|
3107INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3108SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3109WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3110
3111# check trigger-2 success: 	1
3112DROP TRIGGER trg_1;
3113UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3114f_int2 = CAST(f_char1 AS SIGNED INT),
3115f_charbig = 'just inserted'
3116   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3117DELETE FROM t0_aux
3118WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3119INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3120SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3121'just inserted' FROM t0_template
3122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3123CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3124BEGIN
3125UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3126f_charbig = 'updated by trigger'
3127      WHERE f_int1 = new.f_int1;
3128END|
3129UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3130WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3131
3132# check trigger-3 success: 	1
3133DROP TRIGGER trg_1;
3134UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3135f_int2 = CAST(f_char1 AS SIGNED INT),
3136f_charbig = 'just inserted'
3137   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3138DELETE FROM t0_aux
3139WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3141SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3142'just inserted' FROM t0_template
3143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3144CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3145BEGIN
3146UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3147f_charbig = 'updated by trigger'
3148      WHERE f_int1 = - old.f_int1;
3149END|
3150UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3151WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3152
3153# check trigger-4 success: 	1
3154DROP TRIGGER trg_1;
3155UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3156f_int2 = CAST(f_char1 AS SIGNED INT),
3157f_charbig = 'just inserted'
3158   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3159DELETE FROM t0_aux
3160WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3161INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3162SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3163'just inserted' FROM t0_template
3164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3165CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3166BEGIN
3167UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3168f_charbig = 'updated by trigger'
3169      WHERE f_int1 = new.f_int1;
3170END|
3171UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3172WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3173
3174# check trigger-5 success: 	1
3175DROP TRIGGER trg_1;
3176UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3177f_int2 = CAST(f_char1 AS SIGNED INT),
3178f_charbig = 'just inserted'
3179   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3180DELETE FROM t0_aux
3181WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3182INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3183SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3184'just inserted' FROM t0_template
3185WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3186CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3187BEGIN
3188UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3189f_charbig = 'updated by trigger'
3190      WHERE f_int1 = - old.f_int1;
3191END|
3192UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3193WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3194
3195# check trigger-6 success: 	1
3196DROP TRIGGER trg_1;
3197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3198f_int2 = CAST(f_char1 AS SIGNED INT),
3199f_charbig = 'just inserted'
3200   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3201DELETE FROM t0_aux
3202WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3203INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3204SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3205'just inserted' FROM t0_template
3206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3207CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3208BEGIN
3209UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3210f_charbig = 'updated by trigger'
3211      WHERE f_int1 = - old.f_int1;
3212END|
3213DELETE FROM t0_aux
3214WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3215
3216# check trigger-7 success: 	1
3217DROP TRIGGER trg_1;
3218UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3219f_int2 = CAST(f_char1 AS SIGNED INT),
3220f_charbig = 'just inserted'
3221   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3222DELETE FROM t0_aux
3223WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3224INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3225SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3226'just inserted' FROM t0_template
3227WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3228CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3229BEGIN
3230UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3231f_charbig = 'updated by trigger'
3232      WHERE f_int1 = - old.f_int1;
3233END|
3234DELETE FROM t0_aux
3235WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3236
3237# check trigger-8 success: 	1
3238DROP TRIGGER trg_1;
3239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3240f_int2 = CAST(f_char1 AS SIGNED INT),
3241f_charbig = 'just inserted'
3242   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3243DELETE FROM t0_aux
3244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3245DELETE FROM t1
3246WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3247CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3248BEGIN
3249SET new.f_int1 = old.f_int1 + @max_row,
3250new.f_int2 = old.f_int2 - @max_row,
3251new.f_charbig = '####updated per update trigger####';
3252END|
3253UPDATE t1
3254SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3255f_charbig = '####updated per update statement itself####';
3256
3257# check trigger-9 success: 	1
3258DROP TRIGGER trg_2;
3259UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3260f_int2 = CAST(f_char1 AS SIGNED INT),
3261f_charbig = CONCAT('===',f_char1,'===');
3262CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3263BEGIN
3264SET new.f_int1 = new.f_int1 + @max_row,
3265new.f_int2 = new.f_int2 - @max_row,
3266new.f_charbig = '####updated per update trigger####';
3267END|
3268UPDATE t1
3269SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3270f_charbig = '####updated per update statement itself####';
3271
3272# check trigger-10 success: 	1
3273DROP TRIGGER trg_2;
3274UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3275f_int2 = CAST(f_char1 AS SIGNED INT),
3276f_charbig = CONCAT('===',f_char1,'===');
3277CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3278BEGIN
3279SET new.f_int1 = @my_max1 + @counter,
3280new.f_int2 = @my_min2 - @counter,
3281new.f_charbig = '####updated per insert trigger####';
3282SET @counter = @counter + 1;
3283END|
3284SET @counter = 1;
3285SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3286INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3287SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3288CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3289WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3290ORDER BY f_int1;
3291DROP TRIGGER trg_3;
3292
3293# check trigger-11 success: 	1
3294DELETE FROM t1
3295WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3296AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3297AND f_charbig = '####updated per insert trigger####';
3298CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3299BEGIN
3300SET new.f_int1 = @my_max1 + @counter,
3301new.f_int2 = @my_min2 - @counter,
3302new.f_charbig = '####updated per insert trigger####';
3303SET @counter = @counter + 1;
3304END|
3305SET @counter = 1;
3306SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3307INSERT INTO t1 (f_char1, f_char2, f_charbig)
3308SELECT CAST(f_int1 AS CHAR),
3309CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3311ORDER BY f_int1;
3312DROP TRIGGER trg_3;
3313
3314# check trigger-12 success: 	1
3315DELETE FROM t1
3316WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3317AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3318AND f_charbig = '####updated per insert trigger####';
3319ANALYZE  TABLE t1;
3320Table	Op	Msg_type	Msg_text
3321test.t1	analyze	status	OK
3322CHECK    TABLE t1 EXTENDED;
3323Table	Op	Msg_type	Msg_text
3324test.t1	check	status	OK
3325CHECKSUM TABLE t1 EXTENDED;
3326Table	Checksum
3327test.t1	<some_value>
3328OPTIMIZE TABLE t1;
3329Table	Op	Msg_type	Msg_text
3330test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3331test.t1	optimize	status	OK
3332# check layout success:    1
3333REPAIR   TABLE t1 EXTENDED;
3334Table	Op	Msg_type	Msg_text
3335test.t1	repair	status	OK
3336# check layout success:    1
3337TRUNCATE t1;
3338
3339# check TRUNCATE success: 	1
3340# check layout success:    1
3341# End usability test (inc/partition_check.inc)
3342DROP TABLE t1;
3343CREATE TABLE t1 (
3344f_int1 INTEGER,
3345f_int2 INTEGER,
3346f_char1 CHAR(20),
3347f_char2 CHAR(20),
3348f_charbig VARCHAR(1000)
3349
3350)
3351PARTITION BY LIST(ABS(MOD(f_int1,2)))
3352SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
3353(PARTITION part1 VALUES IN (0),
3354PARTITION part2 VALUES IN (1),
3355PARTITION part3 VALUES IN (NULL));
3356INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3357SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3358WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3359ALTER TABLE t1 MODIFY f_int2 BIGINT;
3360INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3361SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3362WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3363# Start usability test (inc/partition_check.inc)
3364create_command
3365SHOW CREATE TABLE t1;
3366Table	Create Table
3367t1	CREATE TABLE `t1` (
3368  `f_int1` int(11) DEFAULT NULL,
3369  `f_int2` bigint(20) DEFAULT NULL,
3370  `f_char1` char(20) DEFAULT NULL,
3371  `f_char2` char(20) DEFAULT NULL,
3372  `f_charbig` varchar(1000) DEFAULT NULL
3373) ENGINE=TokuDB DEFAULT CHARSET=latin1
3374/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
3375SUBPARTITION BY KEY (f_int1)
3376SUBPARTITIONS 3
3377(PARTITION part1 VALUES IN (0) ENGINE = TokuDB,
3378 PARTITION part2 VALUES IN (1) ENGINE = TokuDB,
3379 PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */
3380
3381# check prerequisites-1 success:    1
3382# check COUNT(*) success:    1
3383# check MIN/MAX(f_int1) success:    1
3384# check MIN/MAX(f_int2) success:    1
3385INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3386SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3387CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3388WHERE f_int1 IN (2,3);
3389# check prerequisites-3 success:    1
3390DELETE FROM t1 WHERE f_charbig = 'delete me';
3391# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
3392# check read via f_int1 success: 1
3393# check read via f_int2 success: 1
3394
3395# check multiple-1 success: 	1
3396DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3397
3398# check multiple-2 success: 	1
3399INSERT INTO t1 SELECT * FROM t0_template
3400WHERE MOD(f_int1,3) = 0;
3401
3402# check multiple-3 success: 	1
3403UPDATE t1 SET f_int1 = f_int1 + @max_row
3404WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3405AND @max_row_div2 + @max_row_div4;
3406
3407# check multiple-4 success: 	1
3408DELETE FROM t1
3409WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3410AND @max_row_div2 + @max_row_div4 + @max_row;
3411
3412# check multiple-5 success: 	1
3413SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3414INSERT INTO t1
3415SET f_int1 = @cur_value , f_int2 = @cur_value,
3416f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3417f_charbig = '#SINGLE#';
3418
3419# check single-1 success: 	1
3420SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3421INSERT INTO t1
3422SET f_int1 = @cur_value , f_int2 = @cur_value,
3423f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3424f_charbig = '#SINGLE#';
3425
3426# check single-2 success: 	1
3427SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3428SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3429UPDATE t1 SET f_int1 = @cur_value2
3430WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3431
3432# check single-3 success: 	1
3433SET @cur_value1= -1;
3434SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3435UPDATE t1 SET f_int1 = @cur_value1
3436WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3437
3438# check single-4 success: 	1
3439SELECT MAX(f_int1) INTO @cur_value FROM t1;
3440DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3441
3442# check single-5 success: 	1
3443DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3444
3445# check single-6 success: 	1
3446INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3447
3448# check single-7 success: 	1
3449DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3450DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3451INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3452f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3453f_charbig = '#NULL#';
3454INSERT INTO t1
3455SET f_int1 = NULL , f_int2 = -@max_row,
3456f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3457f_charbig = '#NULL#';
3458# check null success:    1
3459
3460# check null-1 success: 	1
3461UPDATE t1 SET f_int1 = -@max_row
3462WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3463AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3464
3465# check null-2 success: 	1
3466UPDATE t1 SET f_int1 = NULL
3467WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3468AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3469
3470# check null-3 success: 	1
3471DELETE FROM t1
3472WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3473AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3474
3475# check null-4 success: 	1
3476DELETE FROM t1
3477WHERE f_int1 = 0 AND f_int2 = 0
3478AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3479AND f_charbig = '#NULL#';
3480SET AUTOCOMMIT= 0;
3481INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3482SELECT f_int1, f_int1, '', '', 'was inserted'
3483FROM t0_template source_tab
3484WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3485
3486# check transactions-1 success: 	1
3487COMMIT WORK;
3488
3489# check transactions-2 success: 	1
3490ROLLBACK WORK;
3491
3492# check transactions-3 success: 	1
3493DELETE FROM t1 WHERE f_charbig = 'was inserted';
3494COMMIT WORK;
3495ROLLBACK WORK;
3496
3497# check transactions-4 success: 	1
3498INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3499SELECT f_int1, f_int1, '', '', 'was inserted'
3500FROM t0_template source_tab
3501WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3502
3503# check transactions-5 success: 	1
3504ROLLBACK WORK;
3505
3506# check transactions-6 success: 	1
3507# INFO: Storage engine used for t1 seems to be transactional.
3508COMMIT;
3509
3510# check transactions-7 success: 	1
3511DELETE FROM t1 WHERE f_charbig = 'was inserted';
3512COMMIT WORK;
3513SET @@session.sql_mode = 'traditional';
3514Warnings:
3515Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3516SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3517INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3518SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3519'', '', 'was inserted' FROM t0_template
3520WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3521ERROR 22012: Division by 0
3522COMMIT;
3523
3524# check transactions-8 success: 	1
3525# INFO: Storage engine used for t1 seems to be able to revert
3526#       changes made by the failing statement.
3527SET @@session.sql_mode = '';
3528Warnings:
3529Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3530SET AUTOCOMMIT= 1;
3531DELETE FROM t1 WHERE f_charbig = 'was inserted';
3532COMMIT WORK;
3533UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3534
3535# check special-1 success: 	1
3536UPDATE t1 SET f_charbig = '';
3537
3538# check special-2 success: 	1
3539UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3540INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3541SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3542WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3543INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3544SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3545'just inserted' FROM t0_template
3546WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3547CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3548BEGIN
3549UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3550f_charbig = 'updated by trigger'
3551      WHERE f_int1 = new.f_int1;
3552END|
3553INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3554SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3555WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3556
3557# check trigger-1 success: 	1
3558DROP TRIGGER trg_1;
3559UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3560f_int2 = CAST(f_char1 AS SIGNED INT),
3561f_charbig = 'just inserted'
3562   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3563DELETE FROM t0_aux
3564WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3565INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3566SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3567'just inserted' FROM t0_template
3568WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3569CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3570BEGIN
3571UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3572f_charbig = 'updated by trigger'
3573      WHERE f_int1 = new.f_int1;
3574END|
3575INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3576SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3577WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3578
3579# check trigger-2 success: 	1
3580DROP TRIGGER trg_1;
3581UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3582f_int2 = CAST(f_char1 AS SIGNED INT),
3583f_charbig = 'just inserted'
3584   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3585DELETE FROM t0_aux
3586WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3587INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3588SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3589'just inserted' FROM t0_template
3590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3591CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3592BEGIN
3593UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3594f_charbig = 'updated by trigger'
3595      WHERE f_int1 = new.f_int1;
3596END|
3597UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3598WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3599
3600# check trigger-3 success: 	1
3601DROP TRIGGER trg_1;
3602UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3603f_int2 = CAST(f_char1 AS SIGNED INT),
3604f_charbig = 'just inserted'
3605   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3606DELETE FROM t0_aux
3607WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3608INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3609SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3610'just inserted' FROM t0_template
3611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3612CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3613BEGIN
3614UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3615f_charbig = 'updated by trigger'
3616      WHERE f_int1 = - old.f_int1;
3617END|
3618UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3619WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3620
3621# check trigger-4 success: 	1
3622DROP TRIGGER trg_1;
3623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3624f_int2 = CAST(f_char1 AS SIGNED INT),
3625f_charbig = 'just inserted'
3626   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3627DELETE FROM t0_aux
3628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3629INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3630SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3631'just inserted' FROM t0_template
3632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3633CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3634BEGIN
3635UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3636f_charbig = 'updated by trigger'
3637      WHERE f_int1 = new.f_int1;
3638END|
3639UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3640WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3641
3642# check trigger-5 success: 	1
3643DROP TRIGGER trg_1;
3644UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3645f_int2 = CAST(f_char1 AS SIGNED INT),
3646f_charbig = 'just inserted'
3647   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3648DELETE FROM t0_aux
3649WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3650INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3651SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3652'just inserted' FROM t0_template
3653WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3654CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3655BEGIN
3656UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3657f_charbig = 'updated by trigger'
3658      WHERE f_int1 = - old.f_int1;
3659END|
3660UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3661WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3662
3663# check trigger-6 success: 	1
3664DROP TRIGGER trg_1;
3665UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3666f_int2 = CAST(f_char1 AS SIGNED INT),
3667f_charbig = 'just inserted'
3668   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3669DELETE FROM t0_aux
3670WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3671INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3672SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3673'just inserted' FROM t0_template
3674WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3675CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3676BEGIN
3677UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3678f_charbig = 'updated by trigger'
3679      WHERE f_int1 = - old.f_int1;
3680END|
3681DELETE FROM t0_aux
3682WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3683
3684# check trigger-7 success: 	1
3685DROP TRIGGER trg_1;
3686UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3687f_int2 = CAST(f_char1 AS SIGNED INT),
3688f_charbig = 'just inserted'
3689   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3690DELETE FROM t0_aux
3691WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3692INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3693SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3694'just inserted' FROM t0_template
3695WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3696CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3697BEGIN
3698UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3699f_charbig = 'updated by trigger'
3700      WHERE f_int1 = - old.f_int1;
3701END|
3702DELETE FROM t0_aux
3703WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3704
3705# check trigger-8 success: 	1
3706DROP TRIGGER trg_1;
3707UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3708f_int2 = CAST(f_char1 AS SIGNED INT),
3709f_charbig = 'just inserted'
3710   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3711DELETE FROM t0_aux
3712WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3713DELETE FROM t1
3714WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3715CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3716BEGIN
3717SET new.f_int1 = old.f_int1 + @max_row,
3718new.f_int2 = old.f_int2 - @max_row,
3719new.f_charbig = '####updated per update trigger####';
3720END|
3721UPDATE t1
3722SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3723f_charbig = '####updated per update statement itself####';
3724
3725# check trigger-9 success: 	1
3726DROP TRIGGER trg_2;
3727UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3728f_int2 = CAST(f_char1 AS SIGNED INT),
3729f_charbig = CONCAT('===',f_char1,'===');
3730CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3731BEGIN
3732SET new.f_int1 = new.f_int1 + @max_row,
3733new.f_int2 = new.f_int2 - @max_row,
3734new.f_charbig = '####updated per update trigger####';
3735END|
3736UPDATE t1
3737SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3738f_charbig = '####updated per update statement itself####';
3739
3740# check trigger-10 success: 	1
3741DROP TRIGGER trg_2;
3742UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3743f_int2 = CAST(f_char1 AS SIGNED INT),
3744f_charbig = CONCAT('===',f_char1,'===');
3745CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3746BEGIN
3747SET new.f_int1 = @my_max1 + @counter,
3748new.f_int2 = @my_min2 - @counter,
3749new.f_charbig = '####updated per insert trigger####';
3750SET @counter = @counter + 1;
3751END|
3752SET @counter = 1;
3753SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3754INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3755SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3756CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3757WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3758ORDER BY f_int1;
3759DROP TRIGGER trg_3;
3760
3761# check trigger-11 success: 	1
3762DELETE FROM t1
3763WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3764AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3765AND f_charbig = '####updated per insert trigger####';
3766CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3767BEGIN
3768SET new.f_int1 = @my_max1 + @counter,
3769new.f_int2 = @my_min2 - @counter,
3770new.f_charbig = '####updated per insert trigger####';
3771SET @counter = @counter + 1;
3772END|
3773SET @counter = 1;
3774SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3775INSERT INTO t1 (f_char1, f_char2, f_charbig)
3776SELECT CAST(f_int1 AS CHAR),
3777CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3778WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3779ORDER BY f_int1;
3780DROP TRIGGER trg_3;
3781
3782# check trigger-12 success: 	1
3783DELETE FROM t1
3784WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3785AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3786AND f_charbig = '####updated per insert trigger####';
3787ANALYZE  TABLE t1;
3788Table	Op	Msg_type	Msg_text
3789test.t1	analyze	status	OK
3790CHECK    TABLE t1 EXTENDED;
3791Table	Op	Msg_type	Msg_text
3792test.t1	check	status	OK
3793CHECKSUM TABLE t1 EXTENDED;
3794Table	Checksum
3795test.t1	<some_value>
3796OPTIMIZE TABLE t1;
3797Table	Op	Msg_type	Msg_text
3798test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3799test.t1	optimize	status	OK
3800# check layout success:    1
3801REPAIR   TABLE t1 EXTENDED;
3802Table	Op	Msg_type	Msg_text
3803test.t1	repair	status	OK
3804# check layout success:    1
3805TRUNCATE t1;
3806
3807# check TRUNCATE success: 	1
3808# check layout success:    1
3809# End usability test (inc/partition_check.inc)
3810DROP TABLE t1;
3811#  1.1.2 PRIMARY KEY exists
3812DROP TABLE IF EXISTS t1;
3813CREATE TABLE t1 (
3814f_int1 INTEGER,
3815f_int2 INTEGER,
3816f_char1 CHAR(20),
3817f_char2 CHAR(20),
3818f_charbig VARCHAR(1000)
3819, PRIMARY KEY (f_int1,f_int2)
3820)
3821PARTITION BY HASH(f_int1) PARTITIONS 2;
3822INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3823SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3824WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3825ALTER TABLE t1 MODIFY f_int2 BIGINT;
3826INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3827SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3828WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3829# Start usability test (inc/partition_check.inc)
3830create_command
3831SHOW CREATE TABLE t1;
3832Table	Create Table
3833t1	CREATE TABLE `t1` (
3834  `f_int1` int(11) NOT NULL,
3835  `f_int2` bigint(20) NOT NULL,
3836  `f_char1` char(20) DEFAULT NULL,
3837  `f_char2` char(20) DEFAULT NULL,
3838  `f_charbig` varchar(1000) DEFAULT NULL,
3839  PRIMARY KEY (`f_int1`,`f_int2`)
3840) ENGINE=TokuDB DEFAULT CHARSET=latin1
3841/*!50100 PARTITION BY HASH (f_int1)
3842PARTITIONS 2 */
3843
3844# check prerequisites-1 success:    1
3845# check COUNT(*) success:    1
3846# check MIN/MAX(f_int1) success:    1
3847# check MIN/MAX(f_int2) success:    1
3848INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3849SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3850CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3851WHERE f_int1 IN (2,3);
3852ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
3853# check prerequisites-3 success:    1
3854# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3855INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3856SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3857CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3858WHERE f_int1 IN (2,3);
3859DELETE FROM t1 WHERE f_charbig = 'delete me';
3860INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3861SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3862CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3863WHERE f_int1 IN (2,3);
3864DELETE FROM t1 WHERE f_charbig = 'delete me';
3865# check read via f_int1 success: 1
3866# check read via f_int2 success: 1
3867
3868# check multiple-1 success: 	1
3869DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3870
3871# check multiple-2 success: 	1
3872INSERT INTO t1 SELECT * FROM t0_template
3873WHERE MOD(f_int1,3) = 0;
3874
3875# check multiple-3 success: 	1
3876UPDATE t1 SET f_int1 = f_int1 + @max_row
3877WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3878AND @max_row_div2 + @max_row_div4;
3879
3880# check multiple-4 success: 	1
3881DELETE FROM t1
3882WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3883AND @max_row_div2 + @max_row_div4 + @max_row;
3884
3885# check multiple-5 success: 	1
3886SELECT COUNT(*) INTO @try_count FROM t0_template
3887WHERE MOD(f_int1,3) = 0
3888AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3889SELECT COUNT(*) INTO @clash_count
3890FROM t1 INNER JOIN t0_template USING(f_int1)
3891WHERE MOD(f_int1,3) = 0
3892AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3893SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3894INSERT INTO t1
3895SET f_int1 = @cur_value , f_int2 = @cur_value,
3896f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3897f_charbig = '#SINGLE#';
3898
3899# check single-1 success: 	1
3900SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3901INSERT INTO t1
3902SET f_int1 = @cur_value , f_int2 = @cur_value,
3903f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3904f_charbig = '#SINGLE#';
3905
3906# check single-2 success: 	1
3907SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3908SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3909UPDATE t1 SET f_int1 = @cur_value2
3910WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3911
3912# check single-3 success: 	1
3913SET @cur_value1= -1;
3914SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3915UPDATE t1 SET f_int1 = @cur_value1
3916WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3917
3918# check single-4 success: 	1
3919SELECT MAX(f_int1) INTO @cur_value FROM t1;
3920DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3921
3922# check single-5 success: 	1
3923DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3924
3925# check single-6 success: 	1
3926INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3927
3928# check single-7 success: 	1
3929DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3930DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3931INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3932f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3933f_charbig = '#NULL#';
3934INSERT INTO t1
3935SET f_int1 = NULL , f_int2 = -@max_row,
3936f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3937f_charbig = '#NULL#';
3938ERROR 23000: Column 'f_int1' cannot be null
3939# check null success:    1
3940DELETE FROM t1
3941WHERE f_int1 = 0 AND f_int2 = 0
3942AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3943AND f_charbig = '#NULL#';
3944INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3945SELECT f_int1, f_int1, '', '', 'was inserted'
3946   FROM t0_template source_tab
3947WHERE MOD(f_int1,3) = 0
3948AND f_int1 BETWEEN @max_row_div2 AND @max_row
3949ON DUPLICATE KEY
3950UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3951f_int2 = 2 * @max_row + source_tab.f_int1,
3952f_charbig = 'was updated';
3953
3954# check unique-1-a success: 	1
3955
3956# check unique-1-b success: 	1
3957DELETE FROM t1 WHERE f_charbig = 'was inserted';
3958UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3959f_int2 = CAST(f_char1 AS SIGNED INT),
3960f_charbig = CONCAT('===',f_char1,'===')
3961WHERE f_charbig = 'was updated';
3962REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3963SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3964   FROM t0_template source_tab
3965WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3966
3967# check replace success: 	1
3968DELETE FROM t1
3969WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3970DELETE FROM t1
3971WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3972f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3973UPDATE t1 SET f_int2 = f_int1,
3974f_char1 = CAST(f_int1 AS CHAR),
3975f_char2 = CAST(f_int1 AS CHAR),
3976f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3977WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3978SET AUTOCOMMIT= 0;
3979INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3980SELECT f_int1, f_int1, '', '', 'was inserted'
3981FROM t0_template source_tab
3982WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3983
3984# check transactions-1 success: 	1
3985COMMIT WORK;
3986
3987# check transactions-2 success: 	1
3988ROLLBACK WORK;
3989
3990# check transactions-3 success: 	1
3991DELETE FROM t1 WHERE f_charbig = 'was inserted';
3992COMMIT WORK;
3993ROLLBACK WORK;
3994
3995# check transactions-4 success: 	1
3996INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3997SELECT f_int1, f_int1, '', '', 'was inserted'
3998FROM t0_template source_tab
3999WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4000
4001# check transactions-5 success: 	1
4002ROLLBACK WORK;
4003
4004# check transactions-6 success: 	1
4005# INFO: Storage engine used for t1 seems to be transactional.
4006COMMIT;
4007
4008# check transactions-7 success: 	1
4009DELETE FROM t1 WHERE f_charbig = 'was inserted';
4010COMMIT WORK;
4011SET @@session.sql_mode = 'traditional';
4012Warnings:
4013Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4014SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4015INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4016SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4017'', '', 'was inserted' FROM t0_template
4018WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4019ERROR 22012: Division by 0
4020COMMIT;
4021
4022# check transactions-8 success: 	1
4023# INFO: Storage engine used for t1 seems to be able to revert
4024#       changes made by the failing statement.
4025SET @@session.sql_mode = '';
4026Warnings:
4027Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4028SET AUTOCOMMIT= 1;
4029DELETE FROM t1 WHERE f_charbig = 'was inserted';
4030COMMIT WORK;
4031UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4032
4033# check special-1 success: 	1
4034UPDATE t1 SET f_charbig = '';
4035
4036# check special-2 success: 	1
4037UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4038INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4039SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4040WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4041INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4042SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4043'just inserted' FROM t0_template
4044WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4045CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4046BEGIN
4047UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4048f_charbig = 'updated by trigger'
4049      WHERE f_int1 = new.f_int1;
4050END|
4051INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4052SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4053WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4054
4055# check trigger-1 success: 	1
4056DROP TRIGGER trg_1;
4057UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4058f_int2 = CAST(f_char1 AS SIGNED INT),
4059f_charbig = 'just inserted'
4060   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4061DELETE FROM t0_aux
4062WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4063INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4064SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4065'just inserted' FROM t0_template
4066WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4067CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4068BEGIN
4069UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4070f_charbig = 'updated by trigger'
4071      WHERE f_int1 = new.f_int1;
4072END|
4073INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4074SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4075WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4076
4077# check trigger-2 success: 	1
4078DROP TRIGGER trg_1;
4079UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4080f_int2 = CAST(f_char1 AS SIGNED INT),
4081f_charbig = 'just inserted'
4082   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4083DELETE FROM t0_aux
4084WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4085INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4086SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4087'just inserted' FROM t0_template
4088WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4089CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4090BEGIN
4091UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4092f_charbig = 'updated by trigger'
4093      WHERE f_int1 = new.f_int1;
4094END|
4095UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4096WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4097
4098# check trigger-3 success: 	1
4099DROP TRIGGER trg_1;
4100UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4101f_int2 = CAST(f_char1 AS SIGNED INT),
4102f_charbig = 'just inserted'
4103   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4104DELETE FROM t0_aux
4105WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4106INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4107SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4108'just inserted' FROM t0_template
4109WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4110CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4111BEGIN
4112UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4113f_charbig = 'updated by trigger'
4114      WHERE f_int1 = - old.f_int1;
4115END|
4116UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4117WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4118
4119# check trigger-4 success: 	1
4120DROP TRIGGER trg_1;
4121UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4122f_int2 = CAST(f_char1 AS SIGNED INT),
4123f_charbig = 'just inserted'
4124   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4125DELETE FROM t0_aux
4126WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4127INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4128SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4129'just inserted' FROM t0_template
4130WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4131CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4132BEGIN
4133UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4134f_charbig = 'updated by trigger'
4135      WHERE f_int1 = new.f_int1;
4136END|
4137UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4138WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4139
4140# check trigger-5 success: 	1
4141DROP TRIGGER trg_1;
4142UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4143f_int2 = CAST(f_char1 AS SIGNED INT),
4144f_charbig = 'just inserted'
4145   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4146DELETE FROM t0_aux
4147WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4148INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4149SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4150'just inserted' FROM t0_template
4151WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4152CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4153BEGIN
4154UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4155f_charbig = 'updated by trigger'
4156      WHERE f_int1 = - old.f_int1;
4157END|
4158UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4159WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4160
4161# check trigger-6 success: 	1
4162DROP TRIGGER trg_1;
4163UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4164f_int2 = CAST(f_char1 AS SIGNED INT),
4165f_charbig = 'just inserted'
4166   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4167DELETE FROM t0_aux
4168WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4169INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4170SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4171'just inserted' FROM t0_template
4172WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4173CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4174BEGIN
4175UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4176f_charbig = 'updated by trigger'
4177      WHERE f_int1 = - old.f_int1;
4178END|
4179DELETE FROM t0_aux
4180WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4181
4182# check trigger-7 success: 	1
4183DROP TRIGGER trg_1;
4184UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4185f_int2 = CAST(f_char1 AS SIGNED INT),
4186f_charbig = 'just inserted'
4187   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4188DELETE FROM t0_aux
4189WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4190INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4191SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4192'just inserted' FROM t0_template
4193WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4194CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4195BEGIN
4196UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4197f_charbig = 'updated by trigger'
4198      WHERE f_int1 = - old.f_int1;
4199END|
4200DELETE FROM t0_aux
4201WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4202
4203# check trigger-8 success: 	1
4204DROP TRIGGER trg_1;
4205UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4206f_int2 = CAST(f_char1 AS SIGNED INT),
4207f_charbig = 'just inserted'
4208   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4209DELETE FROM t0_aux
4210WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4211DELETE FROM t1
4212WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4213CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4214BEGIN
4215SET new.f_int1 = old.f_int1 + @max_row,
4216new.f_int2 = old.f_int2 - @max_row,
4217new.f_charbig = '####updated per update trigger####';
4218END|
4219UPDATE t1
4220SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4221f_charbig = '####updated per update statement itself####';
4222
4223# check trigger-9 success: 	1
4224DROP TRIGGER trg_2;
4225UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4226f_int2 = CAST(f_char1 AS SIGNED INT),
4227f_charbig = CONCAT('===',f_char1,'===');
4228CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4229BEGIN
4230SET new.f_int1 = new.f_int1 + @max_row,
4231new.f_int2 = new.f_int2 - @max_row,
4232new.f_charbig = '####updated per update trigger####';
4233END|
4234UPDATE t1
4235SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4236f_charbig = '####updated per update statement itself####';
4237
4238# check trigger-10 success: 	1
4239DROP TRIGGER trg_2;
4240UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4241f_int2 = CAST(f_char1 AS SIGNED INT),
4242f_charbig = CONCAT('===',f_char1,'===');
4243CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4244BEGIN
4245SET new.f_int1 = @my_max1 + @counter,
4246new.f_int2 = @my_min2 - @counter,
4247new.f_charbig = '####updated per insert trigger####';
4248SET @counter = @counter + 1;
4249END|
4250SET @counter = 1;
4251SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4252INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4253SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4254CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4255WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4256ORDER BY f_int1;
4257DROP TRIGGER trg_3;
4258
4259# check trigger-11 success: 	1
4260DELETE FROM t1
4261WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4262AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4263AND f_charbig = '####updated per insert trigger####';
4264CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4265BEGIN
4266SET new.f_int1 = @my_max1 + @counter,
4267new.f_int2 = @my_min2 - @counter,
4268new.f_charbig = '####updated per insert trigger####';
4269SET @counter = @counter + 1;
4270END|
4271SET @counter = 1;
4272SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4273INSERT INTO t1 (f_char1, f_char2, f_charbig)
4274SELECT CAST(f_int1 AS CHAR),
4275CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4276WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4277ORDER BY f_int1;
4278DROP TRIGGER trg_3;
4279
4280# check trigger-12 success: 	1
4281DELETE FROM t1
4282WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4283AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4284AND f_charbig = '####updated per insert trigger####';
4285ANALYZE  TABLE t1;
4286Table	Op	Msg_type	Msg_text
4287test.t1	analyze	status	OK
4288CHECK    TABLE t1 EXTENDED;
4289Table	Op	Msg_type	Msg_text
4290test.t1	check	status	OK
4291CHECKSUM TABLE t1 EXTENDED;
4292Table	Checksum
4293test.t1	<some_value>
4294OPTIMIZE TABLE t1;
4295Table	Op	Msg_type	Msg_text
4296test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4297test.t1	optimize	status	OK
4298# check layout success:    1
4299REPAIR   TABLE t1 EXTENDED;
4300Table	Op	Msg_type	Msg_text
4301test.t1	repair	status	OK
4302# check layout success:    1
4303TRUNCATE t1;
4304
4305# check TRUNCATE success: 	1
4306# check layout success:    1
4307# End usability test (inc/partition_check.inc)
4308DROP TABLE t1;
4309CREATE TABLE t1 (
4310f_int1 INTEGER,
4311f_int2 INTEGER,
4312f_char1 CHAR(20),
4313f_char2 CHAR(20),
4314f_charbig VARCHAR(1000)
4315, PRIMARY KEY (f_int1,f_int2)
4316)
4317PARTITION BY KEY(f_int1) PARTITIONS 5;
4318INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4319SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4320WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4321ALTER TABLE t1 MODIFY f_int2 BIGINT;
4322INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4323SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4324WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4325# Start usability test (inc/partition_check.inc)
4326create_command
4327SHOW CREATE TABLE t1;
4328Table	Create Table
4329t1	CREATE TABLE `t1` (
4330  `f_int1` int(11) NOT NULL,
4331  `f_int2` bigint(20) NOT NULL,
4332  `f_char1` char(20) DEFAULT NULL,
4333  `f_char2` char(20) DEFAULT NULL,
4334  `f_charbig` varchar(1000) DEFAULT NULL,
4335  PRIMARY KEY (`f_int1`,`f_int2`)
4336) ENGINE=TokuDB DEFAULT CHARSET=latin1
4337/*!50100 PARTITION BY KEY (f_int1)
4338PARTITIONS 5 */
4339
4340# check prerequisites-1 success:    1
4341# check COUNT(*) success:    1
4342# check MIN/MAX(f_int1) success:    1
4343# check MIN/MAX(f_int2) success:    1
4344INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4345SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4346CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4347WHERE f_int1 IN (2,3);
4348ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4349# check prerequisites-3 success:    1
4350# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4351INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4352SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4353CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4354WHERE f_int1 IN (2,3);
4355DELETE FROM t1 WHERE f_charbig = 'delete me';
4356INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4357SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4358CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4359WHERE f_int1 IN (2,3);
4360DELETE FROM t1 WHERE f_charbig = 'delete me';
4361# check read via f_int1 success: 1
4362# check read via f_int2 success: 1
4363
4364# check multiple-1 success: 	1
4365DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4366
4367# check multiple-2 success: 	1
4368INSERT INTO t1 SELECT * FROM t0_template
4369WHERE MOD(f_int1,3) = 0;
4370
4371# check multiple-3 success: 	1
4372UPDATE t1 SET f_int1 = f_int1 + @max_row
4373WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4374AND @max_row_div2 + @max_row_div4;
4375
4376# check multiple-4 success: 	1
4377DELETE FROM t1
4378WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4379AND @max_row_div2 + @max_row_div4 + @max_row;
4380
4381# check multiple-5 success: 	1
4382SELECT COUNT(*) INTO @try_count FROM t0_template
4383WHERE MOD(f_int1,3) = 0
4384AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4385SELECT COUNT(*) INTO @clash_count
4386FROM t1 INNER JOIN t0_template USING(f_int1)
4387WHERE MOD(f_int1,3) = 0
4388AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4389SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4390INSERT INTO t1
4391SET f_int1 = @cur_value , f_int2 = @cur_value,
4392f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4393f_charbig = '#SINGLE#';
4394
4395# check single-1 success: 	1
4396SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4397INSERT INTO t1
4398SET f_int1 = @cur_value , f_int2 = @cur_value,
4399f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4400f_charbig = '#SINGLE#';
4401
4402# check single-2 success: 	1
4403SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4404SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4405UPDATE t1 SET f_int1 = @cur_value2
4406WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4407
4408# check single-3 success: 	1
4409SET @cur_value1= -1;
4410SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4411UPDATE t1 SET f_int1 = @cur_value1
4412WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4413
4414# check single-4 success: 	1
4415SELECT MAX(f_int1) INTO @cur_value FROM t1;
4416DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4417
4418# check single-5 success: 	1
4419DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4420
4421# check single-6 success: 	1
4422INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4423
4424# check single-7 success: 	1
4425DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4426DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4427INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4428f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4429f_charbig = '#NULL#';
4430INSERT INTO t1
4431SET f_int1 = NULL , f_int2 = -@max_row,
4432f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4433f_charbig = '#NULL#';
4434ERROR 23000: Column 'f_int1' cannot be null
4435# check null success:    1
4436DELETE FROM t1
4437WHERE f_int1 = 0 AND f_int2 = 0
4438AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4439AND f_charbig = '#NULL#';
4440INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4441SELECT f_int1, f_int1, '', '', 'was inserted'
4442   FROM t0_template source_tab
4443WHERE MOD(f_int1,3) = 0
4444AND f_int1 BETWEEN @max_row_div2 AND @max_row
4445ON DUPLICATE KEY
4446UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4447f_int2 = 2 * @max_row + source_tab.f_int1,
4448f_charbig = 'was updated';
4449
4450# check unique-1-a success: 	1
4451
4452# check unique-1-b success: 	1
4453DELETE FROM t1 WHERE f_charbig = 'was inserted';
4454UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4455f_int2 = CAST(f_char1 AS SIGNED INT),
4456f_charbig = CONCAT('===',f_char1,'===')
4457WHERE f_charbig = 'was updated';
4458REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4459SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4460   FROM t0_template source_tab
4461WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4462
4463# check replace success: 	1
4464DELETE FROM t1
4465WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4466DELETE FROM t1
4467WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4468f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4469UPDATE t1 SET f_int2 = f_int1,
4470f_char1 = CAST(f_int1 AS CHAR),
4471f_char2 = CAST(f_int1 AS CHAR),
4472f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4473WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4474SET AUTOCOMMIT= 0;
4475INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4476SELECT f_int1, f_int1, '', '', 'was inserted'
4477FROM t0_template source_tab
4478WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4479
4480# check transactions-1 success: 	1
4481COMMIT WORK;
4482
4483# check transactions-2 success: 	1
4484ROLLBACK WORK;
4485
4486# check transactions-3 success: 	1
4487DELETE FROM t1 WHERE f_charbig = 'was inserted';
4488COMMIT WORK;
4489ROLLBACK WORK;
4490
4491# check transactions-4 success: 	1
4492INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4493SELECT f_int1, f_int1, '', '', 'was inserted'
4494FROM t0_template source_tab
4495WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4496
4497# check transactions-5 success: 	1
4498ROLLBACK WORK;
4499
4500# check transactions-6 success: 	1
4501# INFO: Storage engine used for t1 seems to be transactional.
4502COMMIT;
4503
4504# check transactions-7 success: 	1
4505DELETE FROM t1 WHERE f_charbig = 'was inserted';
4506COMMIT WORK;
4507SET @@session.sql_mode = 'traditional';
4508Warnings:
4509Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4510SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4511INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4512SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4513'', '', 'was inserted' FROM t0_template
4514WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4515ERROR 22012: Division by 0
4516COMMIT;
4517
4518# check transactions-8 success: 	1
4519# INFO: Storage engine used for t1 seems to be able to revert
4520#       changes made by the failing statement.
4521SET @@session.sql_mode = '';
4522Warnings:
4523Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4524SET AUTOCOMMIT= 1;
4525DELETE FROM t1 WHERE f_charbig = 'was inserted';
4526COMMIT WORK;
4527UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4528
4529# check special-1 success: 	1
4530UPDATE t1 SET f_charbig = '';
4531
4532# check special-2 success: 	1
4533UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4534INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4535SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4536WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4537INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4538SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4539'just inserted' FROM t0_template
4540WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4541CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4542BEGIN
4543UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4544f_charbig = 'updated by trigger'
4545      WHERE f_int1 = new.f_int1;
4546END|
4547INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4548SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4549WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4550
4551# check trigger-1 success: 	1
4552DROP TRIGGER trg_1;
4553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4554f_int2 = CAST(f_char1 AS SIGNED INT),
4555f_charbig = 'just inserted'
4556   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4557DELETE FROM t0_aux
4558WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4559INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4560SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4561'just inserted' FROM t0_template
4562WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4563CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4564BEGIN
4565UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4566f_charbig = 'updated by trigger'
4567      WHERE f_int1 = new.f_int1;
4568END|
4569INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4570SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4571WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4572
4573# check trigger-2 success: 	1
4574DROP TRIGGER trg_1;
4575UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4576f_int2 = CAST(f_char1 AS SIGNED INT),
4577f_charbig = 'just inserted'
4578   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4579DELETE FROM t0_aux
4580WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4581INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4582SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4583'just inserted' FROM t0_template
4584WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4585CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4586BEGIN
4587UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4588f_charbig = 'updated by trigger'
4589      WHERE f_int1 = new.f_int1;
4590END|
4591UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4592WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4593
4594# check trigger-3 success: 	1
4595DROP TRIGGER trg_1;
4596UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4597f_int2 = CAST(f_char1 AS SIGNED INT),
4598f_charbig = 'just inserted'
4599   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4600DELETE FROM t0_aux
4601WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4602INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4603SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4604'just inserted' FROM t0_template
4605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4606CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4607BEGIN
4608UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4609f_charbig = 'updated by trigger'
4610      WHERE f_int1 = - old.f_int1;
4611END|
4612UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4613WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4614
4615# check trigger-4 success: 	1
4616DROP TRIGGER trg_1;
4617UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4618f_int2 = CAST(f_char1 AS SIGNED INT),
4619f_charbig = 'just inserted'
4620   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4621DELETE FROM t0_aux
4622WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4623INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4624SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4625'just inserted' FROM t0_template
4626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4627CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4628BEGIN
4629UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4630f_charbig = 'updated by trigger'
4631      WHERE f_int1 = new.f_int1;
4632END|
4633UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4634WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4635
4636# check trigger-5 success: 	1
4637DROP TRIGGER trg_1;
4638UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4639f_int2 = CAST(f_char1 AS SIGNED INT),
4640f_charbig = 'just inserted'
4641   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4642DELETE FROM t0_aux
4643WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4644INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4645SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4646'just inserted' FROM t0_template
4647WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4648CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4649BEGIN
4650UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4651f_charbig = 'updated by trigger'
4652      WHERE f_int1 = - old.f_int1;
4653END|
4654UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4655WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4656
4657# check trigger-6 success: 	1
4658DROP TRIGGER trg_1;
4659UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4660f_int2 = CAST(f_char1 AS SIGNED INT),
4661f_charbig = 'just inserted'
4662   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4663DELETE FROM t0_aux
4664WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4665INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4666SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4667'just inserted' FROM t0_template
4668WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4669CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4670BEGIN
4671UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4672f_charbig = 'updated by trigger'
4673      WHERE f_int1 = - old.f_int1;
4674END|
4675DELETE FROM t0_aux
4676WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4677
4678# check trigger-7 success: 	1
4679DROP TRIGGER trg_1;
4680UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4681f_int2 = CAST(f_char1 AS SIGNED INT),
4682f_charbig = 'just inserted'
4683   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4684DELETE FROM t0_aux
4685WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4686INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4687SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4688'just inserted' FROM t0_template
4689WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4690CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4691BEGIN
4692UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4693f_charbig = 'updated by trigger'
4694      WHERE f_int1 = - old.f_int1;
4695END|
4696DELETE FROM t0_aux
4697WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4698
4699# check trigger-8 success: 	1
4700DROP TRIGGER trg_1;
4701UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4702f_int2 = CAST(f_char1 AS SIGNED INT),
4703f_charbig = 'just inserted'
4704   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4705DELETE FROM t0_aux
4706WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4707DELETE FROM t1
4708WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4709CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4710BEGIN
4711SET new.f_int1 = old.f_int1 + @max_row,
4712new.f_int2 = old.f_int2 - @max_row,
4713new.f_charbig = '####updated per update trigger####';
4714END|
4715UPDATE t1
4716SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4717f_charbig = '####updated per update statement itself####';
4718
4719# check trigger-9 success: 	1
4720DROP TRIGGER trg_2;
4721UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4722f_int2 = CAST(f_char1 AS SIGNED INT),
4723f_charbig = CONCAT('===',f_char1,'===');
4724CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4725BEGIN
4726SET new.f_int1 = new.f_int1 + @max_row,
4727new.f_int2 = new.f_int2 - @max_row,
4728new.f_charbig = '####updated per update trigger####';
4729END|
4730UPDATE t1
4731SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4732f_charbig = '####updated per update statement itself####';
4733
4734# check trigger-10 success: 	1
4735DROP TRIGGER trg_2;
4736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4737f_int2 = CAST(f_char1 AS SIGNED INT),
4738f_charbig = CONCAT('===',f_char1,'===');
4739CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4740BEGIN
4741SET new.f_int1 = @my_max1 + @counter,
4742new.f_int2 = @my_min2 - @counter,
4743new.f_charbig = '####updated per insert trigger####';
4744SET @counter = @counter + 1;
4745END|
4746SET @counter = 1;
4747SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4748INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4749SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4750CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4752ORDER BY f_int1;
4753DROP TRIGGER trg_3;
4754
4755# check trigger-11 success: 	1
4756DELETE FROM t1
4757WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4758AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4759AND f_charbig = '####updated per insert trigger####';
4760CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4761BEGIN
4762SET new.f_int1 = @my_max1 + @counter,
4763new.f_int2 = @my_min2 - @counter,
4764new.f_charbig = '####updated per insert trigger####';
4765SET @counter = @counter + 1;
4766END|
4767SET @counter = 1;
4768SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4769INSERT INTO t1 (f_char1, f_char2, f_charbig)
4770SELECT CAST(f_int1 AS CHAR),
4771CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4773ORDER BY f_int1;
4774DROP TRIGGER trg_3;
4775
4776# check trigger-12 success: 	1
4777DELETE FROM t1
4778WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4779AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4780AND f_charbig = '####updated per insert trigger####';
4781ANALYZE  TABLE t1;
4782Table	Op	Msg_type	Msg_text
4783test.t1	analyze	status	OK
4784CHECK    TABLE t1 EXTENDED;
4785Table	Op	Msg_type	Msg_text
4786test.t1	check	status	OK
4787CHECKSUM TABLE t1 EXTENDED;
4788Table	Checksum
4789test.t1	<some_value>
4790OPTIMIZE TABLE t1;
4791Table	Op	Msg_type	Msg_text
4792test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4793test.t1	optimize	status	OK
4794# check layout success:    1
4795REPAIR   TABLE t1 EXTENDED;
4796Table	Op	Msg_type	Msg_text
4797test.t1	repair	status	OK
4798# check layout success:    1
4799TRUNCATE t1;
4800
4801# check TRUNCATE success: 	1
4802# check layout success:    1
4803# End usability test (inc/partition_check.inc)
4804DROP TABLE t1;
4805CREATE TABLE t1 (
4806f_int1 INTEGER,
4807f_int2 INTEGER,
4808f_char1 CHAR(20),
4809f_char2 CHAR(20),
4810f_charbig VARCHAR(1000)
4811, PRIMARY KEY (f_int1,f_int2)
4812)
4813PARTITION BY LIST(MOD(f_int1,4))
4814(PARTITION part_3 VALUES IN (-3),
4815PARTITION part_2 VALUES IN (-2),
4816PARTITION part_1 VALUES IN (-1),
4817PARTITION part_N VALUES IN (NULL),
4818PARTITION part0 VALUES IN (0),
4819PARTITION part1 VALUES IN (1),
4820PARTITION part2 VALUES IN (2),
4821PARTITION part3 VALUES IN (3));
4822INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4823SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4824WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4825ALTER TABLE t1 MODIFY f_int2 BIGINT;
4826INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4827SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4828WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4829# Start usability test (inc/partition_check.inc)
4830create_command
4831SHOW CREATE TABLE t1;
4832Table	Create Table
4833t1	CREATE TABLE `t1` (
4834  `f_int1` int(11) NOT NULL,
4835  `f_int2` bigint(20) NOT NULL,
4836  `f_char1` char(20) DEFAULT NULL,
4837  `f_char2` char(20) DEFAULT NULL,
4838  `f_charbig` varchar(1000) DEFAULT NULL,
4839  PRIMARY KEY (`f_int1`,`f_int2`)
4840) ENGINE=TokuDB DEFAULT CHARSET=latin1
4841/*!50100 PARTITION BY LIST (MOD(f_int1,4))
4842(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB,
4843 PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB,
4844 PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB,
4845 PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB,
4846 PARTITION part0 VALUES IN (0) ENGINE = TokuDB,
4847 PARTITION part1 VALUES IN (1) ENGINE = TokuDB,
4848 PARTITION part2 VALUES IN (2) ENGINE = TokuDB,
4849 PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */
4850
4851# check prerequisites-1 success:    1
4852# check COUNT(*) success:    1
4853# check MIN/MAX(f_int1) success:    1
4854# check MIN/MAX(f_int2) success:    1
4855INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4856SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4857CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4858WHERE f_int1 IN (2,3);
4859ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4860# check prerequisites-3 success:    1
4861# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4862INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4863SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4864CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4865WHERE f_int1 IN (2,3);
4866DELETE FROM t1 WHERE f_charbig = 'delete me';
4867INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4868SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4869CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4870WHERE f_int1 IN (2,3);
4871DELETE FROM t1 WHERE f_charbig = 'delete me';
4872# check read via f_int1 success: 1
4873# check read via f_int2 success: 1
4874
4875# check multiple-1 success: 	1
4876DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4877
4878# check multiple-2 success: 	1
4879INSERT INTO t1 SELECT * FROM t0_template
4880WHERE MOD(f_int1,3) = 0;
4881
4882# check multiple-3 success: 	1
4883UPDATE t1 SET f_int1 = f_int1 + @max_row
4884WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4885AND @max_row_div2 + @max_row_div4;
4886
4887# check multiple-4 success: 	1
4888DELETE FROM t1
4889WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4890AND @max_row_div2 + @max_row_div4 + @max_row;
4891
4892# check multiple-5 success: 	1
4893SELECT COUNT(*) INTO @try_count FROM t0_template
4894WHERE MOD(f_int1,3) = 0
4895AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4896SELECT COUNT(*) INTO @clash_count
4897FROM t1 INNER JOIN t0_template USING(f_int1)
4898WHERE MOD(f_int1,3) = 0
4899AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4900SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4901INSERT INTO t1
4902SET f_int1 = @cur_value , f_int2 = @cur_value,
4903f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4904f_charbig = '#SINGLE#';
4905
4906# check single-1 success: 	1
4907SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4908INSERT INTO t1
4909SET f_int1 = @cur_value , f_int2 = @cur_value,
4910f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4911f_charbig = '#SINGLE#';
4912
4913# check single-2 success: 	1
4914SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4915SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4916UPDATE t1 SET f_int1 = @cur_value2
4917WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4918
4919# check single-3 success: 	1
4920SET @cur_value1= -1;
4921SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4922UPDATE t1 SET f_int1 = @cur_value1
4923WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4924
4925# check single-4 success: 	1
4926SELECT MAX(f_int1) INTO @cur_value FROM t1;
4927DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4928
4929# check single-5 success: 	1
4930DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4931
4932# check single-6 success: 	1
4933INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4934
4935# check single-7 success: 	1
4936DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4937DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4938INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4939f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4940f_charbig = '#NULL#';
4941INSERT INTO t1
4942SET f_int1 = NULL , f_int2 = -@max_row,
4943f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4944f_charbig = '#NULL#';
4945ERROR 23000: Column 'f_int1' cannot be null
4946# check null success:    1
4947DELETE FROM t1
4948WHERE f_int1 = 0 AND f_int2 = 0
4949AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4950AND f_charbig = '#NULL#';
4951INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4952SELECT f_int1, f_int1, '', '', 'was inserted'
4953   FROM t0_template source_tab
4954WHERE MOD(f_int1,3) = 0
4955AND f_int1 BETWEEN @max_row_div2 AND @max_row
4956ON DUPLICATE KEY
4957UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4958f_int2 = 2 * @max_row + source_tab.f_int1,
4959f_charbig = 'was updated';
4960
4961# check unique-1-a success: 	1
4962
4963# check unique-1-b success: 	1
4964DELETE FROM t1 WHERE f_charbig = 'was inserted';
4965UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4966f_int2 = CAST(f_char1 AS SIGNED INT),
4967f_charbig = CONCAT('===',f_char1,'===')
4968WHERE f_charbig = 'was updated';
4969REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4970SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4971   FROM t0_template source_tab
4972WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4973
4974# check replace success: 	1
4975DELETE FROM t1
4976WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4977DELETE FROM t1
4978WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4979f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4980UPDATE t1 SET f_int2 = f_int1,
4981f_char1 = CAST(f_int1 AS CHAR),
4982f_char2 = CAST(f_int1 AS CHAR),
4983f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4984WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4985SET AUTOCOMMIT= 0;
4986INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4987SELECT f_int1, f_int1, '', '', 'was inserted'
4988FROM t0_template source_tab
4989WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4990
4991# check transactions-1 success: 	1
4992COMMIT WORK;
4993
4994# check transactions-2 success: 	1
4995ROLLBACK WORK;
4996
4997# check transactions-3 success: 	1
4998DELETE FROM t1 WHERE f_charbig = 'was inserted';
4999COMMIT WORK;
5000ROLLBACK WORK;
5001
5002# check transactions-4 success: 	1
5003INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5004SELECT f_int1, f_int1, '', '', 'was inserted'
5005FROM t0_template source_tab
5006WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5007
5008# check transactions-5 success: 	1
5009ROLLBACK WORK;
5010
5011# check transactions-6 success: 	1
5012# INFO: Storage engine used for t1 seems to be transactional.
5013COMMIT;
5014
5015# check transactions-7 success: 	1
5016DELETE FROM t1 WHERE f_charbig = 'was inserted';
5017COMMIT WORK;
5018SET @@session.sql_mode = 'traditional';
5019Warnings:
5020Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5021SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5022INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5023SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5024'', '', 'was inserted' FROM t0_template
5025WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5026ERROR 22012: Division by 0
5027COMMIT;
5028
5029# check transactions-8 success: 	1
5030# INFO: Storage engine used for t1 seems to be able to revert
5031#       changes made by the failing statement.
5032SET @@session.sql_mode = '';
5033Warnings:
5034Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5035SET AUTOCOMMIT= 1;
5036DELETE FROM t1 WHERE f_charbig = 'was inserted';
5037COMMIT WORK;
5038UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5039
5040# check special-1 success: 	1
5041UPDATE t1 SET f_charbig = '';
5042
5043# check special-2 success: 	1
5044UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5045INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5046SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5047WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5048INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5049SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5050'just inserted' FROM t0_template
5051WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5052CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5053BEGIN
5054UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5055f_charbig = 'updated by trigger'
5056      WHERE f_int1 = new.f_int1;
5057END|
5058INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5059SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5060WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5061
5062# check trigger-1 success: 	1
5063DROP TRIGGER trg_1;
5064UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5065f_int2 = CAST(f_char1 AS SIGNED INT),
5066f_charbig = 'just inserted'
5067   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5068DELETE FROM t0_aux
5069WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5070INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5071SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5072'just inserted' FROM t0_template
5073WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5074CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5075BEGIN
5076UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5077f_charbig = 'updated by trigger'
5078      WHERE f_int1 = new.f_int1;
5079END|
5080INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5081SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5082WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5083
5084# check trigger-2 success: 	1
5085DROP TRIGGER trg_1;
5086UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5087f_int2 = CAST(f_char1 AS SIGNED INT),
5088f_charbig = 'just inserted'
5089   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5090DELETE FROM t0_aux
5091WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5092INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5093SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5094'just inserted' FROM t0_template
5095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5096CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5097BEGIN
5098UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5099f_charbig = 'updated by trigger'
5100      WHERE f_int1 = new.f_int1;
5101END|
5102UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5103WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5104
5105# check trigger-3 success: 	1
5106DROP TRIGGER trg_1;
5107UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5108f_int2 = CAST(f_char1 AS SIGNED INT),
5109f_charbig = 'just inserted'
5110   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5111DELETE FROM t0_aux
5112WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5114SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5115'just inserted' FROM t0_template
5116WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5117CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5118BEGIN
5119UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5120f_charbig = 'updated by trigger'
5121      WHERE f_int1 = - old.f_int1;
5122END|
5123UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5124WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5125
5126# check trigger-4 success: 	1
5127DROP TRIGGER trg_1;
5128UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5129f_int2 = CAST(f_char1 AS SIGNED INT),
5130f_charbig = 'just inserted'
5131   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5132DELETE FROM t0_aux
5133WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5134INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5135SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5136'just inserted' FROM t0_template
5137WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5138CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5139BEGIN
5140UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5141f_charbig = 'updated by trigger'
5142      WHERE f_int1 = new.f_int1;
5143END|
5144UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5145WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5146
5147# check trigger-5 success: 	1
5148DROP TRIGGER trg_1;
5149UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5150f_int2 = CAST(f_char1 AS SIGNED INT),
5151f_charbig = 'just inserted'
5152   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5153DELETE FROM t0_aux
5154WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5155INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5156SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5157'just inserted' FROM t0_template
5158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5159CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5160BEGIN
5161UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5162f_charbig = 'updated by trigger'
5163      WHERE f_int1 = - old.f_int1;
5164END|
5165UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5166WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5167
5168# check trigger-6 success: 	1
5169DROP TRIGGER trg_1;
5170UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5171f_int2 = CAST(f_char1 AS SIGNED INT),
5172f_charbig = 'just inserted'
5173   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5174DELETE FROM t0_aux
5175WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5177SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5178'just inserted' FROM t0_template
5179WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5180CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5181BEGIN
5182UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5183f_charbig = 'updated by trigger'
5184      WHERE f_int1 = - old.f_int1;
5185END|
5186DELETE FROM t0_aux
5187WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5188
5189# check trigger-7 success: 	1
5190DROP TRIGGER trg_1;
5191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5192f_int2 = CAST(f_char1 AS SIGNED INT),
5193f_charbig = 'just inserted'
5194   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5195DELETE FROM t0_aux
5196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5197INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5198SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5199'just inserted' FROM t0_template
5200WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5201CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5202BEGIN
5203UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5204f_charbig = 'updated by trigger'
5205      WHERE f_int1 = - old.f_int1;
5206END|
5207DELETE FROM t0_aux
5208WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5209
5210# check trigger-8 success: 	1
5211DROP TRIGGER trg_1;
5212UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5213f_int2 = CAST(f_char1 AS SIGNED INT),
5214f_charbig = 'just inserted'
5215   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5216DELETE FROM t0_aux
5217WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5218DELETE FROM t1
5219WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5220CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5221BEGIN
5222SET new.f_int1 = old.f_int1 + @max_row,
5223new.f_int2 = old.f_int2 - @max_row,
5224new.f_charbig = '####updated per update trigger####';
5225END|
5226UPDATE t1
5227SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5228f_charbig = '####updated per update statement itself####';
5229
5230# check trigger-9 success: 	1
5231DROP TRIGGER trg_2;
5232UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5233f_int2 = CAST(f_char1 AS SIGNED INT),
5234f_charbig = CONCAT('===',f_char1,'===');
5235CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5236BEGIN
5237SET new.f_int1 = new.f_int1 + @max_row,
5238new.f_int2 = new.f_int2 - @max_row,
5239new.f_charbig = '####updated per update trigger####';
5240END|
5241UPDATE t1
5242SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5243f_charbig = '####updated per update statement itself####';
5244
5245# check trigger-10 success: 	1
5246DROP TRIGGER trg_2;
5247UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5248f_int2 = CAST(f_char1 AS SIGNED INT),
5249f_charbig = CONCAT('===',f_char1,'===');
5250CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5251BEGIN
5252SET new.f_int1 = @my_max1 + @counter,
5253new.f_int2 = @my_min2 - @counter,
5254new.f_charbig = '####updated per insert trigger####';
5255SET @counter = @counter + 1;
5256END|
5257SET @counter = 1;
5258SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5259INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5260SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5261CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5262WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5263ORDER BY f_int1;
5264DROP TRIGGER trg_3;
5265
5266# check trigger-11 success: 	1
5267DELETE FROM t1
5268WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5269AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5270AND f_charbig = '####updated per insert trigger####';
5271CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5272BEGIN
5273SET new.f_int1 = @my_max1 + @counter,
5274new.f_int2 = @my_min2 - @counter,
5275new.f_charbig = '####updated per insert trigger####';
5276SET @counter = @counter + 1;
5277END|
5278SET @counter = 1;
5279SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5280INSERT INTO t1 (f_char1, f_char2, f_charbig)
5281SELECT CAST(f_int1 AS CHAR),
5282CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5283WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5284ORDER BY f_int1;
5285DROP TRIGGER trg_3;
5286
5287# check trigger-12 success: 	1
5288DELETE FROM t1
5289WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5290AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5291AND f_charbig = '####updated per insert trigger####';
5292ANALYZE  TABLE t1;
5293Table	Op	Msg_type	Msg_text
5294test.t1	analyze	status	OK
5295CHECK    TABLE t1 EXTENDED;
5296Table	Op	Msg_type	Msg_text
5297test.t1	check	status	OK
5298CHECKSUM TABLE t1 EXTENDED;
5299Table	Checksum
5300test.t1	<some_value>
5301OPTIMIZE TABLE t1;
5302Table	Op	Msg_type	Msg_text
5303test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5304test.t1	optimize	status	OK
5305# check layout success:    1
5306REPAIR   TABLE t1 EXTENDED;
5307Table	Op	Msg_type	Msg_text
5308test.t1	repair	status	OK
5309# check layout success:    1
5310TRUNCATE t1;
5311
5312# check TRUNCATE success: 	1
5313# check layout success:    1
5314# End usability test (inc/partition_check.inc)
5315DROP TABLE t1;
5316CREATE TABLE t1 (
5317f_int1 INTEGER,
5318f_int2 INTEGER,
5319f_char1 CHAR(20),
5320f_char2 CHAR(20),
5321f_charbig VARCHAR(1000)
5322, PRIMARY KEY (f_int1,f_int2)
5323)
5324PARTITION BY RANGE(f_int1)
5325(PARTITION parta VALUES LESS THAN (0),
5326PARTITION partb VALUES LESS THAN (5),
5327PARTITION partc VALUES LESS THAN (10),
5328PARTITION partd VALUES LESS THAN (10 + 5),
5329PARTITION parte VALUES LESS THAN (20),
5330PARTITION partf VALUES LESS THAN (2147483646));
5331INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5332SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5333WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5334ALTER TABLE t1 MODIFY f_int2 BIGINT;
5335INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5336SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5337WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5338# Start usability test (inc/partition_check.inc)
5339create_command
5340SHOW CREATE TABLE t1;
5341Table	Create Table
5342t1	CREATE TABLE `t1` (
5343  `f_int1` int(11) NOT NULL,
5344  `f_int2` bigint(20) NOT NULL,
5345  `f_char1` char(20) DEFAULT NULL,
5346  `f_char2` char(20) DEFAULT NULL,
5347  `f_charbig` varchar(1000) DEFAULT NULL,
5348  PRIMARY KEY (`f_int1`,`f_int2`)
5349) ENGINE=TokuDB DEFAULT CHARSET=latin1
5350/*!50100 PARTITION BY RANGE (f_int1)
5351(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
5352 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
5353 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
5354 PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB,
5355 PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB,
5356 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
5357
5358# check prerequisites-1 success:    1
5359# check COUNT(*) success:    1
5360# check MIN/MAX(f_int1) success:    1
5361# check MIN/MAX(f_int2) success:    1
5362INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5363SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5364CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5365WHERE f_int1 IN (2,3);
5366ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5367# check prerequisites-3 success:    1
5368# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5369INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5370SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5371CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5372WHERE f_int1 IN (2,3);
5373DELETE FROM t1 WHERE f_charbig = 'delete me';
5374INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5375SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5376CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5377WHERE f_int1 IN (2,3);
5378DELETE FROM t1 WHERE f_charbig = 'delete me';
5379# check read via f_int1 success: 1
5380# check read via f_int2 success: 1
5381
5382# check multiple-1 success: 	1
5383DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5384
5385# check multiple-2 success: 	1
5386INSERT INTO t1 SELECT * FROM t0_template
5387WHERE MOD(f_int1,3) = 0;
5388
5389# check multiple-3 success: 	1
5390UPDATE t1 SET f_int1 = f_int1 + @max_row
5391WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5392AND @max_row_div2 + @max_row_div4;
5393
5394# check multiple-4 success: 	1
5395DELETE FROM t1
5396WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5397AND @max_row_div2 + @max_row_div4 + @max_row;
5398
5399# check multiple-5 success: 	1
5400SELECT COUNT(*) INTO @try_count FROM t0_template
5401WHERE MOD(f_int1,3) = 0
5402AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5403SELECT COUNT(*) INTO @clash_count
5404FROM t1 INNER JOIN t0_template USING(f_int1)
5405WHERE MOD(f_int1,3) = 0
5406AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5407SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5408INSERT INTO t1
5409SET f_int1 = @cur_value , f_int2 = @cur_value,
5410f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5411f_charbig = '#SINGLE#';
5412
5413# check single-1 success: 	1
5414SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5415INSERT INTO t1
5416SET f_int1 = @cur_value , f_int2 = @cur_value,
5417f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5418f_charbig = '#SINGLE#';
5419
5420# check single-2 success: 	1
5421SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5422SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5423UPDATE t1 SET f_int1 = @cur_value2
5424WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5425
5426# check single-3 success: 	1
5427SET @cur_value1= -1;
5428SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5429UPDATE t1 SET f_int1 = @cur_value1
5430WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5431
5432# check single-4 success: 	1
5433SELECT MAX(f_int1) INTO @cur_value FROM t1;
5434DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5435
5436# check single-5 success: 	1
5437DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5438
5439# check single-6 success: 	1
5440INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5441ERROR HY000: Table has no partition for value 2147483647
5442DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5443INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5444f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5445f_charbig = '#NULL#';
5446INSERT INTO t1
5447SET f_int1 = NULL , f_int2 = -@max_row,
5448f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5449f_charbig = '#NULL#';
5450ERROR 23000: Column 'f_int1' cannot be null
5451# check null success:    1
5452DELETE FROM t1
5453WHERE f_int1 = 0 AND f_int2 = 0
5454AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5455AND f_charbig = '#NULL#';
5456INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5457SELECT f_int1, f_int1, '', '', 'was inserted'
5458   FROM t0_template source_tab
5459WHERE MOD(f_int1,3) = 0
5460AND f_int1 BETWEEN @max_row_div2 AND @max_row
5461ON DUPLICATE KEY
5462UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5463f_int2 = 2 * @max_row + source_tab.f_int1,
5464f_charbig = 'was updated';
5465
5466# check unique-1-a success: 	1
5467
5468# check unique-1-b success: 	1
5469DELETE FROM t1 WHERE f_charbig = 'was inserted';
5470UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5471f_int2 = CAST(f_char1 AS SIGNED INT),
5472f_charbig = CONCAT('===',f_char1,'===')
5473WHERE f_charbig = 'was updated';
5474REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5475SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5476   FROM t0_template source_tab
5477WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5478
5479# check replace success: 	1
5480DELETE FROM t1
5481WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5482DELETE FROM t1
5483WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5484f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5485UPDATE t1 SET f_int2 = f_int1,
5486f_char1 = CAST(f_int1 AS CHAR),
5487f_char2 = CAST(f_int1 AS CHAR),
5488f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5489WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5490SET AUTOCOMMIT= 0;
5491INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5492SELECT f_int1, f_int1, '', '', 'was inserted'
5493FROM t0_template source_tab
5494WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5495
5496# check transactions-1 success: 	1
5497COMMIT WORK;
5498
5499# check transactions-2 success: 	1
5500ROLLBACK WORK;
5501
5502# check transactions-3 success: 	1
5503DELETE FROM t1 WHERE f_charbig = 'was inserted';
5504COMMIT WORK;
5505ROLLBACK WORK;
5506
5507# check transactions-4 success: 	1
5508INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5509SELECT f_int1, f_int1, '', '', 'was inserted'
5510FROM t0_template source_tab
5511WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5512
5513# check transactions-5 success: 	1
5514ROLLBACK WORK;
5515
5516# check transactions-6 success: 	1
5517# INFO: Storage engine used for t1 seems to be transactional.
5518COMMIT;
5519
5520# check transactions-7 success: 	1
5521DELETE FROM t1 WHERE f_charbig = 'was inserted';
5522COMMIT WORK;
5523SET @@session.sql_mode = 'traditional';
5524Warnings:
5525Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5526SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5527INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5528SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5529'', '', 'was inserted' FROM t0_template
5530WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5531ERROR 22012: Division by 0
5532COMMIT;
5533
5534# check transactions-8 success: 	1
5535# INFO: Storage engine used for t1 seems to be able to revert
5536#       changes made by the failing statement.
5537SET @@session.sql_mode = '';
5538Warnings:
5539Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5540SET AUTOCOMMIT= 1;
5541DELETE FROM t1 WHERE f_charbig = 'was inserted';
5542COMMIT WORK;
5543UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5544
5545# check special-1 success: 	1
5546UPDATE t1 SET f_charbig = '';
5547
5548# check special-2 success: 	1
5549UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5550INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5551SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5552WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5553INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5554SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5555'just inserted' FROM t0_template
5556WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5557CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5558BEGIN
5559UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5560f_charbig = 'updated by trigger'
5561      WHERE f_int1 = new.f_int1;
5562END|
5563INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5564SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5565WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5566
5567# check trigger-1 success: 	1
5568DROP TRIGGER trg_1;
5569UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5570f_int2 = CAST(f_char1 AS SIGNED INT),
5571f_charbig = 'just inserted'
5572   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5573DELETE FROM t0_aux
5574WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5575INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5576SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5577'just inserted' FROM t0_template
5578WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5579CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5580BEGIN
5581UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5582f_charbig = 'updated by trigger'
5583      WHERE f_int1 = new.f_int1;
5584END|
5585INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5586SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5587WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5588
5589# check trigger-2 success: 	1
5590DROP TRIGGER trg_1;
5591UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5592f_int2 = CAST(f_char1 AS SIGNED INT),
5593f_charbig = 'just inserted'
5594   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5595DELETE FROM t0_aux
5596WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5597INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5598SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5599'just inserted' FROM t0_template
5600WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5601CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5602BEGIN
5603UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5604f_charbig = 'updated by trigger'
5605      WHERE f_int1 = new.f_int1;
5606END|
5607UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5608WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5609
5610# check trigger-3 success: 	1
5611DROP TRIGGER trg_1;
5612UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5613f_int2 = CAST(f_char1 AS SIGNED INT),
5614f_charbig = 'just inserted'
5615   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5616DELETE FROM t0_aux
5617WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5618INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5619SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5620'just inserted' FROM t0_template
5621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5622CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5623BEGIN
5624UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5625f_charbig = 'updated by trigger'
5626      WHERE f_int1 = - old.f_int1;
5627END|
5628UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5629WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5630
5631# check trigger-4 success: 	1
5632DROP TRIGGER trg_1;
5633UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5634f_int2 = CAST(f_char1 AS SIGNED INT),
5635f_charbig = 'just inserted'
5636   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5637DELETE FROM t0_aux
5638WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5639INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5640SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5641'just inserted' FROM t0_template
5642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5643CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5644BEGIN
5645UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5646f_charbig = 'updated by trigger'
5647      WHERE f_int1 = new.f_int1;
5648END|
5649UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5650WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5651
5652# check trigger-5 success: 	1
5653DROP TRIGGER trg_1;
5654UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5655f_int2 = CAST(f_char1 AS SIGNED INT),
5656f_charbig = 'just inserted'
5657   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5658DELETE FROM t0_aux
5659WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5660INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5661SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5662'just inserted' FROM t0_template
5663WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5664CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5665BEGIN
5666UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5667f_charbig = 'updated by trigger'
5668      WHERE f_int1 = - old.f_int1;
5669END|
5670UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5671WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5672
5673# check trigger-6 success: 	1
5674DROP TRIGGER trg_1;
5675UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5676f_int2 = CAST(f_char1 AS SIGNED INT),
5677f_charbig = 'just inserted'
5678   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5679DELETE FROM t0_aux
5680WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5681INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5682SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5683'just inserted' FROM t0_template
5684WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5685CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5686BEGIN
5687UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5688f_charbig = 'updated by trigger'
5689      WHERE f_int1 = - old.f_int1;
5690END|
5691DELETE FROM t0_aux
5692WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5693
5694# check trigger-7 success: 	1
5695DROP TRIGGER trg_1;
5696UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5697f_int2 = CAST(f_char1 AS SIGNED INT),
5698f_charbig = 'just inserted'
5699   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5700DELETE FROM t0_aux
5701WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5702INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5703SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5704'just inserted' FROM t0_template
5705WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5706CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5707BEGIN
5708UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5709f_charbig = 'updated by trigger'
5710      WHERE f_int1 = - old.f_int1;
5711END|
5712DELETE FROM t0_aux
5713WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5714
5715# check trigger-8 success: 	1
5716DROP TRIGGER trg_1;
5717UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5718f_int2 = CAST(f_char1 AS SIGNED INT),
5719f_charbig = 'just inserted'
5720   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5721DELETE FROM t0_aux
5722WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5723DELETE FROM t1
5724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5725CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5726BEGIN
5727SET new.f_int1 = old.f_int1 + @max_row,
5728new.f_int2 = old.f_int2 - @max_row,
5729new.f_charbig = '####updated per update trigger####';
5730END|
5731UPDATE t1
5732SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5733f_charbig = '####updated per update statement itself####';
5734
5735# check trigger-9 success: 	1
5736DROP TRIGGER trg_2;
5737UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5738f_int2 = CAST(f_char1 AS SIGNED INT),
5739f_charbig = CONCAT('===',f_char1,'===');
5740CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5741BEGIN
5742SET new.f_int1 = new.f_int1 + @max_row,
5743new.f_int2 = new.f_int2 - @max_row,
5744new.f_charbig = '####updated per update trigger####';
5745END|
5746UPDATE t1
5747SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5748f_charbig = '####updated per update statement itself####';
5749
5750# check trigger-10 success: 	1
5751DROP TRIGGER trg_2;
5752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5753f_int2 = CAST(f_char1 AS SIGNED INT),
5754f_charbig = CONCAT('===',f_char1,'===');
5755CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5756BEGIN
5757SET new.f_int1 = @my_max1 + @counter,
5758new.f_int2 = @my_min2 - @counter,
5759new.f_charbig = '####updated per insert trigger####';
5760SET @counter = @counter + 1;
5761END|
5762SET @counter = 1;
5763SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5764INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5765SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5766CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5767WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5768ORDER BY f_int1;
5769DROP TRIGGER trg_3;
5770
5771# check trigger-11 success: 	1
5772DELETE FROM t1
5773WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5774AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5775AND f_charbig = '####updated per insert trigger####';
5776CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5777BEGIN
5778SET new.f_int1 = @my_max1 + @counter,
5779new.f_int2 = @my_min2 - @counter,
5780new.f_charbig = '####updated per insert trigger####';
5781SET @counter = @counter + 1;
5782END|
5783SET @counter = 1;
5784SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5785INSERT INTO t1 (f_char1, f_char2, f_charbig)
5786SELECT CAST(f_int1 AS CHAR),
5787CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5788WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5789ORDER BY f_int1;
5790DROP TRIGGER trg_3;
5791
5792# check trigger-12 success: 	1
5793DELETE FROM t1
5794WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5795AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5796AND f_charbig = '####updated per insert trigger####';
5797ANALYZE  TABLE t1;
5798Table	Op	Msg_type	Msg_text
5799test.t1	analyze	status	OK
5800CHECK    TABLE t1 EXTENDED;
5801Table	Op	Msg_type	Msg_text
5802test.t1	check	status	OK
5803CHECKSUM TABLE t1 EXTENDED;
5804Table	Checksum
5805test.t1	<some_value>
5806OPTIMIZE TABLE t1;
5807Table	Op	Msg_type	Msg_text
5808test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5809test.t1	optimize	status	OK
5810# check layout success:    1
5811REPAIR   TABLE t1 EXTENDED;
5812Table	Op	Msg_type	Msg_text
5813test.t1	repair	status	OK
5814# check layout success:    1
5815TRUNCATE t1;
5816
5817# check TRUNCATE success: 	1
5818# check layout success:    1
5819# End usability test (inc/partition_check.inc)
5820DROP TABLE t1;
5821CREATE TABLE t1 (
5822f_int1 INTEGER,
5823f_int2 INTEGER,
5824f_char1 CHAR(20),
5825f_char2 CHAR(20),
5826f_charbig VARCHAR(1000)
5827, PRIMARY KEY (f_int1,f_int2)
5828)
5829PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
5830(PARTITION parta VALUES LESS THAN (0),
5831PARTITION partb VALUES LESS THAN (5),
5832PARTITION partc VALUES LESS THAN (10),
5833PARTITION partd VALUES LESS THAN (2147483646));
5834INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5835SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5836WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5837ALTER TABLE t1 MODIFY f_int2 BIGINT;
5838INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5839SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5840WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5841# Start usability test (inc/partition_check.inc)
5842create_command
5843SHOW CREATE TABLE t1;
5844Table	Create Table
5845t1	CREATE TABLE `t1` (
5846  `f_int1` int(11) NOT NULL,
5847  `f_int2` bigint(20) NOT NULL,
5848  `f_char1` char(20) DEFAULT NULL,
5849  `f_char2` char(20) DEFAULT NULL,
5850  `f_charbig` varchar(1000) DEFAULT NULL,
5851  PRIMARY KEY (`f_int1`,`f_int2`)
5852) ENGINE=TokuDB DEFAULT CHARSET=latin1
5853/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
5854SUBPARTITION BY HASH (f_int1)
5855SUBPARTITIONS 2
5856(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
5857 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
5858 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
5859 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
5860
5861# check prerequisites-1 success:    1
5862# check COUNT(*) success:    1
5863# check MIN/MAX(f_int1) success:    1
5864# check MIN/MAX(f_int2) success:    1
5865INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5866SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5867CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5868WHERE f_int1 IN (2,3);
5869ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5870# check prerequisites-3 success:    1
5871# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5872INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5873SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5874CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5875WHERE f_int1 IN (2,3);
5876DELETE FROM t1 WHERE f_charbig = 'delete me';
5877INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5878SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5879CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5880WHERE f_int1 IN (2,3);
5881DELETE FROM t1 WHERE f_charbig = 'delete me';
5882# check read via f_int1 success: 1
5883# check read via f_int2 success: 1
5884
5885# check multiple-1 success: 	1
5886DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5887
5888# check multiple-2 success: 	1
5889INSERT INTO t1 SELECT * FROM t0_template
5890WHERE MOD(f_int1,3) = 0;
5891
5892# check multiple-3 success: 	1
5893UPDATE t1 SET f_int1 = f_int1 + @max_row
5894WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5895AND @max_row_div2 + @max_row_div4;
5896
5897# check multiple-4 success: 	1
5898DELETE FROM t1
5899WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5900AND @max_row_div2 + @max_row_div4 + @max_row;
5901
5902# check multiple-5 success: 	1
5903SELECT COUNT(*) INTO @try_count FROM t0_template
5904WHERE MOD(f_int1,3) = 0
5905AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5906SELECT COUNT(*) INTO @clash_count
5907FROM t1 INNER JOIN t0_template USING(f_int1)
5908WHERE MOD(f_int1,3) = 0
5909AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5910SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5911INSERT INTO t1
5912SET f_int1 = @cur_value , f_int2 = @cur_value,
5913f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5914f_charbig = '#SINGLE#';
5915
5916# check single-1 success: 	1
5917SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5918INSERT INTO t1
5919SET f_int1 = @cur_value , f_int2 = @cur_value,
5920f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5921f_charbig = '#SINGLE#';
5922
5923# check single-2 success: 	1
5924SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5925SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5926UPDATE t1 SET f_int1 = @cur_value2
5927WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5928
5929# check single-3 success: 	1
5930SET @cur_value1= -1;
5931SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5932UPDATE t1 SET f_int1 = @cur_value1
5933WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5934
5935# check single-4 success: 	1
5936SELECT MAX(f_int1) INTO @cur_value FROM t1;
5937DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5938
5939# check single-5 success: 	1
5940DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5941
5942# check single-6 success: 	1
5943INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5944
5945# check single-7 success: 	1
5946DELETE FROM t1 WHERE f_charbig = '#2147483647##';
5947DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5948INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5949f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5950f_charbig = '#NULL#';
5951INSERT INTO t1
5952SET f_int1 = NULL , f_int2 = -@max_row,
5953f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5954f_charbig = '#NULL#';
5955ERROR 23000: Column 'f_int1' cannot be null
5956# check null success:    1
5957DELETE FROM t1
5958WHERE f_int1 = 0 AND f_int2 = 0
5959AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5960AND f_charbig = '#NULL#';
5961INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5962SELECT f_int1, f_int1, '', '', 'was inserted'
5963   FROM t0_template source_tab
5964WHERE MOD(f_int1,3) = 0
5965AND f_int1 BETWEEN @max_row_div2 AND @max_row
5966ON DUPLICATE KEY
5967UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5968f_int2 = 2 * @max_row + source_tab.f_int1,
5969f_charbig = 'was updated';
5970
5971# check unique-1-a success: 	1
5972
5973# check unique-1-b success: 	1
5974DELETE FROM t1 WHERE f_charbig = 'was inserted';
5975UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5976f_int2 = CAST(f_char1 AS SIGNED INT),
5977f_charbig = CONCAT('===',f_char1,'===')
5978WHERE f_charbig = 'was updated';
5979REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5980SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5981   FROM t0_template source_tab
5982WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5983
5984# check replace success: 	1
5985DELETE FROM t1
5986WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5987DELETE FROM t1
5988WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5989f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5990UPDATE t1 SET f_int2 = f_int1,
5991f_char1 = CAST(f_int1 AS CHAR),
5992f_char2 = CAST(f_int1 AS CHAR),
5993f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5994WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5995SET AUTOCOMMIT= 0;
5996INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5997SELECT f_int1, f_int1, '', '', 'was inserted'
5998FROM t0_template source_tab
5999WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6000
6001# check transactions-1 success: 	1
6002COMMIT WORK;
6003
6004# check transactions-2 success: 	1
6005ROLLBACK WORK;
6006
6007# check transactions-3 success: 	1
6008DELETE FROM t1 WHERE f_charbig = 'was inserted';
6009COMMIT WORK;
6010ROLLBACK WORK;
6011
6012# check transactions-4 success: 	1
6013INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6014SELECT f_int1, f_int1, '', '', 'was inserted'
6015FROM t0_template source_tab
6016WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6017
6018# check transactions-5 success: 	1
6019ROLLBACK WORK;
6020
6021# check transactions-6 success: 	1
6022# INFO: Storage engine used for t1 seems to be transactional.
6023COMMIT;
6024
6025# check transactions-7 success: 	1
6026DELETE FROM t1 WHERE f_charbig = 'was inserted';
6027COMMIT WORK;
6028SET @@session.sql_mode = 'traditional';
6029Warnings:
6030Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6031SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6032INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6033SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6034'', '', 'was inserted' FROM t0_template
6035WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6036ERROR 22012: Division by 0
6037COMMIT;
6038
6039# check transactions-8 success: 	1
6040# INFO: Storage engine used for t1 seems to be able to revert
6041#       changes made by the failing statement.
6042SET @@session.sql_mode = '';
6043Warnings:
6044Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6045SET AUTOCOMMIT= 1;
6046DELETE FROM t1 WHERE f_charbig = 'was inserted';
6047COMMIT WORK;
6048UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6049
6050# check special-1 success: 	1
6051UPDATE t1 SET f_charbig = '';
6052
6053# check special-2 success: 	1
6054UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6055INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6056SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6057WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6058INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6059SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6060'just inserted' FROM t0_template
6061WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6062CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6063BEGIN
6064UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6065f_charbig = 'updated by trigger'
6066      WHERE f_int1 = new.f_int1;
6067END|
6068INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6069SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6070WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6071
6072# check trigger-1 success: 	1
6073DROP TRIGGER trg_1;
6074UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6075f_int2 = CAST(f_char1 AS SIGNED INT),
6076f_charbig = 'just inserted'
6077   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6078DELETE FROM t0_aux
6079WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6080INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6081SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6082'just inserted' FROM t0_template
6083WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6084CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6085BEGIN
6086UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6087f_charbig = 'updated by trigger'
6088      WHERE f_int1 = new.f_int1;
6089END|
6090INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6091SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6092WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6093
6094# check trigger-2 success: 	1
6095DROP TRIGGER trg_1;
6096UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6097f_int2 = CAST(f_char1 AS SIGNED INT),
6098f_charbig = 'just inserted'
6099   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6100DELETE FROM t0_aux
6101WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6102INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6103SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6104'just inserted' FROM t0_template
6105WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6106CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6107BEGIN
6108UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6109f_charbig = 'updated by trigger'
6110      WHERE f_int1 = new.f_int1;
6111END|
6112UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6113WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6114
6115# check trigger-3 success: 	1
6116DROP TRIGGER trg_1;
6117UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6118f_int2 = CAST(f_char1 AS SIGNED INT),
6119f_charbig = 'just inserted'
6120   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6121DELETE FROM t0_aux
6122WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6123INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6124SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6125'just inserted' FROM t0_template
6126WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6127CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6128BEGIN
6129UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6130f_charbig = 'updated by trigger'
6131      WHERE f_int1 = - old.f_int1;
6132END|
6133UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6134WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6135
6136# check trigger-4 success: 	1
6137DROP TRIGGER trg_1;
6138UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6139f_int2 = CAST(f_char1 AS SIGNED INT),
6140f_charbig = 'just inserted'
6141   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6142DELETE FROM t0_aux
6143WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6144INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6145SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6146'just inserted' FROM t0_template
6147WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6148CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6149BEGIN
6150UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6151f_charbig = 'updated by trigger'
6152      WHERE f_int1 = new.f_int1;
6153END|
6154UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6155WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6156
6157# check trigger-5 success: 	1
6158DROP TRIGGER trg_1;
6159UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6160f_int2 = CAST(f_char1 AS SIGNED INT),
6161f_charbig = 'just inserted'
6162   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6163DELETE FROM t0_aux
6164WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6165INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6166SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6167'just inserted' FROM t0_template
6168WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6169CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6170BEGIN
6171UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6172f_charbig = 'updated by trigger'
6173      WHERE f_int1 = - old.f_int1;
6174END|
6175UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6176WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6177
6178# check trigger-6 success: 	1
6179DROP TRIGGER trg_1;
6180UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6181f_int2 = CAST(f_char1 AS SIGNED INT),
6182f_charbig = 'just inserted'
6183   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6184DELETE FROM t0_aux
6185WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6186INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6187SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6188'just inserted' FROM t0_template
6189WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6190CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6191BEGIN
6192UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6193f_charbig = 'updated by trigger'
6194      WHERE f_int1 = - old.f_int1;
6195END|
6196DELETE FROM t0_aux
6197WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6198
6199# check trigger-7 success: 	1
6200DROP TRIGGER trg_1;
6201UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6202f_int2 = CAST(f_char1 AS SIGNED INT),
6203f_charbig = 'just inserted'
6204   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6205DELETE FROM t0_aux
6206WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6207INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6208SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6209'just inserted' FROM t0_template
6210WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6211CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6212BEGIN
6213UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6214f_charbig = 'updated by trigger'
6215      WHERE f_int1 = - old.f_int1;
6216END|
6217DELETE FROM t0_aux
6218WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6219
6220# check trigger-8 success: 	1
6221DROP TRIGGER trg_1;
6222UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6223f_int2 = CAST(f_char1 AS SIGNED INT),
6224f_charbig = 'just inserted'
6225   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6226DELETE FROM t0_aux
6227WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6228DELETE FROM t1
6229WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6230CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6231BEGIN
6232SET new.f_int1 = old.f_int1 + @max_row,
6233new.f_int2 = old.f_int2 - @max_row,
6234new.f_charbig = '####updated per update trigger####';
6235END|
6236UPDATE t1
6237SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6238f_charbig = '####updated per update statement itself####';
6239
6240# check trigger-9 success: 	1
6241DROP TRIGGER trg_2;
6242UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6243f_int2 = CAST(f_char1 AS SIGNED INT),
6244f_charbig = CONCAT('===',f_char1,'===');
6245CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6246BEGIN
6247SET new.f_int1 = new.f_int1 + @max_row,
6248new.f_int2 = new.f_int2 - @max_row,
6249new.f_charbig = '####updated per update trigger####';
6250END|
6251UPDATE t1
6252SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6253f_charbig = '####updated per update statement itself####';
6254
6255# check trigger-10 success: 	1
6256DROP TRIGGER trg_2;
6257UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6258f_int2 = CAST(f_char1 AS SIGNED INT),
6259f_charbig = CONCAT('===',f_char1,'===');
6260CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6261BEGIN
6262SET new.f_int1 = @my_max1 + @counter,
6263new.f_int2 = @my_min2 - @counter,
6264new.f_charbig = '####updated per insert trigger####';
6265SET @counter = @counter + 1;
6266END|
6267SET @counter = 1;
6268SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6269INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6270SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6271CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6272WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6273ORDER BY f_int1;
6274DROP TRIGGER trg_3;
6275
6276# check trigger-11 success: 	1
6277DELETE FROM t1
6278WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6279AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6280AND f_charbig = '####updated per insert trigger####';
6281CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6282BEGIN
6283SET new.f_int1 = @my_max1 + @counter,
6284new.f_int2 = @my_min2 - @counter,
6285new.f_charbig = '####updated per insert trigger####';
6286SET @counter = @counter + 1;
6287END|
6288SET @counter = 1;
6289SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6290INSERT INTO t1 (f_char1, f_char2, f_charbig)
6291SELECT CAST(f_int1 AS CHAR),
6292CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6293WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6294ORDER BY f_int1;
6295DROP TRIGGER trg_3;
6296
6297# check trigger-12 success: 	1
6298DELETE FROM t1
6299WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6300AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6301AND f_charbig = '####updated per insert trigger####';
6302ANALYZE  TABLE t1;
6303Table	Op	Msg_type	Msg_text
6304test.t1	analyze	status	OK
6305CHECK    TABLE t1 EXTENDED;
6306Table	Op	Msg_type	Msg_text
6307test.t1	check	status	OK
6308CHECKSUM TABLE t1 EXTENDED;
6309Table	Checksum
6310test.t1	<some_value>
6311OPTIMIZE TABLE t1;
6312Table	Op	Msg_type	Msg_text
6313test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6314test.t1	optimize	status	OK
6315# check layout success:    1
6316REPAIR   TABLE t1 EXTENDED;
6317Table	Op	Msg_type	Msg_text
6318test.t1	repair	status	OK
6319# check layout success:    1
6320TRUNCATE t1;
6321
6322# check TRUNCATE success: 	1
6323# check layout success:    1
6324# End usability test (inc/partition_check.inc)
6325DROP TABLE t1;
6326CREATE TABLE t1 (
6327f_int1 INTEGER,
6328f_int2 INTEGER,
6329f_char1 CHAR(20),
6330f_char2 CHAR(20),
6331f_charbig VARCHAR(1000)
6332, PRIMARY KEY (f_int1,f_int2)
6333)
6334PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
6335(PARTITION part1 VALUES LESS THAN (0)
6336(SUBPARTITION subpart11, SUBPARTITION subpart12),
6337PARTITION part2 VALUES LESS THAN (5)
6338(SUBPARTITION subpart21, SUBPARTITION subpart22),
6339PARTITION part3 VALUES LESS THAN (10)
6340(SUBPARTITION subpart31, SUBPARTITION subpart32),
6341PARTITION part4 VALUES LESS THAN (2147483646)
6342(SUBPARTITION subpart41, SUBPARTITION subpart42));
6343INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6344SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6345WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6346ALTER TABLE t1 MODIFY f_int2 BIGINT;
6347INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6348SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6349WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6350# Start usability test (inc/partition_check.inc)
6351create_command
6352SHOW CREATE TABLE t1;
6353Table	Create Table
6354t1	CREATE TABLE `t1` (
6355  `f_int1` int(11) NOT NULL,
6356  `f_int2` bigint(20) NOT NULL,
6357  `f_char1` char(20) DEFAULT NULL,
6358  `f_char2` char(20) DEFAULT NULL,
6359  `f_charbig` varchar(1000) DEFAULT NULL,
6360  PRIMARY KEY (`f_int1`,`f_int2`)
6361) ENGINE=TokuDB DEFAULT CHARSET=latin1
6362/*!50100 PARTITION BY RANGE (f_int1)
6363SUBPARTITION BY KEY (f_int1)
6364(PARTITION part1 VALUES LESS THAN (0)
6365 (SUBPARTITION subpart11 ENGINE = TokuDB,
6366  SUBPARTITION subpart12 ENGINE = TokuDB),
6367 PARTITION part2 VALUES LESS THAN (5)
6368 (SUBPARTITION subpart21 ENGINE = TokuDB,
6369  SUBPARTITION subpart22 ENGINE = TokuDB),
6370 PARTITION part3 VALUES LESS THAN (10)
6371 (SUBPARTITION subpart31 ENGINE = TokuDB,
6372  SUBPARTITION subpart32 ENGINE = TokuDB),
6373 PARTITION part4 VALUES LESS THAN (2147483646)
6374 (SUBPARTITION subpart41 ENGINE = TokuDB,
6375  SUBPARTITION subpart42 ENGINE = TokuDB)) */
6376
6377# check prerequisites-1 success:    1
6378# check COUNT(*) success:    1
6379# check MIN/MAX(f_int1) success:    1
6380# check MIN/MAX(f_int2) success:    1
6381INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6382SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6383CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6384WHERE f_int1 IN (2,3);
6385ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6386# check prerequisites-3 success:    1
6387# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6388INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6389SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6390CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6391WHERE f_int1 IN (2,3);
6392DELETE FROM t1 WHERE f_charbig = 'delete me';
6393INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6394SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6395CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6396WHERE f_int1 IN (2,3);
6397DELETE FROM t1 WHERE f_charbig = 'delete me';
6398# check read via f_int1 success: 1
6399# check read via f_int2 success: 1
6400
6401# check multiple-1 success: 	1
6402DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6403
6404# check multiple-2 success: 	1
6405INSERT INTO t1 SELECT * FROM t0_template
6406WHERE MOD(f_int1,3) = 0;
6407
6408# check multiple-3 success: 	1
6409UPDATE t1 SET f_int1 = f_int1 + @max_row
6410WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6411AND @max_row_div2 + @max_row_div4;
6412
6413# check multiple-4 success: 	1
6414DELETE FROM t1
6415WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6416AND @max_row_div2 + @max_row_div4 + @max_row;
6417
6418# check multiple-5 success: 	1
6419SELECT COUNT(*) INTO @try_count FROM t0_template
6420WHERE MOD(f_int1,3) = 0
6421AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6422SELECT COUNT(*) INTO @clash_count
6423FROM t1 INNER JOIN t0_template USING(f_int1)
6424WHERE MOD(f_int1,3) = 0
6425AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6426SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6427INSERT INTO t1
6428SET f_int1 = @cur_value , f_int2 = @cur_value,
6429f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6430f_charbig = '#SINGLE#';
6431
6432# check single-1 success: 	1
6433SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6434INSERT INTO t1
6435SET f_int1 = @cur_value , f_int2 = @cur_value,
6436f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6437f_charbig = '#SINGLE#';
6438
6439# check single-2 success: 	1
6440SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6441SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6442UPDATE t1 SET f_int1 = @cur_value2
6443WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6444
6445# check single-3 success: 	1
6446SET @cur_value1= -1;
6447SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6448UPDATE t1 SET f_int1 = @cur_value1
6449WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6450
6451# check single-4 success: 	1
6452SELECT MAX(f_int1) INTO @cur_value FROM t1;
6453DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6454
6455# check single-5 success: 	1
6456DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6457
6458# check single-6 success: 	1
6459INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6460ERROR HY000: Table has no partition for value 2147483647
6461DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6462INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6463f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6464f_charbig = '#NULL#';
6465INSERT INTO t1
6466SET f_int1 = NULL , f_int2 = -@max_row,
6467f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6468f_charbig = '#NULL#';
6469ERROR 23000: Column 'f_int1' cannot be null
6470# check null success:    1
6471DELETE FROM t1
6472WHERE f_int1 = 0 AND f_int2 = 0
6473AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6474AND f_charbig = '#NULL#';
6475INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6476SELECT f_int1, f_int1, '', '', 'was inserted'
6477   FROM t0_template source_tab
6478WHERE MOD(f_int1,3) = 0
6479AND f_int1 BETWEEN @max_row_div2 AND @max_row
6480ON DUPLICATE KEY
6481UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6482f_int2 = 2 * @max_row + source_tab.f_int1,
6483f_charbig = 'was updated';
6484
6485# check unique-1-a success: 	1
6486
6487# check unique-1-b success: 	1
6488DELETE FROM t1 WHERE f_charbig = 'was inserted';
6489UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6490f_int2 = CAST(f_char1 AS SIGNED INT),
6491f_charbig = CONCAT('===',f_char1,'===')
6492WHERE f_charbig = 'was updated';
6493REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6494SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6495   FROM t0_template source_tab
6496WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6497
6498# check replace success: 	1
6499DELETE FROM t1
6500WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6501DELETE FROM t1
6502WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6503f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6504UPDATE t1 SET f_int2 = f_int1,
6505f_char1 = CAST(f_int1 AS CHAR),
6506f_char2 = CAST(f_int1 AS CHAR),
6507f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6508WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6509SET AUTOCOMMIT= 0;
6510INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6511SELECT f_int1, f_int1, '', '', 'was inserted'
6512FROM t0_template source_tab
6513WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6514
6515# check transactions-1 success: 	1
6516COMMIT WORK;
6517
6518# check transactions-2 success: 	1
6519ROLLBACK WORK;
6520
6521# check transactions-3 success: 	1
6522DELETE FROM t1 WHERE f_charbig = 'was inserted';
6523COMMIT WORK;
6524ROLLBACK WORK;
6525
6526# check transactions-4 success: 	1
6527INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6528SELECT f_int1, f_int1, '', '', 'was inserted'
6529FROM t0_template source_tab
6530WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6531
6532# check transactions-5 success: 	1
6533ROLLBACK WORK;
6534
6535# check transactions-6 success: 	1
6536# INFO: Storage engine used for t1 seems to be transactional.
6537COMMIT;
6538
6539# check transactions-7 success: 	1
6540DELETE FROM t1 WHERE f_charbig = 'was inserted';
6541COMMIT WORK;
6542SET @@session.sql_mode = 'traditional';
6543Warnings:
6544Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6545SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6546INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6547SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6548'', '', 'was inserted' FROM t0_template
6549WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6550ERROR 22012: Division by 0
6551COMMIT;
6552
6553# check transactions-8 success: 	1
6554# INFO: Storage engine used for t1 seems to be able to revert
6555#       changes made by the failing statement.
6556SET @@session.sql_mode = '';
6557Warnings:
6558Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6559SET AUTOCOMMIT= 1;
6560DELETE FROM t1 WHERE f_charbig = 'was inserted';
6561COMMIT WORK;
6562UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6563
6564# check special-1 success: 	1
6565UPDATE t1 SET f_charbig = '';
6566
6567# check special-2 success: 	1
6568UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6569INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6570SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6571WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6572INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6573SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6574'just inserted' FROM t0_template
6575WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6576CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6577BEGIN
6578UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6579f_charbig = 'updated by trigger'
6580      WHERE f_int1 = new.f_int1;
6581END|
6582INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6583SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6584WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6585
6586# check trigger-1 success: 	1
6587DROP TRIGGER trg_1;
6588UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6589f_int2 = CAST(f_char1 AS SIGNED INT),
6590f_charbig = 'just inserted'
6591   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6592DELETE FROM t0_aux
6593WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6594INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6595SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6596'just inserted' FROM t0_template
6597WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6598CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6599BEGIN
6600UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6601f_charbig = 'updated by trigger'
6602      WHERE f_int1 = new.f_int1;
6603END|
6604INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6605SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6606WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6607
6608# check trigger-2 success: 	1
6609DROP TRIGGER trg_1;
6610UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6611f_int2 = CAST(f_char1 AS SIGNED INT),
6612f_charbig = 'just inserted'
6613   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6614DELETE FROM t0_aux
6615WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6616INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6617SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6618'just inserted' FROM t0_template
6619WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6620CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6621BEGIN
6622UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6623f_charbig = 'updated by trigger'
6624      WHERE f_int1 = new.f_int1;
6625END|
6626UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6627WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6628
6629# check trigger-3 success: 	1
6630DROP TRIGGER trg_1;
6631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6632f_int2 = CAST(f_char1 AS SIGNED INT),
6633f_charbig = 'just inserted'
6634   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6635DELETE FROM t0_aux
6636WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6637INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6638SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6639'just inserted' FROM t0_template
6640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6641CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6642BEGIN
6643UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6644f_charbig = 'updated by trigger'
6645      WHERE f_int1 = - old.f_int1;
6646END|
6647UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6648WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6649
6650# check trigger-4 success: 	1
6651DROP TRIGGER trg_1;
6652UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6653f_int2 = CAST(f_char1 AS SIGNED INT),
6654f_charbig = 'just inserted'
6655   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6656DELETE FROM t0_aux
6657WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6658INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6659SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6660'just inserted' FROM t0_template
6661WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6662CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6663BEGIN
6664UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6665f_charbig = 'updated by trigger'
6666      WHERE f_int1 = new.f_int1;
6667END|
6668UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6669WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6670
6671# check trigger-5 success: 	1
6672DROP TRIGGER trg_1;
6673UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6674f_int2 = CAST(f_char1 AS SIGNED INT),
6675f_charbig = 'just inserted'
6676   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6677DELETE FROM t0_aux
6678WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6679INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6680SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6681'just inserted' FROM t0_template
6682WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6683CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6684BEGIN
6685UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6686f_charbig = 'updated by trigger'
6687      WHERE f_int1 = - old.f_int1;
6688END|
6689UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6690WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6691
6692# check trigger-6 success: 	1
6693DROP TRIGGER trg_1;
6694UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6695f_int2 = CAST(f_char1 AS SIGNED INT),
6696f_charbig = 'just inserted'
6697   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6698DELETE FROM t0_aux
6699WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6702'just inserted' FROM t0_template
6703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6704CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6705BEGIN
6706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6707f_charbig = 'updated by trigger'
6708      WHERE f_int1 = - old.f_int1;
6709END|
6710DELETE FROM t0_aux
6711WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6712
6713# check trigger-7 success: 	1
6714DROP TRIGGER trg_1;
6715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6716f_int2 = CAST(f_char1 AS SIGNED INT),
6717f_charbig = 'just inserted'
6718   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6719DELETE FROM t0_aux
6720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6723'just inserted' FROM t0_template
6724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6725CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6726BEGIN
6727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6728f_charbig = 'updated by trigger'
6729      WHERE f_int1 = - old.f_int1;
6730END|
6731DELETE FROM t0_aux
6732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6733
6734# check trigger-8 success: 	1
6735DROP TRIGGER trg_1;
6736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6737f_int2 = CAST(f_char1 AS SIGNED INT),
6738f_charbig = 'just inserted'
6739   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6740DELETE FROM t0_aux
6741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6742DELETE FROM t1
6743WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6744CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6745BEGIN
6746SET new.f_int1 = old.f_int1 + @max_row,
6747new.f_int2 = old.f_int2 - @max_row,
6748new.f_charbig = '####updated per update trigger####';
6749END|
6750UPDATE t1
6751SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6752f_charbig = '####updated per update statement itself####';
6753
6754# check trigger-9 success: 	1
6755DROP TRIGGER trg_2;
6756UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6757f_int2 = CAST(f_char1 AS SIGNED INT),
6758f_charbig = CONCAT('===',f_char1,'===');
6759CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6760BEGIN
6761SET new.f_int1 = new.f_int1 + @max_row,
6762new.f_int2 = new.f_int2 - @max_row,
6763new.f_charbig = '####updated per update trigger####';
6764END|
6765UPDATE t1
6766SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6767f_charbig = '####updated per update statement itself####';
6768
6769# check trigger-10 success: 	1
6770DROP TRIGGER trg_2;
6771UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6772f_int2 = CAST(f_char1 AS SIGNED INT),
6773f_charbig = CONCAT('===',f_char1,'===');
6774CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6775BEGIN
6776SET new.f_int1 = @my_max1 + @counter,
6777new.f_int2 = @my_min2 - @counter,
6778new.f_charbig = '####updated per insert trigger####';
6779SET @counter = @counter + 1;
6780END|
6781SET @counter = 1;
6782SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6783INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6784SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6785CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6786WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6787ORDER BY f_int1;
6788DROP TRIGGER trg_3;
6789
6790# check trigger-11 success: 	1
6791DELETE FROM t1
6792WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6793AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6794AND f_charbig = '####updated per insert trigger####';
6795CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6796BEGIN
6797SET new.f_int1 = @my_max1 + @counter,
6798new.f_int2 = @my_min2 - @counter,
6799new.f_charbig = '####updated per insert trigger####';
6800SET @counter = @counter + 1;
6801END|
6802SET @counter = 1;
6803SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6804INSERT INTO t1 (f_char1, f_char2, f_charbig)
6805SELECT CAST(f_int1 AS CHAR),
6806CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6807WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6808ORDER BY f_int1;
6809DROP TRIGGER trg_3;
6810
6811# check trigger-12 success: 	1
6812DELETE FROM t1
6813WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6814AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6815AND f_charbig = '####updated per insert trigger####';
6816ANALYZE  TABLE t1;
6817Table	Op	Msg_type	Msg_text
6818test.t1	analyze	status	OK
6819CHECK    TABLE t1 EXTENDED;
6820Table	Op	Msg_type	Msg_text
6821test.t1	check	status	OK
6822CHECKSUM TABLE t1 EXTENDED;
6823Table	Checksum
6824test.t1	<some_value>
6825OPTIMIZE TABLE t1;
6826Table	Op	Msg_type	Msg_text
6827test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6828test.t1	optimize	status	OK
6829# check layout success:    1
6830REPAIR   TABLE t1 EXTENDED;
6831Table	Op	Msg_type	Msg_text
6832test.t1	repair	status	OK
6833# check layout success:    1
6834TRUNCATE t1;
6835
6836# check TRUNCATE success: 	1
6837# check layout success:    1
6838# End usability test (inc/partition_check.inc)
6839DROP TABLE t1;
6840CREATE TABLE t1 (
6841f_int1 INTEGER,
6842f_int2 INTEGER,
6843f_char1 CHAR(20),
6844f_char2 CHAR(20),
6845f_charbig VARCHAR(1000)
6846, PRIMARY KEY (f_int1,f_int2)
6847)
6848PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
6849(PARTITION part1 VALUES IN (0)
6850(SUBPARTITION sp11, SUBPARTITION sp12),
6851PARTITION part2 VALUES IN (1)
6852(SUBPARTITION sp21, SUBPARTITION sp22),
6853PARTITION part3 VALUES IN (2)
6854(SUBPARTITION sp31, SUBPARTITION sp32),
6855PARTITION part4 VALUES IN (NULL)
6856(SUBPARTITION sp41, SUBPARTITION sp42));
6857INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6858SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6859WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6860ALTER TABLE t1 MODIFY f_int2 BIGINT;
6861INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6862SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6863WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6864# Start usability test (inc/partition_check.inc)
6865create_command
6866SHOW CREATE TABLE t1;
6867Table	Create Table
6868t1	CREATE TABLE `t1` (
6869  `f_int1` int(11) NOT NULL,
6870  `f_int2` bigint(20) NOT NULL,
6871  `f_char1` char(20) DEFAULT NULL,
6872  `f_char2` char(20) DEFAULT NULL,
6873  `f_charbig` varchar(1000) DEFAULT NULL,
6874  PRIMARY KEY (`f_int1`,`f_int2`)
6875) ENGINE=TokuDB DEFAULT CHARSET=latin1
6876/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
6877SUBPARTITION BY HASH (f_int1 + 1)
6878(PARTITION part1 VALUES IN (0)
6879 (SUBPARTITION sp11 ENGINE = TokuDB,
6880  SUBPARTITION sp12 ENGINE = TokuDB),
6881 PARTITION part2 VALUES IN (1)
6882 (SUBPARTITION sp21 ENGINE = TokuDB,
6883  SUBPARTITION sp22 ENGINE = TokuDB),
6884 PARTITION part3 VALUES IN (2)
6885 (SUBPARTITION sp31 ENGINE = TokuDB,
6886  SUBPARTITION sp32 ENGINE = TokuDB),
6887 PARTITION part4 VALUES IN (NULL)
6888 (SUBPARTITION sp41 ENGINE = TokuDB,
6889  SUBPARTITION sp42 ENGINE = TokuDB)) */
6890
6891# check prerequisites-1 success:    1
6892# check COUNT(*) success:    1
6893# check MIN/MAX(f_int1) success:    1
6894# check MIN/MAX(f_int2) success:    1
6895INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6896SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6897CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6898WHERE f_int1 IN (2,3);
6899ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6900# check prerequisites-3 success:    1
6901# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6902INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6903SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6904CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6905WHERE f_int1 IN (2,3);
6906DELETE FROM t1 WHERE f_charbig = 'delete me';
6907INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6908SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6909CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6910WHERE f_int1 IN (2,3);
6911DELETE FROM t1 WHERE f_charbig = 'delete me';
6912# check read via f_int1 success: 1
6913# check read via f_int2 success: 1
6914
6915# check multiple-1 success: 	1
6916DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6917
6918# check multiple-2 success: 	1
6919INSERT INTO t1 SELECT * FROM t0_template
6920WHERE MOD(f_int1,3) = 0;
6921
6922# check multiple-3 success: 	1
6923UPDATE t1 SET f_int1 = f_int1 + @max_row
6924WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6925AND @max_row_div2 + @max_row_div4;
6926
6927# check multiple-4 success: 	1
6928DELETE FROM t1
6929WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6930AND @max_row_div2 + @max_row_div4 + @max_row;
6931
6932# check multiple-5 success: 	1
6933SELECT COUNT(*) INTO @try_count FROM t0_template
6934WHERE MOD(f_int1,3) = 0
6935AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6936SELECT COUNT(*) INTO @clash_count
6937FROM t1 INNER JOIN t0_template USING(f_int1)
6938WHERE MOD(f_int1,3) = 0
6939AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6940SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6941INSERT INTO t1
6942SET f_int1 = @cur_value , f_int2 = @cur_value,
6943f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6944f_charbig = '#SINGLE#';
6945
6946# check single-1 success: 	1
6947SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6948INSERT INTO t1
6949SET f_int1 = @cur_value , f_int2 = @cur_value,
6950f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6951f_charbig = '#SINGLE#';
6952
6953# check single-2 success: 	1
6954SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6955SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6956UPDATE t1 SET f_int1 = @cur_value2
6957WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6958
6959# check single-3 success: 	1
6960SET @cur_value1= -1;
6961SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6962UPDATE t1 SET f_int1 = @cur_value1
6963WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6964
6965# check single-4 success: 	1
6966SELECT MAX(f_int1) INTO @cur_value FROM t1;
6967DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6968
6969# check single-5 success: 	1
6970DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6971
6972# check single-6 success: 	1
6973INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6974
6975# check single-7 success: 	1
6976DELETE FROM t1 WHERE f_charbig = '#2147483647##';
6977DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6978INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6979f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6980f_charbig = '#NULL#';
6981INSERT INTO t1
6982SET f_int1 = NULL , f_int2 = -@max_row,
6983f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6984f_charbig = '#NULL#';
6985ERROR 23000: Column 'f_int1' cannot be null
6986# check null success:    1
6987DELETE FROM t1
6988WHERE f_int1 = 0 AND f_int2 = 0
6989AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6990AND f_charbig = '#NULL#';
6991INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6992SELECT f_int1, f_int1, '', '', 'was inserted'
6993   FROM t0_template source_tab
6994WHERE MOD(f_int1,3) = 0
6995AND f_int1 BETWEEN @max_row_div2 AND @max_row
6996ON DUPLICATE KEY
6997UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6998f_int2 = 2 * @max_row + source_tab.f_int1,
6999f_charbig = 'was updated';
7000
7001# check unique-1-a success: 	1
7002
7003# check unique-1-b success: 	1
7004DELETE FROM t1 WHERE f_charbig = 'was inserted';
7005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7006f_int2 = CAST(f_char1 AS SIGNED INT),
7007f_charbig = CONCAT('===',f_char1,'===')
7008WHERE f_charbig = 'was updated';
7009REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7010SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7011   FROM t0_template source_tab
7012WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7013
7014# check replace success: 	1
7015DELETE FROM t1
7016WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7017DELETE FROM t1
7018WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7019f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7020UPDATE t1 SET f_int2 = f_int1,
7021f_char1 = CAST(f_int1 AS CHAR),
7022f_char2 = CAST(f_int1 AS CHAR),
7023f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7024WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7025SET AUTOCOMMIT= 0;
7026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7027SELECT f_int1, f_int1, '', '', 'was inserted'
7028FROM t0_template source_tab
7029WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7030
7031# check transactions-1 success: 	1
7032COMMIT WORK;
7033
7034# check transactions-2 success: 	1
7035ROLLBACK WORK;
7036
7037# check transactions-3 success: 	1
7038DELETE FROM t1 WHERE f_charbig = 'was inserted';
7039COMMIT WORK;
7040ROLLBACK WORK;
7041
7042# check transactions-4 success: 	1
7043INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7044SELECT f_int1, f_int1, '', '', 'was inserted'
7045FROM t0_template source_tab
7046WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7047
7048# check transactions-5 success: 	1
7049ROLLBACK WORK;
7050
7051# check transactions-6 success: 	1
7052# INFO: Storage engine used for t1 seems to be transactional.
7053COMMIT;
7054
7055# check transactions-7 success: 	1
7056DELETE FROM t1 WHERE f_charbig = 'was inserted';
7057COMMIT WORK;
7058SET @@session.sql_mode = 'traditional';
7059Warnings:
7060Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7061SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7062INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7063SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7064'', '', 'was inserted' FROM t0_template
7065WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7066ERROR 22012: Division by 0
7067COMMIT;
7068
7069# check transactions-8 success: 	1
7070# INFO: Storage engine used for t1 seems to be able to revert
7071#       changes made by the failing statement.
7072SET @@session.sql_mode = '';
7073Warnings:
7074Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7075SET AUTOCOMMIT= 1;
7076DELETE FROM t1 WHERE f_charbig = 'was inserted';
7077COMMIT WORK;
7078UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7079
7080# check special-1 success: 	1
7081UPDATE t1 SET f_charbig = '';
7082
7083# check special-2 success: 	1
7084UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7085INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7086SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7088INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7089SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7090'just inserted' FROM t0_template
7091WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7092CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7093BEGIN
7094UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7095f_charbig = 'updated by trigger'
7096      WHERE f_int1 = new.f_int1;
7097END|
7098INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7099SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7101
7102# check trigger-1 success: 	1
7103DROP TRIGGER trg_1;
7104UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7105f_int2 = CAST(f_char1 AS SIGNED INT),
7106f_charbig = 'just inserted'
7107   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7108DELETE FROM t0_aux
7109WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7110INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7111SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7112'just inserted' FROM t0_template
7113WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7114CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7115BEGIN
7116UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7117f_charbig = 'updated by trigger'
7118      WHERE f_int1 = new.f_int1;
7119END|
7120INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7121SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7123
7124# check trigger-2 success: 	1
7125DROP TRIGGER trg_1;
7126UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7127f_int2 = CAST(f_char1 AS SIGNED INT),
7128f_charbig = 'just inserted'
7129   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7130DELETE FROM t0_aux
7131WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7132INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7133SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7134'just inserted' FROM t0_template
7135WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7136CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7137BEGIN
7138UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7139f_charbig = 'updated by trigger'
7140      WHERE f_int1 = new.f_int1;
7141END|
7142UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7143WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7144
7145# check trigger-3 success: 	1
7146DROP TRIGGER trg_1;
7147UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7148f_int2 = CAST(f_char1 AS SIGNED INT),
7149f_charbig = 'just inserted'
7150   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7151DELETE FROM t0_aux
7152WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7153INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7154SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7155'just inserted' FROM t0_template
7156WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7157CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7158BEGIN
7159UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7160f_charbig = 'updated by trigger'
7161      WHERE f_int1 = - old.f_int1;
7162END|
7163UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7164WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7165
7166# check trigger-4 success: 	1
7167DROP TRIGGER trg_1;
7168UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7169f_int2 = CAST(f_char1 AS SIGNED INT),
7170f_charbig = 'just inserted'
7171   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7172DELETE FROM t0_aux
7173WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7174INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7175SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7176'just inserted' FROM t0_template
7177WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7178CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7179BEGIN
7180UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7181f_charbig = 'updated by trigger'
7182      WHERE f_int1 = new.f_int1;
7183END|
7184UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7185WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7186
7187# check trigger-5 success: 	1
7188DROP TRIGGER trg_1;
7189UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7190f_int2 = CAST(f_char1 AS SIGNED INT),
7191f_charbig = 'just inserted'
7192   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7193DELETE FROM t0_aux
7194WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7195INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7196SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7197'just inserted' FROM t0_template
7198WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7199CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7200BEGIN
7201UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7202f_charbig = 'updated by trigger'
7203      WHERE f_int1 = - old.f_int1;
7204END|
7205UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7206WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7207
7208# check trigger-6 success: 	1
7209DROP TRIGGER trg_1;
7210UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7211f_int2 = CAST(f_char1 AS SIGNED INT),
7212f_charbig = 'just inserted'
7213   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7214DELETE FROM t0_aux
7215WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7216INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7217SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7218'just inserted' FROM t0_template
7219WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7220CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7221BEGIN
7222UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7223f_charbig = 'updated by trigger'
7224      WHERE f_int1 = - old.f_int1;
7225END|
7226DELETE FROM t0_aux
7227WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7228
7229# check trigger-7 success: 	1
7230DROP TRIGGER trg_1;
7231UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7232f_int2 = CAST(f_char1 AS SIGNED INT),
7233f_charbig = 'just inserted'
7234   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7235DELETE FROM t0_aux
7236WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7237INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7238SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7239'just inserted' FROM t0_template
7240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7241CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7242BEGIN
7243UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7244f_charbig = 'updated by trigger'
7245      WHERE f_int1 = - old.f_int1;
7246END|
7247DELETE FROM t0_aux
7248WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7249
7250# check trigger-8 success: 	1
7251DROP TRIGGER trg_1;
7252UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7253f_int2 = CAST(f_char1 AS SIGNED INT),
7254f_charbig = 'just inserted'
7255   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7256DELETE FROM t0_aux
7257WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7258DELETE FROM t1
7259WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7260CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7261BEGIN
7262SET new.f_int1 = old.f_int1 + @max_row,
7263new.f_int2 = old.f_int2 - @max_row,
7264new.f_charbig = '####updated per update trigger####';
7265END|
7266UPDATE t1
7267SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7268f_charbig = '####updated per update statement itself####';
7269
7270# check trigger-9 success: 	1
7271DROP TRIGGER trg_2;
7272UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7273f_int2 = CAST(f_char1 AS SIGNED INT),
7274f_charbig = CONCAT('===',f_char1,'===');
7275CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7276BEGIN
7277SET new.f_int1 = new.f_int1 + @max_row,
7278new.f_int2 = new.f_int2 - @max_row,
7279new.f_charbig = '####updated per update trigger####';
7280END|
7281UPDATE t1
7282SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7283f_charbig = '####updated per update statement itself####';
7284
7285# check trigger-10 success: 	1
7286DROP TRIGGER trg_2;
7287UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7288f_int2 = CAST(f_char1 AS SIGNED INT),
7289f_charbig = CONCAT('===',f_char1,'===');
7290CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7291BEGIN
7292SET new.f_int1 = @my_max1 + @counter,
7293new.f_int2 = @my_min2 - @counter,
7294new.f_charbig = '####updated per insert trigger####';
7295SET @counter = @counter + 1;
7296END|
7297SET @counter = 1;
7298SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7299INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7300SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7301CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7302WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7303ORDER BY f_int1;
7304DROP TRIGGER trg_3;
7305
7306# check trigger-11 success: 	1
7307DELETE FROM t1
7308WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7309AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7310AND f_charbig = '####updated per insert trigger####';
7311CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7312BEGIN
7313SET new.f_int1 = @my_max1 + @counter,
7314new.f_int2 = @my_min2 - @counter,
7315new.f_charbig = '####updated per insert trigger####';
7316SET @counter = @counter + 1;
7317END|
7318SET @counter = 1;
7319SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7320INSERT INTO t1 (f_char1, f_char2, f_charbig)
7321SELECT CAST(f_int1 AS CHAR),
7322CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7323WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7324ORDER BY f_int1;
7325DROP TRIGGER trg_3;
7326
7327# check trigger-12 success: 	1
7328DELETE FROM t1
7329WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7330AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7331AND f_charbig = '####updated per insert trigger####';
7332ANALYZE  TABLE t1;
7333Table	Op	Msg_type	Msg_text
7334test.t1	analyze	status	OK
7335CHECK    TABLE t1 EXTENDED;
7336Table	Op	Msg_type	Msg_text
7337test.t1	check	status	OK
7338CHECKSUM TABLE t1 EXTENDED;
7339Table	Checksum
7340test.t1	<some_value>
7341OPTIMIZE TABLE t1;
7342Table	Op	Msg_type	Msg_text
7343test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7344test.t1	optimize	status	OK
7345# check layout success:    1
7346REPAIR   TABLE t1 EXTENDED;
7347Table	Op	Msg_type	Msg_text
7348test.t1	repair	status	OK
7349# check layout success:    1
7350TRUNCATE t1;
7351
7352# check TRUNCATE success: 	1
7353# check layout success:    1
7354# End usability test (inc/partition_check.inc)
7355DROP TABLE t1;
7356CREATE TABLE t1 (
7357f_int1 INTEGER,
7358f_int2 INTEGER,
7359f_char1 CHAR(20),
7360f_char2 CHAR(20),
7361f_charbig VARCHAR(1000)
7362, PRIMARY KEY (f_int1,f_int2)
7363)
7364PARTITION BY LIST(ABS(MOD(f_int1,2)))
7365SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
7366(PARTITION part1 VALUES IN (0),
7367PARTITION part2 VALUES IN (1),
7368PARTITION part3 VALUES IN (NULL));
7369INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7370SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7371WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7372ALTER TABLE t1 MODIFY f_int2 BIGINT;
7373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7374SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7375WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7376# Start usability test (inc/partition_check.inc)
7377create_command
7378SHOW CREATE TABLE t1;
7379Table	Create Table
7380t1	CREATE TABLE `t1` (
7381  `f_int1` int(11) NOT NULL,
7382  `f_int2` bigint(20) NOT NULL,
7383  `f_char1` char(20) DEFAULT NULL,
7384  `f_char2` char(20) DEFAULT NULL,
7385  `f_charbig` varchar(1000) DEFAULT NULL,
7386  PRIMARY KEY (`f_int1`,`f_int2`)
7387) ENGINE=TokuDB DEFAULT CHARSET=latin1
7388/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
7389SUBPARTITION BY KEY (f_int1)
7390SUBPARTITIONS 3
7391(PARTITION part1 VALUES IN (0) ENGINE = TokuDB,
7392 PARTITION part2 VALUES IN (1) ENGINE = TokuDB,
7393 PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */
7394
7395# check prerequisites-1 success:    1
7396# check COUNT(*) success:    1
7397# check MIN/MAX(f_int1) success:    1
7398# check MIN/MAX(f_int2) success:    1
7399INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7400SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7401CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7402WHERE f_int1 IN (2,3);
7403ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7404# check prerequisites-3 success:    1
7405# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7406INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7407SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7408CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7409WHERE f_int1 IN (2,3);
7410DELETE FROM t1 WHERE f_charbig = 'delete me';
7411INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7412SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7413CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7414WHERE f_int1 IN (2,3);
7415DELETE FROM t1 WHERE f_charbig = 'delete me';
7416# check read via f_int1 success: 1
7417# check read via f_int2 success: 1
7418
7419# check multiple-1 success: 	1
7420DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7421
7422# check multiple-2 success: 	1
7423INSERT INTO t1 SELECT * FROM t0_template
7424WHERE MOD(f_int1,3) = 0;
7425
7426# check multiple-3 success: 	1
7427UPDATE t1 SET f_int1 = f_int1 + @max_row
7428WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7429AND @max_row_div2 + @max_row_div4;
7430
7431# check multiple-4 success: 	1
7432DELETE FROM t1
7433WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7434AND @max_row_div2 + @max_row_div4 + @max_row;
7435
7436# check multiple-5 success: 	1
7437SELECT COUNT(*) INTO @try_count FROM t0_template
7438WHERE MOD(f_int1,3) = 0
7439AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7440SELECT COUNT(*) INTO @clash_count
7441FROM t1 INNER JOIN t0_template USING(f_int1)
7442WHERE MOD(f_int1,3) = 0
7443AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7444SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7445INSERT INTO t1
7446SET f_int1 = @cur_value , f_int2 = @cur_value,
7447f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7448f_charbig = '#SINGLE#';
7449
7450# check single-1 success: 	1
7451SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7452INSERT INTO t1
7453SET f_int1 = @cur_value , f_int2 = @cur_value,
7454f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7455f_charbig = '#SINGLE#';
7456
7457# check single-2 success: 	1
7458SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7459SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7460UPDATE t1 SET f_int1 = @cur_value2
7461WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7462
7463# check single-3 success: 	1
7464SET @cur_value1= -1;
7465SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7466UPDATE t1 SET f_int1 = @cur_value1
7467WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7468
7469# check single-4 success: 	1
7470SELECT MAX(f_int1) INTO @cur_value FROM t1;
7471DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7472
7473# check single-5 success: 	1
7474DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7475
7476# check single-6 success: 	1
7477INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7478
7479# check single-7 success: 	1
7480DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7481DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7482INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7483f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7484f_charbig = '#NULL#';
7485INSERT INTO t1
7486SET f_int1 = NULL , f_int2 = -@max_row,
7487f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7488f_charbig = '#NULL#';
7489ERROR 23000: Column 'f_int1' cannot be null
7490# check null success:    1
7491DELETE FROM t1
7492WHERE f_int1 = 0 AND f_int2 = 0
7493AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7494AND f_charbig = '#NULL#';
7495INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7496SELECT f_int1, f_int1, '', '', 'was inserted'
7497   FROM t0_template source_tab
7498WHERE MOD(f_int1,3) = 0
7499AND f_int1 BETWEEN @max_row_div2 AND @max_row
7500ON DUPLICATE KEY
7501UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7502f_int2 = 2 * @max_row + source_tab.f_int1,
7503f_charbig = 'was updated';
7504
7505# check unique-1-a success: 	1
7506
7507# check unique-1-b success: 	1
7508DELETE FROM t1 WHERE f_charbig = 'was inserted';
7509UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7510f_int2 = CAST(f_char1 AS SIGNED INT),
7511f_charbig = CONCAT('===',f_char1,'===')
7512WHERE f_charbig = 'was updated';
7513REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7514SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7515   FROM t0_template source_tab
7516WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7517
7518# check replace success: 	1
7519DELETE FROM t1
7520WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7521DELETE FROM t1
7522WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7523f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7524UPDATE t1 SET f_int2 = f_int1,
7525f_char1 = CAST(f_int1 AS CHAR),
7526f_char2 = CAST(f_int1 AS CHAR),
7527f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7528WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7529SET AUTOCOMMIT= 0;
7530INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7531SELECT f_int1, f_int1, '', '', 'was inserted'
7532FROM t0_template source_tab
7533WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7534
7535# check transactions-1 success: 	1
7536COMMIT WORK;
7537
7538# check transactions-2 success: 	1
7539ROLLBACK WORK;
7540
7541# check transactions-3 success: 	1
7542DELETE FROM t1 WHERE f_charbig = 'was inserted';
7543COMMIT WORK;
7544ROLLBACK WORK;
7545
7546# check transactions-4 success: 	1
7547INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7548SELECT f_int1, f_int1, '', '', 'was inserted'
7549FROM t0_template source_tab
7550WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7551
7552# check transactions-5 success: 	1
7553ROLLBACK WORK;
7554
7555# check transactions-6 success: 	1
7556# INFO: Storage engine used for t1 seems to be transactional.
7557COMMIT;
7558
7559# check transactions-7 success: 	1
7560DELETE FROM t1 WHERE f_charbig = 'was inserted';
7561COMMIT WORK;
7562SET @@session.sql_mode = 'traditional';
7563Warnings:
7564Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7565SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7566INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7567SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7568'', '', 'was inserted' FROM t0_template
7569WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7570ERROR 22012: Division by 0
7571COMMIT;
7572
7573# check transactions-8 success: 	1
7574# INFO: Storage engine used for t1 seems to be able to revert
7575#       changes made by the failing statement.
7576SET @@session.sql_mode = '';
7577Warnings:
7578Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7579SET AUTOCOMMIT= 1;
7580DELETE FROM t1 WHERE f_charbig = 'was inserted';
7581COMMIT WORK;
7582UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7583
7584# check special-1 success: 	1
7585UPDATE t1 SET f_charbig = '';
7586
7587# check special-2 success: 	1
7588UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7589INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7590SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7591WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7592INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7593SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7594'just inserted' FROM t0_template
7595WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7596CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7597BEGIN
7598UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7599f_charbig = 'updated by trigger'
7600      WHERE f_int1 = new.f_int1;
7601END|
7602INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7603SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7604WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7605
7606# check trigger-1 success: 	1
7607DROP TRIGGER trg_1;
7608UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7609f_int2 = CAST(f_char1 AS SIGNED INT),
7610f_charbig = 'just inserted'
7611   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7612DELETE FROM t0_aux
7613WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7614INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7615SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7616'just inserted' FROM t0_template
7617WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7618CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7619BEGIN
7620UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7621f_charbig = 'updated by trigger'
7622      WHERE f_int1 = new.f_int1;
7623END|
7624INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7625SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7627
7628# check trigger-2 success: 	1
7629DROP TRIGGER trg_1;
7630UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7631f_int2 = CAST(f_char1 AS SIGNED INT),
7632f_charbig = 'just inserted'
7633   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7634DELETE FROM t0_aux
7635WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7636INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7637SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7638'just inserted' FROM t0_template
7639WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7640CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7641BEGIN
7642UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7643f_charbig = 'updated by trigger'
7644      WHERE f_int1 = new.f_int1;
7645END|
7646UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7647WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7648
7649# check trigger-3 success: 	1
7650DROP TRIGGER trg_1;
7651UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7652f_int2 = CAST(f_char1 AS SIGNED INT),
7653f_charbig = 'just inserted'
7654   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7655DELETE FROM t0_aux
7656WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7657INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7658SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7659'just inserted' FROM t0_template
7660WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7661CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7662BEGIN
7663UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7664f_charbig = 'updated by trigger'
7665      WHERE f_int1 = - old.f_int1;
7666END|
7667UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7668WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7669
7670# check trigger-4 success: 	1
7671DROP TRIGGER trg_1;
7672UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7673f_int2 = CAST(f_char1 AS SIGNED INT),
7674f_charbig = 'just inserted'
7675   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7676DELETE FROM t0_aux
7677WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7678INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7679SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7680'just inserted' FROM t0_template
7681WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7682CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7683BEGIN
7684UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7685f_charbig = 'updated by trigger'
7686      WHERE f_int1 = new.f_int1;
7687END|
7688UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7689WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7690
7691# check trigger-5 success: 	1
7692DROP TRIGGER trg_1;
7693UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7694f_int2 = CAST(f_char1 AS SIGNED INT),
7695f_charbig = 'just inserted'
7696   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7697DELETE FROM t0_aux
7698WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7699INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7700SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7701'just inserted' FROM t0_template
7702WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7703CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7704BEGIN
7705UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7706f_charbig = 'updated by trigger'
7707      WHERE f_int1 = - old.f_int1;
7708END|
7709UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7710WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7711
7712# check trigger-6 success: 	1
7713DROP TRIGGER trg_1;
7714UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7715f_int2 = CAST(f_char1 AS SIGNED INT),
7716f_charbig = 'just inserted'
7717   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7718DELETE FROM t0_aux
7719WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7720INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7721SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7722'just inserted' FROM t0_template
7723WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7724CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7725BEGIN
7726UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7727f_charbig = 'updated by trigger'
7728      WHERE f_int1 = - old.f_int1;
7729END|
7730DELETE FROM t0_aux
7731WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7732
7733# check trigger-7 success: 	1
7734DROP TRIGGER trg_1;
7735UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7736f_int2 = CAST(f_char1 AS SIGNED INT),
7737f_charbig = 'just inserted'
7738   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7739DELETE FROM t0_aux
7740WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7741INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7742SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7743'just inserted' FROM t0_template
7744WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7745CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7746BEGIN
7747UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7748f_charbig = 'updated by trigger'
7749      WHERE f_int1 = - old.f_int1;
7750END|
7751DELETE FROM t0_aux
7752WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7753
7754# check trigger-8 success: 	1
7755DROP TRIGGER trg_1;
7756UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7757f_int2 = CAST(f_char1 AS SIGNED INT),
7758f_charbig = 'just inserted'
7759   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7760DELETE FROM t0_aux
7761WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7762DELETE FROM t1
7763WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7764CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7765BEGIN
7766SET new.f_int1 = old.f_int1 + @max_row,
7767new.f_int2 = old.f_int2 - @max_row,
7768new.f_charbig = '####updated per update trigger####';
7769END|
7770UPDATE t1
7771SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7772f_charbig = '####updated per update statement itself####';
7773
7774# check trigger-9 success: 	1
7775DROP TRIGGER trg_2;
7776UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7777f_int2 = CAST(f_char1 AS SIGNED INT),
7778f_charbig = CONCAT('===',f_char1,'===');
7779CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7780BEGIN
7781SET new.f_int1 = new.f_int1 + @max_row,
7782new.f_int2 = new.f_int2 - @max_row,
7783new.f_charbig = '####updated per update trigger####';
7784END|
7785UPDATE t1
7786SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7787f_charbig = '####updated per update statement itself####';
7788
7789# check trigger-10 success: 	1
7790DROP TRIGGER trg_2;
7791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7792f_int2 = CAST(f_char1 AS SIGNED INT),
7793f_charbig = CONCAT('===',f_char1,'===');
7794CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7795BEGIN
7796SET new.f_int1 = @my_max1 + @counter,
7797new.f_int2 = @my_min2 - @counter,
7798new.f_charbig = '####updated per insert trigger####';
7799SET @counter = @counter + 1;
7800END|
7801SET @counter = 1;
7802SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7803INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7804SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7805CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7806WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7807ORDER BY f_int1;
7808DROP TRIGGER trg_3;
7809
7810# check trigger-11 success: 	1
7811DELETE FROM t1
7812WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7813AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7814AND f_charbig = '####updated per insert trigger####';
7815CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7816BEGIN
7817SET new.f_int1 = @my_max1 + @counter,
7818new.f_int2 = @my_min2 - @counter,
7819new.f_charbig = '####updated per insert trigger####';
7820SET @counter = @counter + 1;
7821END|
7822SET @counter = 1;
7823SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7824INSERT INTO t1 (f_char1, f_char2, f_charbig)
7825SELECT CAST(f_int1 AS CHAR),
7826CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7827WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7828ORDER BY f_int1;
7829DROP TRIGGER trg_3;
7830
7831# check trigger-12 success: 	1
7832DELETE FROM t1
7833WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7834AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7835AND f_charbig = '####updated per insert trigger####';
7836ANALYZE  TABLE t1;
7837Table	Op	Msg_type	Msg_text
7838test.t1	analyze	status	OK
7839CHECK    TABLE t1 EXTENDED;
7840Table	Op	Msg_type	Msg_text
7841test.t1	check	status	OK
7842CHECKSUM TABLE t1 EXTENDED;
7843Table	Checksum
7844test.t1	<some_value>
7845OPTIMIZE TABLE t1;
7846Table	Op	Msg_type	Msg_text
7847test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7848test.t1	optimize	status	OK
7849# check layout success:    1
7850REPAIR   TABLE t1 EXTENDED;
7851Table	Op	Msg_type	Msg_text
7852test.t1	repair	status	OK
7853# check layout success:    1
7854TRUNCATE t1;
7855
7856# check TRUNCATE success: 	1
7857# check layout success:    1
7858# End usability test (inc/partition_check.inc)
7859DROP TABLE t1;
7860DROP TABLE IF EXISTS t1;
7861CREATE TABLE t1 (
7862f_int1 INTEGER,
7863f_int2 INTEGER,
7864f_char1 CHAR(20),
7865f_char2 CHAR(20),
7866f_charbig VARCHAR(1000)
7867, PRIMARY KEY (f_int2,f_int1)
7868)
7869PARTITION BY HASH(f_int1) PARTITIONS 2;
7870INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7871SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7872WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7873ALTER TABLE t1 MODIFY f_int2 BIGINT;
7874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7876WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7877# Start usability test (inc/partition_check.inc)
7878create_command
7879SHOW CREATE TABLE t1;
7880Table	Create Table
7881t1	CREATE TABLE `t1` (
7882  `f_int1` int(11) NOT NULL,
7883  `f_int2` bigint(20) NOT NULL,
7884  `f_char1` char(20) DEFAULT NULL,
7885  `f_char2` char(20) DEFAULT NULL,
7886  `f_charbig` varchar(1000) DEFAULT NULL,
7887  PRIMARY KEY (`f_int2`,`f_int1`)
7888) ENGINE=TokuDB DEFAULT CHARSET=latin1
7889/*!50100 PARTITION BY HASH (f_int1)
7890PARTITIONS 2 */
7891
7892# check prerequisites-1 success:    1
7893# check COUNT(*) success:    1
7894# check MIN/MAX(f_int1) success:    1
7895# check MIN/MAX(f_int2) success:    1
7896INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7897SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7898CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7899WHERE f_int1 IN (2,3);
7900ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7901# check prerequisites-3 success:    1
7902# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7903INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7904SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7905CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7906WHERE f_int1 IN (2,3);
7907DELETE FROM t1 WHERE f_charbig = 'delete me';
7908INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7909SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7910CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7911WHERE f_int1 IN (2,3);
7912DELETE FROM t1 WHERE f_charbig = 'delete me';
7913# check read via f_int1 success: 1
7914# check read via f_int2 success: 1
7915
7916# check multiple-1 success: 	1
7917DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7918
7919# check multiple-2 success: 	1
7920INSERT INTO t1 SELECT * FROM t0_template
7921WHERE MOD(f_int1,3) = 0;
7922
7923# check multiple-3 success: 	1
7924UPDATE t1 SET f_int1 = f_int1 + @max_row
7925WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7926AND @max_row_div2 + @max_row_div4;
7927
7928# check multiple-4 success: 	1
7929DELETE FROM t1
7930WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7931AND @max_row_div2 + @max_row_div4 + @max_row;
7932
7933# check multiple-5 success: 	1
7934SELECT COUNT(*) INTO @try_count FROM t0_template
7935WHERE MOD(f_int1,3) = 0
7936AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7937SELECT COUNT(*) INTO @clash_count
7938FROM t1 INNER JOIN t0_template USING(f_int1)
7939WHERE MOD(f_int1,3) = 0
7940AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7941SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7942INSERT INTO t1
7943SET f_int1 = @cur_value , f_int2 = @cur_value,
7944f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7945f_charbig = '#SINGLE#';
7946
7947# check single-1 success: 	1
7948SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7949INSERT INTO t1
7950SET f_int1 = @cur_value , f_int2 = @cur_value,
7951f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7952f_charbig = '#SINGLE#';
7953
7954# check single-2 success: 	1
7955SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7956SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7957UPDATE t1 SET f_int1 = @cur_value2
7958WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7959
7960# check single-3 success: 	1
7961SET @cur_value1= -1;
7962SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7963UPDATE t1 SET f_int1 = @cur_value1
7964WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7965
7966# check single-4 success: 	1
7967SELECT MAX(f_int1) INTO @cur_value FROM t1;
7968DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7969
7970# check single-5 success: 	1
7971DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7972
7973# check single-6 success: 	1
7974INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7975
7976# check single-7 success: 	1
7977DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7978DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7979INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7980f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7981f_charbig = '#NULL#';
7982INSERT INTO t1
7983SET f_int1 = NULL , f_int2 = -@max_row,
7984f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7985f_charbig = '#NULL#';
7986ERROR 23000: Column 'f_int1' cannot be null
7987# check null success:    1
7988DELETE FROM t1
7989WHERE f_int1 = 0 AND f_int2 = 0
7990AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7991AND f_charbig = '#NULL#';
7992INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7993SELECT f_int1, f_int1, '', '', 'was inserted'
7994   FROM t0_template source_tab
7995WHERE MOD(f_int1,3) = 0
7996AND f_int1 BETWEEN @max_row_div2 AND @max_row
7997ON DUPLICATE KEY
7998UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7999f_int2 = 2 * @max_row + source_tab.f_int1,
8000f_charbig = 'was updated';
8001
8002# check unique-1-a success: 	1
8003
8004# check unique-1-b success: 	1
8005DELETE FROM t1 WHERE f_charbig = 'was inserted';
8006UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8007f_int2 = CAST(f_char1 AS SIGNED INT),
8008f_charbig = CONCAT('===',f_char1,'===')
8009WHERE f_charbig = 'was updated';
8010REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8011SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8012   FROM t0_template source_tab
8013WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8014
8015# check replace success: 	1
8016DELETE FROM t1
8017WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8018DELETE FROM t1
8019WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8020f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8021UPDATE t1 SET f_int2 = f_int1,
8022f_char1 = CAST(f_int1 AS CHAR),
8023f_char2 = CAST(f_int1 AS CHAR),
8024f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8025WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8026SET AUTOCOMMIT= 0;
8027INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8028SELECT f_int1, f_int1, '', '', 'was inserted'
8029FROM t0_template source_tab
8030WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8031
8032# check transactions-1 success: 	1
8033COMMIT WORK;
8034
8035# check transactions-2 success: 	1
8036ROLLBACK WORK;
8037
8038# check transactions-3 success: 	1
8039DELETE FROM t1 WHERE f_charbig = 'was inserted';
8040COMMIT WORK;
8041ROLLBACK WORK;
8042
8043# check transactions-4 success: 	1
8044INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8045SELECT f_int1, f_int1, '', '', 'was inserted'
8046FROM t0_template source_tab
8047WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8048
8049# check transactions-5 success: 	1
8050ROLLBACK WORK;
8051
8052# check transactions-6 success: 	1
8053# INFO: Storage engine used for t1 seems to be transactional.
8054COMMIT;
8055
8056# check transactions-7 success: 	1
8057DELETE FROM t1 WHERE f_charbig = 'was inserted';
8058COMMIT WORK;
8059SET @@session.sql_mode = 'traditional';
8060Warnings:
8061Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8062SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8063INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8064SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8065'', '', 'was inserted' FROM t0_template
8066WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8067ERROR 22012: Division by 0
8068COMMIT;
8069
8070# check transactions-8 success: 	1
8071# INFO: Storage engine used for t1 seems to be able to revert
8072#       changes made by the failing statement.
8073SET @@session.sql_mode = '';
8074Warnings:
8075Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8076SET AUTOCOMMIT= 1;
8077DELETE FROM t1 WHERE f_charbig = 'was inserted';
8078COMMIT WORK;
8079UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8080
8081# check special-1 success: 	1
8082UPDATE t1 SET f_charbig = '';
8083
8084# check special-2 success: 	1
8085UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8086INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8087SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8088WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8089INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8090SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8091'just inserted' FROM t0_template
8092WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8093CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8094BEGIN
8095UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8096f_charbig = 'updated by trigger'
8097      WHERE f_int1 = new.f_int1;
8098END|
8099INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8100SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8101WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8102
8103# check trigger-1 success: 	1
8104DROP TRIGGER trg_1;
8105UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8106f_int2 = CAST(f_char1 AS SIGNED INT),
8107f_charbig = 'just inserted'
8108   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8109DELETE FROM t0_aux
8110WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8111INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8112SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8113'just inserted' FROM t0_template
8114WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8115CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8116BEGIN
8117UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8118f_charbig = 'updated by trigger'
8119      WHERE f_int1 = new.f_int1;
8120END|
8121INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8122SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8123WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8124
8125# check trigger-2 success: 	1
8126DROP TRIGGER trg_1;
8127UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8128f_int2 = CAST(f_char1 AS SIGNED INT),
8129f_charbig = 'just inserted'
8130   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8131DELETE FROM t0_aux
8132WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8133INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8134SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8135'just inserted' FROM t0_template
8136WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8137CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8138BEGIN
8139UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8140f_charbig = 'updated by trigger'
8141      WHERE f_int1 = new.f_int1;
8142END|
8143UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8144WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8145
8146# check trigger-3 success: 	1
8147DROP TRIGGER trg_1;
8148UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8149f_int2 = CAST(f_char1 AS SIGNED INT),
8150f_charbig = 'just inserted'
8151   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8152DELETE FROM t0_aux
8153WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8154INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8155SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8156'just inserted' FROM t0_template
8157WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8158CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8159BEGIN
8160UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8161f_charbig = 'updated by trigger'
8162      WHERE f_int1 = - old.f_int1;
8163END|
8164UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8165WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8166
8167# check trigger-4 success: 	1
8168DROP TRIGGER trg_1;
8169UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8170f_int2 = CAST(f_char1 AS SIGNED INT),
8171f_charbig = 'just inserted'
8172   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8173DELETE FROM t0_aux
8174WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8175INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8176SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8177'just inserted' FROM t0_template
8178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8179CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8180BEGIN
8181UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8182f_charbig = 'updated by trigger'
8183      WHERE f_int1 = new.f_int1;
8184END|
8185UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8186WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8187
8188# check trigger-5 success: 	1
8189DROP TRIGGER trg_1;
8190UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8191f_int2 = CAST(f_char1 AS SIGNED INT),
8192f_charbig = 'just inserted'
8193   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8194DELETE FROM t0_aux
8195WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8196INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8197SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8198'just inserted' FROM t0_template
8199WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8200CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8201BEGIN
8202UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8203f_charbig = 'updated by trigger'
8204      WHERE f_int1 = - old.f_int1;
8205END|
8206UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8207WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8208
8209# check trigger-6 success: 	1
8210DROP TRIGGER trg_1;
8211UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8212f_int2 = CAST(f_char1 AS SIGNED INT),
8213f_charbig = 'just inserted'
8214   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8215DELETE FROM t0_aux
8216WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8217INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8218SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8219'just inserted' FROM t0_template
8220WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8221CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8222BEGIN
8223UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8224f_charbig = 'updated by trigger'
8225      WHERE f_int1 = - old.f_int1;
8226END|
8227DELETE FROM t0_aux
8228WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8229
8230# check trigger-7 success: 	1
8231DROP TRIGGER trg_1;
8232UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8233f_int2 = CAST(f_char1 AS SIGNED INT),
8234f_charbig = 'just inserted'
8235   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8236DELETE FROM t0_aux
8237WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8238INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8239SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8240'just inserted' FROM t0_template
8241WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8242CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8243BEGIN
8244UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8245f_charbig = 'updated by trigger'
8246      WHERE f_int1 = - old.f_int1;
8247END|
8248DELETE FROM t0_aux
8249WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8250
8251# check trigger-8 success: 	1
8252DROP TRIGGER trg_1;
8253UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8254f_int2 = CAST(f_char1 AS SIGNED INT),
8255f_charbig = 'just inserted'
8256   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8257DELETE FROM t0_aux
8258WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8259DELETE FROM t1
8260WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8261CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8262BEGIN
8263SET new.f_int1 = old.f_int1 + @max_row,
8264new.f_int2 = old.f_int2 - @max_row,
8265new.f_charbig = '####updated per update trigger####';
8266END|
8267UPDATE t1
8268SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8269f_charbig = '####updated per update statement itself####';
8270
8271# check trigger-9 success: 	1
8272DROP TRIGGER trg_2;
8273UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8274f_int2 = CAST(f_char1 AS SIGNED INT),
8275f_charbig = CONCAT('===',f_char1,'===');
8276CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8277BEGIN
8278SET new.f_int1 = new.f_int1 + @max_row,
8279new.f_int2 = new.f_int2 - @max_row,
8280new.f_charbig = '####updated per update trigger####';
8281END|
8282UPDATE t1
8283SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8284f_charbig = '####updated per update statement itself####';
8285
8286# check trigger-10 success: 	1
8287DROP TRIGGER trg_2;
8288UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8289f_int2 = CAST(f_char1 AS SIGNED INT),
8290f_charbig = CONCAT('===',f_char1,'===');
8291CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8292BEGIN
8293SET new.f_int1 = @my_max1 + @counter,
8294new.f_int2 = @my_min2 - @counter,
8295new.f_charbig = '####updated per insert trigger####';
8296SET @counter = @counter + 1;
8297END|
8298SET @counter = 1;
8299SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8300INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8301SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8302CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8303WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8304ORDER BY f_int1;
8305DROP TRIGGER trg_3;
8306
8307# check trigger-11 success: 	1
8308DELETE FROM t1
8309WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8310AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8311AND f_charbig = '####updated per insert trigger####';
8312CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8313BEGIN
8314SET new.f_int1 = @my_max1 + @counter,
8315new.f_int2 = @my_min2 - @counter,
8316new.f_charbig = '####updated per insert trigger####';
8317SET @counter = @counter + 1;
8318END|
8319SET @counter = 1;
8320SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8321INSERT INTO t1 (f_char1, f_char2, f_charbig)
8322SELECT CAST(f_int1 AS CHAR),
8323CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8324WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8325ORDER BY f_int1;
8326DROP TRIGGER trg_3;
8327
8328# check trigger-12 success: 	1
8329DELETE FROM t1
8330WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8331AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8332AND f_charbig = '####updated per insert trigger####';
8333ANALYZE  TABLE t1;
8334Table	Op	Msg_type	Msg_text
8335test.t1	analyze	status	OK
8336CHECK    TABLE t1 EXTENDED;
8337Table	Op	Msg_type	Msg_text
8338test.t1	check	status	OK
8339CHECKSUM TABLE t1 EXTENDED;
8340Table	Checksum
8341test.t1	<some_value>
8342OPTIMIZE TABLE t1;
8343Table	Op	Msg_type	Msg_text
8344test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8345test.t1	optimize	status	OK
8346# check layout success:    1
8347REPAIR   TABLE t1 EXTENDED;
8348Table	Op	Msg_type	Msg_text
8349test.t1	repair	status	OK
8350# check layout success:    1
8351TRUNCATE t1;
8352
8353# check TRUNCATE success: 	1
8354# check layout success:    1
8355# End usability test (inc/partition_check.inc)
8356DROP TABLE t1;
8357CREATE TABLE t1 (
8358f_int1 INTEGER,
8359f_int2 INTEGER,
8360f_char1 CHAR(20),
8361f_char2 CHAR(20),
8362f_charbig VARCHAR(1000)
8363, PRIMARY KEY (f_int2,f_int1)
8364)
8365PARTITION BY KEY(f_int1) PARTITIONS 5;
8366INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8367SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8368WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8369ALTER TABLE t1 MODIFY f_int2 BIGINT;
8370INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8371SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8372WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8373# Start usability test (inc/partition_check.inc)
8374create_command
8375SHOW CREATE TABLE t1;
8376Table	Create Table
8377t1	CREATE TABLE `t1` (
8378  `f_int1` int(11) NOT NULL,
8379  `f_int2` bigint(20) NOT NULL,
8380  `f_char1` char(20) DEFAULT NULL,
8381  `f_char2` char(20) DEFAULT NULL,
8382  `f_charbig` varchar(1000) DEFAULT NULL,
8383  PRIMARY KEY (`f_int2`,`f_int1`)
8384) ENGINE=TokuDB DEFAULT CHARSET=latin1
8385/*!50100 PARTITION BY KEY (f_int1)
8386PARTITIONS 5 */
8387
8388# check prerequisites-1 success:    1
8389# check COUNT(*) success:    1
8390# check MIN/MAX(f_int1) success:    1
8391# check MIN/MAX(f_int2) success:    1
8392INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8393SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8394CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8395WHERE f_int1 IN (2,3);
8396ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8397# check prerequisites-3 success:    1
8398# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8399INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8400SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8401CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8402WHERE f_int1 IN (2,3);
8403DELETE FROM t1 WHERE f_charbig = 'delete me';
8404INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8405SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8406CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8407WHERE f_int1 IN (2,3);
8408DELETE FROM t1 WHERE f_charbig = 'delete me';
8409# check read via f_int1 success: 1
8410# check read via f_int2 success: 1
8411
8412# check multiple-1 success: 	1
8413DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8414
8415# check multiple-2 success: 	1
8416INSERT INTO t1 SELECT * FROM t0_template
8417WHERE MOD(f_int1,3) = 0;
8418
8419# check multiple-3 success: 	1
8420UPDATE t1 SET f_int1 = f_int1 + @max_row
8421WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8422AND @max_row_div2 + @max_row_div4;
8423
8424# check multiple-4 success: 	1
8425DELETE FROM t1
8426WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8427AND @max_row_div2 + @max_row_div4 + @max_row;
8428
8429# check multiple-5 success: 	1
8430SELECT COUNT(*) INTO @try_count FROM t0_template
8431WHERE MOD(f_int1,3) = 0
8432AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8433SELECT COUNT(*) INTO @clash_count
8434FROM t1 INNER JOIN t0_template USING(f_int1)
8435WHERE MOD(f_int1,3) = 0
8436AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8437SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8438INSERT INTO t1
8439SET f_int1 = @cur_value , f_int2 = @cur_value,
8440f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8441f_charbig = '#SINGLE#';
8442
8443# check single-1 success: 	1
8444SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8445INSERT INTO t1
8446SET f_int1 = @cur_value , f_int2 = @cur_value,
8447f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8448f_charbig = '#SINGLE#';
8449
8450# check single-2 success: 	1
8451SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8452SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8453UPDATE t1 SET f_int1 = @cur_value2
8454WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8455
8456# check single-3 success: 	1
8457SET @cur_value1= -1;
8458SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8459UPDATE t1 SET f_int1 = @cur_value1
8460WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8461
8462# check single-4 success: 	1
8463SELECT MAX(f_int1) INTO @cur_value FROM t1;
8464DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8465
8466# check single-5 success: 	1
8467DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8468
8469# check single-6 success: 	1
8470INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8471
8472# check single-7 success: 	1
8473DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8474DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8475INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8476f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8477f_charbig = '#NULL#';
8478INSERT INTO t1
8479SET f_int1 = NULL , f_int2 = -@max_row,
8480f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8481f_charbig = '#NULL#';
8482ERROR 23000: Column 'f_int1' cannot be null
8483# check null success:    1
8484DELETE FROM t1
8485WHERE f_int1 = 0 AND f_int2 = 0
8486AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8487AND f_charbig = '#NULL#';
8488INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8489SELECT f_int1, f_int1, '', '', 'was inserted'
8490   FROM t0_template source_tab
8491WHERE MOD(f_int1,3) = 0
8492AND f_int1 BETWEEN @max_row_div2 AND @max_row
8493ON DUPLICATE KEY
8494UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8495f_int2 = 2 * @max_row + source_tab.f_int1,
8496f_charbig = 'was updated';
8497
8498# check unique-1-a success: 	1
8499
8500# check unique-1-b success: 	1
8501DELETE FROM t1 WHERE f_charbig = 'was inserted';
8502UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8503f_int2 = CAST(f_char1 AS SIGNED INT),
8504f_charbig = CONCAT('===',f_char1,'===')
8505WHERE f_charbig = 'was updated';
8506REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8507SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8508   FROM t0_template source_tab
8509WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8510
8511# check replace success: 	1
8512DELETE FROM t1
8513WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8514DELETE FROM t1
8515WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8516f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8517UPDATE t1 SET f_int2 = f_int1,
8518f_char1 = CAST(f_int1 AS CHAR),
8519f_char2 = CAST(f_int1 AS CHAR),
8520f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8521WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8522SET AUTOCOMMIT= 0;
8523INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8524SELECT f_int1, f_int1, '', '', 'was inserted'
8525FROM t0_template source_tab
8526WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8527
8528# check transactions-1 success: 	1
8529COMMIT WORK;
8530
8531# check transactions-2 success: 	1
8532ROLLBACK WORK;
8533
8534# check transactions-3 success: 	1
8535DELETE FROM t1 WHERE f_charbig = 'was inserted';
8536COMMIT WORK;
8537ROLLBACK WORK;
8538
8539# check transactions-4 success: 	1
8540INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8541SELECT f_int1, f_int1, '', '', 'was inserted'
8542FROM t0_template source_tab
8543WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8544
8545# check transactions-5 success: 	1
8546ROLLBACK WORK;
8547
8548# check transactions-6 success: 	1
8549# INFO: Storage engine used for t1 seems to be transactional.
8550COMMIT;
8551
8552# check transactions-7 success: 	1
8553DELETE FROM t1 WHERE f_charbig = 'was inserted';
8554COMMIT WORK;
8555SET @@session.sql_mode = 'traditional';
8556Warnings:
8557Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8558SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8559INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8560SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8561'', '', 'was inserted' FROM t0_template
8562WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8563ERROR 22012: Division by 0
8564COMMIT;
8565
8566# check transactions-8 success: 	1
8567# INFO: Storage engine used for t1 seems to be able to revert
8568#       changes made by the failing statement.
8569SET @@session.sql_mode = '';
8570Warnings:
8571Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8572SET AUTOCOMMIT= 1;
8573DELETE FROM t1 WHERE f_charbig = 'was inserted';
8574COMMIT WORK;
8575UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8576
8577# check special-1 success: 	1
8578UPDATE t1 SET f_charbig = '';
8579
8580# check special-2 success: 	1
8581UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8582INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8583SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8584WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8585INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8586SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8587'just inserted' FROM t0_template
8588WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8589CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8590BEGIN
8591UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8592f_charbig = 'updated by trigger'
8593      WHERE f_int1 = new.f_int1;
8594END|
8595INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8596SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8597WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8598
8599# check trigger-1 success: 	1
8600DROP TRIGGER trg_1;
8601UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8602f_int2 = CAST(f_char1 AS SIGNED INT),
8603f_charbig = 'just inserted'
8604   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8605DELETE FROM t0_aux
8606WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8607INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8608SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8609'just inserted' FROM t0_template
8610WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8611CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8612BEGIN
8613UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8614f_charbig = 'updated by trigger'
8615      WHERE f_int1 = new.f_int1;
8616END|
8617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8618SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8619WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8620
8621# check trigger-2 success: 	1
8622DROP TRIGGER trg_1;
8623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8624f_int2 = CAST(f_char1 AS SIGNED INT),
8625f_charbig = 'just inserted'
8626   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8627DELETE FROM t0_aux
8628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8629INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8630SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8631'just inserted' FROM t0_template
8632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8633CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8634BEGIN
8635UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8636f_charbig = 'updated by trigger'
8637      WHERE f_int1 = new.f_int1;
8638END|
8639UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8640WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8641
8642# check trigger-3 success: 	1
8643DROP TRIGGER trg_1;
8644UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8645f_int2 = CAST(f_char1 AS SIGNED INT),
8646f_charbig = 'just inserted'
8647   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8648DELETE FROM t0_aux
8649WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8650INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8651SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8652'just inserted' FROM t0_template
8653WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8654CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8655BEGIN
8656UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8657f_charbig = 'updated by trigger'
8658      WHERE f_int1 = - old.f_int1;
8659END|
8660UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8661WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8662
8663# check trigger-4 success: 	1
8664DROP TRIGGER trg_1;
8665UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8666f_int2 = CAST(f_char1 AS SIGNED INT),
8667f_charbig = 'just inserted'
8668   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8669DELETE FROM t0_aux
8670WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8671INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8672SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8673'just inserted' FROM t0_template
8674WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8675CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8676BEGIN
8677UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8678f_charbig = 'updated by trigger'
8679      WHERE f_int1 = new.f_int1;
8680END|
8681UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8682WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8683
8684# check trigger-5 success: 	1
8685DROP TRIGGER trg_1;
8686UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8687f_int2 = CAST(f_char1 AS SIGNED INT),
8688f_charbig = 'just inserted'
8689   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8690DELETE FROM t0_aux
8691WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8692INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8693SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8694'just inserted' FROM t0_template
8695WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8696CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8697BEGIN
8698UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8699f_charbig = 'updated by trigger'
8700      WHERE f_int1 = - old.f_int1;
8701END|
8702UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8703WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8704
8705# check trigger-6 success: 	1
8706DROP TRIGGER trg_1;
8707UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8708f_int2 = CAST(f_char1 AS SIGNED INT),
8709f_charbig = 'just inserted'
8710   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8711DELETE FROM t0_aux
8712WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8713INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8714SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8715'just inserted' FROM t0_template
8716WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8717CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8718BEGIN
8719UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8720f_charbig = 'updated by trigger'
8721      WHERE f_int1 = - old.f_int1;
8722END|
8723DELETE FROM t0_aux
8724WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8725
8726# check trigger-7 success: 	1
8727DROP TRIGGER trg_1;
8728UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8729f_int2 = CAST(f_char1 AS SIGNED INT),
8730f_charbig = 'just inserted'
8731   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8732DELETE FROM t0_aux
8733WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8734INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8735SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8736'just inserted' FROM t0_template
8737WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8738CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8739BEGIN
8740UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8741f_charbig = 'updated by trigger'
8742      WHERE f_int1 = - old.f_int1;
8743END|
8744DELETE FROM t0_aux
8745WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8746
8747# check trigger-8 success: 	1
8748DROP TRIGGER trg_1;
8749UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8750f_int2 = CAST(f_char1 AS SIGNED INT),
8751f_charbig = 'just inserted'
8752   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8753DELETE FROM t0_aux
8754WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8755DELETE FROM t1
8756WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8757CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8758BEGIN
8759SET new.f_int1 = old.f_int1 + @max_row,
8760new.f_int2 = old.f_int2 - @max_row,
8761new.f_charbig = '####updated per update trigger####';
8762END|
8763UPDATE t1
8764SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8765f_charbig = '####updated per update statement itself####';
8766
8767# check trigger-9 success: 	1
8768DROP TRIGGER trg_2;
8769UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8770f_int2 = CAST(f_char1 AS SIGNED INT),
8771f_charbig = CONCAT('===',f_char1,'===');
8772CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8773BEGIN
8774SET new.f_int1 = new.f_int1 + @max_row,
8775new.f_int2 = new.f_int2 - @max_row,
8776new.f_charbig = '####updated per update trigger####';
8777END|
8778UPDATE t1
8779SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8780f_charbig = '####updated per update statement itself####';
8781
8782# check trigger-10 success: 	1
8783DROP TRIGGER trg_2;
8784UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8785f_int2 = CAST(f_char1 AS SIGNED INT),
8786f_charbig = CONCAT('===',f_char1,'===');
8787CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8788BEGIN
8789SET new.f_int1 = @my_max1 + @counter,
8790new.f_int2 = @my_min2 - @counter,
8791new.f_charbig = '####updated per insert trigger####';
8792SET @counter = @counter + 1;
8793END|
8794SET @counter = 1;
8795SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8796INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8797SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8798CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8799WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8800ORDER BY f_int1;
8801DROP TRIGGER trg_3;
8802
8803# check trigger-11 success: 	1
8804DELETE FROM t1
8805WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8806AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8807AND f_charbig = '####updated per insert trigger####';
8808CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8809BEGIN
8810SET new.f_int1 = @my_max1 + @counter,
8811new.f_int2 = @my_min2 - @counter,
8812new.f_charbig = '####updated per insert trigger####';
8813SET @counter = @counter + 1;
8814END|
8815SET @counter = 1;
8816SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8817INSERT INTO t1 (f_char1, f_char2, f_charbig)
8818SELECT CAST(f_int1 AS CHAR),
8819CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8820WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8821ORDER BY f_int1;
8822DROP TRIGGER trg_3;
8823
8824# check trigger-12 success: 	1
8825DELETE FROM t1
8826WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8827AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8828AND f_charbig = '####updated per insert trigger####';
8829ANALYZE  TABLE t1;
8830Table	Op	Msg_type	Msg_text
8831test.t1	analyze	status	OK
8832CHECK    TABLE t1 EXTENDED;
8833Table	Op	Msg_type	Msg_text
8834test.t1	check	status	OK
8835CHECKSUM TABLE t1 EXTENDED;
8836Table	Checksum
8837test.t1	<some_value>
8838OPTIMIZE TABLE t1;
8839Table	Op	Msg_type	Msg_text
8840test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8841test.t1	optimize	status	OK
8842# check layout success:    1
8843REPAIR   TABLE t1 EXTENDED;
8844Table	Op	Msg_type	Msg_text
8845test.t1	repair	status	OK
8846# check layout success:    1
8847TRUNCATE t1;
8848
8849# check TRUNCATE success: 	1
8850# check layout success:    1
8851# End usability test (inc/partition_check.inc)
8852DROP TABLE t1;
8853CREATE TABLE t1 (
8854f_int1 INTEGER,
8855f_int2 INTEGER,
8856f_char1 CHAR(20),
8857f_char2 CHAR(20),
8858f_charbig VARCHAR(1000)
8859, PRIMARY KEY (f_int2,f_int1)
8860)
8861PARTITION BY LIST(MOD(f_int1,4))
8862(PARTITION part_3 VALUES IN (-3),
8863PARTITION part_2 VALUES IN (-2),
8864PARTITION part_1 VALUES IN (-1),
8865PARTITION part_N VALUES IN (NULL),
8866PARTITION part0 VALUES IN (0),
8867PARTITION part1 VALUES IN (1),
8868PARTITION part2 VALUES IN (2),
8869PARTITION part3 VALUES IN (3));
8870INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8871SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8872WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8873ALTER TABLE t1 MODIFY f_int2 BIGINT;
8874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8876WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8877# Start usability test (inc/partition_check.inc)
8878create_command
8879SHOW CREATE TABLE t1;
8880Table	Create Table
8881t1	CREATE TABLE `t1` (
8882  `f_int1` int(11) NOT NULL,
8883  `f_int2` bigint(20) NOT NULL,
8884  `f_char1` char(20) DEFAULT NULL,
8885  `f_char2` char(20) DEFAULT NULL,
8886  `f_charbig` varchar(1000) DEFAULT NULL,
8887  PRIMARY KEY (`f_int2`,`f_int1`)
8888) ENGINE=TokuDB DEFAULT CHARSET=latin1
8889/*!50100 PARTITION BY LIST (MOD(f_int1,4))
8890(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB,
8891 PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB,
8892 PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB,
8893 PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB,
8894 PARTITION part0 VALUES IN (0) ENGINE = TokuDB,
8895 PARTITION part1 VALUES IN (1) ENGINE = TokuDB,
8896 PARTITION part2 VALUES IN (2) ENGINE = TokuDB,
8897 PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */
8898
8899# check prerequisites-1 success:    1
8900# check COUNT(*) success:    1
8901# check MIN/MAX(f_int1) success:    1
8902# check MIN/MAX(f_int2) success:    1
8903INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8904SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8905CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8906WHERE f_int1 IN (2,3);
8907ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8908# check prerequisites-3 success:    1
8909# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8910INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8911SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8912CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8913WHERE f_int1 IN (2,3);
8914DELETE FROM t1 WHERE f_charbig = 'delete me';
8915INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8916SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8917CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8918WHERE f_int1 IN (2,3);
8919DELETE FROM t1 WHERE f_charbig = 'delete me';
8920# check read via f_int1 success: 1
8921# check read via f_int2 success: 1
8922
8923# check multiple-1 success: 	1
8924DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8925
8926# check multiple-2 success: 	1
8927INSERT INTO t1 SELECT * FROM t0_template
8928WHERE MOD(f_int1,3) = 0;
8929
8930# check multiple-3 success: 	1
8931UPDATE t1 SET f_int1 = f_int1 + @max_row
8932WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8933AND @max_row_div2 + @max_row_div4;
8934
8935# check multiple-4 success: 	1
8936DELETE FROM t1
8937WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8938AND @max_row_div2 + @max_row_div4 + @max_row;
8939
8940# check multiple-5 success: 	1
8941SELECT COUNT(*) INTO @try_count FROM t0_template
8942WHERE MOD(f_int1,3) = 0
8943AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8944SELECT COUNT(*) INTO @clash_count
8945FROM t1 INNER JOIN t0_template USING(f_int1)
8946WHERE MOD(f_int1,3) = 0
8947AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8948SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8949INSERT INTO t1
8950SET f_int1 = @cur_value , f_int2 = @cur_value,
8951f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8952f_charbig = '#SINGLE#';
8953
8954# check single-1 success: 	1
8955SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8956INSERT INTO t1
8957SET f_int1 = @cur_value , f_int2 = @cur_value,
8958f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8959f_charbig = '#SINGLE#';
8960
8961# check single-2 success: 	1
8962SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8963SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8964UPDATE t1 SET f_int1 = @cur_value2
8965WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8966
8967# check single-3 success: 	1
8968SET @cur_value1= -1;
8969SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8970UPDATE t1 SET f_int1 = @cur_value1
8971WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8972
8973# check single-4 success: 	1
8974SELECT MAX(f_int1) INTO @cur_value FROM t1;
8975DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8976
8977# check single-5 success: 	1
8978DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8979
8980# check single-6 success: 	1
8981INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8982
8983# check single-7 success: 	1
8984DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8985DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8986INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8987f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8988f_charbig = '#NULL#';
8989INSERT INTO t1
8990SET f_int1 = NULL , f_int2 = -@max_row,
8991f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8992f_charbig = '#NULL#';
8993ERROR 23000: Column 'f_int1' cannot be null
8994# check null success:    1
8995DELETE FROM t1
8996WHERE f_int1 = 0 AND f_int2 = 0
8997AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8998AND f_charbig = '#NULL#';
8999INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9000SELECT f_int1, f_int1, '', '', 'was inserted'
9001   FROM t0_template source_tab
9002WHERE MOD(f_int1,3) = 0
9003AND f_int1 BETWEEN @max_row_div2 AND @max_row
9004ON DUPLICATE KEY
9005UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9006f_int2 = 2 * @max_row + source_tab.f_int1,
9007f_charbig = 'was updated';
9008
9009# check unique-1-a success: 	1
9010
9011# check unique-1-b success: 	1
9012DELETE FROM t1 WHERE f_charbig = 'was inserted';
9013UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9014f_int2 = CAST(f_char1 AS SIGNED INT),
9015f_charbig = CONCAT('===',f_char1,'===')
9016WHERE f_charbig = 'was updated';
9017REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9018SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9019   FROM t0_template source_tab
9020WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9021
9022# check replace success: 	1
9023DELETE FROM t1
9024WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9025DELETE FROM t1
9026WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9027f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9028UPDATE t1 SET f_int2 = f_int1,
9029f_char1 = CAST(f_int1 AS CHAR),
9030f_char2 = CAST(f_int1 AS CHAR),
9031f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9032WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9033SET AUTOCOMMIT= 0;
9034INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9035SELECT f_int1, f_int1, '', '', 'was inserted'
9036FROM t0_template source_tab
9037WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9038
9039# check transactions-1 success: 	1
9040COMMIT WORK;
9041
9042# check transactions-2 success: 	1
9043ROLLBACK WORK;
9044
9045# check transactions-3 success: 	1
9046DELETE FROM t1 WHERE f_charbig = 'was inserted';
9047COMMIT WORK;
9048ROLLBACK WORK;
9049
9050# check transactions-4 success: 	1
9051INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9052SELECT f_int1, f_int1, '', '', 'was inserted'
9053FROM t0_template source_tab
9054WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9055
9056# check transactions-5 success: 	1
9057ROLLBACK WORK;
9058
9059# check transactions-6 success: 	1
9060# INFO: Storage engine used for t1 seems to be transactional.
9061COMMIT;
9062
9063# check transactions-7 success: 	1
9064DELETE FROM t1 WHERE f_charbig = 'was inserted';
9065COMMIT WORK;
9066SET @@session.sql_mode = 'traditional';
9067Warnings:
9068Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9069SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9070INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9071SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9072'', '', 'was inserted' FROM t0_template
9073WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9074ERROR 22012: Division by 0
9075COMMIT;
9076
9077# check transactions-8 success: 	1
9078# INFO: Storage engine used for t1 seems to be able to revert
9079#       changes made by the failing statement.
9080SET @@session.sql_mode = '';
9081Warnings:
9082Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9083SET AUTOCOMMIT= 1;
9084DELETE FROM t1 WHERE f_charbig = 'was inserted';
9085COMMIT WORK;
9086UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9087
9088# check special-1 success: 	1
9089UPDATE t1 SET f_charbig = '';
9090
9091# check special-2 success: 	1
9092UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9093INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9094SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9096INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9097SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9098'just inserted' FROM t0_template
9099WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9100CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9101BEGIN
9102UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9103f_charbig = 'updated by trigger'
9104      WHERE f_int1 = new.f_int1;
9105END|
9106INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9107SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9108WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9109
9110# check trigger-1 success: 	1
9111DROP TRIGGER trg_1;
9112UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9113f_int2 = CAST(f_char1 AS SIGNED INT),
9114f_charbig = 'just inserted'
9115   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9116DELETE FROM t0_aux
9117WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9118INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9119SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9120'just inserted' FROM t0_template
9121WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9122CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9123BEGIN
9124UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9125f_charbig = 'updated by trigger'
9126      WHERE f_int1 = new.f_int1;
9127END|
9128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9129SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9130WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9131
9132# check trigger-2 success: 	1
9133DROP TRIGGER trg_1;
9134UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9135f_int2 = CAST(f_char1 AS SIGNED INT),
9136f_charbig = 'just inserted'
9137   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9138DELETE FROM t0_aux
9139WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9141SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9142'just inserted' FROM t0_template
9143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9144CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9145BEGIN
9146UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9147f_charbig = 'updated by trigger'
9148      WHERE f_int1 = new.f_int1;
9149END|
9150UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9151WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9152
9153# check trigger-3 success: 	1
9154DROP TRIGGER trg_1;
9155UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9156f_int2 = CAST(f_char1 AS SIGNED INT),
9157f_charbig = 'just inserted'
9158   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9159DELETE FROM t0_aux
9160WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9161INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9162SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9163'just inserted' FROM t0_template
9164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9165CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9166BEGIN
9167UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9168f_charbig = 'updated by trigger'
9169      WHERE f_int1 = - old.f_int1;
9170END|
9171UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9172WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9173
9174# check trigger-4 success: 	1
9175DROP TRIGGER trg_1;
9176UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9177f_int2 = CAST(f_char1 AS SIGNED INT),
9178f_charbig = 'just inserted'
9179   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9180DELETE FROM t0_aux
9181WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9182INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9183SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9184'just inserted' FROM t0_template
9185WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9186CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9187BEGIN
9188UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9189f_charbig = 'updated by trigger'
9190      WHERE f_int1 = new.f_int1;
9191END|
9192UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9193WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9194
9195# check trigger-5 success: 	1
9196DROP TRIGGER trg_1;
9197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9198f_int2 = CAST(f_char1 AS SIGNED INT),
9199f_charbig = 'just inserted'
9200   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9201DELETE FROM t0_aux
9202WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9203INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9204SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9205'just inserted' FROM t0_template
9206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9207CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9208BEGIN
9209UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9210f_charbig = 'updated by trigger'
9211      WHERE f_int1 = - old.f_int1;
9212END|
9213UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9214WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9215
9216# check trigger-6 success: 	1
9217DROP TRIGGER trg_1;
9218UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9219f_int2 = CAST(f_char1 AS SIGNED INT),
9220f_charbig = 'just inserted'
9221   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9222DELETE FROM t0_aux
9223WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9224INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9225SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9226'just inserted' FROM t0_template
9227WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9228CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9229BEGIN
9230UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9231f_charbig = 'updated by trigger'
9232      WHERE f_int1 = - old.f_int1;
9233END|
9234DELETE FROM t0_aux
9235WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9236
9237# check trigger-7 success: 	1
9238DROP TRIGGER trg_1;
9239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9240f_int2 = CAST(f_char1 AS SIGNED INT),
9241f_charbig = 'just inserted'
9242   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9243DELETE FROM t0_aux
9244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9245INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9246SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9247'just inserted' FROM t0_template
9248WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9249CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9250BEGIN
9251UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9252f_charbig = 'updated by trigger'
9253      WHERE f_int1 = - old.f_int1;
9254END|
9255DELETE FROM t0_aux
9256WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9257
9258# check trigger-8 success: 	1
9259DROP TRIGGER trg_1;
9260UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9261f_int2 = CAST(f_char1 AS SIGNED INT),
9262f_charbig = 'just inserted'
9263   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9264DELETE FROM t0_aux
9265WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9266DELETE FROM t1
9267WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9268CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9269BEGIN
9270SET new.f_int1 = old.f_int1 + @max_row,
9271new.f_int2 = old.f_int2 - @max_row,
9272new.f_charbig = '####updated per update trigger####';
9273END|
9274UPDATE t1
9275SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9276f_charbig = '####updated per update statement itself####';
9277
9278# check trigger-9 success: 	1
9279DROP TRIGGER trg_2;
9280UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9281f_int2 = CAST(f_char1 AS SIGNED INT),
9282f_charbig = CONCAT('===',f_char1,'===');
9283CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9284BEGIN
9285SET new.f_int1 = new.f_int1 + @max_row,
9286new.f_int2 = new.f_int2 - @max_row,
9287new.f_charbig = '####updated per update trigger####';
9288END|
9289UPDATE t1
9290SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9291f_charbig = '####updated per update statement itself####';
9292
9293# check trigger-10 success: 	1
9294DROP TRIGGER trg_2;
9295UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9296f_int2 = CAST(f_char1 AS SIGNED INT),
9297f_charbig = CONCAT('===',f_char1,'===');
9298CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9299BEGIN
9300SET new.f_int1 = @my_max1 + @counter,
9301new.f_int2 = @my_min2 - @counter,
9302new.f_charbig = '####updated per insert trigger####';
9303SET @counter = @counter + 1;
9304END|
9305SET @counter = 1;
9306SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9307INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9308SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9309CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9311ORDER BY f_int1;
9312DROP TRIGGER trg_3;
9313
9314# check trigger-11 success: 	1
9315DELETE FROM t1
9316WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9317AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9318AND f_charbig = '####updated per insert trigger####';
9319CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9320BEGIN
9321SET new.f_int1 = @my_max1 + @counter,
9322new.f_int2 = @my_min2 - @counter,
9323new.f_charbig = '####updated per insert trigger####';
9324SET @counter = @counter + 1;
9325END|
9326SET @counter = 1;
9327SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9328INSERT INTO t1 (f_char1, f_char2, f_charbig)
9329SELECT CAST(f_int1 AS CHAR),
9330CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9331WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9332ORDER BY f_int1;
9333DROP TRIGGER trg_3;
9334
9335# check trigger-12 success: 	1
9336DELETE FROM t1
9337WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9338AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9339AND f_charbig = '####updated per insert trigger####';
9340ANALYZE  TABLE t1;
9341Table	Op	Msg_type	Msg_text
9342test.t1	analyze	status	OK
9343CHECK    TABLE t1 EXTENDED;
9344Table	Op	Msg_type	Msg_text
9345test.t1	check	status	OK
9346CHECKSUM TABLE t1 EXTENDED;
9347Table	Checksum
9348test.t1	<some_value>
9349OPTIMIZE TABLE t1;
9350Table	Op	Msg_type	Msg_text
9351test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9352test.t1	optimize	status	OK
9353# check layout success:    1
9354REPAIR   TABLE t1 EXTENDED;
9355Table	Op	Msg_type	Msg_text
9356test.t1	repair	status	OK
9357# check layout success:    1
9358TRUNCATE t1;
9359
9360# check TRUNCATE success: 	1
9361# check layout success:    1
9362# End usability test (inc/partition_check.inc)
9363DROP TABLE t1;
9364CREATE TABLE t1 (
9365f_int1 INTEGER,
9366f_int2 INTEGER,
9367f_char1 CHAR(20),
9368f_char2 CHAR(20),
9369f_charbig VARCHAR(1000)
9370, PRIMARY KEY (f_int2,f_int1)
9371)
9372PARTITION BY RANGE(f_int1)
9373(PARTITION parta VALUES LESS THAN (0),
9374PARTITION partb VALUES LESS THAN (5),
9375PARTITION partc VALUES LESS THAN (10),
9376PARTITION partd VALUES LESS THAN (10 + 5),
9377PARTITION parte VALUES LESS THAN (20),
9378PARTITION partf VALUES LESS THAN (2147483646));
9379INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9380SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9381WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9382ALTER TABLE t1 MODIFY f_int2 BIGINT;
9383INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9384SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9385WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9386# Start usability test (inc/partition_check.inc)
9387create_command
9388SHOW CREATE TABLE t1;
9389Table	Create Table
9390t1	CREATE TABLE `t1` (
9391  `f_int1` int(11) NOT NULL,
9392  `f_int2` bigint(20) NOT NULL,
9393  `f_char1` char(20) DEFAULT NULL,
9394  `f_char2` char(20) DEFAULT NULL,
9395  `f_charbig` varchar(1000) DEFAULT NULL,
9396  PRIMARY KEY (`f_int2`,`f_int1`)
9397) ENGINE=TokuDB DEFAULT CHARSET=latin1
9398/*!50100 PARTITION BY RANGE (f_int1)
9399(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
9400 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
9401 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
9402 PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB,
9403 PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB,
9404 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
9405
9406# check prerequisites-1 success:    1
9407# check COUNT(*) success:    1
9408# check MIN/MAX(f_int1) success:    1
9409# check MIN/MAX(f_int2) success:    1
9410INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9411SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9412CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9413WHERE f_int1 IN (2,3);
9414ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9415# check prerequisites-3 success:    1
9416# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9417INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9418SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9419CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9420WHERE f_int1 IN (2,3);
9421DELETE FROM t1 WHERE f_charbig = 'delete me';
9422INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9423SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9424CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9425WHERE f_int1 IN (2,3);
9426DELETE FROM t1 WHERE f_charbig = 'delete me';
9427# check read via f_int1 success: 1
9428# check read via f_int2 success: 1
9429
9430# check multiple-1 success: 	1
9431DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9432
9433# check multiple-2 success: 	1
9434INSERT INTO t1 SELECT * FROM t0_template
9435WHERE MOD(f_int1,3) = 0;
9436
9437# check multiple-3 success: 	1
9438UPDATE t1 SET f_int1 = f_int1 + @max_row
9439WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9440AND @max_row_div2 + @max_row_div4;
9441
9442# check multiple-4 success: 	1
9443DELETE FROM t1
9444WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9445AND @max_row_div2 + @max_row_div4 + @max_row;
9446
9447# check multiple-5 success: 	1
9448SELECT COUNT(*) INTO @try_count FROM t0_template
9449WHERE MOD(f_int1,3) = 0
9450AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9451SELECT COUNT(*) INTO @clash_count
9452FROM t1 INNER JOIN t0_template USING(f_int1)
9453WHERE MOD(f_int1,3) = 0
9454AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9455SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9456INSERT INTO t1
9457SET f_int1 = @cur_value , f_int2 = @cur_value,
9458f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9459f_charbig = '#SINGLE#';
9460
9461# check single-1 success: 	1
9462SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9463INSERT INTO t1
9464SET f_int1 = @cur_value , f_int2 = @cur_value,
9465f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9466f_charbig = '#SINGLE#';
9467
9468# check single-2 success: 	1
9469SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9470SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9471UPDATE t1 SET f_int1 = @cur_value2
9472WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9473
9474# check single-3 success: 	1
9475SET @cur_value1= -1;
9476SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9477UPDATE t1 SET f_int1 = @cur_value1
9478WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9479
9480# check single-4 success: 	1
9481SELECT MAX(f_int1) INTO @cur_value FROM t1;
9482DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9483
9484# check single-5 success: 	1
9485DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9486
9487# check single-6 success: 	1
9488INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9489ERROR HY000: Table has no partition for value 2147483647
9490DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9491INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9492f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9493f_charbig = '#NULL#';
9494INSERT INTO t1
9495SET f_int1 = NULL , f_int2 = -@max_row,
9496f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9497f_charbig = '#NULL#';
9498ERROR 23000: Column 'f_int1' cannot be null
9499# check null success:    1
9500DELETE FROM t1
9501WHERE f_int1 = 0 AND f_int2 = 0
9502AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9503AND f_charbig = '#NULL#';
9504INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9505SELECT f_int1, f_int1, '', '', 'was inserted'
9506   FROM t0_template source_tab
9507WHERE MOD(f_int1,3) = 0
9508AND f_int1 BETWEEN @max_row_div2 AND @max_row
9509ON DUPLICATE KEY
9510UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9511f_int2 = 2 * @max_row + source_tab.f_int1,
9512f_charbig = 'was updated';
9513
9514# check unique-1-a success: 	1
9515
9516# check unique-1-b success: 	1
9517DELETE FROM t1 WHERE f_charbig = 'was inserted';
9518UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9519f_int2 = CAST(f_char1 AS SIGNED INT),
9520f_charbig = CONCAT('===',f_char1,'===')
9521WHERE f_charbig = 'was updated';
9522REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9523SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9524   FROM t0_template source_tab
9525WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9526
9527# check replace success: 	1
9528DELETE FROM t1
9529WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9530DELETE FROM t1
9531WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9532f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9533UPDATE t1 SET f_int2 = f_int1,
9534f_char1 = CAST(f_int1 AS CHAR),
9535f_char2 = CAST(f_int1 AS CHAR),
9536f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9537WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9538SET AUTOCOMMIT= 0;
9539INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9540SELECT f_int1, f_int1, '', '', 'was inserted'
9541FROM t0_template source_tab
9542WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9543
9544# check transactions-1 success: 	1
9545COMMIT WORK;
9546
9547# check transactions-2 success: 	1
9548ROLLBACK WORK;
9549
9550# check transactions-3 success: 	1
9551DELETE FROM t1 WHERE f_charbig = 'was inserted';
9552COMMIT WORK;
9553ROLLBACK WORK;
9554
9555# check transactions-4 success: 	1
9556INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9557SELECT f_int1, f_int1, '', '', 'was inserted'
9558FROM t0_template source_tab
9559WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9560
9561# check transactions-5 success: 	1
9562ROLLBACK WORK;
9563
9564# check transactions-6 success: 	1
9565# INFO: Storage engine used for t1 seems to be transactional.
9566COMMIT;
9567
9568# check transactions-7 success: 	1
9569DELETE FROM t1 WHERE f_charbig = 'was inserted';
9570COMMIT WORK;
9571SET @@session.sql_mode = 'traditional';
9572Warnings:
9573Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9574SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9575INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9576SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9577'', '', 'was inserted' FROM t0_template
9578WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9579ERROR 22012: Division by 0
9580COMMIT;
9581
9582# check transactions-8 success: 	1
9583# INFO: Storage engine used for t1 seems to be able to revert
9584#       changes made by the failing statement.
9585SET @@session.sql_mode = '';
9586Warnings:
9587Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9588SET AUTOCOMMIT= 1;
9589DELETE FROM t1 WHERE f_charbig = 'was inserted';
9590COMMIT WORK;
9591UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9592
9593# check special-1 success: 	1
9594UPDATE t1 SET f_charbig = '';
9595
9596# check special-2 success: 	1
9597UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9598INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9599SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9600WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9601INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9602SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9603'just inserted' FROM t0_template
9604WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9605CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9606BEGIN
9607UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9608f_charbig = 'updated by trigger'
9609      WHERE f_int1 = new.f_int1;
9610END|
9611INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9612SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9613WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9614
9615# check trigger-1 success: 	1
9616DROP TRIGGER trg_1;
9617UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9618f_int2 = CAST(f_char1 AS SIGNED INT),
9619f_charbig = 'just inserted'
9620   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9621DELETE FROM t0_aux
9622WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9623INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9624SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9625'just inserted' FROM t0_template
9626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9627CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9628BEGIN
9629UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9630f_charbig = 'updated by trigger'
9631      WHERE f_int1 = new.f_int1;
9632END|
9633INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9634SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9635WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9636
9637# check trigger-2 success: 	1
9638DROP TRIGGER trg_1;
9639UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9640f_int2 = CAST(f_char1 AS SIGNED INT),
9641f_charbig = 'just inserted'
9642   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9643DELETE FROM t0_aux
9644WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9645INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9646SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9647'just inserted' FROM t0_template
9648WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9649CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9650BEGIN
9651UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9652f_charbig = 'updated by trigger'
9653      WHERE f_int1 = new.f_int1;
9654END|
9655UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9656WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9657
9658# check trigger-3 success: 	1
9659DROP TRIGGER trg_1;
9660UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9661f_int2 = CAST(f_char1 AS SIGNED INT),
9662f_charbig = 'just inserted'
9663   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9664DELETE FROM t0_aux
9665WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9666INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9667SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9668'just inserted' FROM t0_template
9669WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9670CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9671BEGIN
9672UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9673f_charbig = 'updated by trigger'
9674      WHERE f_int1 = - old.f_int1;
9675END|
9676UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9677WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9678
9679# check trigger-4 success: 	1
9680DROP TRIGGER trg_1;
9681UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9682f_int2 = CAST(f_char1 AS SIGNED INT),
9683f_charbig = 'just inserted'
9684   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9685DELETE FROM t0_aux
9686WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9687INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9688SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9689'just inserted' FROM t0_template
9690WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9691CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9692BEGIN
9693UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9694f_charbig = 'updated by trigger'
9695      WHERE f_int1 = new.f_int1;
9696END|
9697UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9698WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9699
9700# check trigger-5 success: 	1
9701DROP TRIGGER trg_1;
9702UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9703f_int2 = CAST(f_char1 AS SIGNED INT),
9704f_charbig = 'just inserted'
9705   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9706DELETE FROM t0_aux
9707WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9708INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9709SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9710'just inserted' FROM t0_template
9711WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9712CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9713BEGIN
9714UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9715f_charbig = 'updated by trigger'
9716      WHERE f_int1 = - old.f_int1;
9717END|
9718UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9719WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9720
9721# check trigger-6 success: 	1
9722DROP TRIGGER trg_1;
9723UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9724f_int2 = CAST(f_char1 AS SIGNED INT),
9725f_charbig = 'just inserted'
9726   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9727DELETE FROM t0_aux
9728WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9729INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9730SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9731'just inserted' FROM t0_template
9732WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9733CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9734BEGIN
9735UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9736f_charbig = 'updated by trigger'
9737      WHERE f_int1 = - old.f_int1;
9738END|
9739DELETE FROM t0_aux
9740WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9741
9742# check trigger-7 success: 	1
9743DROP TRIGGER trg_1;
9744UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9745f_int2 = CAST(f_char1 AS SIGNED INT),
9746f_charbig = 'just inserted'
9747   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9748DELETE FROM t0_aux
9749WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9750INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9751SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9752'just inserted' FROM t0_template
9753WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9754CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9755BEGIN
9756UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9757f_charbig = 'updated by trigger'
9758      WHERE f_int1 = - old.f_int1;
9759END|
9760DELETE FROM t0_aux
9761WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9762
9763# check trigger-8 success: 	1
9764DROP TRIGGER trg_1;
9765UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9766f_int2 = CAST(f_char1 AS SIGNED INT),
9767f_charbig = 'just inserted'
9768   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9769DELETE FROM t0_aux
9770WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9771DELETE FROM t1
9772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9773CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9774BEGIN
9775SET new.f_int1 = old.f_int1 + @max_row,
9776new.f_int2 = old.f_int2 - @max_row,
9777new.f_charbig = '####updated per update trigger####';
9778END|
9779UPDATE t1
9780SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9781f_charbig = '####updated per update statement itself####';
9782
9783# check trigger-9 success: 	1
9784DROP TRIGGER trg_2;
9785UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9786f_int2 = CAST(f_char1 AS SIGNED INT),
9787f_charbig = CONCAT('===',f_char1,'===');
9788CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9789BEGIN
9790SET new.f_int1 = new.f_int1 + @max_row,
9791new.f_int2 = new.f_int2 - @max_row,
9792new.f_charbig = '####updated per update trigger####';
9793END|
9794UPDATE t1
9795SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9796f_charbig = '####updated per update statement itself####';
9797
9798# check trigger-10 success: 	1
9799DROP TRIGGER trg_2;
9800UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9801f_int2 = CAST(f_char1 AS SIGNED INT),
9802f_charbig = CONCAT('===',f_char1,'===');
9803CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9804BEGIN
9805SET new.f_int1 = @my_max1 + @counter,
9806new.f_int2 = @my_min2 - @counter,
9807new.f_charbig = '####updated per insert trigger####';
9808SET @counter = @counter + 1;
9809END|
9810SET @counter = 1;
9811SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9812INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9813SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9814CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9815WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9816ORDER BY f_int1;
9817DROP TRIGGER trg_3;
9818
9819# check trigger-11 success: 	1
9820DELETE FROM t1
9821WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9822AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9823AND f_charbig = '####updated per insert trigger####';
9824CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9825BEGIN
9826SET new.f_int1 = @my_max1 + @counter,
9827new.f_int2 = @my_min2 - @counter,
9828new.f_charbig = '####updated per insert trigger####';
9829SET @counter = @counter + 1;
9830END|
9831SET @counter = 1;
9832SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9833INSERT INTO t1 (f_char1, f_char2, f_charbig)
9834SELECT CAST(f_int1 AS CHAR),
9835CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9836WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9837ORDER BY f_int1;
9838DROP TRIGGER trg_3;
9839
9840# check trigger-12 success: 	1
9841DELETE FROM t1
9842WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9843AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9844AND f_charbig = '####updated per insert trigger####';
9845ANALYZE  TABLE t1;
9846Table	Op	Msg_type	Msg_text
9847test.t1	analyze	status	OK
9848CHECK    TABLE t1 EXTENDED;
9849Table	Op	Msg_type	Msg_text
9850test.t1	check	status	OK
9851CHECKSUM TABLE t1 EXTENDED;
9852Table	Checksum
9853test.t1	<some_value>
9854OPTIMIZE TABLE t1;
9855Table	Op	Msg_type	Msg_text
9856test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9857test.t1	optimize	status	OK
9858# check layout success:    1
9859REPAIR   TABLE t1 EXTENDED;
9860Table	Op	Msg_type	Msg_text
9861test.t1	repair	status	OK
9862# check layout success:    1
9863TRUNCATE t1;
9864
9865# check TRUNCATE success: 	1
9866# check layout success:    1
9867# End usability test (inc/partition_check.inc)
9868DROP TABLE t1;
9869CREATE TABLE t1 (
9870f_int1 INTEGER,
9871f_int2 INTEGER,
9872f_char1 CHAR(20),
9873f_char2 CHAR(20),
9874f_charbig VARCHAR(1000)
9875, PRIMARY KEY (f_int2,f_int1)
9876)
9877PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
9878(PARTITION parta VALUES LESS THAN (0),
9879PARTITION partb VALUES LESS THAN (5),
9880PARTITION partc VALUES LESS THAN (10),
9881PARTITION partd VALUES LESS THAN (2147483646));
9882INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9883SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9884WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9885ALTER TABLE t1 MODIFY f_int2 BIGINT;
9886INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9887SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9888WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9889# Start usability test (inc/partition_check.inc)
9890create_command
9891SHOW CREATE TABLE t1;
9892Table	Create Table
9893t1	CREATE TABLE `t1` (
9894  `f_int1` int(11) NOT NULL,
9895  `f_int2` bigint(20) NOT NULL,
9896  `f_char1` char(20) DEFAULT NULL,
9897  `f_char2` char(20) DEFAULT NULL,
9898  `f_charbig` varchar(1000) DEFAULT NULL,
9899  PRIMARY KEY (`f_int2`,`f_int1`)
9900) ENGINE=TokuDB DEFAULT CHARSET=latin1
9901/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
9902SUBPARTITION BY HASH (f_int1)
9903SUBPARTITIONS 2
9904(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
9905 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
9906 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
9907 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
9908
9909# check prerequisites-1 success:    1
9910# check COUNT(*) success:    1
9911# check MIN/MAX(f_int1) success:    1
9912# check MIN/MAX(f_int2) success:    1
9913INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9914SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9915CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9916WHERE f_int1 IN (2,3);
9917ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9918# check prerequisites-3 success:    1
9919# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9920INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9921SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9922CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9923WHERE f_int1 IN (2,3);
9924DELETE FROM t1 WHERE f_charbig = 'delete me';
9925INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9926SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9927CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9928WHERE f_int1 IN (2,3);
9929DELETE FROM t1 WHERE f_charbig = 'delete me';
9930# check read via f_int1 success: 1
9931# check read via f_int2 success: 1
9932
9933# check multiple-1 success: 	1
9934DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9935
9936# check multiple-2 success: 	1
9937INSERT INTO t1 SELECT * FROM t0_template
9938WHERE MOD(f_int1,3) = 0;
9939
9940# check multiple-3 success: 	1
9941UPDATE t1 SET f_int1 = f_int1 + @max_row
9942WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9943AND @max_row_div2 + @max_row_div4;
9944
9945# check multiple-4 success: 	1
9946DELETE FROM t1
9947WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9948AND @max_row_div2 + @max_row_div4 + @max_row;
9949
9950# check multiple-5 success: 	1
9951SELECT COUNT(*) INTO @try_count FROM t0_template
9952WHERE MOD(f_int1,3) = 0
9953AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9954SELECT COUNT(*) INTO @clash_count
9955FROM t1 INNER JOIN t0_template USING(f_int1)
9956WHERE MOD(f_int1,3) = 0
9957AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9958SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9959INSERT INTO t1
9960SET f_int1 = @cur_value , f_int2 = @cur_value,
9961f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9962f_charbig = '#SINGLE#';
9963
9964# check single-1 success: 	1
9965SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9966INSERT INTO t1
9967SET f_int1 = @cur_value , f_int2 = @cur_value,
9968f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9969f_charbig = '#SINGLE#';
9970
9971# check single-2 success: 	1
9972SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9973SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9974UPDATE t1 SET f_int1 = @cur_value2
9975WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9976
9977# check single-3 success: 	1
9978SET @cur_value1= -1;
9979SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9980UPDATE t1 SET f_int1 = @cur_value1
9981WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9982
9983# check single-4 success: 	1
9984SELECT MAX(f_int1) INTO @cur_value FROM t1;
9985DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9986
9987# check single-5 success: 	1
9988DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9989
9990# check single-6 success: 	1
9991INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9992
9993# check single-7 success: 	1
9994DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9995DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9996INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9997f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9998f_charbig = '#NULL#';
9999INSERT INTO t1
10000SET f_int1 = NULL , f_int2 = -@max_row,
10001f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10002f_charbig = '#NULL#';
10003ERROR 23000: Column 'f_int1' cannot be null
10004# check null success:    1
10005DELETE FROM t1
10006WHERE f_int1 = 0 AND f_int2 = 0
10007AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10008AND f_charbig = '#NULL#';
10009INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10010SELECT f_int1, f_int1, '', '', 'was inserted'
10011   FROM t0_template source_tab
10012WHERE MOD(f_int1,3) = 0
10013AND f_int1 BETWEEN @max_row_div2 AND @max_row
10014ON DUPLICATE KEY
10015UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10016f_int2 = 2 * @max_row + source_tab.f_int1,
10017f_charbig = 'was updated';
10018
10019# check unique-1-a success: 	1
10020
10021# check unique-1-b success: 	1
10022DELETE FROM t1 WHERE f_charbig = 'was inserted';
10023UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10024f_int2 = CAST(f_char1 AS SIGNED INT),
10025f_charbig = CONCAT('===',f_char1,'===')
10026WHERE f_charbig = 'was updated';
10027REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10028SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10029   FROM t0_template source_tab
10030WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10031
10032# check replace success: 	1
10033DELETE FROM t1
10034WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10035DELETE FROM t1
10036WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10037f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10038UPDATE t1 SET f_int2 = f_int1,
10039f_char1 = CAST(f_int1 AS CHAR),
10040f_char2 = CAST(f_int1 AS CHAR),
10041f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10042WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10043SET AUTOCOMMIT= 0;
10044INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10045SELECT f_int1, f_int1, '', '', 'was inserted'
10046FROM t0_template source_tab
10047WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10048
10049# check transactions-1 success: 	1
10050COMMIT WORK;
10051
10052# check transactions-2 success: 	1
10053ROLLBACK WORK;
10054
10055# check transactions-3 success: 	1
10056DELETE FROM t1 WHERE f_charbig = 'was inserted';
10057COMMIT WORK;
10058ROLLBACK WORK;
10059
10060# check transactions-4 success: 	1
10061INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10062SELECT f_int1, f_int1, '', '', 'was inserted'
10063FROM t0_template source_tab
10064WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10065
10066# check transactions-5 success: 	1
10067ROLLBACK WORK;
10068
10069# check transactions-6 success: 	1
10070# INFO: Storage engine used for t1 seems to be transactional.
10071COMMIT;
10072
10073# check transactions-7 success: 	1
10074DELETE FROM t1 WHERE f_charbig = 'was inserted';
10075COMMIT WORK;
10076SET @@session.sql_mode = 'traditional';
10077Warnings:
10078Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10079SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10080INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10081SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10082'', '', 'was inserted' FROM t0_template
10083WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10084ERROR 22012: Division by 0
10085COMMIT;
10086
10087# check transactions-8 success: 	1
10088# INFO: Storage engine used for t1 seems to be able to revert
10089#       changes made by the failing statement.
10090SET @@session.sql_mode = '';
10091Warnings:
10092Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10093SET AUTOCOMMIT= 1;
10094DELETE FROM t1 WHERE f_charbig = 'was inserted';
10095COMMIT WORK;
10096UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10097
10098# check special-1 success: 	1
10099UPDATE t1 SET f_charbig = '';
10100
10101# check special-2 success: 	1
10102UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10103INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10104SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10105WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10106INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10107SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10108'just inserted' FROM t0_template
10109WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10110CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10111BEGIN
10112UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10113f_charbig = 'updated by trigger'
10114      WHERE f_int1 = new.f_int1;
10115END|
10116INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10117SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10119
10120# check trigger-1 success: 	1
10121DROP TRIGGER trg_1;
10122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10123f_int2 = CAST(f_char1 AS SIGNED INT),
10124f_charbig = 'just inserted'
10125   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10126DELETE FROM t0_aux
10127WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10129SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10130'just inserted' FROM t0_template
10131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10132CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10133BEGIN
10134UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10135f_charbig = 'updated by trigger'
10136      WHERE f_int1 = new.f_int1;
10137END|
10138INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10139SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10140WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10141
10142# check trigger-2 success: 	1
10143DROP TRIGGER trg_1;
10144UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10145f_int2 = CAST(f_char1 AS SIGNED INT),
10146f_charbig = 'just inserted'
10147   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10148DELETE FROM t0_aux
10149WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10150INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10151SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10152'just inserted' FROM t0_template
10153WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10154CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10155BEGIN
10156UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10157f_charbig = 'updated by trigger'
10158      WHERE f_int1 = new.f_int1;
10159END|
10160UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10161WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10162
10163# check trigger-3 success: 	1
10164DROP TRIGGER trg_1;
10165UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10166f_int2 = CAST(f_char1 AS SIGNED INT),
10167f_charbig = 'just inserted'
10168   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10169DELETE FROM t0_aux
10170WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10171INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10172SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10173'just inserted' FROM t0_template
10174WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10175CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10176BEGIN
10177UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10178f_charbig = 'updated by trigger'
10179      WHERE f_int1 = - old.f_int1;
10180END|
10181UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10182WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10183
10184# check trigger-4 success: 	1
10185DROP TRIGGER trg_1;
10186UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10187f_int2 = CAST(f_char1 AS SIGNED INT),
10188f_charbig = 'just inserted'
10189   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10190DELETE FROM t0_aux
10191WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10192INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10193SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10194'just inserted' FROM t0_template
10195WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10196CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10197BEGIN
10198UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10199f_charbig = 'updated by trigger'
10200      WHERE f_int1 = new.f_int1;
10201END|
10202UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10203WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10204
10205# check trigger-5 success: 	1
10206DROP TRIGGER trg_1;
10207UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10208f_int2 = CAST(f_char1 AS SIGNED INT),
10209f_charbig = 'just inserted'
10210   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10211DELETE FROM t0_aux
10212WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10213INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10214SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10215'just inserted' FROM t0_template
10216WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10217CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10218BEGIN
10219UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10220f_charbig = 'updated by trigger'
10221      WHERE f_int1 = - old.f_int1;
10222END|
10223UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10224WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10225
10226# check trigger-6 success: 	1
10227DROP TRIGGER trg_1;
10228UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10229f_int2 = CAST(f_char1 AS SIGNED INT),
10230f_charbig = 'just inserted'
10231   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10232DELETE FROM t0_aux
10233WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10234INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10235SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10236'just inserted' FROM t0_template
10237WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10238CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10239BEGIN
10240UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10241f_charbig = 'updated by trigger'
10242      WHERE f_int1 = - old.f_int1;
10243END|
10244DELETE FROM t0_aux
10245WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10246
10247# check trigger-7 success: 	1
10248DROP TRIGGER trg_1;
10249UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10250f_int2 = CAST(f_char1 AS SIGNED INT),
10251f_charbig = 'just inserted'
10252   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10253DELETE FROM t0_aux
10254WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10255INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10256SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10257'just inserted' FROM t0_template
10258WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10259CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10260BEGIN
10261UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10262f_charbig = 'updated by trigger'
10263      WHERE f_int1 = - old.f_int1;
10264END|
10265DELETE FROM t0_aux
10266WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10267
10268# check trigger-8 success: 	1
10269DROP TRIGGER trg_1;
10270UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10271f_int2 = CAST(f_char1 AS SIGNED INT),
10272f_charbig = 'just inserted'
10273   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10274DELETE FROM t0_aux
10275WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10276DELETE FROM t1
10277WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10278CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10279BEGIN
10280SET new.f_int1 = old.f_int1 + @max_row,
10281new.f_int2 = old.f_int2 - @max_row,
10282new.f_charbig = '####updated per update trigger####';
10283END|
10284UPDATE t1
10285SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10286f_charbig = '####updated per update statement itself####';
10287
10288# check trigger-9 success: 	1
10289DROP TRIGGER trg_2;
10290UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10291f_int2 = CAST(f_char1 AS SIGNED INT),
10292f_charbig = CONCAT('===',f_char1,'===');
10293CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10294BEGIN
10295SET new.f_int1 = new.f_int1 + @max_row,
10296new.f_int2 = new.f_int2 - @max_row,
10297new.f_charbig = '####updated per update trigger####';
10298END|
10299UPDATE t1
10300SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10301f_charbig = '####updated per update statement itself####';
10302
10303# check trigger-10 success: 	1
10304DROP TRIGGER trg_2;
10305UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10306f_int2 = CAST(f_char1 AS SIGNED INT),
10307f_charbig = CONCAT('===',f_char1,'===');
10308CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10309BEGIN
10310SET new.f_int1 = @my_max1 + @counter,
10311new.f_int2 = @my_min2 - @counter,
10312new.f_charbig = '####updated per insert trigger####';
10313SET @counter = @counter + 1;
10314END|
10315SET @counter = 1;
10316SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10317INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10318SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10319CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10320WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10321ORDER BY f_int1;
10322DROP TRIGGER trg_3;
10323
10324# check trigger-11 success: 	1
10325DELETE FROM t1
10326WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10327AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10328AND f_charbig = '####updated per insert trigger####';
10329CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10330BEGIN
10331SET new.f_int1 = @my_max1 + @counter,
10332new.f_int2 = @my_min2 - @counter,
10333new.f_charbig = '####updated per insert trigger####';
10334SET @counter = @counter + 1;
10335END|
10336SET @counter = 1;
10337SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10338INSERT INTO t1 (f_char1, f_char2, f_charbig)
10339SELECT CAST(f_int1 AS CHAR),
10340CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10341WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10342ORDER BY f_int1;
10343DROP TRIGGER trg_3;
10344
10345# check trigger-12 success: 	1
10346DELETE FROM t1
10347WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10348AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10349AND f_charbig = '####updated per insert trigger####';
10350ANALYZE  TABLE t1;
10351Table	Op	Msg_type	Msg_text
10352test.t1	analyze	status	OK
10353CHECK    TABLE t1 EXTENDED;
10354Table	Op	Msg_type	Msg_text
10355test.t1	check	status	OK
10356CHECKSUM TABLE t1 EXTENDED;
10357Table	Checksum
10358test.t1	<some_value>
10359OPTIMIZE TABLE t1;
10360Table	Op	Msg_type	Msg_text
10361test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10362test.t1	optimize	status	OK
10363# check layout success:    1
10364REPAIR   TABLE t1 EXTENDED;
10365Table	Op	Msg_type	Msg_text
10366test.t1	repair	status	OK
10367# check layout success:    1
10368TRUNCATE t1;
10369
10370# check TRUNCATE success: 	1
10371# check layout success:    1
10372# End usability test (inc/partition_check.inc)
10373DROP TABLE t1;
10374CREATE TABLE t1 (
10375f_int1 INTEGER,
10376f_int2 INTEGER,
10377f_char1 CHAR(20),
10378f_char2 CHAR(20),
10379f_charbig VARCHAR(1000)
10380, PRIMARY KEY (f_int2,f_int1)
10381)
10382PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
10383(PARTITION part1 VALUES LESS THAN (0)
10384(SUBPARTITION subpart11, SUBPARTITION subpart12),
10385PARTITION part2 VALUES LESS THAN (5)
10386(SUBPARTITION subpart21, SUBPARTITION subpart22),
10387PARTITION part3 VALUES LESS THAN (10)
10388(SUBPARTITION subpart31, SUBPARTITION subpart32),
10389PARTITION part4 VALUES LESS THAN (2147483646)
10390(SUBPARTITION subpart41, SUBPARTITION subpart42));
10391INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10392SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10393WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10394ALTER TABLE t1 MODIFY f_int2 BIGINT;
10395INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10396SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10397WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10398# Start usability test (inc/partition_check.inc)
10399create_command
10400SHOW CREATE TABLE t1;
10401Table	Create Table
10402t1	CREATE TABLE `t1` (
10403  `f_int1` int(11) NOT NULL,
10404  `f_int2` bigint(20) NOT NULL,
10405  `f_char1` char(20) DEFAULT NULL,
10406  `f_char2` char(20) DEFAULT NULL,
10407  `f_charbig` varchar(1000) DEFAULT NULL,
10408  PRIMARY KEY (`f_int2`,`f_int1`)
10409) ENGINE=TokuDB DEFAULT CHARSET=latin1
10410/*!50100 PARTITION BY RANGE (f_int1)
10411SUBPARTITION BY KEY (f_int1)
10412(PARTITION part1 VALUES LESS THAN (0)
10413 (SUBPARTITION subpart11 ENGINE = TokuDB,
10414  SUBPARTITION subpart12 ENGINE = TokuDB),
10415 PARTITION part2 VALUES LESS THAN (5)
10416 (SUBPARTITION subpart21 ENGINE = TokuDB,
10417  SUBPARTITION subpart22 ENGINE = TokuDB),
10418 PARTITION part3 VALUES LESS THAN (10)
10419 (SUBPARTITION subpart31 ENGINE = TokuDB,
10420  SUBPARTITION subpart32 ENGINE = TokuDB),
10421 PARTITION part4 VALUES LESS THAN (2147483646)
10422 (SUBPARTITION subpart41 ENGINE = TokuDB,
10423  SUBPARTITION subpart42 ENGINE = TokuDB)) */
10424
10425# check prerequisites-1 success:    1
10426# check COUNT(*) success:    1
10427# check MIN/MAX(f_int1) success:    1
10428# check MIN/MAX(f_int2) success:    1
10429INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10430SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10431CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10432WHERE f_int1 IN (2,3);
10433ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10434# check prerequisites-3 success:    1
10435# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10436INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10437SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10438CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10439WHERE f_int1 IN (2,3);
10440DELETE FROM t1 WHERE f_charbig = 'delete me';
10441INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10442SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10443CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10444WHERE f_int1 IN (2,3);
10445DELETE FROM t1 WHERE f_charbig = 'delete me';
10446# check read via f_int1 success: 1
10447# check read via f_int2 success: 1
10448
10449# check multiple-1 success: 	1
10450DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10451
10452# check multiple-2 success: 	1
10453INSERT INTO t1 SELECT * FROM t0_template
10454WHERE MOD(f_int1,3) = 0;
10455
10456# check multiple-3 success: 	1
10457UPDATE t1 SET f_int1 = f_int1 + @max_row
10458WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10459AND @max_row_div2 + @max_row_div4;
10460
10461# check multiple-4 success: 	1
10462DELETE FROM t1
10463WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10464AND @max_row_div2 + @max_row_div4 + @max_row;
10465
10466# check multiple-5 success: 	1
10467SELECT COUNT(*) INTO @try_count FROM t0_template
10468WHERE MOD(f_int1,3) = 0
10469AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10470SELECT COUNT(*) INTO @clash_count
10471FROM t1 INNER JOIN t0_template USING(f_int1)
10472WHERE MOD(f_int1,3) = 0
10473AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10474SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10475INSERT INTO t1
10476SET f_int1 = @cur_value , f_int2 = @cur_value,
10477f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10478f_charbig = '#SINGLE#';
10479
10480# check single-1 success: 	1
10481SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10482INSERT INTO t1
10483SET f_int1 = @cur_value , f_int2 = @cur_value,
10484f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10485f_charbig = '#SINGLE#';
10486
10487# check single-2 success: 	1
10488SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10489SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10490UPDATE t1 SET f_int1 = @cur_value2
10491WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10492
10493# check single-3 success: 	1
10494SET @cur_value1= -1;
10495SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10496UPDATE t1 SET f_int1 = @cur_value1
10497WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10498
10499# check single-4 success: 	1
10500SELECT MAX(f_int1) INTO @cur_value FROM t1;
10501DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10502
10503# check single-5 success: 	1
10504DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10505
10506# check single-6 success: 	1
10507INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10508ERROR HY000: Table has no partition for value 2147483647
10509DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10510INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10511f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10512f_charbig = '#NULL#';
10513INSERT INTO t1
10514SET f_int1 = NULL , f_int2 = -@max_row,
10515f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10516f_charbig = '#NULL#';
10517ERROR 23000: Column 'f_int1' cannot be null
10518# check null success:    1
10519DELETE FROM t1
10520WHERE f_int1 = 0 AND f_int2 = 0
10521AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10522AND f_charbig = '#NULL#';
10523INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10524SELECT f_int1, f_int1, '', '', 'was inserted'
10525   FROM t0_template source_tab
10526WHERE MOD(f_int1,3) = 0
10527AND f_int1 BETWEEN @max_row_div2 AND @max_row
10528ON DUPLICATE KEY
10529UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10530f_int2 = 2 * @max_row + source_tab.f_int1,
10531f_charbig = 'was updated';
10532
10533# check unique-1-a success: 	1
10534
10535# check unique-1-b success: 	1
10536DELETE FROM t1 WHERE f_charbig = 'was inserted';
10537UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10538f_int2 = CAST(f_char1 AS SIGNED INT),
10539f_charbig = CONCAT('===',f_char1,'===')
10540WHERE f_charbig = 'was updated';
10541REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10542SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10543   FROM t0_template source_tab
10544WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10545
10546# check replace success: 	1
10547DELETE FROM t1
10548WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10549DELETE FROM t1
10550WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10551f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10552UPDATE t1 SET f_int2 = f_int1,
10553f_char1 = CAST(f_int1 AS CHAR),
10554f_char2 = CAST(f_int1 AS CHAR),
10555f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10556WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10557SET AUTOCOMMIT= 0;
10558INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10559SELECT f_int1, f_int1, '', '', 'was inserted'
10560FROM t0_template source_tab
10561WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10562
10563# check transactions-1 success: 	1
10564COMMIT WORK;
10565
10566# check transactions-2 success: 	1
10567ROLLBACK WORK;
10568
10569# check transactions-3 success: 	1
10570DELETE FROM t1 WHERE f_charbig = 'was inserted';
10571COMMIT WORK;
10572ROLLBACK WORK;
10573
10574# check transactions-4 success: 	1
10575INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10576SELECT f_int1, f_int1, '', '', 'was inserted'
10577FROM t0_template source_tab
10578WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10579
10580# check transactions-5 success: 	1
10581ROLLBACK WORK;
10582
10583# check transactions-6 success: 	1
10584# INFO: Storage engine used for t1 seems to be transactional.
10585COMMIT;
10586
10587# check transactions-7 success: 	1
10588DELETE FROM t1 WHERE f_charbig = 'was inserted';
10589COMMIT WORK;
10590SET @@session.sql_mode = 'traditional';
10591Warnings:
10592Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10593SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10594INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10595SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10596'', '', 'was inserted' FROM t0_template
10597WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10598ERROR 22012: Division by 0
10599COMMIT;
10600
10601# check transactions-8 success: 	1
10602# INFO: Storage engine used for t1 seems to be able to revert
10603#       changes made by the failing statement.
10604SET @@session.sql_mode = '';
10605Warnings:
10606Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10607SET AUTOCOMMIT= 1;
10608DELETE FROM t1 WHERE f_charbig = 'was inserted';
10609COMMIT WORK;
10610UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10611
10612# check special-1 success: 	1
10613UPDATE t1 SET f_charbig = '';
10614
10615# check special-2 success: 	1
10616UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10617INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10618SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10619WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10620INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10621SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10622'just inserted' FROM t0_template
10623WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10624CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10625BEGIN
10626UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10627f_charbig = 'updated by trigger'
10628      WHERE f_int1 = new.f_int1;
10629END|
10630INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10631SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10633
10634# check trigger-1 success: 	1
10635DROP TRIGGER trg_1;
10636UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10637f_int2 = CAST(f_char1 AS SIGNED INT),
10638f_charbig = 'just inserted'
10639   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10640DELETE FROM t0_aux
10641WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10642INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10643SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10644'just inserted' FROM t0_template
10645WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10646CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10647BEGIN
10648UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10649f_charbig = 'updated by trigger'
10650      WHERE f_int1 = new.f_int1;
10651END|
10652INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10653SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10654WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10655
10656# check trigger-2 success: 	1
10657DROP TRIGGER trg_1;
10658UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10659f_int2 = CAST(f_char1 AS SIGNED INT),
10660f_charbig = 'just inserted'
10661   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10662DELETE FROM t0_aux
10663WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10664INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10665SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10666'just inserted' FROM t0_template
10667WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10668CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10669BEGIN
10670UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10671f_charbig = 'updated by trigger'
10672      WHERE f_int1 = new.f_int1;
10673END|
10674UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10675WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10676
10677# check trigger-3 success: 	1
10678DROP TRIGGER trg_1;
10679UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10680f_int2 = CAST(f_char1 AS SIGNED INT),
10681f_charbig = 'just inserted'
10682   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10683DELETE FROM t0_aux
10684WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10685INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10686SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10687'just inserted' FROM t0_template
10688WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10689CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10690BEGIN
10691UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10692f_charbig = 'updated by trigger'
10693      WHERE f_int1 = - old.f_int1;
10694END|
10695UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10696WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10697
10698# check trigger-4 success: 	1
10699DROP TRIGGER trg_1;
10700UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10701f_int2 = CAST(f_char1 AS SIGNED INT),
10702f_charbig = 'just inserted'
10703   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10704DELETE FROM t0_aux
10705WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10706INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10707SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10708'just inserted' FROM t0_template
10709WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10710CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10711BEGIN
10712UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10713f_charbig = 'updated by trigger'
10714      WHERE f_int1 = new.f_int1;
10715END|
10716UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10717WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10718
10719# check trigger-5 success: 	1
10720DROP TRIGGER trg_1;
10721UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10722f_int2 = CAST(f_char1 AS SIGNED INT),
10723f_charbig = 'just inserted'
10724   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10725DELETE FROM t0_aux
10726WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10727INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10728SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10729'just inserted' FROM t0_template
10730WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10731CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10732BEGIN
10733UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10734f_charbig = 'updated by trigger'
10735      WHERE f_int1 = - old.f_int1;
10736END|
10737UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10738WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10739
10740# check trigger-6 success: 	1
10741DROP TRIGGER trg_1;
10742UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10743f_int2 = CAST(f_char1 AS SIGNED INT),
10744f_charbig = 'just inserted'
10745   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10746DELETE FROM t0_aux
10747WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10748INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10749SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10750'just inserted' FROM t0_template
10751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10752CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10753BEGIN
10754UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10755f_charbig = 'updated by trigger'
10756      WHERE f_int1 = - old.f_int1;
10757END|
10758DELETE FROM t0_aux
10759WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10760
10761# check trigger-7 success: 	1
10762DROP TRIGGER trg_1;
10763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10764f_int2 = CAST(f_char1 AS SIGNED INT),
10765f_charbig = 'just inserted'
10766   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10767DELETE FROM t0_aux
10768WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10769INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10770SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10771'just inserted' FROM t0_template
10772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10773CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10774BEGIN
10775UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10776f_charbig = 'updated by trigger'
10777      WHERE f_int1 = - old.f_int1;
10778END|
10779DELETE FROM t0_aux
10780WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10781
10782# check trigger-8 success: 	1
10783DROP TRIGGER trg_1;
10784UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10785f_int2 = CAST(f_char1 AS SIGNED INT),
10786f_charbig = 'just inserted'
10787   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10788DELETE FROM t0_aux
10789WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10790DELETE FROM t1
10791WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10792CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10793BEGIN
10794SET new.f_int1 = old.f_int1 + @max_row,
10795new.f_int2 = old.f_int2 - @max_row,
10796new.f_charbig = '####updated per update trigger####';
10797END|
10798UPDATE t1
10799SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10800f_charbig = '####updated per update statement itself####';
10801
10802# check trigger-9 success: 	1
10803DROP TRIGGER trg_2;
10804UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10805f_int2 = CAST(f_char1 AS SIGNED INT),
10806f_charbig = CONCAT('===',f_char1,'===');
10807CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10808BEGIN
10809SET new.f_int1 = new.f_int1 + @max_row,
10810new.f_int2 = new.f_int2 - @max_row,
10811new.f_charbig = '####updated per update trigger####';
10812END|
10813UPDATE t1
10814SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10815f_charbig = '####updated per update statement itself####';
10816
10817# check trigger-10 success: 	1
10818DROP TRIGGER trg_2;
10819UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10820f_int2 = CAST(f_char1 AS SIGNED INT),
10821f_charbig = CONCAT('===',f_char1,'===');
10822CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10823BEGIN
10824SET new.f_int1 = @my_max1 + @counter,
10825new.f_int2 = @my_min2 - @counter,
10826new.f_charbig = '####updated per insert trigger####';
10827SET @counter = @counter + 1;
10828END|
10829SET @counter = 1;
10830SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10831INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10832SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10833CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10834WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10835ORDER BY f_int1;
10836DROP TRIGGER trg_3;
10837
10838# check trigger-11 success: 	1
10839DELETE FROM t1
10840WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10841AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10842AND f_charbig = '####updated per insert trigger####';
10843CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10844BEGIN
10845SET new.f_int1 = @my_max1 + @counter,
10846new.f_int2 = @my_min2 - @counter,
10847new.f_charbig = '####updated per insert trigger####';
10848SET @counter = @counter + 1;
10849END|
10850SET @counter = 1;
10851SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10852INSERT INTO t1 (f_char1, f_char2, f_charbig)
10853SELECT CAST(f_int1 AS CHAR),
10854CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10855WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10856ORDER BY f_int1;
10857DROP TRIGGER trg_3;
10858
10859# check trigger-12 success: 	1
10860DELETE FROM t1
10861WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10862AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10863AND f_charbig = '####updated per insert trigger####';
10864ANALYZE  TABLE t1;
10865Table	Op	Msg_type	Msg_text
10866test.t1	analyze	status	OK
10867CHECK    TABLE t1 EXTENDED;
10868Table	Op	Msg_type	Msg_text
10869test.t1	check	status	OK
10870CHECKSUM TABLE t1 EXTENDED;
10871Table	Checksum
10872test.t1	<some_value>
10873OPTIMIZE TABLE t1;
10874Table	Op	Msg_type	Msg_text
10875test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10876test.t1	optimize	status	OK
10877# check layout success:    1
10878REPAIR   TABLE t1 EXTENDED;
10879Table	Op	Msg_type	Msg_text
10880test.t1	repair	status	OK
10881# check layout success:    1
10882TRUNCATE t1;
10883
10884# check TRUNCATE success: 	1
10885# check layout success:    1
10886# End usability test (inc/partition_check.inc)
10887DROP TABLE t1;
10888CREATE TABLE t1 (
10889f_int1 INTEGER,
10890f_int2 INTEGER,
10891f_char1 CHAR(20),
10892f_char2 CHAR(20),
10893f_charbig VARCHAR(1000)
10894, PRIMARY KEY (f_int2,f_int1)
10895)
10896PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
10897(PARTITION part1 VALUES IN (0)
10898(SUBPARTITION sp11, SUBPARTITION sp12),
10899PARTITION part2 VALUES IN (1)
10900(SUBPARTITION sp21, SUBPARTITION sp22),
10901PARTITION part3 VALUES IN (2)
10902(SUBPARTITION sp31, SUBPARTITION sp32),
10903PARTITION part4 VALUES IN (NULL)
10904(SUBPARTITION sp41, SUBPARTITION sp42));
10905INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10906SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10907WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10908ALTER TABLE t1 MODIFY f_int2 BIGINT;
10909INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10910SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10911WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10912# Start usability test (inc/partition_check.inc)
10913create_command
10914SHOW CREATE TABLE t1;
10915Table	Create Table
10916t1	CREATE TABLE `t1` (
10917  `f_int1` int(11) NOT NULL,
10918  `f_int2` bigint(20) NOT NULL,
10919  `f_char1` char(20) DEFAULT NULL,
10920  `f_char2` char(20) DEFAULT NULL,
10921  `f_charbig` varchar(1000) DEFAULT NULL,
10922  PRIMARY KEY (`f_int2`,`f_int1`)
10923) ENGINE=TokuDB DEFAULT CHARSET=latin1
10924/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
10925SUBPARTITION BY HASH (f_int1 + 1)
10926(PARTITION part1 VALUES IN (0)
10927 (SUBPARTITION sp11 ENGINE = TokuDB,
10928  SUBPARTITION sp12 ENGINE = TokuDB),
10929 PARTITION part2 VALUES IN (1)
10930 (SUBPARTITION sp21 ENGINE = TokuDB,
10931  SUBPARTITION sp22 ENGINE = TokuDB),
10932 PARTITION part3 VALUES IN (2)
10933 (SUBPARTITION sp31 ENGINE = TokuDB,
10934  SUBPARTITION sp32 ENGINE = TokuDB),
10935 PARTITION part4 VALUES IN (NULL)
10936 (SUBPARTITION sp41 ENGINE = TokuDB,
10937  SUBPARTITION sp42 ENGINE = TokuDB)) */
10938
10939# check prerequisites-1 success:    1
10940# check COUNT(*) success:    1
10941# check MIN/MAX(f_int1) success:    1
10942# check MIN/MAX(f_int2) success:    1
10943INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10944SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10945CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10946WHERE f_int1 IN (2,3);
10947ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10948# check prerequisites-3 success:    1
10949# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10950INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10951SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10952CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10953WHERE f_int1 IN (2,3);
10954DELETE FROM t1 WHERE f_charbig = 'delete me';
10955INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10956SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10957CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10958WHERE f_int1 IN (2,3);
10959DELETE FROM t1 WHERE f_charbig = 'delete me';
10960# check read via f_int1 success: 1
10961# check read via f_int2 success: 1
10962
10963# check multiple-1 success: 	1
10964DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10965
10966# check multiple-2 success: 	1
10967INSERT INTO t1 SELECT * FROM t0_template
10968WHERE MOD(f_int1,3) = 0;
10969
10970# check multiple-3 success: 	1
10971UPDATE t1 SET f_int1 = f_int1 + @max_row
10972WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10973AND @max_row_div2 + @max_row_div4;
10974
10975# check multiple-4 success: 	1
10976DELETE FROM t1
10977WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10978AND @max_row_div2 + @max_row_div4 + @max_row;
10979
10980# check multiple-5 success: 	1
10981SELECT COUNT(*) INTO @try_count FROM t0_template
10982WHERE MOD(f_int1,3) = 0
10983AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10984SELECT COUNT(*) INTO @clash_count
10985FROM t1 INNER JOIN t0_template USING(f_int1)
10986WHERE MOD(f_int1,3) = 0
10987AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10988SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10989INSERT INTO t1
10990SET f_int1 = @cur_value , f_int2 = @cur_value,
10991f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10992f_charbig = '#SINGLE#';
10993
10994# check single-1 success: 	1
10995SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10996INSERT INTO t1
10997SET f_int1 = @cur_value , f_int2 = @cur_value,
10998f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10999f_charbig = '#SINGLE#';
11000
11001# check single-2 success: 	1
11002SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11003SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11004UPDATE t1 SET f_int1 = @cur_value2
11005WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11006
11007# check single-3 success: 	1
11008SET @cur_value1= -1;
11009SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11010UPDATE t1 SET f_int1 = @cur_value1
11011WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11012
11013# check single-4 success: 	1
11014SELECT MAX(f_int1) INTO @cur_value FROM t1;
11015DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11016
11017# check single-5 success: 	1
11018DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11019
11020# check single-6 success: 	1
11021INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11022
11023# check single-7 success: 	1
11024DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11025DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11026INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11027f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11028f_charbig = '#NULL#';
11029INSERT INTO t1
11030SET f_int1 = NULL , f_int2 = -@max_row,
11031f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11032f_charbig = '#NULL#';
11033ERROR 23000: Column 'f_int1' cannot be null
11034# check null success:    1
11035DELETE FROM t1
11036WHERE f_int1 = 0 AND f_int2 = 0
11037AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11038AND f_charbig = '#NULL#';
11039INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11040SELECT f_int1, f_int1, '', '', 'was inserted'
11041   FROM t0_template source_tab
11042WHERE MOD(f_int1,3) = 0
11043AND f_int1 BETWEEN @max_row_div2 AND @max_row
11044ON DUPLICATE KEY
11045UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11046f_int2 = 2 * @max_row + source_tab.f_int1,
11047f_charbig = 'was updated';
11048
11049# check unique-1-a success: 	1
11050
11051# check unique-1-b success: 	1
11052DELETE FROM t1 WHERE f_charbig = 'was inserted';
11053UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11054f_int2 = CAST(f_char1 AS SIGNED INT),
11055f_charbig = CONCAT('===',f_char1,'===')
11056WHERE f_charbig = 'was updated';
11057REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11058SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11059   FROM t0_template source_tab
11060WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11061
11062# check replace success: 	1
11063DELETE FROM t1
11064WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11065DELETE FROM t1
11066WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11067f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11068UPDATE t1 SET f_int2 = f_int1,
11069f_char1 = CAST(f_int1 AS CHAR),
11070f_char2 = CAST(f_int1 AS CHAR),
11071f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11072WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11073SET AUTOCOMMIT= 0;
11074INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11075SELECT f_int1, f_int1, '', '', 'was inserted'
11076FROM t0_template source_tab
11077WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11078
11079# check transactions-1 success: 	1
11080COMMIT WORK;
11081
11082# check transactions-2 success: 	1
11083ROLLBACK WORK;
11084
11085# check transactions-3 success: 	1
11086DELETE FROM t1 WHERE f_charbig = 'was inserted';
11087COMMIT WORK;
11088ROLLBACK WORK;
11089
11090# check transactions-4 success: 	1
11091INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11092SELECT f_int1, f_int1, '', '', 'was inserted'
11093FROM t0_template source_tab
11094WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11095
11096# check transactions-5 success: 	1
11097ROLLBACK WORK;
11098
11099# check transactions-6 success: 	1
11100# INFO: Storage engine used for t1 seems to be transactional.
11101COMMIT;
11102
11103# check transactions-7 success: 	1
11104DELETE FROM t1 WHERE f_charbig = 'was inserted';
11105COMMIT WORK;
11106SET @@session.sql_mode = 'traditional';
11107Warnings:
11108Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11109SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11110INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11111SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11112'', '', 'was inserted' FROM t0_template
11113WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11114ERROR 22012: Division by 0
11115COMMIT;
11116
11117# check transactions-8 success: 	1
11118# INFO: Storage engine used for t1 seems to be able to revert
11119#       changes made by the failing statement.
11120SET @@session.sql_mode = '';
11121Warnings:
11122Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11123SET AUTOCOMMIT= 1;
11124DELETE FROM t1 WHERE f_charbig = 'was inserted';
11125COMMIT WORK;
11126UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11127
11128# check special-1 success: 	1
11129UPDATE t1 SET f_charbig = '';
11130
11131# check special-2 success: 	1
11132UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11133INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11134SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11135WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11138'just inserted' FROM t0_template
11139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11140CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11141BEGIN
11142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11143f_charbig = 'updated by trigger'
11144      WHERE f_int1 = new.f_int1;
11145END|
11146INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11147SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11149
11150# check trigger-1 success: 	1
11151DROP TRIGGER trg_1;
11152UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11153f_int2 = CAST(f_char1 AS SIGNED INT),
11154f_charbig = 'just inserted'
11155   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11156DELETE FROM t0_aux
11157WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11158INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11159SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11160'just inserted' FROM t0_template
11161WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11162CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11163BEGIN
11164UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11165f_charbig = 'updated by trigger'
11166      WHERE f_int1 = new.f_int1;
11167END|
11168INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11169SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11170WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11171
11172# check trigger-2 success: 	1
11173DROP TRIGGER trg_1;
11174UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11175f_int2 = CAST(f_char1 AS SIGNED INT),
11176f_charbig = 'just inserted'
11177   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11178DELETE FROM t0_aux
11179WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11180INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11181SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11182'just inserted' FROM t0_template
11183WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11184CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11185BEGIN
11186UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11187f_charbig = 'updated by trigger'
11188      WHERE f_int1 = new.f_int1;
11189END|
11190UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11191WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11192
11193# check trigger-3 success: 	1
11194DROP TRIGGER trg_1;
11195UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11196f_int2 = CAST(f_char1 AS SIGNED INT),
11197f_charbig = 'just inserted'
11198   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11199DELETE FROM t0_aux
11200WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11201INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11202SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11203'just inserted' FROM t0_template
11204WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11205CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11206BEGIN
11207UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11208f_charbig = 'updated by trigger'
11209      WHERE f_int1 = - old.f_int1;
11210END|
11211UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11212WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11213
11214# check trigger-4 success: 	1
11215DROP TRIGGER trg_1;
11216UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11217f_int2 = CAST(f_char1 AS SIGNED INT),
11218f_charbig = 'just inserted'
11219   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11220DELETE FROM t0_aux
11221WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11222INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11223SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11224'just inserted' FROM t0_template
11225WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11226CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11227BEGIN
11228UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11229f_charbig = 'updated by trigger'
11230      WHERE f_int1 = new.f_int1;
11231END|
11232UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11233WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11234
11235# check trigger-5 success: 	1
11236DROP TRIGGER trg_1;
11237UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11238f_int2 = CAST(f_char1 AS SIGNED INT),
11239f_charbig = 'just inserted'
11240   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11241DELETE FROM t0_aux
11242WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11243INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11244SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11245'just inserted' FROM t0_template
11246WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11247CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11248BEGIN
11249UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11250f_charbig = 'updated by trigger'
11251      WHERE f_int1 = - old.f_int1;
11252END|
11253UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11254WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11255
11256# check trigger-6 success: 	1
11257DROP TRIGGER trg_1;
11258UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11259f_int2 = CAST(f_char1 AS SIGNED INT),
11260f_charbig = 'just inserted'
11261   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11262DELETE FROM t0_aux
11263WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11264INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11265SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11266'just inserted' FROM t0_template
11267WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11268CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11269BEGIN
11270UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11271f_charbig = 'updated by trigger'
11272      WHERE f_int1 = - old.f_int1;
11273END|
11274DELETE FROM t0_aux
11275WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11276
11277# check trigger-7 success: 	1
11278DROP TRIGGER trg_1;
11279UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11280f_int2 = CAST(f_char1 AS SIGNED INT),
11281f_charbig = 'just inserted'
11282   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11283DELETE FROM t0_aux
11284WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11285INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11286SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11287'just inserted' FROM t0_template
11288WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11289CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11290BEGIN
11291UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11292f_charbig = 'updated by trigger'
11293      WHERE f_int1 = - old.f_int1;
11294END|
11295DELETE FROM t0_aux
11296WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11297
11298# check trigger-8 success: 	1
11299DROP TRIGGER trg_1;
11300UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11301f_int2 = CAST(f_char1 AS SIGNED INT),
11302f_charbig = 'just inserted'
11303   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11304DELETE FROM t0_aux
11305WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11306DELETE FROM t1
11307WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11308CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11309BEGIN
11310SET new.f_int1 = old.f_int1 + @max_row,
11311new.f_int2 = old.f_int2 - @max_row,
11312new.f_charbig = '####updated per update trigger####';
11313END|
11314UPDATE t1
11315SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11316f_charbig = '####updated per update statement itself####';
11317
11318# check trigger-9 success: 	1
11319DROP TRIGGER trg_2;
11320UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11321f_int2 = CAST(f_char1 AS SIGNED INT),
11322f_charbig = CONCAT('===',f_char1,'===');
11323CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11324BEGIN
11325SET new.f_int1 = new.f_int1 + @max_row,
11326new.f_int2 = new.f_int2 - @max_row,
11327new.f_charbig = '####updated per update trigger####';
11328END|
11329UPDATE t1
11330SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11331f_charbig = '####updated per update statement itself####';
11332
11333# check trigger-10 success: 	1
11334DROP TRIGGER trg_2;
11335UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11336f_int2 = CAST(f_char1 AS SIGNED INT),
11337f_charbig = CONCAT('===',f_char1,'===');
11338CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11339BEGIN
11340SET new.f_int1 = @my_max1 + @counter,
11341new.f_int2 = @my_min2 - @counter,
11342new.f_charbig = '####updated per insert trigger####';
11343SET @counter = @counter + 1;
11344END|
11345SET @counter = 1;
11346SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11347INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11348SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11349CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11350WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11351ORDER BY f_int1;
11352DROP TRIGGER trg_3;
11353
11354# check trigger-11 success: 	1
11355DELETE FROM t1
11356WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11357AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11358AND f_charbig = '####updated per insert trigger####';
11359CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11360BEGIN
11361SET new.f_int1 = @my_max1 + @counter,
11362new.f_int2 = @my_min2 - @counter,
11363new.f_charbig = '####updated per insert trigger####';
11364SET @counter = @counter + 1;
11365END|
11366SET @counter = 1;
11367SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11368INSERT INTO t1 (f_char1, f_char2, f_charbig)
11369SELECT CAST(f_int1 AS CHAR),
11370CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11371WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11372ORDER BY f_int1;
11373DROP TRIGGER trg_3;
11374
11375# check trigger-12 success: 	1
11376DELETE FROM t1
11377WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11378AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11379AND f_charbig = '####updated per insert trigger####';
11380ANALYZE  TABLE t1;
11381Table	Op	Msg_type	Msg_text
11382test.t1	analyze	status	OK
11383CHECK    TABLE t1 EXTENDED;
11384Table	Op	Msg_type	Msg_text
11385test.t1	check	status	OK
11386CHECKSUM TABLE t1 EXTENDED;
11387Table	Checksum
11388test.t1	<some_value>
11389OPTIMIZE TABLE t1;
11390Table	Op	Msg_type	Msg_text
11391test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
11392test.t1	optimize	status	OK
11393# check layout success:    1
11394REPAIR   TABLE t1 EXTENDED;
11395Table	Op	Msg_type	Msg_text
11396test.t1	repair	status	OK
11397# check layout success:    1
11398TRUNCATE t1;
11399
11400# check TRUNCATE success: 	1
11401# check layout success:    1
11402# End usability test (inc/partition_check.inc)
11403DROP TABLE t1;
11404CREATE TABLE t1 (
11405f_int1 INTEGER,
11406f_int2 INTEGER,
11407f_char1 CHAR(20),
11408f_char2 CHAR(20),
11409f_charbig VARCHAR(1000)
11410, PRIMARY KEY (f_int2,f_int1)
11411)
11412PARTITION BY LIST(ABS(MOD(f_int1,2)))
11413SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
11414(PARTITION part1 VALUES IN (0),
11415PARTITION part2 VALUES IN (1),
11416PARTITION part3 VALUES IN (NULL));
11417INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11418SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11419WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11420ALTER TABLE t1 MODIFY f_int2 BIGINT;
11421INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11422SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11423WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11424# Start usability test (inc/partition_check.inc)
11425create_command
11426SHOW CREATE TABLE t1;
11427Table	Create Table
11428t1	CREATE TABLE `t1` (
11429  `f_int1` int(11) NOT NULL,
11430  `f_int2` bigint(20) NOT NULL,
11431  `f_char1` char(20) DEFAULT NULL,
11432  `f_char2` char(20) DEFAULT NULL,
11433  `f_charbig` varchar(1000) DEFAULT NULL,
11434  PRIMARY KEY (`f_int2`,`f_int1`)
11435) ENGINE=TokuDB DEFAULT CHARSET=latin1
11436/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
11437SUBPARTITION BY KEY (f_int1)
11438SUBPARTITIONS 3
11439(PARTITION part1 VALUES IN (0) ENGINE = TokuDB,
11440 PARTITION part2 VALUES IN (1) ENGINE = TokuDB,
11441 PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */
11442
11443# check prerequisites-1 success:    1
11444# check COUNT(*) success:    1
11445# check MIN/MAX(f_int1) success:    1
11446# check MIN/MAX(f_int2) success:    1
11447INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11448SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11449CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11450WHERE f_int1 IN (2,3);
11451ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
11452# check prerequisites-3 success:    1
11453# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11454INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11455SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11456CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11457WHERE f_int1 IN (2,3);
11458DELETE FROM t1 WHERE f_charbig = 'delete me';
11459INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11460SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11461CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11462WHERE f_int1 IN (2,3);
11463DELETE FROM t1 WHERE f_charbig = 'delete me';
11464# check read via f_int1 success: 1
11465# check read via f_int2 success: 1
11466
11467# check multiple-1 success: 	1
11468DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11469
11470# check multiple-2 success: 	1
11471INSERT INTO t1 SELECT * FROM t0_template
11472WHERE MOD(f_int1,3) = 0;
11473
11474# check multiple-3 success: 	1
11475UPDATE t1 SET f_int1 = f_int1 + @max_row
11476WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11477AND @max_row_div2 + @max_row_div4;
11478
11479# check multiple-4 success: 	1
11480DELETE FROM t1
11481WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11482AND @max_row_div2 + @max_row_div4 + @max_row;
11483
11484# check multiple-5 success: 	1
11485SELECT COUNT(*) INTO @try_count FROM t0_template
11486WHERE MOD(f_int1,3) = 0
11487AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11488SELECT COUNT(*) INTO @clash_count
11489FROM t1 INNER JOIN t0_template USING(f_int1)
11490WHERE MOD(f_int1,3) = 0
11491AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11492SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11493INSERT INTO t1
11494SET f_int1 = @cur_value , f_int2 = @cur_value,
11495f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11496f_charbig = '#SINGLE#';
11497
11498# check single-1 success: 	1
11499SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11500INSERT INTO t1
11501SET f_int1 = @cur_value , f_int2 = @cur_value,
11502f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11503f_charbig = '#SINGLE#';
11504
11505# check single-2 success: 	1
11506SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11507SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11508UPDATE t1 SET f_int1 = @cur_value2
11509WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11510
11511# check single-3 success: 	1
11512SET @cur_value1= -1;
11513SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11514UPDATE t1 SET f_int1 = @cur_value1
11515WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11516
11517# check single-4 success: 	1
11518SELECT MAX(f_int1) INTO @cur_value FROM t1;
11519DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11520
11521# check single-5 success: 	1
11522DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11523
11524# check single-6 success: 	1
11525INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11526
11527# check single-7 success: 	1
11528DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11529DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11530INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11531f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11532f_charbig = '#NULL#';
11533INSERT INTO t1
11534SET f_int1 = NULL , f_int2 = -@max_row,
11535f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11536f_charbig = '#NULL#';
11537ERROR 23000: Column 'f_int1' cannot be null
11538# check null success:    1
11539DELETE FROM t1
11540WHERE f_int1 = 0 AND f_int2 = 0
11541AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11542AND f_charbig = '#NULL#';
11543INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11544SELECT f_int1, f_int1, '', '', 'was inserted'
11545   FROM t0_template source_tab
11546WHERE MOD(f_int1,3) = 0
11547AND f_int1 BETWEEN @max_row_div2 AND @max_row
11548ON DUPLICATE KEY
11549UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11550f_int2 = 2 * @max_row + source_tab.f_int1,
11551f_charbig = 'was updated';
11552
11553# check unique-1-a success: 	1
11554
11555# check unique-1-b success: 	1
11556DELETE FROM t1 WHERE f_charbig = 'was inserted';
11557UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11558f_int2 = CAST(f_char1 AS SIGNED INT),
11559f_charbig = CONCAT('===',f_char1,'===')
11560WHERE f_charbig = 'was updated';
11561REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11562SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11563   FROM t0_template source_tab
11564WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11565
11566# check replace success: 	1
11567DELETE FROM t1
11568WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11569DELETE FROM t1
11570WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11571f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11572UPDATE t1 SET f_int2 = f_int1,
11573f_char1 = CAST(f_int1 AS CHAR),
11574f_char2 = CAST(f_int1 AS CHAR),
11575f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11576WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11577SET AUTOCOMMIT= 0;
11578INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11579SELECT f_int1, f_int1, '', '', 'was inserted'
11580FROM t0_template source_tab
11581WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11582
11583# check transactions-1 success: 	1
11584COMMIT WORK;
11585
11586# check transactions-2 success: 	1
11587ROLLBACK WORK;
11588
11589# check transactions-3 success: 	1
11590DELETE FROM t1 WHERE f_charbig = 'was inserted';
11591COMMIT WORK;
11592ROLLBACK WORK;
11593
11594# check transactions-4 success: 	1
11595INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11596SELECT f_int1, f_int1, '', '', 'was inserted'
11597FROM t0_template source_tab
11598WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11599
11600# check transactions-5 success: 	1
11601ROLLBACK WORK;
11602
11603# check transactions-6 success: 	1
11604# INFO: Storage engine used for t1 seems to be transactional.
11605COMMIT;
11606
11607# check transactions-7 success: 	1
11608DELETE FROM t1 WHERE f_charbig = 'was inserted';
11609COMMIT WORK;
11610SET @@session.sql_mode = 'traditional';
11611Warnings:
11612Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11613SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11614INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11615SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11616'', '', 'was inserted' FROM t0_template
11617WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11618ERROR 22012: Division by 0
11619COMMIT;
11620
11621# check transactions-8 success: 	1
11622# INFO: Storage engine used for t1 seems to be able to revert
11623#       changes made by the failing statement.
11624SET @@session.sql_mode = '';
11625Warnings:
11626Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11627SET AUTOCOMMIT= 1;
11628DELETE FROM t1 WHERE f_charbig = 'was inserted';
11629COMMIT WORK;
11630UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11631
11632# check special-1 success: 	1
11633UPDATE t1 SET f_charbig = '';
11634
11635# check special-2 success: 	1
11636UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11637INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11638SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11639WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11640INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11641SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11642'just inserted' FROM t0_template
11643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11644CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11645BEGIN
11646UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11647f_charbig = 'updated by trigger'
11648      WHERE f_int1 = new.f_int1;
11649END|
11650INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11651SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11652WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11653
11654# check trigger-1 success: 	1
11655DROP TRIGGER trg_1;
11656UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11657f_int2 = CAST(f_char1 AS SIGNED INT),
11658f_charbig = 'just inserted'
11659   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11660DELETE FROM t0_aux
11661WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11662INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11663SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11664'just inserted' FROM t0_template
11665WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11666CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11667BEGIN
11668UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11669f_charbig = 'updated by trigger'
11670      WHERE f_int1 = new.f_int1;
11671END|
11672INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11673SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11674WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11675
11676# check trigger-2 success: 	1
11677DROP TRIGGER trg_1;
11678UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11679f_int2 = CAST(f_char1 AS SIGNED INT),
11680f_charbig = 'just inserted'
11681   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11682DELETE FROM t0_aux
11683WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11684INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11685SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11686'just inserted' FROM t0_template
11687WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11688CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11689BEGIN
11690UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11691f_charbig = 'updated by trigger'
11692      WHERE f_int1 = new.f_int1;
11693END|
11694UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11695WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11696
11697# check trigger-3 success: 	1
11698DROP TRIGGER trg_1;
11699UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11700f_int2 = CAST(f_char1 AS SIGNED INT),
11701f_charbig = 'just inserted'
11702   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11703DELETE FROM t0_aux
11704WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11705INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11706SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11707'just inserted' FROM t0_template
11708WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11709CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11710BEGIN
11711UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11712f_charbig = 'updated by trigger'
11713      WHERE f_int1 = - old.f_int1;
11714END|
11715UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11716WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11717
11718# check trigger-4 success: 	1
11719DROP TRIGGER trg_1;
11720UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11721f_int2 = CAST(f_char1 AS SIGNED INT),
11722f_charbig = 'just inserted'
11723   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11724DELETE FROM t0_aux
11725WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11726INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11727SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11728'just inserted' FROM t0_template
11729WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11730CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11731BEGIN
11732UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11733f_charbig = 'updated by trigger'
11734      WHERE f_int1 = new.f_int1;
11735END|
11736UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11737WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11738
11739# check trigger-5 success: 	1
11740DROP TRIGGER trg_1;
11741UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11742f_int2 = CAST(f_char1 AS SIGNED INT),
11743f_charbig = 'just inserted'
11744   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11745DELETE FROM t0_aux
11746WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11747INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11748SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11749'just inserted' FROM t0_template
11750WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11751CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11752BEGIN
11753UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11754f_charbig = 'updated by trigger'
11755      WHERE f_int1 = - old.f_int1;
11756END|
11757UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11758WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11759
11760# check trigger-6 success: 	1
11761DROP TRIGGER trg_1;
11762UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11763f_int2 = CAST(f_char1 AS SIGNED INT),
11764f_charbig = 'just inserted'
11765   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11766DELETE FROM t0_aux
11767WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11768INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11769SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11770'just inserted' FROM t0_template
11771WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11772CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11773BEGIN
11774UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11775f_charbig = 'updated by trigger'
11776      WHERE f_int1 = - old.f_int1;
11777END|
11778DELETE FROM t0_aux
11779WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11780
11781# check trigger-7 success: 	1
11782DROP TRIGGER trg_1;
11783UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11784f_int2 = CAST(f_char1 AS SIGNED INT),
11785f_charbig = 'just inserted'
11786   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11787DELETE FROM t0_aux
11788WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11789INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11790SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11791'just inserted' FROM t0_template
11792WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11793CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11794BEGIN
11795UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11796f_charbig = 'updated by trigger'
11797      WHERE f_int1 = - old.f_int1;
11798END|
11799DELETE FROM t0_aux
11800WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11801
11802# check trigger-8 success: 	1
11803DROP TRIGGER trg_1;
11804UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11805f_int2 = CAST(f_char1 AS SIGNED INT),
11806f_charbig = 'just inserted'
11807   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11808DELETE FROM t0_aux
11809WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11810DELETE FROM t1
11811WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11812CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11813BEGIN
11814SET new.f_int1 = old.f_int1 + @max_row,
11815new.f_int2 = old.f_int2 - @max_row,
11816new.f_charbig = '####updated per update trigger####';
11817END|
11818UPDATE t1
11819SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11820f_charbig = '####updated per update statement itself####';
11821
11822# check trigger-9 success: 	1
11823DROP TRIGGER trg_2;
11824UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11825f_int2 = CAST(f_char1 AS SIGNED INT),
11826f_charbig = CONCAT('===',f_char1,'===');
11827CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11828BEGIN
11829SET new.f_int1 = new.f_int1 + @max_row,
11830new.f_int2 = new.f_int2 - @max_row,
11831new.f_charbig = '####updated per update trigger####';
11832END|
11833UPDATE t1
11834SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11835f_charbig = '####updated per update statement itself####';
11836
11837# check trigger-10 success: 	1
11838DROP TRIGGER trg_2;
11839UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11840f_int2 = CAST(f_char1 AS SIGNED INT),
11841f_charbig = CONCAT('===',f_char1,'===');
11842CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11843BEGIN
11844SET new.f_int1 = @my_max1 + @counter,
11845new.f_int2 = @my_min2 - @counter,
11846new.f_charbig = '####updated per insert trigger####';
11847SET @counter = @counter + 1;
11848END|
11849SET @counter = 1;
11850SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11851INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11852SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11853CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11854WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11855ORDER BY f_int1;
11856DROP TRIGGER trg_3;
11857
11858# check trigger-11 success: 	1
11859DELETE FROM t1
11860WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11861AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11862AND f_charbig = '####updated per insert trigger####';
11863CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11864BEGIN
11865SET new.f_int1 = @my_max1 + @counter,
11866new.f_int2 = @my_min2 - @counter,
11867new.f_charbig = '####updated per insert trigger####';
11868SET @counter = @counter + 1;
11869END|
11870SET @counter = 1;
11871SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11872INSERT INTO t1 (f_char1, f_char2, f_charbig)
11873SELECT CAST(f_int1 AS CHAR),
11874CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11875WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11876ORDER BY f_int1;
11877DROP TRIGGER trg_3;
11878
11879# check trigger-12 success: 	1
11880DELETE FROM t1
11881WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11882AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11883AND f_charbig = '####updated per insert trigger####';
11884ANALYZE  TABLE t1;
11885Table	Op	Msg_type	Msg_text
11886test.t1	analyze	status	OK
11887CHECK    TABLE t1 EXTENDED;
11888Table	Op	Msg_type	Msg_text
11889test.t1	check	status	OK
11890CHECKSUM TABLE t1 EXTENDED;
11891Table	Checksum
11892test.t1	<some_value>
11893OPTIMIZE TABLE t1;
11894Table	Op	Msg_type	Msg_text
11895test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
11896test.t1	optimize	status	OK
11897# check layout success:    1
11898REPAIR   TABLE t1 EXTENDED;
11899Table	Op	Msg_type	Msg_text
11900test.t1	repair	status	OK
11901# check layout success:    1
11902TRUNCATE t1;
11903
11904# check TRUNCATE success: 	1
11905# check layout success:    1
11906# End usability test (inc/partition_check.inc)
11907DROP TABLE t1;
11908#  1.1.3 UNIQUE INDEX exists
11909DROP TABLE IF EXISTS t1;
11910CREATE TABLE t1 (
11911f_int1 INTEGER,
11912f_int2 INTEGER,
11913f_char1 CHAR(20),
11914f_char2 CHAR(20),
11915f_charbig VARCHAR(1000)
11916, UNIQUE INDEX uidx1 (f_int1,f_int2)
11917)
11918PARTITION BY HASH(f_int1) PARTITIONS 2;
11919INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11920SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11921WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11922ALTER TABLE t1 MODIFY f_int2 BIGINT;
11923INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11924SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11925WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11926# Start usability test (inc/partition_check.inc)
11927create_command
11928SHOW CREATE TABLE t1;
11929Table	Create Table
11930t1	CREATE TABLE `t1` (
11931  `f_int1` int(11) DEFAULT NULL,
11932  `f_int2` bigint(20) DEFAULT NULL,
11933  `f_char1` char(20) DEFAULT NULL,
11934  `f_char2` char(20) DEFAULT NULL,
11935  `f_charbig` varchar(1000) DEFAULT NULL,
11936  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
11937) ENGINE=TokuDB DEFAULT CHARSET=latin1
11938/*!50100 PARTITION BY HASH (f_int1)
11939PARTITIONS 2 */
11940
11941# check prerequisites-1 success:    1
11942# check COUNT(*) success:    1
11943# check MIN/MAX(f_int1) success:    1
11944# check MIN/MAX(f_int2) success:    1
11945INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11946SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11947CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11948WHERE f_int1 IN (2,3);
11949ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
11950# check prerequisites-3 success:    1
11951# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11952INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11953SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11954CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11955WHERE f_int1 IN (2,3);
11956DELETE FROM t1 WHERE f_charbig = 'delete me';
11957INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11958SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11959CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11960WHERE f_int1 IN (2,3);
11961DELETE FROM t1 WHERE f_charbig = 'delete me';
11962# check read via f_int1 success: 1
11963# check read via f_int2 success: 1
11964
11965# check multiple-1 success: 	1
11966DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11967
11968# check multiple-2 success: 	1
11969INSERT INTO t1 SELECT * FROM t0_template
11970WHERE MOD(f_int1,3) = 0;
11971
11972# check multiple-3 success: 	1
11973UPDATE t1 SET f_int1 = f_int1 + @max_row
11974WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11975AND @max_row_div2 + @max_row_div4;
11976
11977# check multiple-4 success: 	1
11978DELETE FROM t1
11979WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11980AND @max_row_div2 + @max_row_div4 + @max_row;
11981
11982# check multiple-5 success: 	1
11983SELECT COUNT(*) INTO @try_count FROM t0_template
11984WHERE MOD(f_int1,3) = 0
11985AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11986SELECT COUNT(*) INTO @clash_count
11987FROM t1 INNER JOIN t0_template USING(f_int1)
11988WHERE MOD(f_int1,3) = 0
11989AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11990SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11991INSERT INTO t1
11992SET f_int1 = @cur_value , f_int2 = @cur_value,
11993f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11994f_charbig = '#SINGLE#';
11995
11996# check single-1 success: 	1
11997SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11998INSERT INTO t1
11999SET f_int1 = @cur_value , f_int2 = @cur_value,
12000f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12001f_charbig = '#SINGLE#';
12002
12003# check single-2 success: 	1
12004SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12005SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12006UPDATE t1 SET f_int1 = @cur_value2
12007WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12008
12009# check single-3 success: 	1
12010SET @cur_value1= -1;
12011SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12012UPDATE t1 SET f_int1 = @cur_value1
12013WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12014
12015# check single-4 success: 	1
12016SELECT MAX(f_int1) INTO @cur_value FROM t1;
12017DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12018
12019# check single-5 success: 	1
12020DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12021
12022# check single-6 success: 	1
12023INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12024
12025# check single-7 success: 	1
12026DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12027DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12028INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12029f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12030f_charbig = '#NULL#';
12031INSERT INTO t1
12032SET f_int1 = NULL , f_int2 = -@max_row,
12033f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12034f_charbig = '#NULL#';
12035# check null success:    1
12036
12037# check null-1 success: 	1
12038UPDATE t1 SET f_int1 = -@max_row
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-2 success: 	1
12043UPDATE t1 SET f_int1 = NULL
12044WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12045AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12046
12047# check null-3 success: 	1
12048DELETE FROM t1
12049WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12050AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12051
12052# check null-4 success: 	1
12053DELETE FROM t1
12054WHERE f_int1 = 0 AND f_int2 = 0
12055AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12056AND f_charbig = '#NULL#';
12057INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12058SELECT f_int1, f_int1, '', '', 'was inserted'
12059   FROM t0_template source_tab
12060WHERE MOD(f_int1,3) = 0
12061AND f_int1 BETWEEN @max_row_div2 AND @max_row
12062ON DUPLICATE KEY
12063UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12064f_int2 = 2 * @max_row + source_tab.f_int1,
12065f_charbig = 'was updated';
12066
12067# check unique-1-a success: 	1
12068
12069# check unique-1-b success: 	1
12070DELETE FROM t1 WHERE f_charbig = 'was inserted';
12071UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12072f_int2 = CAST(f_char1 AS SIGNED INT),
12073f_charbig = CONCAT('===',f_char1,'===')
12074WHERE f_charbig = 'was updated';
12075REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12076SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12077   FROM t0_template source_tab
12078WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12079
12080# check replace success: 	1
12081DELETE FROM t1
12082WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12083DELETE FROM t1
12084WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12085f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12086UPDATE t1 SET f_int2 = f_int1,
12087f_char1 = CAST(f_int1 AS CHAR),
12088f_char2 = CAST(f_int1 AS CHAR),
12089f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12090WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12091SET AUTOCOMMIT= 0;
12092INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12093SELECT f_int1, f_int1, '', '', 'was inserted'
12094FROM t0_template source_tab
12095WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12096
12097# check transactions-1 success: 	1
12098COMMIT WORK;
12099
12100# check transactions-2 success: 	1
12101ROLLBACK WORK;
12102
12103# check transactions-3 success: 	1
12104DELETE FROM t1 WHERE f_charbig = 'was inserted';
12105COMMIT WORK;
12106ROLLBACK WORK;
12107
12108# check transactions-4 success: 	1
12109INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12110SELECT f_int1, f_int1, '', '', 'was inserted'
12111FROM t0_template source_tab
12112WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12113
12114# check transactions-5 success: 	1
12115ROLLBACK WORK;
12116
12117# check transactions-6 success: 	1
12118# INFO: Storage engine used for t1 seems to be transactional.
12119COMMIT;
12120
12121# check transactions-7 success: 	1
12122DELETE FROM t1 WHERE f_charbig = 'was inserted';
12123COMMIT WORK;
12124SET @@session.sql_mode = 'traditional';
12125Warnings:
12126Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12127SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12128INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12129SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12130'', '', 'was inserted' FROM t0_template
12131WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12132ERROR 22012: Division by 0
12133COMMIT;
12134
12135# check transactions-8 success: 	1
12136# INFO: Storage engine used for t1 seems to be able to revert
12137#       changes made by the failing statement.
12138SET @@session.sql_mode = '';
12139Warnings:
12140Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12141SET AUTOCOMMIT= 1;
12142DELETE FROM t1 WHERE f_charbig = 'was inserted';
12143COMMIT WORK;
12144UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12145
12146# check special-1 success: 	1
12147UPDATE t1 SET f_charbig = '';
12148
12149# check special-2 success: 	1
12150UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12151INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12152SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12153WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12154INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12155SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12156'just inserted' FROM t0_template
12157WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12158CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12159BEGIN
12160UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12161f_charbig = 'updated by trigger'
12162      WHERE f_int1 = new.f_int1;
12163END|
12164INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12165SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12166WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12167
12168# check trigger-1 success: 	1
12169DROP TRIGGER trg_1;
12170UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12171f_int2 = CAST(f_char1 AS SIGNED INT),
12172f_charbig = 'just inserted'
12173   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12174DELETE FROM t0_aux
12175WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12177SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12178'just inserted' FROM t0_template
12179WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12180CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12181BEGIN
12182UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12183f_charbig = 'updated by trigger'
12184      WHERE f_int1 = new.f_int1;
12185END|
12186INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12187SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12188WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12189
12190# check trigger-2 success: 	1
12191DROP TRIGGER trg_1;
12192UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12193f_int2 = CAST(f_char1 AS SIGNED INT),
12194f_charbig = 'just inserted'
12195   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12196DELETE FROM t0_aux
12197WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12198INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12199SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12200'just inserted' FROM t0_template
12201WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12202CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12203BEGIN
12204UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12205f_charbig = 'updated by trigger'
12206      WHERE f_int1 = new.f_int1;
12207END|
12208UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12209WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12210
12211# check trigger-3 success: 	1
12212DROP TRIGGER trg_1;
12213UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12214f_int2 = CAST(f_char1 AS SIGNED INT),
12215f_charbig = 'just inserted'
12216   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12217DELETE FROM t0_aux
12218WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12219INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12220SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12221'just inserted' FROM t0_template
12222WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12223CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12224BEGIN
12225UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12226f_charbig = 'updated by trigger'
12227      WHERE f_int1 = - old.f_int1;
12228END|
12229UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12230WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12231
12232# check trigger-4 success: 	1
12233DROP TRIGGER trg_1;
12234UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12235f_int2 = CAST(f_char1 AS SIGNED INT),
12236f_charbig = 'just inserted'
12237   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12238DELETE FROM t0_aux
12239WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12240INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12241SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12242'just inserted' FROM t0_template
12243WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12244CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12245BEGIN
12246UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12247f_charbig = 'updated by trigger'
12248      WHERE f_int1 = new.f_int1;
12249END|
12250UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12251WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12252
12253# check trigger-5 success: 	1
12254DROP TRIGGER trg_1;
12255UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12256f_int2 = CAST(f_char1 AS SIGNED INT),
12257f_charbig = 'just inserted'
12258   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12259DELETE FROM t0_aux
12260WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12261INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12262SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12263'just inserted' FROM t0_template
12264WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12265CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12266BEGIN
12267UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12268f_charbig = 'updated by trigger'
12269      WHERE f_int1 = - old.f_int1;
12270END|
12271UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12272WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12273
12274# check trigger-6 success: 	1
12275DROP TRIGGER trg_1;
12276UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12277f_int2 = CAST(f_char1 AS SIGNED INT),
12278f_charbig = 'just inserted'
12279   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12280DELETE FROM t0_aux
12281WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12282INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12283SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12284'just inserted' FROM t0_template
12285WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12286CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12287BEGIN
12288UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12289f_charbig = 'updated by trigger'
12290      WHERE f_int1 = - old.f_int1;
12291END|
12292DELETE FROM t0_aux
12293WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12294
12295# check trigger-7 success: 	1
12296DROP TRIGGER trg_1;
12297UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12298f_int2 = CAST(f_char1 AS SIGNED INT),
12299f_charbig = 'just inserted'
12300   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12301DELETE FROM t0_aux
12302WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12303INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12304SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12305'just inserted' FROM t0_template
12306WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12307CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12308BEGIN
12309UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12310f_charbig = 'updated by trigger'
12311      WHERE f_int1 = - old.f_int1;
12312END|
12313DELETE FROM t0_aux
12314WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12315
12316# check trigger-8 success: 	1
12317DROP TRIGGER trg_1;
12318UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12319f_int2 = CAST(f_char1 AS SIGNED INT),
12320f_charbig = 'just inserted'
12321   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12322DELETE FROM t0_aux
12323WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12324DELETE FROM t1
12325WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12326CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12327BEGIN
12328SET new.f_int1 = old.f_int1 + @max_row,
12329new.f_int2 = old.f_int2 - @max_row,
12330new.f_charbig = '####updated per update trigger####';
12331END|
12332UPDATE t1
12333SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12334f_charbig = '####updated per update statement itself####';
12335
12336# check trigger-9 success: 	1
12337DROP TRIGGER trg_2;
12338UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12339f_int2 = CAST(f_char1 AS SIGNED INT),
12340f_charbig = CONCAT('===',f_char1,'===');
12341CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12342BEGIN
12343SET new.f_int1 = new.f_int1 + @max_row,
12344new.f_int2 = new.f_int2 - @max_row,
12345new.f_charbig = '####updated per update trigger####';
12346END|
12347UPDATE t1
12348SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12349f_charbig = '####updated per update statement itself####';
12350
12351# check trigger-10 success: 	1
12352DROP TRIGGER trg_2;
12353UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12354f_int2 = CAST(f_char1 AS SIGNED INT),
12355f_charbig = CONCAT('===',f_char1,'===');
12356CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12357BEGIN
12358SET new.f_int1 = @my_max1 + @counter,
12359new.f_int2 = @my_min2 - @counter,
12360new.f_charbig = '####updated per insert trigger####';
12361SET @counter = @counter + 1;
12362END|
12363SET @counter = 1;
12364SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12365INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12366SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12367CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12368WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12369ORDER BY f_int1;
12370DROP TRIGGER trg_3;
12371
12372# check trigger-11 success: 	1
12373DELETE FROM t1
12374WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12375AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12376AND f_charbig = '####updated per insert trigger####';
12377CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12378BEGIN
12379SET new.f_int1 = @my_max1 + @counter,
12380new.f_int2 = @my_min2 - @counter,
12381new.f_charbig = '####updated per insert trigger####';
12382SET @counter = @counter + 1;
12383END|
12384SET @counter = 1;
12385SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12386INSERT INTO t1 (f_char1, f_char2, f_charbig)
12387SELECT CAST(f_int1 AS CHAR),
12388CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12389WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12390ORDER BY f_int1;
12391DROP TRIGGER trg_3;
12392
12393# check trigger-12 success: 	1
12394DELETE FROM t1
12395WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12396AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12397AND f_charbig = '####updated per insert trigger####';
12398ANALYZE  TABLE t1;
12399Table	Op	Msg_type	Msg_text
12400test.t1	analyze	status	OK
12401CHECK    TABLE t1 EXTENDED;
12402Table	Op	Msg_type	Msg_text
12403test.t1	check	status	OK
12404CHECKSUM TABLE t1 EXTENDED;
12405Table	Checksum
12406test.t1	<some_value>
12407OPTIMIZE TABLE t1;
12408Table	Op	Msg_type	Msg_text
12409test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12410test.t1	optimize	status	OK
12411# check layout success:    1
12412REPAIR   TABLE t1 EXTENDED;
12413Table	Op	Msg_type	Msg_text
12414test.t1	repair	status	OK
12415# check layout success:    1
12416TRUNCATE t1;
12417
12418# check TRUNCATE success: 	1
12419# check layout success:    1
12420# End usability test (inc/partition_check.inc)
12421DROP TABLE t1;
12422CREATE TABLE t1 (
12423f_int1 INTEGER,
12424f_int2 INTEGER,
12425f_char1 CHAR(20),
12426f_char2 CHAR(20),
12427f_charbig VARCHAR(1000)
12428, UNIQUE INDEX uidx1 (f_int1,f_int2)
12429)
12430PARTITION BY KEY(f_int1) PARTITIONS 5;
12431INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12432SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12433WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12434ALTER TABLE t1 MODIFY f_int2 BIGINT;
12435INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12436SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12437WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12438# Start usability test (inc/partition_check.inc)
12439create_command
12440SHOW CREATE TABLE t1;
12441Table	Create Table
12442t1	CREATE TABLE `t1` (
12443  `f_int1` int(11) DEFAULT NULL,
12444  `f_int2` bigint(20) DEFAULT NULL,
12445  `f_char1` char(20) DEFAULT NULL,
12446  `f_char2` char(20) DEFAULT NULL,
12447  `f_charbig` varchar(1000) DEFAULT NULL,
12448  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
12449) ENGINE=TokuDB DEFAULT CHARSET=latin1
12450/*!50100 PARTITION BY KEY (f_int1)
12451PARTITIONS 5 */
12452
12453# check prerequisites-1 success:    1
12454# check COUNT(*) success:    1
12455# check MIN/MAX(f_int1) success:    1
12456# check MIN/MAX(f_int2) success:    1
12457INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12458SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12459CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12460WHERE f_int1 IN (2,3);
12461ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12462# check prerequisites-3 success:    1
12463# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12464INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12465SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12466CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12467WHERE f_int1 IN (2,3);
12468DELETE FROM t1 WHERE f_charbig = 'delete me';
12469INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12470SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12471CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12472WHERE f_int1 IN (2,3);
12473DELETE FROM t1 WHERE f_charbig = 'delete me';
12474# check read via f_int1 success: 1
12475# check read via f_int2 success: 1
12476
12477# check multiple-1 success: 	1
12478DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12479
12480# check multiple-2 success: 	1
12481INSERT INTO t1 SELECT * FROM t0_template
12482WHERE MOD(f_int1,3) = 0;
12483
12484# check multiple-3 success: 	1
12485UPDATE t1 SET f_int1 = f_int1 + @max_row
12486WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12487AND @max_row_div2 + @max_row_div4;
12488
12489# check multiple-4 success: 	1
12490DELETE FROM t1
12491WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12492AND @max_row_div2 + @max_row_div4 + @max_row;
12493
12494# check multiple-5 success: 	1
12495SELECT COUNT(*) INTO @try_count FROM t0_template
12496WHERE MOD(f_int1,3) = 0
12497AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12498SELECT COUNT(*) INTO @clash_count
12499FROM t1 INNER JOIN t0_template USING(f_int1)
12500WHERE MOD(f_int1,3) = 0
12501AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12502SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12503INSERT INTO t1
12504SET f_int1 = @cur_value , f_int2 = @cur_value,
12505f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12506f_charbig = '#SINGLE#';
12507
12508# check single-1 success: 	1
12509SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12510INSERT INTO t1
12511SET f_int1 = @cur_value , f_int2 = @cur_value,
12512f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12513f_charbig = '#SINGLE#';
12514
12515# check single-2 success: 	1
12516SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12517SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12518UPDATE t1 SET f_int1 = @cur_value2
12519WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12520
12521# check single-3 success: 	1
12522SET @cur_value1= -1;
12523SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12524UPDATE t1 SET f_int1 = @cur_value1
12525WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12526
12527# check single-4 success: 	1
12528SELECT MAX(f_int1) INTO @cur_value FROM t1;
12529DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12530
12531# check single-5 success: 	1
12532DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12533
12534# check single-6 success: 	1
12535INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12536
12537# check single-7 success: 	1
12538DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12539DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12540INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12541f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12542f_charbig = '#NULL#';
12543INSERT INTO t1
12544SET f_int1 = NULL , f_int2 = -@max_row,
12545f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12546f_charbig = '#NULL#';
12547# check null success:    1
12548
12549# check null-1 success: 	1
12550UPDATE t1 SET f_int1 = -@max_row
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-2 success: 	1
12555UPDATE t1 SET f_int1 = NULL
12556WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12557AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12558
12559# check null-3 success: 	1
12560DELETE FROM t1
12561WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12562AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12563
12564# check null-4 success: 	1
12565DELETE FROM t1
12566WHERE f_int1 = 0 AND f_int2 = 0
12567AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12568AND f_charbig = '#NULL#';
12569INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12570SELECT f_int1, f_int1, '', '', 'was inserted'
12571   FROM t0_template source_tab
12572WHERE MOD(f_int1,3) = 0
12573AND f_int1 BETWEEN @max_row_div2 AND @max_row
12574ON DUPLICATE KEY
12575UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12576f_int2 = 2 * @max_row + source_tab.f_int1,
12577f_charbig = 'was updated';
12578
12579# check unique-1-a success: 	1
12580
12581# check unique-1-b success: 	1
12582DELETE FROM t1 WHERE f_charbig = 'was inserted';
12583UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12584f_int2 = CAST(f_char1 AS SIGNED INT),
12585f_charbig = CONCAT('===',f_char1,'===')
12586WHERE f_charbig = 'was updated';
12587REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12588SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12589   FROM t0_template source_tab
12590WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12591
12592# check replace success: 	1
12593DELETE FROM t1
12594WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12595DELETE FROM t1
12596WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12597f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12598UPDATE t1 SET f_int2 = f_int1,
12599f_char1 = CAST(f_int1 AS CHAR),
12600f_char2 = CAST(f_int1 AS CHAR),
12601f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12602WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12603SET AUTOCOMMIT= 0;
12604INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12605SELECT f_int1, f_int1, '', '', 'was inserted'
12606FROM t0_template source_tab
12607WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12608
12609# check transactions-1 success: 	1
12610COMMIT WORK;
12611
12612# check transactions-2 success: 	1
12613ROLLBACK WORK;
12614
12615# check transactions-3 success: 	1
12616DELETE FROM t1 WHERE f_charbig = 'was inserted';
12617COMMIT WORK;
12618ROLLBACK WORK;
12619
12620# check transactions-4 success: 	1
12621INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12622SELECT f_int1, f_int1, '', '', 'was inserted'
12623FROM t0_template source_tab
12624WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12625
12626# check transactions-5 success: 	1
12627ROLLBACK WORK;
12628
12629# check transactions-6 success: 	1
12630# INFO: Storage engine used for t1 seems to be transactional.
12631COMMIT;
12632
12633# check transactions-7 success: 	1
12634DELETE FROM t1 WHERE f_charbig = 'was inserted';
12635COMMIT WORK;
12636SET @@session.sql_mode = 'traditional';
12637Warnings:
12638Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12639SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12640INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12641SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12642'', '', 'was inserted' FROM t0_template
12643WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12644ERROR 22012: Division by 0
12645COMMIT;
12646
12647# check transactions-8 success: 	1
12648# INFO: Storage engine used for t1 seems to be able to revert
12649#       changes made by the failing statement.
12650SET @@session.sql_mode = '';
12651Warnings:
12652Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12653SET AUTOCOMMIT= 1;
12654DELETE FROM t1 WHERE f_charbig = 'was inserted';
12655COMMIT WORK;
12656UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12657
12658# check special-1 success: 	1
12659UPDATE t1 SET f_charbig = '';
12660
12661# check special-2 success: 	1
12662UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12663INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12664SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12665WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12666INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12667SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12668'just inserted' FROM t0_template
12669WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12670CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12671BEGIN
12672UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12673f_charbig = 'updated by trigger'
12674      WHERE f_int1 = new.f_int1;
12675END|
12676INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12677SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12679
12680# check trigger-1 success: 	1
12681DROP TRIGGER trg_1;
12682UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12683f_int2 = CAST(f_char1 AS SIGNED INT),
12684f_charbig = 'just inserted'
12685   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12686DELETE FROM t0_aux
12687WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12688INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12689SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12690'just inserted' FROM t0_template
12691WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12692CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12693BEGIN
12694UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12695f_charbig = 'updated by trigger'
12696      WHERE f_int1 = new.f_int1;
12697END|
12698INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12699SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12700WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12701
12702# check trigger-2 success: 	1
12703DROP TRIGGER trg_1;
12704UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12705f_int2 = CAST(f_char1 AS SIGNED INT),
12706f_charbig = 'just inserted'
12707   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12708DELETE FROM t0_aux
12709WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12710INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12711SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12712'just inserted' FROM t0_template
12713WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12714CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12715BEGIN
12716UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12717f_charbig = 'updated by trigger'
12718      WHERE f_int1 = new.f_int1;
12719END|
12720UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12721WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12722
12723# check trigger-3 success: 	1
12724DROP TRIGGER trg_1;
12725UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12726f_int2 = CAST(f_char1 AS SIGNED INT),
12727f_charbig = 'just inserted'
12728   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12729DELETE FROM t0_aux
12730WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12731INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12732SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12733'just inserted' FROM t0_template
12734WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12735CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12736BEGIN
12737UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12738f_charbig = 'updated by trigger'
12739      WHERE f_int1 = - old.f_int1;
12740END|
12741UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12742WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12743
12744# check trigger-4 success: 	1
12745DROP TRIGGER trg_1;
12746UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12747f_int2 = CAST(f_char1 AS SIGNED INT),
12748f_charbig = 'just inserted'
12749   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12750DELETE FROM t0_aux
12751WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12752INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12753SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12754'just inserted' FROM t0_template
12755WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12756CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12757BEGIN
12758UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12759f_charbig = 'updated by trigger'
12760      WHERE f_int1 = new.f_int1;
12761END|
12762UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12763WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12764
12765# check trigger-5 success: 	1
12766DROP TRIGGER trg_1;
12767UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12768f_int2 = CAST(f_char1 AS SIGNED INT),
12769f_charbig = 'just inserted'
12770   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12771DELETE FROM t0_aux
12772WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12773INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12774SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12775'just inserted' FROM t0_template
12776WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12777CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12778BEGIN
12779UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12780f_charbig = 'updated by trigger'
12781      WHERE f_int1 = - old.f_int1;
12782END|
12783UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12784WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12785
12786# check trigger-6 success: 	1
12787DROP TRIGGER trg_1;
12788UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12789f_int2 = CAST(f_char1 AS SIGNED INT),
12790f_charbig = 'just inserted'
12791   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12792DELETE FROM t0_aux
12793WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12794INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12795SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12796'just inserted' FROM t0_template
12797WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12798CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12799BEGIN
12800UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12801f_charbig = 'updated by trigger'
12802      WHERE f_int1 = - old.f_int1;
12803END|
12804DELETE FROM t0_aux
12805WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12806
12807# check trigger-7 success: 	1
12808DROP TRIGGER trg_1;
12809UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12810f_int2 = CAST(f_char1 AS SIGNED INT),
12811f_charbig = 'just inserted'
12812   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12813DELETE FROM t0_aux
12814WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12815INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12816SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12817'just inserted' FROM t0_template
12818WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12819CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12820BEGIN
12821UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12822f_charbig = 'updated by trigger'
12823      WHERE f_int1 = - old.f_int1;
12824END|
12825DELETE FROM t0_aux
12826WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12827
12828# check trigger-8 success: 	1
12829DROP TRIGGER trg_1;
12830UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12831f_int2 = CAST(f_char1 AS SIGNED INT),
12832f_charbig = 'just inserted'
12833   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12834DELETE FROM t0_aux
12835WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12836DELETE FROM t1
12837WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12838CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12839BEGIN
12840SET new.f_int1 = old.f_int1 + @max_row,
12841new.f_int2 = old.f_int2 - @max_row,
12842new.f_charbig = '####updated per update trigger####';
12843END|
12844UPDATE t1
12845SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12846f_charbig = '####updated per update statement itself####';
12847
12848# check trigger-9 success: 	1
12849DROP TRIGGER trg_2;
12850UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12851f_int2 = CAST(f_char1 AS SIGNED INT),
12852f_charbig = CONCAT('===',f_char1,'===');
12853CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12854BEGIN
12855SET new.f_int1 = new.f_int1 + @max_row,
12856new.f_int2 = new.f_int2 - @max_row,
12857new.f_charbig = '####updated per update trigger####';
12858END|
12859UPDATE t1
12860SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12861f_charbig = '####updated per update statement itself####';
12862
12863# check trigger-10 success: 	1
12864DROP TRIGGER trg_2;
12865UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12866f_int2 = CAST(f_char1 AS SIGNED INT),
12867f_charbig = CONCAT('===',f_char1,'===');
12868CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12869BEGIN
12870SET new.f_int1 = @my_max1 + @counter,
12871new.f_int2 = @my_min2 - @counter,
12872new.f_charbig = '####updated per insert trigger####';
12873SET @counter = @counter + 1;
12874END|
12875SET @counter = 1;
12876SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12877INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12878SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12879CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12880WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12881ORDER BY f_int1;
12882DROP TRIGGER trg_3;
12883
12884# check trigger-11 success: 	1
12885DELETE FROM t1
12886WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12887AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12888AND f_charbig = '####updated per insert trigger####';
12889CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12890BEGIN
12891SET new.f_int1 = @my_max1 + @counter,
12892new.f_int2 = @my_min2 - @counter,
12893new.f_charbig = '####updated per insert trigger####';
12894SET @counter = @counter + 1;
12895END|
12896SET @counter = 1;
12897SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12898INSERT INTO t1 (f_char1, f_char2, f_charbig)
12899SELECT CAST(f_int1 AS CHAR),
12900CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12901WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12902ORDER BY f_int1;
12903DROP TRIGGER trg_3;
12904
12905# check trigger-12 success: 	1
12906DELETE FROM t1
12907WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12908AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12909AND f_charbig = '####updated per insert trigger####';
12910ANALYZE  TABLE t1;
12911Table	Op	Msg_type	Msg_text
12912test.t1	analyze	status	OK
12913CHECK    TABLE t1 EXTENDED;
12914Table	Op	Msg_type	Msg_text
12915test.t1	check	status	OK
12916CHECKSUM TABLE t1 EXTENDED;
12917Table	Checksum
12918test.t1	<some_value>
12919OPTIMIZE TABLE t1;
12920Table	Op	Msg_type	Msg_text
12921test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12922test.t1	optimize	status	OK
12923# check layout success:    1
12924REPAIR   TABLE t1 EXTENDED;
12925Table	Op	Msg_type	Msg_text
12926test.t1	repair	status	OK
12927# check layout success:    1
12928TRUNCATE t1;
12929
12930# check TRUNCATE success: 	1
12931# check layout success:    1
12932# End usability test (inc/partition_check.inc)
12933DROP TABLE t1;
12934CREATE TABLE t1 (
12935f_int1 INTEGER,
12936f_int2 INTEGER,
12937f_char1 CHAR(20),
12938f_char2 CHAR(20),
12939f_charbig VARCHAR(1000)
12940, UNIQUE INDEX uidx1 (f_int1,f_int2)
12941)
12942PARTITION BY LIST(MOD(f_int1,4))
12943(PARTITION part_3 VALUES IN (-3),
12944PARTITION part_2 VALUES IN (-2),
12945PARTITION part_1 VALUES IN (-1),
12946PARTITION part_N VALUES IN (NULL),
12947PARTITION part0 VALUES IN (0),
12948PARTITION part1 VALUES IN (1),
12949PARTITION part2 VALUES IN (2),
12950PARTITION part3 VALUES IN (3));
12951INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12952SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12953WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12954ALTER TABLE t1 MODIFY f_int2 BIGINT;
12955INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12956SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12957WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12958# Start usability test (inc/partition_check.inc)
12959create_command
12960SHOW CREATE TABLE t1;
12961Table	Create Table
12962t1	CREATE TABLE `t1` (
12963  `f_int1` int(11) DEFAULT NULL,
12964  `f_int2` bigint(20) DEFAULT NULL,
12965  `f_char1` char(20) DEFAULT NULL,
12966  `f_char2` char(20) DEFAULT NULL,
12967  `f_charbig` varchar(1000) DEFAULT NULL,
12968  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
12969) ENGINE=TokuDB DEFAULT CHARSET=latin1
12970/*!50100 PARTITION BY LIST (MOD(f_int1,4))
12971(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB,
12972 PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB,
12973 PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB,
12974 PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB,
12975 PARTITION part0 VALUES IN (0) ENGINE = TokuDB,
12976 PARTITION part1 VALUES IN (1) ENGINE = TokuDB,
12977 PARTITION part2 VALUES IN (2) ENGINE = TokuDB,
12978 PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */
12979
12980# check prerequisites-1 success:    1
12981# check COUNT(*) success:    1
12982# check MIN/MAX(f_int1) success:    1
12983# check MIN/MAX(f_int2) success:    1
12984INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12985SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12986CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12987WHERE f_int1 IN (2,3);
12988ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12989# check prerequisites-3 success:    1
12990# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12991INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12992SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12993CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12994WHERE f_int1 IN (2,3);
12995DELETE FROM t1 WHERE f_charbig = 'delete me';
12996INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12997SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12998CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12999WHERE f_int1 IN (2,3);
13000DELETE FROM t1 WHERE f_charbig = 'delete me';
13001# check read via f_int1 success: 1
13002# check read via f_int2 success: 1
13003
13004# check multiple-1 success: 	1
13005DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13006
13007# check multiple-2 success: 	1
13008INSERT INTO t1 SELECT * FROM t0_template
13009WHERE MOD(f_int1,3) = 0;
13010
13011# check multiple-3 success: 	1
13012UPDATE t1 SET f_int1 = f_int1 + @max_row
13013WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13014AND @max_row_div2 + @max_row_div4;
13015
13016# check multiple-4 success: 	1
13017DELETE FROM t1
13018WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13019AND @max_row_div2 + @max_row_div4 + @max_row;
13020
13021# check multiple-5 success: 	1
13022SELECT COUNT(*) INTO @try_count FROM t0_template
13023WHERE MOD(f_int1,3) = 0
13024AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13025SELECT COUNT(*) INTO @clash_count
13026FROM t1 INNER JOIN t0_template USING(f_int1)
13027WHERE MOD(f_int1,3) = 0
13028AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13029SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13030INSERT INTO t1
13031SET f_int1 = @cur_value , f_int2 = @cur_value,
13032f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13033f_charbig = '#SINGLE#';
13034
13035# check single-1 success: 	1
13036SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13037INSERT INTO t1
13038SET f_int1 = @cur_value , f_int2 = @cur_value,
13039f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13040f_charbig = '#SINGLE#';
13041
13042# check single-2 success: 	1
13043SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13044SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13045UPDATE t1 SET f_int1 = @cur_value2
13046WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13047
13048# check single-3 success: 	1
13049SET @cur_value1= -1;
13050SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13051UPDATE t1 SET f_int1 = @cur_value1
13052WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13053
13054# check single-4 success: 	1
13055SELECT MAX(f_int1) INTO @cur_value FROM t1;
13056DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13057
13058# check single-5 success: 	1
13059DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13060
13061# check single-6 success: 	1
13062INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13063
13064# check single-7 success: 	1
13065DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13066DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13067INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13068f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13069f_charbig = '#NULL#';
13070INSERT INTO t1
13071SET f_int1 = NULL , f_int2 = -@max_row,
13072f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13073f_charbig = '#NULL#';
13074# check null success:    1
13075
13076# check null-1 success: 	1
13077UPDATE t1 SET f_int1 = -@max_row
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-2 success: 	1
13082UPDATE t1 SET f_int1 = NULL
13083WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13084AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13085
13086# check null-3 success: 	1
13087DELETE FROM t1
13088WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13089AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13090
13091# check null-4 success: 	1
13092DELETE FROM t1
13093WHERE f_int1 = 0 AND f_int2 = 0
13094AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13095AND f_charbig = '#NULL#';
13096INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13097SELECT f_int1, f_int1, '', '', 'was inserted'
13098   FROM t0_template source_tab
13099WHERE MOD(f_int1,3) = 0
13100AND f_int1 BETWEEN @max_row_div2 AND @max_row
13101ON DUPLICATE KEY
13102UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13103f_int2 = 2 * @max_row + source_tab.f_int1,
13104f_charbig = 'was updated';
13105
13106# check unique-1-a success: 	1
13107
13108# check unique-1-b success: 	1
13109DELETE FROM t1 WHERE f_charbig = 'was inserted';
13110UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13111f_int2 = CAST(f_char1 AS SIGNED INT),
13112f_charbig = CONCAT('===',f_char1,'===')
13113WHERE f_charbig = 'was updated';
13114REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13115SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13116   FROM t0_template source_tab
13117WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13118
13119# check replace success: 	1
13120DELETE FROM t1
13121WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13122DELETE FROM t1
13123WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13124f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13125UPDATE t1 SET f_int2 = f_int1,
13126f_char1 = CAST(f_int1 AS CHAR),
13127f_char2 = CAST(f_int1 AS CHAR),
13128f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13129WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13130SET AUTOCOMMIT= 0;
13131INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13132SELECT f_int1, f_int1, '', '', 'was inserted'
13133FROM t0_template source_tab
13134WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13135
13136# check transactions-1 success: 	1
13137COMMIT WORK;
13138
13139# check transactions-2 success: 	1
13140ROLLBACK WORK;
13141
13142# check transactions-3 success: 	1
13143DELETE FROM t1 WHERE f_charbig = 'was inserted';
13144COMMIT WORK;
13145ROLLBACK WORK;
13146
13147# check transactions-4 success: 	1
13148INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13149SELECT f_int1, f_int1, '', '', 'was inserted'
13150FROM t0_template source_tab
13151WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13152
13153# check transactions-5 success: 	1
13154ROLLBACK WORK;
13155
13156# check transactions-6 success: 	1
13157# INFO: Storage engine used for t1 seems to be transactional.
13158COMMIT;
13159
13160# check transactions-7 success: 	1
13161DELETE FROM t1 WHERE f_charbig = 'was inserted';
13162COMMIT WORK;
13163SET @@session.sql_mode = 'traditional';
13164Warnings:
13165Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13166SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13167INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13168SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13169'', '', 'was inserted' FROM t0_template
13170WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13171ERROR 22012: Division by 0
13172COMMIT;
13173
13174# check transactions-8 success: 	1
13175# INFO: Storage engine used for t1 seems to be able to revert
13176#       changes made by the failing statement.
13177SET @@session.sql_mode = '';
13178Warnings:
13179Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13180SET AUTOCOMMIT= 1;
13181DELETE FROM t1 WHERE f_charbig = 'was inserted';
13182COMMIT WORK;
13183UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13184
13185# check special-1 success: 	1
13186UPDATE t1 SET f_charbig = '';
13187
13188# check special-2 success: 	1
13189UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13190INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13191SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13192WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13193INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13194SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13195'just inserted' FROM t0_template
13196WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13197CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13198BEGIN
13199UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13200f_charbig = 'updated by trigger'
13201      WHERE f_int1 = new.f_int1;
13202END|
13203INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13204SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13205WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13206
13207# check trigger-1 success: 	1
13208DROP TRIGGER trg_1;
13209UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13210f_int2 = CAST(f_char1 AS SIGNED INT),
13211f_charbig = 'just inserted'
13212   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13213DELETE FROM t0_aux
13214WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13215INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13216SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13217'just inserted' FROM t0_template
13218WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13219CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13220BEGIN
13221UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13222f_charbig = 'updated by trigger'
13223      WHERE f_int1 = new.f_int1;
13224END|
13225INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13226SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13227WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13228
13229# check trigger-2 success: 	1
13230DROP TRIGGER trg_1;
13231UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13232f_int2 = CAST(f_char1 AS SIGNED INT),
13233f_charbig = 'just inserted'
13234   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13235DELETE FROM t0_aux
13236WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13237INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13238SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13239'just inserted' FROM t0_template
13240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13241CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13242BEGIN
13243UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13244f_charbig = 'updated by trigger'
13245      WHERE f_int1 = new.f_int1;
13246END|
13247UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13248WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13249
13250# check trigger-3 success: 	1
13251DROP TRIGGER trg_1;
13252UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13253f_int2 = CAST(f_char1 AS SIGNED INT),
13254f_charbig = 'just inserted'
13255   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13256DELETE FROM t0_aux
13257WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13258INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13259SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13260'just inserted' FROM t0_template
13261WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13262CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13263BEGIN
13264UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13265f_charbig = 'updated by trigger'
13266      WHERE f_int1 = - old.f_int1;
13267END|
13268UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13269WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13270
13271# check trigger-4 success: 	1
13272DROP TRIGGER trg_1;
13273UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13274f_int2 = CAST(f_char1 AS SIGNED INT),
13275f_charbig = 'just inserted'
13276   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13277DELETE FROM t0_aux
13278WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13279INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13280SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13281'just inserted' FROM t0_template
13282WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13283CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13284BEGIN
13285UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13286f_charbig = 'updated by trigger'
13287      WHERE f_int1 = new.f_int1;
13288END|
13289UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13290WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13291
13292# check trigger-5 success: 	1
13293DROP TRIGGER trg_1;
13294UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13295f_int2 = CAST(f_char1 AS SIGNED INT),
13296f_charbig = 'just inserted'
13297   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13298DELETE FROM t0_aux
13299WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13300INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13301SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13302'just inserted' FROM t0_template
13303WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13304CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13305BEGIN
13306UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13307f_charbig = 'updated by trigger'
13308      WHERE f_int1 = - old.f_int1;
13309END|
13310UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13311WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13312
13313# check trigger-6 success: 	1
13314DROP TRIGGER trg_1;
13315UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13316f_int2 = CAST(f_char1 AS SIGNED INT),
13317f_charbig = 'just inserted'
13318   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13319DELETE FROM t0_aux
13320WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13321INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13322SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13323'just inserted' FROM t0_template
13324WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13325CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13326BEGIN
13327UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13328f_charbig = 'updated by trigger'
13329      WHERE f_int1 = - old.f_int1;
13330END|
13331DELETE FROM t0_aux
13332WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13333
13334# check trigger-7 success: 	1
13335DROP TRIGGER trg_1;
13336UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13337f_int2 = CAST(f_char1 AS SIGNED INT),
13338f_charbig = 'just inserted'
13339   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13340DELETE FROM t0_aux
13341WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13342INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13343SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13344'just inserted' FROM t0_template
13345WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13346CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13347BEGIN
13348UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13349f_charbig = 'updated by trigger'
13350      WHERE f_int1 = - old.f_int1;
13351END|
13352DELETE FROM t0_aux
13353WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13354
13355# check trigger-8 success: 	1
13356DROP TRIGGER trg_1;
13357UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13358f_int2 = CAST(f_char1 AS SIGNED INT),
13359f_charbig = 'just inserted'
13360   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13361DELETE FROM t0_aux
13362WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13363DELETE FROM t1
13364WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13365CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13366BEGIN
13367SET new.f_int1 = old.f_int1 + @max_row,
13368new.f_int2 = old.f_int2 - @max_row,
13369new.f_charbig = '####updated per update trigger####';
13370END|
13371UPDATE t1
13372SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13373f_charbig = '####updated per update statement itself####';
13374
13375# check trigger-9 success: 	1
13376DROP TRIGGER trg_2;
13377UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13378f_int2 = CAST(f_char1 AS SIGNED INT),
13379f_charbig = CONCAT('===',f_char1,'===');
13380CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13381BEGIN
13382SET new.f_int1 = new.f_int1 + @max_row,
13383new.f_int2 = new.f_int2 - @max_row,
13384new.f_charbig = '####updated per update trigger####';
13385END|
13386UPDATE t1
13387SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13388f_charbig = '####updated per update statement itself####';
13389
13390# check trigger-10 success: 	1
13391DROP TRIGGER trg_2;
13392UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13393f_int2 = CAST(f_char1 AS SIGNED INT),
13394f_charbig = CONCAT('===',f_char1,'===');
13395CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13396BEGIN
13397SET new.f_int1 = @my_max1 + @counter,
13398new.f_int2 = @my_min2 - @counter,
13399new.f_charbig = '####updated per insert trigger####';
13400SET @counter = @counter + 1;
13401END|
13402SET @counter = 1;
13403SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13404INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13405SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13406CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13407WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13408ORDER BY f_int1;
13409DROP TRIGGER trg_3;
13410
13411# check trigger-11 success: 	1
13412DELETE FROM t1
13413WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13414AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13415AND f_charbig = '####updated per insert trigger####';
13416CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13417BEGIN
13418SET new.f_int1 = @my_max1 + @counter,
13419new.f_int2 = @my_min2 - @counter,
13420new.f_charbig = '####updated per insert trigger####';
13421SET @counter = @counter + 1;
13422END|
13423SET @counter = 1;
13424SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13425INSERT INTO t1 (f_char1, f_char2, f_charbig)
13426SELECT CAST(f_int1 AS CHAR),
13427CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13428WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13429ORDER BY f_int1;
13430DROP TRIGGER trg_3;
13431
13432# check trigger-12 success: 	1
13433DELETE FROM t1
13434WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13435AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13436AND f_charbig = '####updated per insert trigger####';
13437ANALYZE  TABLE t1;
13438Table	Op	Msg_type	Msg_text
13439test.t1	analyze	status	OK
13440CHECK    TABLE t1 EXTENDED;
13441Table	Op	Msg_type	Msg_text
13442test.t1	check	status	OK
13443CHECKSUM TABLE t1 EXTENDED;
13444Table	Checksum
13445test.t1	<some_value>
13446OPTIMIZE TABLE t1;
13447Table	Op	Msg_type	Msg_text
13448test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13449test.t1	optimize	status	OK
13450# check layout success:    1
13451REPAIR   TABLE t1 EXTENDED;
13452Table	Op	Msg_type	Msg_text
13453test.t1	repair	status	OK
13454# check layout success:    1
13455TRUNCATE t1;
13456
13457# check TRUNCATE success: 	1
13458# check layout success:    1
13459# End usability test (inc/partition_check.inc)
13460DROP TABLE t1;
13461CREATE TABLE t1 (
13462f_int1 INTEGER,
13463f_int2 INTEGER,
13464f_char1 CHAR(20),
13465f_char2 CHAR(20),
13466f_charbig VARCHAR(1000)
13467, UNIQUE INDEX uidx1 (f_int1,f_int2)
13468)
13469PARTITION BY RANGE(f_int1)
13470(PARTITION parta VALUES LESS THAN (0),
13471PARTITION partb VALUES LESS THAN (5),
13472PARTITION partc VALUES LESS THAN (10),
13473PARTITION partd VALUES LESS THAN (10 + 5),
13474PARTITION parte VALUES LESS THAN (20),
13475PARTITION partf VALUES LESS THAN (2147483646));
13476INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13477SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13478WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13479ALTER TABLE t1 MODIFY f_int2 BIGINT;
13480INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13481SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13482WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13483# Start usability test (inc/partition_check.inc)
13484create_command
13485SHOW CREATE TABLE t1;
13486Table	Create Table
13487t1	CREATE TABLE `t1` (
13488  `f_int1` int(11) DEFAULT NULL,
13489  `f_int2` bigint(20) DEFAULT NULL,
13490  `f_char1` char(20) DEFAULT NULL,
13491  `f_char2` char(20) DEFAULT NULL,
13492  `f_charbig` varchar(1000) DEFAULT NULL,
13493  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
13494) ENGINE=TokuDB DEFAULT CHARSET=latin1
13495/*!50100 PARTITION BY RANGE (f_int1)
13496(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
13497 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
13498 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
13499 PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB,
13500 PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB,
13501 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
13502
13503# check prerequisites-1 success:    1
13504# check COUNT(*) success:    1
13505# check MIN/MAX(f_int1) success:    1
13506# check MIN/MAX(f_int2) success:    1
13507INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13508SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13509CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13510WHERE f_int1 IN (2,3);
13511ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
13512# check prerequisites-3 success:    1
13513# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13514INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13515SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13516CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13517WHERE f_int1 IN (2,3);
13518DELETE FROM t1 WHERE f_charbig = 'delete me';
13519INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13520SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13521CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13522WHERE f_int1 IN (2,3);
13523DELETE FROM t1 WHERE f_charbig = 'delete me';
13524# check read via f_int1 success: 1
13525# check read via f_int2 success: 1
13526
13527# check multiple-1 success: 	1
13528DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13529
13530# check multiple-2 success: 	1
13531INSERT INTO t1 SELECT * FROM t0_template
13532WHERE MOD(f_int1,3) = 0;
13533
13534# check multiple-3 success: 	1
13535UPDATE t1 SET f_int1 = f_int1 + @max_row
13536WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13537AND @max_row_div2 + @max_row_div4;
13538
13539# check multiple-4 success: 	1
13540DELETE FROM t1
13541WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13542AND @max_row_div2 + @max_row_div4 + @max_row;
13543
13544# check multiple-5 success: 	1
13545SELECT COUNT(*) INTO @try_count FROM t0_template
13546WHERE MOD(f_int1,3) = 0
13547AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13548SELECT COUNT(*) INTO @clash_count
13549FROM t1 INNER JOIN t0_template USING(f_int1)
13550WHERE MOD(f_int1,3) = 0
13551AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13552SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13553INSERT INTO t1
13554SET f_int1 = @cur_value , f_int2 = @cur_value,
13555f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13556f_charbig = '#SINGLE#';
13557
13558# check single-1 success: 	1
13559SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13560INSERT INTO t1
13561SET f_int1 = @cur_value , f_int2 = @cur_value,
13562f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13563f_charbig = '#SINGLE#';
13564
13565# check single-2 success: 	1
13566SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13567SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13568UPDATE t1 SET f_int1 = @cur_value2
13569WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13570
13571# check single-3 success: 	1
13572SET @cur_value1= -1;
13573SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13574UPDATE t1 SET f_int1 = @cur_value1
13575WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13576
13577# check single-4 success: 	1
13578SELECT MAX(f_int1) INTO @cur_value FROM t1;
13579DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13580
13581# check single-5 success: 	1
13582DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13583
13584# check single-6 success: 	1
13585INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13586ERROR HY000: Table has no partition for value 2147483647
13587DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13588INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13589f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13590f_charbig = '#NULL#';
13591INSERT INTO t1
13592SET f_int1 = NULL , f_int2 = -@max_row,
13593f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13594f_charbig = '#NULL#';
13595# check null success:    1
13596
13597# check null-1 success: 	1
13598UPDATE t1 SET f_int1 = -@max_row
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-2 success: 	1
13603UPDATE t1 SET f_int1 = NULL
13604WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13605AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13606
13607# check null-3 success: 	1
13608DELETE FROM t1
13609WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13610AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13611
13612# check null-4 success: 	1
13613DELETE FROM t1
13614WHERE f_int1 = 0 AND f_int2 = 0
13615AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13616AND f_charbig = '#NULL#';
13617INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13618SELECT f_int1, f_int1, '', '', 'was inserted'
13619   FROM t0_template source_tab
13620WHERE MOD(f_int1,3) = 0
13621AND f_int1 BETWEEN @max_row_div2 AND @max_row
13622ON DUPLICATE KEY
13623UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13624f_int2 = 2 * @max_row + source_tab.f_int1,
13625f_charbig = 'was updated';
13626
13627# check unique-1-a success: 	1
13628
13629# check unique-1-b success: 	1
13630DELETE FROM t1 WHERE f_charbig = 'was inserted';
13631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13632f_int2 = CAST(f_char1 AS SIGNED INT),
13633f_charbig = CONCAT('===',f_char1,'===')
13634WHERE f_charbig = 'was updated';
13635REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13636SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13637   FROM t0_template source_tab
13638WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13639
13640# check replace success: 	1
13641DELETE FROM t1
13642WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13643DELETE FROM t1
13644WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13645f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13646UPDATE t1 SET f_int2 = f_int1,
13647f_char1 = CAST(f_int1 AS CHAR),
13648f_char2 = CAST(f_int1 AS CHAR),
13649f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13650WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13651SET AUTOCOMMIT= 0;
13652INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13653SELECT f_int1, f_int1, '', '', 'was inserted'
13654FROM t0_template source_tab
13655WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13656
13657# check transactions-1 success: 	1
13658COMMIT WORK;
13659
13660# check transactions-2 success: 	1
13661ROLLBACK WORK;
13662
13663# check transactions-3 success: 	1
13664DELETE FROM t1 WHERE f_charbig = 'was inserted';
13665COMMIT WORK;
13666ROLLBACK WORK;
13667
13668# check transactions-4 success: 	1
13669INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13670SELECT f_int1, f_int1, '', '', 'was inserted'
13671FROM t0_template source_tab
13672WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13673
13674# check transactions-5 success: 	1
13675ROLLBACK WORK;
13676
13677# check transactions-6 success: 	1
13678# INFO: Storage engine used for t1 seems to be transactional.
13679COMMIT;
13680
13681# check transactions-7 success: 	1
13682DELETE FROM t1 WHERE f_charbig = 'was inserted';
13683COMMIT WORK;
13684SET @@session.sql_mode = 'traditional';
13685Warnings:
13686Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13687SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13688INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13689SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13690'', '', 'was inserted' FROM t0_template
13691WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13692ERROR 22012: Division by 0
13693COMMIT;
13694
13695# check transactions-8 success: 	1
13696# INFO: Storage engine used for t1 seems to be able to revert
13697#       changes made by the failing statement.
13698SET @@session.sql_mode = '';
13699Warnings:
13700Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13701SET AUTOCOMMIT= 1;
13702DELETE FROM t1 WHERE f_charbig = 'was inserted';
13703COMMIT WORK;
13704UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13705
13706# check special-1 success: 	1
13707UPDATE t1 SET f_charbig = '';
13708
13709# check special-2 success: 	1
13710UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13711INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13712SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13713WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13714INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13715SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13716'just inserted' FROM t0_template
13717WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13718CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13719BEGIN
13720UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13721f_charbig = 'updated by trigger'
13722      WHERE f_int1 = new.f_int1;
13723END|
13724INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13725SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13726WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13727
13728# check trigger-1 success: 	1
13729DROP TRIGGER trg_1;
13730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13731f_int2 = CAST(f_char1 AS SIGNED INT),
13732f_charbig = 'just inserted'
13733   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13734DELETE FROM t0_aux
13735WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13736INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13737SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13738'just inserted' FROM t0_template
13739WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13740CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13741BEGIN
13742UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13743f_charbig = 'updated by trigger'
13744      WHERE f_int1 = new.f_int1;
13745END|
13746INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13747SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13748WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13749
13750# check trigger-2 success: 	1
13751DROP TRIGGER trg_1;
13752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13753f_int2 = CAST(f_char1 AS SIGNED INT),
13754f_charbig = 'just inserted'
13755   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13756DELETE FROM t0_aux
13757WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13758INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13759SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13760'just inserted' FROM t0_template
13761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13762CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13763BEGIN
13764UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13765f_charbig = 'updated by trigger'
13766      WHERE f_int1 = new.f_int1;
13767END|
13768UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13769WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13770
13771# check trigger-3 success: 	1
13772DROP TRIGGER trg_1;
13773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13774f_int2 = CAST(f_char1 AS SIGNED INT),
13775f_charbig = 'just inserted'
13776   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13777DELETE FROM t0_aux
13778WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13779INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13780SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13781'just inserted' FROM t0_template
13782WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13783CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13784BEGIN
13785UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13786f_charbig = 'updated by trigger'
13787      WHERE f_int1 = - old.f_int1;
13788END|
13789UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13790WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13791
13792# check trigger-4 success: 	1
13793DROP TRIGGER trg_1;
13794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13795f_int2 = CAST(f_char1 AS SIGNED INT),
13796f_charbig = 'just inserted'
13797   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13798DELETE FROM t0_aux
13799WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13800INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13801SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13802'just inserted' FROM t0_template
13803WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13804CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13805BEGIN
13806UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13807f_charbig = 'updated by trigger'
13808      WHERE f_int1 = new.f_int1;
13809END|
13810UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13811WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13812
13813# check trigger-5 success: 	1
13814DROP TRIGGER trg_1;
13815UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13816f_int2 = CAST(f_char1 AS SIGNED INT),
13817f_charbig = 'just inserted'
13818   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13819DELETE FROM t0_aux
13820WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13821INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13822SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13823'just inserted' FROM t0_template
13824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13825CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13826BEGIN
13827UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13828f_charbig = 'updated by trigger'
13829      WHERE f_int1 = - old.f_int1;
13830END|
13831UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13832WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13833
13834# check trigger-6 success: 	1
13835DROP TRIGGER trg_1;
13836UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13837f_int2 = CAST(f_char1 AS SIGNED INT),
13838f_charbig = 'just inserted'
13839   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13840DELETE FROM t0_aux
13841WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13842INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13843SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13844'just inserted' FROM t0_template
13845WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13846CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13847BEGIN
13848UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13849f_charbig = 'updated by trigger'
13850      WHERE f_int1 = - old.f_int1;
13851END|
13852DELETE FROM t0_aux
13853WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13854
13855# check trigger-7 success: 	1
13856DROP TRIGGER trg_1;
13857UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13858f_int2 = CAST(f_char1 AS SIGNED INT),
13859f_charbig = 'just inserted'
13860   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13861DELETE FROM t0_aux
13862WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13863INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13864SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13865'just inserted' FROM t0_template
13866WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13867CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13868BEGIN
13869UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13870f_charbig = 'updated by trigger'
13871      WHERE f_int1 = - old.f_int1;
13872END|
13873DELETE FROM t0_aux
13874WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13875
13876# check trigger-8 success: 	1
13877DROP TRIGGER trg_1;
13878UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13879f_int2 = CAST(f_char1 AS SIGNED INT),
13880f_charbig = 'just inserted'
13881   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13882DELETE FROM t0_aux
13883WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13884DELETE FROM t1
13885WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13886CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13887BEGIN
13888SET new.f_int1 = old.f_int1 + @max_row,
13889new.f_int2 = old.f_int2 - @max_row,
13890new.f_charbig = '####updated per update trigger####';
13891END|
13892UPDATE t1
13893SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13894f_charbig = '####updated per update statement itself####';
13895
13896# check trigger-9 success: 	1
13897DROP TRIGGER trg_2;
13898UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13899f_int2 = CAST(f_char1 AS SIGNED INT),
13900f_charbig = CONCAT('===',f_char1,'===');
13901CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13902BEGIN
13903SET new.f_int1 = new.f_int1 + @max_row,
13904new.f_int2 = new.f_int2 - @max_row,
13905new.f_charbig = '####updated per update trigger####';
13906END|
13907UPDATE t1
13908SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13909f_charbig = '####updated per update statement itself####';
13910
13911# check trigger-10 success: 	1
13912DROP TRIGGER trg_2;
13913UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13914f_int2 = CAST(f_char1 AS SIGNED INT),
13915f_charbig = CONCAT('===',f_char1,'===');
13916CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13917BEGIN
13918SET new.f_int1 = @my_max1 + @counter,
13919new.f_int2 = @my_min2 - @counter,
13920new.f_charbig = '####updated per insert trigger####';
13921SET @counter = @counter + 1;
13922END|
13923SET @counter = 1;
13924SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13925INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13926SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13927CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13928WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13929ORDER BY f_int1;
13930DROP TRIGGER trg_3;
13931
13932# check trigger-11 success: 	1
13933DELETE FROM t1
13934WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13935AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13936AND f_charbig = '####updated per insert trigger####';
13937CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13938BEGIN
13939SET new.f_int1 = @my_max1 + @counter,
13940new.f_int2 = @my_min2 - @counter,
13941new.f_charbig = '####updated per insert trigger####';
13942SET @counter = @counter + 1;
13943END|
13944SET @counter = 1;
13945SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13946INSERT INTO t1 (f_char1, f_char2, f_charbig)
13947SELECT CAST(f_int1 AS CHAR),
13948CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13949WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13950ORDER BY f_int1;
13951DROP TRIGGER trg_3;
13952
13953# check trigger-12 success: 	1
13954DELETE FROM t1
13955WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13956AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13957AND f_charbig = '####updated per insert trigger####';
13958ANALYZE  TABLE t1;
13959Table	Op	Msg_type	Msg_text
13960test.t1	analyze	status	OK
13961CHECK    TABLE t1 EXTENDED;
13962Table	Op	Msg_type	Msg_text
13963test.t1	check	status	OK
13964CHECKSUM TABLE t1 EXTENDED;
13965Table	Checksum
13966test.t1	<some_value>
13967OPTIMIZE TABLE t1;
13968Table	Op	Msg_type	Msg_text
13969test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13970test.t1	optimize	status	OK
13971# check layout success:    1
13972REPAIR   TABLE t1 EXTENDED;
13973Table	Op	Msg_type	Msg_text
13974test.t1	repair	status	OK
13975# check layout success:    1
13976TRUNCATE t1;
13977
13978# check TRUNCATE success: 	1
13979# check layout success:    1
13980# End usability test (inc/partition_check.inc)
13981DROP TABLE t1;
13982CREATE TABLE t1 (
13983f_int1 INTEGER,
13984f_int2 INTEGER,
13985f_char1 CHAR(20),
13986f_char2 CHAR(20),
13987f_charbig VARCHAR(1000)
13988, UNIQUE INDEX uidx1 (f_int1,f_int2)
13989)
13990PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
13991(PARTITION parta VALUES LESS THAN (0),
13992PARTITION partb VALUES LESS THAN (5),
13993PARTITION partc VALUES LESS THAN (10),
13994PARTITION partd VALUES LESS THAN (2147483646));
13995INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13996SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13997WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13998ALTER TABLE t1 MODIFY f_int2 BIGINT;
13999INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14000SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14001WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14002# Start usability test (inc/partition_check.inc)
14003create_command
14004SHOW CREATE TABLE t1;
14005Table	Create Table
14006t1	CREATE TABLE `t1` (
14007  `f_int1` int(11) DEFAULT NULL,
14008  `f_int2` bigint(20) DEFAULT NULL,
14009  `f_char1` char(20) DEFAULT NULL,
14010  `f_char2` char(20) DEFAULT NULL,
14011  `f_charbig` varchar(1000) DEFAULT NULL,
14012  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
14013) ENGINE=TokuDB DEFAULT CHARSET=latin1
14014/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
14015SUBPARTITION BY HASH (f_int1)
14016SUBPARTITIONS 2
14017(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
14018 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
14019 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
14020 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
14021
14022# check prerequisites-1 success:    1
14023# check COUNT(*) success:    1
14024# check MIN/MAX(f_int1) success:    1
14025# check MIN/MAX(f_int2) success:    1
14026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14027SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14028CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14029WHERE f_int1 IN (2,3);
14030ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
14031# check prerequisites-3 success:    1
14032# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14033INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14034SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14035CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14036WHERE f_int1 IN (2,3);
14037DELETE FROM t1 WHERE f_charbig = 'delete me';
14038INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14039SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14040CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14041WHERE f_int1 IN (2,3);
14042DELETE FROM t1 WHERE f_charbig = 'delete me';
14043# check read via f_int1 success: 1
14044# check read via f_int2 success: 1
14045
14046# check multiple-1 success: 	1
14047DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14048
14049# check multiple-2 success: 	1
14050INSERT INTO t1 SELECT * FROM t0_template
14051WHERE MOD(f_int1,3) = 0;
14052
14053# check multiple-3 success: 	1
14054UPDATE t1 SET f_int1 = f_int1 + @max_row
14055WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14056AND @max_row_div2 + @max_row_div4;
14057
14058# check multiple-4 success: 	1
14059DELETE FROM t1
14060WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14061AND @max_row_div2 + @max_row_div4 + @max_row;
14062
14063# check multiple-5 success: 	1
14064SELECT COUNT(*) INTO @try_count FROM t0_template
14065WHERE MOD(f_int1,3) = 0
14066AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14067SELECT COUNT(*) INTO @clash_count
14068FROM t1 INNER JOIN t0_template USING(f_int1)
14069WHERE MOD(f_int1,3) = 0
14070AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14071SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14072INSERT INTO t1
14073SET f_int1 = @cur_value , f_int2 = @cur_value,
14074f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14075f_charbig = '#SINGLE#';
14076
14077# check single-1 success: 	1
14078SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14079INSERT INTO t1
14080SET f_int1 = @cur_value , f_int2 = @cur_value,
14081f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14082f_charbig = '#SINGLE#';
14083
14084# check single-2 success: 	1
14085SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14086SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14087UPDATE t1 SET f_int1 = @cur_value2
14088WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14089
14090# check single-3 success: 	1
14091SET @cur_value1= -1;
14092SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14093UPDATE t1 SET f_int1 = @cur_value1
14094WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14095
14096# check single-4 success: 	1
14097SELECT MAX(f_int1) INTO @cur_value FROM t1;
14098DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14099
14100# check single-5 success: 	1
14101DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14102
14103# check single-6 success: 	1
14104INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14105
14106# check single-7 success: 	1
14107DELETE FROM t1 WHERE f_charbig = '#2147483647##';
14108DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14109INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14110f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14111f_charbig = '#NULL#';
14112INSERT INTO t1
14113SET f_int1 = NULL , f_int2 = -@max_row,
14114f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14115f_charbig = '#NULL#';
14116# check null success:    1
14117
14118# check null-1 success: 	1
14119UPDATE t1 SET f_int1 = -@max_row
14120WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14121AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14122
14123# check null-2 success: 	1
14124UPDATE t1 SET f_int1 = NULL
14125WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14126AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14127
14128# check null-3 success: 	1
14129DELETE FROM t1
14130WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14131AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14132
14133# check null-4 success: 	1
14134DELETE FROM t1
14135WHERE f_int1 = 0 AND f_int2 = 0
14136AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14137AND f_charbig = '#NULL#';
14138INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14139SELECT f_int1, f_int1, '', '', 'was inserted'
14140   FROM t0_template source_tab
14141WHERE MOD(f_int1,3) = 0
14142AND f_int1 BETWEEN @max_row_div2 AND @max_row
14143ON DUPLICATE KEY
14144UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14145f_int2 = 2 * @max_row + source_tab.f_int1,
14146f_charbig = 'was updated';
14147
14148# check unique-1-a success: 	1
14149
14150# check unique-1-b success: 	1
14151DELETE FROM t1 WHERE f_charbig = 'was inserted';
14152UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14153f_int2 = CAST(f_char1 AS SIGNED INT),
14154f_charbig = CONCAT('===',f_char1,'===')
14155WHERE f_charbig = 'was updated';
14156REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14157SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14158   FROM t0_template source_tab
14159WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14160
14161# check replace success: 	1
14162DELETE FROM t1
14163WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14164DELETE FROM t1
14165WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14166f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14167UPDATE t1 SET f_int2 = f_int1,
14168f_char1 = CAST(f_int1 AS CHAR),
14169f_char2 = CAST(f_int1 AS CHAR),
14170f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14171WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14172SET AUTOCOMMIT= 0;
14173INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14174SELECT f_int1, f_int1, '', '', 'was inserted'
14175FROM t0_template source_tab
14176WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14177
14178# check transactions-1 success: 	1
14179COMMIT WORK;
14180
14181# check transactions-2 success: 	1
14182ROLLBACK WORK;
14183
14184# check transactions-3 success: 	1
14185DELETE FROM t1 WHERE f_charbig = 'was inserted';
14186COMMIT WORK;
14187ROLLBACK WORK;
14188
14189# check transactions-4 success: 	1
14190INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14191SELECT f_int1, f_int1, '', '', 'was inserted'
14192FROM t0_template source_tab
14193WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14194
14195# check transactions-5 success: 	1
14196ROLLBACK WORK;
14197
14198# check transactions-6 success: 	1
14199# INFO: Storage engine used for t1 seems to be transactional.
14200COMMIT;
14201
14202# check transactions-7 success: 	1
14203DELETE FROM t1 WHERE f_charbig = 'was inserted';
14204COMMIT WORK;
14205SET @@session.sql_mode = 'traditional';
14206Warnings:
14207Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14208SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14209INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14210SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14211'', '', 'was inserted' FROM t0_template
14212WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14213ERROR 22012: Division by 0
14214COMMIT;
14215
14216# check transactions-8 success: 	1
14217# INFO: Storage engine used for t1 seems to be able to revert
14218#       changes made by the failing statement.
14219SET @@session.sql_mode = '';
14220Warnings:
14221Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14222SET AUTOCOMMIT= 1;
14223DELETE FROM t1 WHERE f_charbig = 'was inserted';
14224COMMIT WORK;
14225UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14226
14227# check special-1 success: 	1
14228UPDATE t1 SET f_charbig = '';
14229
14230# check special-2 success: 	1
14231UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14232INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14233SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14234WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14235INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14236SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14237'just inserted' FROM t0_template
14238WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14239CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14240BEGIN
14241UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14242f_charbig = 'updated by trigger'
14243      WHERE f_int1 = new.f_int1;
14244END|
14245INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14246SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14247WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14248
14249# check trigger-1 success: 	1
14250DROP TRIGGER trg_1;
14251UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14252f_int2 = CAST(f_char1 AS SIGNED INT),
14253f_charbig = 'just inserted'
14254   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14255DELETE FROM t0_aux
14256WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14257INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14258SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14259'just inserted' FROM t0_template
14260WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14261CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14262BEGIN
14263UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14264f_charbig = 'updated by trigger'
14265      WHERE f_int1 = new.f_int1;
14266END|
14267INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14268SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14269WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14270
14271# check trigger-2 success: 	1
14272DROP TRIGGER trg_1;
14273UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14274f_int2 = CAST(f_char1 AS SIGNED INT),
14275f_charbig = 'just inserted'
14276   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14277DELETE FROM t0_aux
14278WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14279INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14280SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14281'just inserted' FROM t0_template
14282WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14283CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14284BEGIN
14285UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14286f_charbig = 'updated by trigger'
14287      WHERE f_int1 = new.f_int1;
14288END|
14289UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14290WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14291
14292# check trigger-3 success: 	1
14293DROP TRIGGER trg_1;
14294UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14295f_int2 = CAST(f_char1 AS SIGNED INT),
14296f_charbig = 'just inserted'
14297   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14298DELETE FROM t0_aux
14299WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14300INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14301SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14302'just inserted' FROM t0_template
14303WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14304CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14305BEGIN
14306UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14307f_charbig = 'updated by trigger'
14308      WHERE f_int1 = - old.f_int1;
14309END|
14310UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14311WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14312
14313# check trigger-4 success: 	1
14314DROP TRIGGER trg_1;
14315UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14316f_int2 = CAST(f_char1 AS SIGNED INT),
14317f_charbig = 'just inserted'
14318   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14319DELETE FROM t0_aux
14320WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14321INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14322SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14323'just inserted' FROM t0_template
14324WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14325CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14326BEGIN
14327UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14328f_charbig = 'updated by trigger'
14329      WHERE f_int1 = new.f_int1;
14330END|
14331UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14332WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14333
14334# check trigger-5 success: 	1
14335DROP TRIGGER trg_1;
14336UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14337f_int2 = CAST(f_char1 AS SIGNED INT),
14338f_charbig = 'just inserted'
14339   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14340DELETE FROM t0_aux
14341WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14342INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14343SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14344'just inserted' FROM t0_template
14345WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14346CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14347BEGIN
14348UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14349f_charbig = 'updated by trigger'
14350      WHERE f_int1 = - old.f_int1;
14351END|
14352UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14353WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14354
14355# check trigger-6 success: 	1
14356DROP TRIGGER trg_1;
14357UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14358f_int2 = CAST(f_char1 AS SIGNED INT),
14359f_charbig = 'just inserted'
14360   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14361DELETE FROM t0_aux
14362WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14363INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14364SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14365'just inserted' FROM t0_template
14366WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14367CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14368BEGIN
14369UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14370f_charbig = 'updated by trigger'
14371      WHERE f_int1 = - old.f_int1;
14372END|
14373DELETE FROM t0_aux
14374WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14375
14376# check trigger-7 success: 	1
14377DROP TRIGGER trg_1;
14378UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14379f_int2 = CAST(f_char1 AS SIGNED INT),
14380f_charbig = 'just inserted'
14381   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14382DELETE FROM t0_aux
14383WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14384INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14385SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14386'just inserted' FROM t0_template
14387WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14388CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14389BEGIN
14390UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14391f_charbig = 'updated by trigger'
14392      WHERE f_int1 = - old.f_int1;
14393END|
14394DELETE FROM t0_aux
14395WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14396
14397# check trigger-8 success: 	1
14398DROP TRIGGER trg_1;
14399UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14400f_int2 = CAST(f_char1 AS SIGNED INT),
14401f_charbig = 'just inserted'
14402   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14403DELETE FROM t0_aux
14404WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14405DELETE FROM t1
14406WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14407CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14408BEGIN
14409SET new.f_int1 = old.f_int1 + @max_row,
14410new.f_int2 = old.f_int2 - @max_row,
14411new.f_charbig = '####updated per update trigger####';
14412END|
14413UPDATE t1
14414SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14415f_charbig = '####updated per update statement itself####';
14416
14417# check trigger-9 success: 	1
14418DROP TRIGGER trg_2;
14419UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14420f_int2 = CAST(f_char1 AS SIGNED INT),
14421f_charbig = CONCAT('===',f_char1,'===');
14422CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14423BEGIN
14424SET new.f_int1 = new.f_int1 + @max_row,
14425new.f_int2 = new.f_int2 - @max_row,
14426new.f_charbig = '####updated per update trigger####';
14427END|
14428UPDATE t1
14429SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14430f_charbig = '####updated per update statement itself####';
14431
14432# check trigger-10 success: 	1
14433DROP TRIGGER trg_2;
14434UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14435f_int2 = CAST(f_char1 AS SIGNED INT),
14436f_charbig = CONCAT('===',f_char1,'===');
14437CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14438BEGIN
14439SET new.f_int1 = @my_max1 + @counter,
14440new.f_int2 = @my_min2 - @counter,
14441new.f_charbig = '####updated per insert trigger####';
14442SET @counter = @counter + 1;
14443END|
14444SET @counter = 1;
14445SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14446INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14447SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14448CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14449WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14450ORDER BY f_int1;
14451DROP TRIGGER trg_3;
14452
14453# check trigger-11 success: 	1
14454DELETE FROM t1
14455WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14456AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14457AND f_charbig = '####updated per insert trigger####';
14458CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14459BEGIN
14460SET new.f_int1 = @my_max1 + @counter,
14461new.f_int2 = @my_min2 - @counter,
14462new.f_charbig = '####updated per insert trigger####';
14463SET @counter = @counter + 1;
14464END|
14465SET @counter = 1;
14466SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14467INSERT INTO t1 (f_char1, f_char2, f_charbig)
14468SELECT CAST(f_int1 AS CHAR),
14469CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14470WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14471ORDER BY f_int1;
14472DROP TRIGGER trg_3;
14473
14474# check trigger-12 success: 	1
14475DELETE FROM t1
14476WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14477AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14478AND f_charbig = '####updated per insert trigger####';
14479ANALYZE  TABLE t1;
14480Table	Op	Msg_type	Msg_text
14481test.t1	analyze	status	OK
14482CHECK    TABLE t1 EXTENDED;
14483Table	Op	Msg_type	Msg_text
14484test.t1	check	status	OK
14485CHECKSUM TABLE t1 EXTENDED;
14486Table	Checksum
14487test.t1	<some_value>
14488OPTIMIZE TABLE t1;
14489Table	Op	Msg_type	Msg_text
14490test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
14491test.t1	optimize	status	OK
14492# check layout success:    1
14493REPAIR   TABLE t1 EXTENDED;
14494Table	Op	Msg_type	Msg_text
14495test.t1	repair	status	OK
14496# check layout success:    1
14497TRUNCATE t1;
14498
14499# check TRUNCATE success: 	1
14500# check layout success:    1
14501# End usability test (inc/partition_check.inc)
14502DROP TABLE t1;
14503CREATE TABLE t1 (
14504f_int1 INTEGER,
14505f_int2 INTEGER,
14506f_char1 CHAR(20),
14507f_char2 CHAR(20),
14508f_charbig VARCHAR(1000)
14509, UNIQUE INDEX uidx1 (f_int1,f_int2)
14510)
14511PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
14512(PARTITION part1 VALUES LESS THAN (0)
14513(SUBPARTITION subpart11, SUBPARTITION subpart12),
14514PARTITION part2 VALUES LESS THAN (5)
14515(SUBPARTITION subpart21, SUBPARTITION subpart22),
14516PARTITION part3 VALUES LESS THAN (10)
14517(SUBPARTITION subpart31, SUBPARTITION subpart32),
14518PARTITION part4 VALUES LESS THAN (2147483646)
14519(SUBPARTITION subpart41, SUBPARTITION subpart42));
14520INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14521SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14522WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14523ALTER TABLE t1 MODIFY f_int2 BIGINT;
14524INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14525SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14526WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14527# Start usability test (inc/partition_check.inc)
14528create_command
14529SHOW CREATE TABLE t1;
14530Table	Create Table
14531t1	CREATE TABLE `t1` (
14532  `f_int1` int(11) DEFAULT NULL,
14533  `f_int2` bigint(20) DEFAULT NULL,
14534  `f_char1` char(20) DEFAULT NULL,
14535  `f_char2` char(20) DEFAULT NULL,
14536  `f_charbig` varchar(1000) DEFAULT NULL,
14537  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
14538) ENGINE=TokuDB DEFAULT CHARSET=latin1
14539/*!50100 PARTITION BY RANGE (f_int1)
14540SUBPARTITION BY KEY (f_int1)
14541(PARTITION part1 VALUES LESS THAN (0)
14542 (SUBPARTITION subpart11 ENGINE = TokuDB,
14543  SUBPARTITION subpart12 ENGINE = TokuDB),
14544 PARTITION part2 VALUES LESS THAN (5)
14545 (SUBPARTITION subpart21 ENGINE = TokuDB,
14546  SUBPARTITION subpart22 ENGINE = TokuDB),
14547 PARTITION part3 VALUES LESS THAN (10)
14548 (SUBPARTITION subpart31 ENGINE = TokuDB,
14549  SUBPARTITION subpart32 ENGINE = TokuDB),
14550 PARTITION part4 VALUES LESS THAN (2147483646)
14551 (SUBPARTITION subpart41 ENGINE = TokuDB,
14552  SUBPARTITION subpart42 ENGINE = TokuDB)) */
14553
14554# check prerequisites-1 success:    1
14555# check COUNT(*) success:    1
14556# check MIN/MAX(f_int1) success:    1
14557# check MIN/MAX(f_int2) success:    1
14558INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14559SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14560CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14561WHERE f_int1 IN (2,3);
14562ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
14563# check prerequisites-3 success:    1
14564# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14565INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14566SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14567CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14568WHERE f_int1 IN (2,3);
14569DELETE FROM t1 WHERE f_charbig = 'delete me';
14570INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14571SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14572CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14573WHERE f_int1 IN (2,3);
14574DELETE FROM t1 WHERE f_charbig = 'delete me';
14575# check read via f_int1 success: 1
14576# check read via f_int2 success: 1
14577
14578# check multiple-1 success: 	1
14579DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14580
14581# check multiple-2 success: 	1
14582INSERT INTO t1 SELECT * FROM t0_template
14583WHERE MOD(f_int1,3) = 0;
14584
14585# check multiple-3 success: 	1
14586UPDATE t1 SET f_int1 = f_int1 + @max_row
14587WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14588AND @max_row_div2 + @max_row_div4;
14589
14590# check multiple-4 success: 	1
14591DELETE FROM t1
14592WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14593AND @max_row_div2 + @max_row_div4 + @max_row;
14594
14595# check multiple-5 success: 	1
14596SELECT COUNT(*) INTO @try_count FROM t0_template
14597WHERE MOD(f_int1,3) = 0
14598AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14599SELECT COUNT(*) INTO @clash_count
14600FROM t1 INNER JOIN t0_template USING(f_int1)
14601WHERE MOD(f_int1,3) = 0
14602AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14603SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14604INSERT INTO t1
14605SET f_int1 = @cur_value , f_int2 = @cur_value,
14606f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14607f_charbig = '#SINGLE#';
14608
14609# check single-1 success: 	1
14610SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14611INSERT INTO t1
14612SET f_int1 = @cur_value , f_int2 = @cur_value,
14613f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14614f_charbig = '#SINGLE#';
14615
14616# check single-2 success: 	1
14617SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14618SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14619UPDATE t1 SET f_int1 = @cur_value2
14620WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14621
14622# check single-3 success: 	1
14623SET @cur_value1= -1;
14624SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14625UPDATE t1 SET f_int1 = @cur_value1
14626WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14627
14628# check single-4 success: 	1
14629SELECT MAX(f_int1) INTO @cur_value FROM t1;
14630DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14631
14632# check single-5 success: 	1
14633DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14634
14635# check single-6 success: 	1
14636INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14637ERROR HY000: Table has no partition for value 2147483647
14638DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14639INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14640f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14641f_charbig = '#NULL#';
14642INSERT INTO t1
14643SET f_int1 = NULL , f_int2 = -@max_row,
14644f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14645f_charbig = '#NULL#';
14646# check null success:    1
14647
14648# check null-1 success: 	1
14649UPDATE t1 SET f_int1 = -@max_row
14650WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14651AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14652
14653# check null-2 success: 	1
14654UPDATE t1 SET f_int1 = NULL
14655WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14656AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14657
14658# check null-3 success: 	1
14659DELETE FROM t1
14660WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14661AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14662
14663# check null-4 success: 	1
14664DELETE FROM t1
14665WHERE f_int1 = 0 AND f_int2 = 0
14666AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14667AND f_charbig = '#NULL#';
14668INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14669SELECT f_int1, f_int1, '', '', 'was inserted'
14670   FROM t0_template source_tab
14671WHERE MOD(f_int1,3) = 0
14672AND f_int1 BETWEEN @max_row_div2 AND @max_row
14673ON DUPLICATE KEY
14674UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14675f_int2 = 2 * @max_row + source_tab.f_int1,
14676f_charbig = 'was updated';
14677
14678# check unique-1-a success: 	1
14679
14680# check unique-1-b success: 	1
14681DELETE FROM t1 WHERE f_charbig = 'was inserted';
14682UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14683f_int2 = CAST(f_char1 AS SIGNED INT),
14684f_charbig = CONCAT('===',f_char1,'===')
14685WHERE f_charbig = 'was updated';
14686REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14687SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14688   FROM t0_template source_tab
14689WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14690
14691# check replace success: 	1
14692DELETE FROM t1
14693WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14694DELETE FROM t1
14695WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14696f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14697UPDATE t1 SET f_int2 = f_int1,
14698f_char1 = CAST(f_int1 AS CHAR),
14699f_char2 = CAST(f_int1 AS CHAR),
14700f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14701WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14702SET AUTOCOMMIT= 0;
14703INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14704SELECT f_int1, f_int1, '', '', 'was inserted'
14705FROM t0_template source_tab
14706WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14707
14708# check transactions-1 success: 	1
14709COMMIT WORK;
14710
14711# check transactions-2 success: 	1
14712ROLLBACK WORK;
14713
14714# check transactions-3 success: 	1
14715DELETE FROM t1 WHERE f_charbig = 'was inserted';
14716COMMIT WORK;
14717ROLLBACK WORK;
14718
14719# check transactions-4 success: 	1
14720INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14721SELECT f_int1, f_int1, '', '', 'was inserted'
14722FROM t0_template source_tab
14723WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14724
14725# check transactions-5 success: 	1
14726ROLLBACK WORK;
14727
14728# check transactions-6 success: 	1
14729# INFO: Storage engine used for t1 seems to be transactional.
14730COMMIT;
14731
14732# check transactions-7 success: 	1
14733DELETE FROM t1 WHERE f_charbig = 'was inserted';
14734COMMIT WORK;
14735SET @@session.sql_mode = 'traditional';
14736Warnings:
14737Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14738SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14739INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14740SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14741'', '', 'was inserted' FROM t0_template
14742WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14743ERROR 22012: Division by 0
14744COMMIT;
14745
14746# check transactions-8 success: 	1
14747# INFO: Storage engine used for t1 seems to be able to revert
14748#       changes made by the failing statement.
14749SET @@session.sql_mode = '';
14750Warnings:
14751Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14752SET AUTOCOMMIT= 1;
14753DELETE FROM t1 WHERE f_charbig = 'was inserted';
14754COMMIT WORK;
14755UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14756
14757# check special-1 success: 	1
14758UPDATE t1 SET f_charbig = '';
14759
14760# check special-2 success: 	1
14761UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14762INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14763SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14764WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14765INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14766SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14767'just inserted' FROM t0_template
14768WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14769CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14770BEGIN
14771UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14772f_charbig = 'updated by trigger'
14773      WHERE f_int1 = new.f_int1;
14774END|
14775INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14776SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14777WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14778
14779# check trigger-1 success: 	1
14780DROP TRIGGER trg_1;
14781UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14782f_int2 = CAST(f_char1 AS SIGNED INT),
14783f_charbig = 'just inserted'
14784   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14785DELETE FROM t0_aux
14786WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14787INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14788SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14789'just inserted' FROM t0_template
14790WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14791CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14792BEGIN
14793UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14794f_charbig = 'updated by trigger'
14795      WHERE f_int1 = new.f_int1;
14796END|
14797INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14798SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14799WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14800
14801# check trigger-2 success: 	1
14802DROP TRIGGER trg_1;
14803UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14804f_int2 = CAST(f_char1 AS SIGNED INT),
14805f_charbig = 'just inserted'
14806   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14807DELETE FROM t0_aux
14808WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14809INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14810SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14811'just inserted' FROM t0_template
14812WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14813CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14814BEGIN
14815UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14816f_charbig = 'updated by trigger'
14817      WHERE f_int1 = new.f_int1;
14818END|
14819UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14820WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14821
14822# check trigger-3 success: 	1
14823DROP TRIGGER trg_1;
14824UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14825f_int2 = CAST(f_char1 AS SIGNED INT),
14826f_charbig = 'just inserted'
14827   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14828DELETE FROM t0_aux
14829WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14830INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14831SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14832'just inserted' FROM t0_template
14833WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14834CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14835BEGIN
14836UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14837f_charbig = 'updated by trigger'
14838      WHERE f_int1 = - old.f_int1;
14839END|
14840UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14841WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14842
14843# check trigger-4 success: 	1
14844DROP TRIGGER trg_1;
14845UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14846f_int2 = CAST(f_char1 AS SIGNED INT),
14847f_charbig = 'just inserted'
14848   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14849DELETE FROM t0_aux
14850WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14851INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14852SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14853'just inserted' FROM t0_template
14854WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14855CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14856BEGIN
14857UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14858f_charbig = 'updated by trigger'
14859      WHERE f_int1 = new.f_int1;
14860END|
14861UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14862WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14863
14864# check trigger-5 success: 	1
14865DROP TRIGGER trg_1;
14866UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14867f_int2 = CAST(f_char1 AS SIGNED INT),
14868f_charbig = 'just inserted'
14869   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14870DELETE FROM t0_aux
14871WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14872INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14873SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14874'just inserted' FROM t0_template
14875WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14876CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14877BEGIN
14878UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14879f_charbig = 'updated by trigger'
14880      WHERE f_int1 = - old.f_int1;
14881END|
14882UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14883WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14884
14885# check trigger-6 success: 	1
14886DROP TRIGGER trg_1;
14887UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14888f_int2 = CAST(f_char1 AS SIGNED INT),
14889f_charbig = 'just inserted'
14890   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14891DELETE FROM t0_aux
14892WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14893INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14894SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14895'just inserted' FROM t0_template
14896WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14897CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14898BEGIN
14899UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14900f_charbig = 'updated by trigger'
14901      WHERE f_int1 = - old.f_int1;
14902END|
14903DELETE FROM t0_aux
14904WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14905
14906# check trigger-7 success: 	1
14907DROP TRIGGER trg_1;
14908UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14909f_int2 = CAST(f_char1 AS SIGNED INT),
14910f_charbig = 'just inserted'
14911   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14912DELETE FROM t0_aux
14913WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14914INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14915SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14916'just inserted' FROM t0_template
14917WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14918CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14919BEGIN
14920UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14921f_charbig = 'updated by trigger'
14922      WHERE f_int1 = - old.f_int1;
14923END|
14924DELETE FROM t0_aux
14925WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14926
14927# check trigger-8 success: 	1
14928DROP TRIGGER trg_1;
14929UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14930f_int2 = CAST(f_char1 AS SIGNED INT),
14931f_charbig = 'just inserted'
14932   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14933DELETE FROM t0_aux
14934WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14935DELETE FROM t1
14936WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14937CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14938BEGIN
14939SET new.f_int1 = old.f_int1 + @max_row,
14940new.f_int2 = old.f_int2 - @max_row,
14941new.f_charbig = '####updated per update trigger####';
14942END|
14943UPDATE t1
14944SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14945f_charbig = '####updated per update statement itself####';
14946
14947# check trigger-9 success: 	1
14948DROP TRIGGER trg_2;
14949UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14950f_int2 = CAST(f_char1 AS SIGNED INT),
14951f_charbig = CONCAT('===',f_char1,'===');
14952CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14953BEGIN
14954SET new.f_int1 = new.f_int1 + @max_row,
14955new.f_int2 = new.f_int2 - @max_row,
14956new.f_charbig = '####updated per update trigger####';
14957END|
14958UPDATE t1
14959SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14960f_charbig = '####updated per update statement itself####';
14961
14962# check trigger-10 success: 	1
14963DROP TRIGGER trg_2;
14964UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14965f_int2 = CAST(f_char1 AS SIGNED INT),
14966f_charbig = CONCAT('===',f_char1,'===');
14967CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14968BEGIN
14969SET new.f_int1 = @my_max1 + @counter,
14970new.f_int2 = @my_min2 - @counter,
14971new.f_charbig = '####updated per insert trigger####';
14972SET @counter = @counter + 1;
14973END|
14974SET @counter = 1;
14975SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14976INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14977SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14978CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14979WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14980ORDER BY f_int1;
14981DROP TRIGGER trg_3;
14982
14983# check trigger-11 success: 	1
14984DELETE FROM t1
14985WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14986AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14987AND f_charbig = '####updated per insert trigger####';
14988CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14989BEGIN
14990SET new.f_int1 = @my_max1 + @counter,
14991new.f_int2 = @my_min2 - @counter,
14992new.f_charbig = '####updated per insert trigger####';
14993SET @counter = @counter + 1;
14994END|
14995SET @counter = 1;
14996SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14997INSERT INTO t1 (f_char1, f_char2, f_charbig)
14998SELECT CAST(f_int1 AS CHAR),
14999CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15000WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15001ORDER BY f_int1;
15002DROP TRIGGER trg_3;
15003
15004# check trigger-12 success: 	1
15005DELETE FROM t1
15006WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15007AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15008AND f_charbig = '####updated per insert trigger####';
15009ANALYZE  TABLE t1;
15010Table	Op	Msg_type	Msg_text
15011test.t1	analyze	status	OK
15012CHECK    TABLE t1 EXTENDED;
15013Table	Op	Msg_type	Msg_text
15014test.t1	check	status	OK
15015CHECKSUM TABLE t1 EXTENDED;
15016Table	Checksum
15017test.t1	<some_value>
15018OPTIMIZE TABLE t1;
15019Table	Op	Msg_type	Msg_text
15020test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15021test.t1	optimize	status	OK
15022# check layout success:    1
15023REPAIR   TABLE t1 EXTENDED;
15024Table	Op	Msg_type	Msg_text
15025test.t1	repair	status	OK
15026# check layout success:    1
15027TRUNCATE t1;
15028
15029# check TRUNCATE success: 	1
15030# check layout success:    1
15031# End usability test (inc/partition_check.inc)
15032DROP TABLE t1;
15033CREATE TABLE t1 (
15034f_int1 INTEGER,
15035f_int2 INTEGER,
15036f_char1 CHAR(20),
15037f_char2 CHAR(20),
15038f_charbig VARCHAR(1000)
15039, UNIQUE INDEX uidx1 (f_int1,f_int2)
15040)
15041PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
15042(PARTITION part1 VALUES IN (0)
15043(SUBPARTITION sp11, SUBPARTITION sp12),
15044PARTITION part2 VALUES IN (1)
15045(SUBPARTITION sp21, SUBPARTITION sp22),
15046PARTITION part3 VALUES IN (2)
15047(SUBPARTITION sp31, SUBPARTITION sp32),
15048PARTITION part4 VALUES IN (NULL)
15049(SUBPARTITION sp41, SUBPARTITION sp42));
15050INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15051SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15052WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15053ALTER TABLE t1 MODIFY f_int2 BIGINT;
15054INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15055SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15056WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15057# Start usability test (inc/partition_check.inc)
15058create_command
15059SHOW CREATE TABLE t1;
15060Table	Create Table
15061t1	CREATE TABLE `t1` (
15062  `f_int1` int(11) DEFAULT NULL,
15063  `f_int2` bigint(20) DEFAULT NULL,
15064  `f_char1` char(20) DEFAULT NULL,
15065  `f_char2` char(20) DEFAULT NULL,
15066  `f_charbig` varchar(1000) DEFAULT NULL,
15067  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
15068) ENGINE=TokuDB DEFAULT CHARSET=latin1
15069/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
15070SUBPARTITION BY HASH (f_int1 + 1)
15071(PARTITION part1 VALUES IN (0)
15072 (SUBPARTITION sp11 ENGINE = TokuDB,
15073  SUBPARTITION sp12 ENGINE = TokuDB),
15074 PARTITION part2 VALUES IN (1)
15075 (SUBPARTITION sp21 ENGINE = TokuDB,
15076  SUBPARTITION sp22 ENGINE = TokuDB),
15077 PARTITION part3 VALUES IN (2)
15078 (SUBPARTITION sp31 ENGINE = TokuDB,
15079  SUBPARTITION sp32 ENGINE = TokuDB),
15080 PARTITION part4 VALUES IN (NULL)
15081 (SUBPARTITION sp41 ENGINE = TokuDB,
15082  SUBPARTITION sp42 ENGINE = TokuDB)) */
15083
15084# check prerequisites-1 success:    1
15085# check COUNT(*) success:    1
15086# check MIN/MAX(f_int1) success:    1
15087# check MIN/MAX(f_int2) success:    1
15088INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15089SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15090CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15091WHERE f_int1 IN (2,3);
15092ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15093# check prerequisites-3 success:    1
15094# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15095INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15096SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15097CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15098WHERE f_int1 IN (2,3);
15099DELETE FROM t1 WHERE f_charbig = 'delete me';
15100INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15101SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15102CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15103WHERE f_int1 IN (2,3);
15104DELETE FROM t1 WHERE f_charbig = 'delete me';
15105# check read via f_int1 success: 1
15106# check read via f_int2 success: 1
15107
15108# check multiple-1 success: 	1
15109DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15110
15111# check multiple-2 success: 	1
15112INSERT INTO t1 SELECT * FROM t0_template
15113WHERE MOD(f_int1,3) = 0;
15114
15115# check multiple-3 success: 	1
15116UPDATE t1 SET f_int1 = f_int1 + @max_row
15117WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15118AND @max_row_div2 + @max_row_div4;
15119
15120# check multiple-4 success: 	1
15121DELETE FROM t1
15122WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15123AND @max_row_div2 + @max_row_div4 + @max_row;
15124
15125# check multiple-5 success: 	1
15126SELECT COUNT(*) INTO @try_count FROM t0_template
15127WHERE MOD(f_int1,3) = 0
15128AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15129SELECT COUNT(*) INTO @clash_count
15130FROM t1 INNER JOIN t0_template USING(f_int1)
15131WHERE MOD(f_int1,3) = 0
15132AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15133SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15134INSERT INTO t1
15135SET f_int1 = @cur_value , f_int2 = @cur_value,
15136f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15137f_charbig = '#SINGLE#';
15138
15139# check single-1 success: 	1
15140SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15141INSERT INTO t1
15142SET f_int1 = @cur_value , f_int2 = @cur_value,
15143f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15144f_charbig = '#SINGLE#';
15145
15146# check single-2 success: 	1
15147SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15148SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15149UPDATE t1 SET f_int1 = @cur_value2
15150WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15151
15152# check single-3 success: 	1
15153SET @cur_value1= -1;
15154SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15155UPDATE t1 SET f_int1 = @cur_value1
15156WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15157
15158# check single-4 success: 	1
15159SELECT MAX(f_int1) INTO @cur_value FROM t1;
15160DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15161
15162# check single-5 success: 	1
15163DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15164
15165# check single-6 success: 	1
15166INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15167
15168# check single-7 success: 	1
15169DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15170DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15171INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15172f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15173f_charbig = '#NULL#';
15174INSERT INTO t1
15175SET f_int1 = NULL , f_int2 = -@max_row,
15176f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15177f_charbig = '#NULL#';
15178# check null success:    1
15179
15180# check null-1 success: 	1
15181UPDATE t1 SET f_int1 = -@max_row
15182WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15183AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15184
15185# check null-2 success: 	1
15186UPDATE t1 SET f_int1 = NULL
15187WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15188AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15189
15190# check null-3 success: 	1
15191DELETE FROM t1
15192WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15193AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15194
15195# check null-4 success: 	1
15196DELETE FROM t1
15197WHERE f_int1 = 0 AND f_int2 = 0
15198AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15199AND f_charbig = '#NULL#';
15200INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15201SELECT f_int1, f_int1, '', '', 'was inserted'
15202   FROM t0_template source_tab
15203WHERE MOD(f_int1,3) = 0
15204AND f_int1 BETWEEN @max_row_div2 AND @max_row
15205ON DUPLICATE KEY
15206UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15207f_int2 = 2 * @max_row + source_tab.f_int1,
15208f_charbig = 'was updated';
15209
15210# check unique-1-a success: 	1
15211
15212# check unique-1-b success: 	1
15213DELETE FROM t1 WHERE f_charbig = 'was inserted';
15214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15215f_int2 = CAST(f_char1 AS SIGNED INT),
15216f_charbig = CONCAT('===',f_char1,'===')
15217WHERE f_charbig = 'was updated';
15218REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15219SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15220   FROM t0_template source_tab
15221WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15222
15223# check replace success: 	1
15224DELETE FROM t1
15225WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15226DELETE FROM t1
15227WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15228f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15229UPDATE t1 SET f_int2 = f_int1,
15230f_char1 = CAST(f_int1 AS CHAR),
15231f_char2 = CAST(f_int1 AS CHAR),
15232f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15233WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15234SET AUTOCOMMIT= 0;
15235INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15236SELECT f_int1, f_int1, '', '', 'was inserted'
15237FROM t0_template source_tab
15238WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15239
15240# check transactions-1 success: 	1
15241COMMIT WORK;
15242
15243# check transactions-2 success: 	1
15244ROLLBACK WORK;
15245
15246# check transactions-3 success: 	1
15247DELETE FROM t1 WHERE f_charbig = 'was inserted';
15248COMMIT WORK;
15249ROLLBACK WORK;
15250
15251# check transactions-4 success: 	1
15252INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15253SELECT f_int1, f_int1, '', '', 'was inserted'
15254FROM t0_template source_tab
15255WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15256
15257# check transactions-5 success: 	1
15258ROLLBACK WORK;
15259
15260# check transactions-6 success: 	1
15261# INFO: Storage engine used for t1 seems to be transactional.
15262COMMIT;
15263
15264# check transactions-7 success: 	1
15265DELETE FROM t1 WHERE f_charbig = 'was inserted';
15266COMMIT WORK;
15267SET @@session.sql_mode = 'traditional';
15268Warnings:
15269Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15270SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15271INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15272SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15273'', '', 'was inserted' FROM t0_template
15274WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15275ERROR 22012: Division by 0
15276COMMIT;
15277
15278# check transactions-8 success: 	1
15279# INFO: Storage engine used for t1 seems to be able to revert
15280#       changes made by the failing statement.
15281SET @@session.sql_mode = '';
15282Warnings:
15283Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15284SET AUTOCOMMIT= 1;
15285DELETE FROM t1 WHERE f_charbig = 'was inserted';
15286COMMIT WORK;
15287UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15288
15289# check special-1 success: 	1
15290UPDATE t1 SET f_charbig = '';
15291
15292# check special-2 success: 	1
15293UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15294INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15295SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15296WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15297INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15298SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15299'just inserted' FROM t0_template
15300WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15301CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15302BEGIN
15303UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15304f_charbig = 'updated by trigger'
15305      WHERE f_int1 = new.f_int1;
15306END|
15307INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15308SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15309WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15310
15311# check trigger-1 success: 	1
15312DROP TRIGGER trg_1;
15313UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15314f_int2 = CAST(f_char1 AS SIGNED INT),
15315f_charbig = 'just inserted'
15316   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15317DELETE FROM t0_aux
15318WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15319INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15320SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15321'just inserted' FROM t0_template
15322WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15323CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15324BEGIN
15325UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15326f_charbig = 'updated by trigger'
15327      WHERE f_int1 = new.f_int1;
15328END|
15329INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15330SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15331WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15332
15333# check trigger-2 success: 	1
15334DROP TRIGGER trg_1;
15335UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15336f_int2 = CAST(f_char1 AS SIGNED INT),
15337f_charbig = 'just inserted'
15338   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15339DELETE FROM t0_aux
15340WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15341INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15342SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15343'just inserted' FROM t0_template
15344WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15345CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15346BEGIN
15347UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15348f_charbig = 'updated by trigger'
15349      WHERE f_int1 = new.f_int1;
15350END|
15351UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15352WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15353
15354# check trigger-3 success: 	1
15355DROP TRIGGER trg_1;
15356UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15357f_int2 = CAST(f_char1 AS SIGNED INT),
15358f_charbig = 'just inserted'
15359   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15360DELETE FROM t0_aux
15361WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15362INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15363SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15364'just inserted' FROM t0_template
15365WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15366CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15367BEGIN
15368UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15369f_charbig = 'updated by trigger'
15370      WHERE f_int1 = - old.f_int1;
15371END|
15372UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15373WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15374
15375# check trigger-4 success: 	1
15376DROP TRIGGER trg_1;
15377UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15378f_int2 = CAST(f_char1 AS SIGNED INT),
15379f_charbig = 'just inserted'
15380   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15381DELETE FROM t0_aux
15382WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15383INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15384SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15385'just inserted' FROM t0_template
15386WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15387CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15388BEGIN
15389UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15390f_charbig = 'updated by trigger'
15391      WHERE f_int1 = new.f_int1;
15392END|
15393UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15394WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15395
15396# check trigger-5 success: 	1
15397DROP TRIGGER trg_1;
15398UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15399f_int2 = CAST(f_char1 AS SIGNED INT),
15400f_charbig = 'just inserted'
15401   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15402DELETE FROM t0_aux
15403WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15404INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15405SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15406'just inserted' FROM t0_template
15407WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15408CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15409BEGIN
15410UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15411f_charbig = 'updated by trigger'
15412      WHERE f_int1 = - old.f_int1;
15413END|
15414UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15415WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15416
15417# check trigger-6 success: 	1
15418DROP TRIGGER trg_1;
15419UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15420f_int2 = CAST(f_char1 AS SIGNED INT),
15421f_charbig = 'just inserted'
15422   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15423DELETE FROM t0_aux
15424WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15425INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15426SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15427'just inserted' FROM t0_template
15428WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15429CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15430BEGIN
15431UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15432f_charbig = 'updated by trigger'
15433      WHERE f_int1 = - old.f_int1;
15434END|
15435DELETE FROM t0_aux
15436WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15437
15438# check trigger-7 success: 	1
15439DROP TRIGGER trg_1;
15440UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15441f_int2 = CAST(f_char1 AS SIGNED INT),
15442f_charbig = 'just inserted'
15443   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15444DELETE FROM t0_aux
15445WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15446INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15447SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15448'just inserted' FROM t0_template
15449WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15450CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15451BEGIN
15452UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15453f_charbig = 'updated by trigger'
15454      WHERE f_int1 = - old.f_int1;
15455END|
15456DELETE FROM t0_aux
15457WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15458
15459# check trigger-8 success: 	1
15460DROP TRIGGER trg_1;
15461UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15462f_int2 = CAST(f_char1 AS SIGNED INT),
15463f_charbig = 'just inserted'
15464   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15465DELETE FROM t0_aux
15466WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15467DELETE FROM t1
15468WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15469CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15470BEGIN
15471SET new.f_int1 = old.f_int1 + @max_row,
15472new.f_int2 = old.f_int2 - @max_row,
15473new.f_charbig = '####updated per update trigger####';
15474END|
15475UPDATE t1
15476SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15477f_charbig = '####updated per update statement itself####';
15478
15479# check trigger-9 success: 	1
15480DROP TRIGGER trg_2;
15481UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15482f_int2 = CAST(f_char1 AS SIGNED INT),
15483f_charbig = CONCAT('===',f_char1,'===');
15484CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15485BEGIN
15486SET new.f_int1 = new.f_int1 + @max_row,
15487new.f_int2 = new.f_int2 - @max_row,
15488new.f_charbig = '####updated per update trigger####';
15489END|
15490UPDATE t1
15491SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15492f_charbig = '####updated per update statement itself####';
15493
15494# check trigger-10 success: 	1
15495DROP TRIGGER trg_2;
15496UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15497f_int2 = CAST(f_char1 AS SIGNED INT),
15498f_charbig = CONCAT('===',f_char1,'===');
15499CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15500BEGIN
15501SET new.f_int1 = @my_max1 + @counter,
15502new.f_int2 = @my_min2 - @counter,
15503new.f_charbig = '####updated per insert trigger####';
15504SET @counter = @counter + 1;
15505END|
15506SET @counter = 1;
15507SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15508INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15509SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15510CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15511WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15512ORDER BY f_int1;
15513DROP TRIGGER trg_3;
15514
15515# check trigger-11 success: 	1
15516DELETE FROM t1
15517WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15518AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15519AND f_charbig = '####updated per insert trigger####';
15520CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15521BEGIN
15522SET new.f_int1 = @my_max1 + @counter,
15523new.f_int2 = @my_min2 - @counter,
15524new.f_charbig = '####updated per insert trigger####';
15525SET @counter = @counter + 1;
15526END|
15527SET @counter = 1;
15528SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15529INSERT INTO t1 (f_char1, f_char2, f_charbig)
15530SELECT CAST(f_int1 AS CHAR),
15531CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15532WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15533ORDER BY f_int1;
15534DROP TRIGGER trg_3;
15535
15536# check trigger-12 success: 	1
15537DELETE FROM t1
15538WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15539AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15540AND f_charbig = '####updated per insert trigger####';
15541ANALYZE  TABLE t1;
15542Table	Op	Msg_type	Msg_text
15543test.t1	analyze	status	OK
15544CHECK    TABLE t1 EXTENDED;
15545Table	Op	Msg_type	Msg_text
15546test.t1	check	status	OK
15547CHECKSUM TABLE t1 EXTENDED;
15548Table	Checksum
15549test.t1	<some_value>
15550OPTIMIZE TABLE t1;
15551Table	Op	Msg_type	Msg_text
15552test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15553test.t1	optimize	status	OK
15554# check layout success:    1
15555REPAIR   TABLE t1 EXTENDED;
15556Table	Op	Msg_type	Msg_text
15557test.t1	repair	status	OK
15558# check layout success:    1
15559TRUNCATE t1;
15560
15561# check TRUNCATE success: 	1
15562# check layout success:    1
15563# End usability test (inc/partition_check.inc)
15564DROP TABLE t1;
15565CREATE TABLE t1 (
15566f_int1 INTEGER,
15567f_int2 INTEGER,
15568f_char1 CHAR(20),
15569f_char2 CHAR(20),
15570f_charbig VARCHAR(1000)
15571, UNIQUE INDEX uidx1 (f_int1,f_int2)
15572)
15573PARTITION BY LIST(ABS(MOD(f_int1,2)))
15574SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
15575(PARTITION part1 VALUES IN (0),
15576PARTITION part2 VALUES IN (1),
15577PARTITION part3 VALUES IN (NULL));
15578INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15579SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15580WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15581ALTER TABLE t1 MODIFY f_int2 BIGINT;
15582INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15583SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15584WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15585# Start usability test (inc/partition_check.inc)
15586create_command
15587SHOW CREATE TABLE t1;
15588Table	Create Table
15589t1	CREATE TABLE `t1` (
15590  `f_int1` int(11) DEFAULT NULL,
15591  `f_int2` bigint(20) DEFAULT NULL,
15592  `f_char1` char(20) DEFAULT NULL,
15593  `f_char2` char(20) DEFAULT NULL,
15594  `f_charbig` varchar(1000) DEFAULT NULL,
15595  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
15596) ENGINE=TokuDB DEFAULT CHARSET=latin1
15597/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
15598SUBPARTITION BY KEY (f_int1)
15599SUBPARTITIONS 3
15600(PARTITION part1 VALUES IN (0) ENGINE = TokuDB,
15601 PARTITION part2 VALUES IN (1) ENGINE = TokuDB,
15602 PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */
15603
15604# check prerequisites-1 success:    1
15605# check COUNT(*) success:    1
15606# check MIN/MAX(f_int1) success:    1
15607# check MIN/MAX(f_int2) success:    1
15608INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15609SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15610CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15611WHERE f_int1 IN (2,3);
15612ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15613# check prerequisites-3 success:    1
15614# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15615INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15616SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15617CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15618WHERE f_int1 IN (2,3);
15619DELETE FROM t1 WHERE f_charbig = 'delete me';
15620INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15621SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15622CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15623WHERE f_int1 IN (2,3);
15624DELETE FROM t1 WHERE f_charbig = 'delete me';
15625# check read via f_int1 success: 1
15626# check read via f_int2 success: 1
15627
15628# check multiple-1 success: 	1
15629DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15630
15631# check multiple-2 success: 	1
15632INSERT INTO t1 SELECT * FROM t0_template
15633WHERE MOD(f_int1,3) = 0;
15634
15635# check multiple-3 success: 	1
15636UPDATE t1 SET f_int1 = f_int1 + @max_row
15637WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15638AND @max_row_div2 + @max_row_div4;
15639
15640# check multiple-4 success: 	1
15641DELETE FROM t1
15642WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15643AND @max_row_div2 + @max_row_div4 + @max_row;
15644
15645# check multiple-5 success: 	1
15646SELECT COUNT(*) INTO @try_count FROM t0_template
15647WHERE MOD(f_int1,3) = 0
15648AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15649SELECT COUNT(*) INTO @clash_count
15650FROM t1 INNER JOIN t0_template USING(f_int1)
15651WHERE MOD(f_int1,3) = 0
15652AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15653SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15654INSERT INTO t1
15655SET f_int1 = @cur_value , f_int2 = @cur_value,
15656f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15657f_charbig = '#SINGLE#';
15658
15659# check single-1 success: 	1
15660SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15661INSERT INTO t1
15662SET f_int1 = @cur_value , f_int2 = @cur_value,
15663f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15664f_charbig = '#SINGLE#';
15665
15666# check single-2 success: 	1
15667SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15668SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15669UPDATE t1 SET f_int1 = @cur_value2
15670WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15671
15672# check single-3 success: 	1
15673SET @cur_value1= -1;
15674SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15675UPDATE t1 SET f_int1 = @cur_value1
15676WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15677
15678# check single-4 success: 	1
15679SELECT MAX(f_int1) INTO @cur_value FROM t1;
15680DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15681
15682# check single-5 success: 	1
15683DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15684
15685# check single-6 success: 	1
15686INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15687
15688# check single-7 success: 	1
15689DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15690DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15691INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15692f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15693f_charbig = '#NULL#';
15694INSERT INTO t1
15695SET f_int1 = NULL , f_int2 = -@max_row,
15696f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15697f_charbig = '#NULL#';
15698# check null success:    1
15699
15700# check null-1 success: 	1
15701UPDATE t1 SET f_int1 = -@max_row
15702WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15703AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15704
15705# check null-2 success: 	1
15706UPDATE t1 SET f_int1 = NULL
15707WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15708AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15709
15710# check null-3 success: 	1
15711DELETE FROM t1
15712WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15713AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15714
15715# check null-4 success: 	1
15716DELETE FROM t1
15717WHERE f_int1 = 0 AND f_int2 = 0
15718AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15719AND f_charbig = '#NULL#';
15720INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15721SELECT f_int1, f_int1, '', '', 'was inserted'
15722   FROM t0_template source_tab
15723WHERE MOD(f_int1,3) = 0
15724AND f_int1 BETWEEN @max_row_div2 AND @max_row
15725ON DUPLICATE KEY
15726UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15727f_int2 = 2 * @max_row + source_tab.f_int1,
15728f_charbig = 'was updated';
15729
15730# check unique-1-a success: 	1
15731
15732# check unique-1-b success: 	1
15733DELETE FROM t1 WHERE f_charbig = 'was inserted';
15734UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15735f_int2 = CAST(f_char1 AS SIGNED INT),
15736f_charbig = CONCAT('===',f_char1,'===')
15737WHERE f_charbig = 'was updated';
15738REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15739SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15740   FROM t0_template source_tab
15741WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15742
15743# check replace success: 	1
15744DELETE FROM t1
15745WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15746DELETE FROM t1
15747WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15748f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15749UPDATE t1 SET f_int2 = f_int1,
15750f_char1 = CAST(f_int1 AS CHAR),
15751f_char2 = CAST(f_int1 AS CHAR),
15752f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15753WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15754SET AUTOCOMMIT= 0;
15755INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15756SELECT f_int1, f_int1, '', '', 'was inserted'
15757FROM t0_template source_tab
15758WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15759
15760# check transactions-1 success: 	1
15761COMMIT WORK;
15762
15763# check transactions-2 success: 	1
15764ROLLBACK WORK;
15765
15766# check transactions-3 success: 	1
15767DELETE FROM t1 WHERE f_charbig = 'was inserted';
15768COMMIT WORK;
15769ROLLBACK WORK;
15770
15771# check transactions-4 success: 	1
15772INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15773SELECT f_int1, f_int1, '', '', 'was inserted'
15774FROM t0_template source_tab
15775WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15776
15777# check transactions-5 success: 	1
15778ROLLBACK WORK;
15779
15780# check transactions-6 success: 	1
15781# INFO: Storage engine used for t1 seems to be transactional.
15782COMMIT;
15783
15784# check transactions-7 success: 	1
15785DELETE FROM t1 WHERE f_charbig = 'was inserted';
15786COMMIT WORK;
15787SET @@session.sql_mode = 'traditional';
15788Warnings:
15789Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15790SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15791INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15792SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15793'', '', 'was inserted' FROM t0_template
15794WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15795ERROR 22012: Division by 0
15796COMMIT;
15797
15798# check transactions-8 success: 	1
15799# INFO: Storage engine used for t1 seems to be able to revert
15800#       changes made by the failing statement.
15801SET @@session.sql_mode = '';
15802Warnings:
15803Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15804SET AUTOCOMMIT= 1;
15805DELETE FROM t1 WHERE f_charbig = 'was inserted';
15806COMMIT WORK;
15807UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15808
15809# check special-1 success: 	1
15810UPDATE t1 SET f_charbig = '';
15811
15812# check special-2 success: 	1
15813UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15814INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15815SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15816WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15817INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15818SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15819'just inserted' FROM t0_template
15820WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15821CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15822BEGIN
15823UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15824f_charbig = 'updated by trigger'
15825      WHERE f_int1 = new.f_int1;
15826END|
15827INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15828SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15829WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15830
15831# check trigger-1 success: 	1
15832DROP TRIGGER trg_1;
15833UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15834f_int2 = CAST(f_char1 AS SIGNED INT),
15835f_charbig = 'just inserted'
15836   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15837DELETE FROM t0_aux
15838WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15839INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15840SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15841'just inserted' FROM t0_template
15842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15843CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15844BEGIN
15845UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15846f_charbig = 'updated by trigger'
15847      WHERE f_int1 = new.f_int1;
15848END|
15849INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15850SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15851WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15852
15853# check trigger-2 success: 	1
15854DROP TRIGGER trg_1;
15855UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15856f_int2 = CAST(f_char1 AS SIGNED INT),
15857f_charbig = 'just inserted'
15858   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15859DELETE FROM t0_aux
15860WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15861INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15862SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15863'just inserted' FROM t0_template
15864WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15865CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15866BEGIN
15867UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15868f_charbig = 'updated by trigger'
15869      WHERE f_int1 = new.f_int1;
15870END|
15871UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15872WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15873
15874# check trigger-3 success: 	1
15875DROP TRIGGER trg_1;
15876UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15877f_int2 = CAST(f_char1 AS SIGNED INT),
15878f_charbig = 'just inserted'
15879   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15880DELETE FROM t0_aux
15881WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15882INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15883SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15884'just inserted' FROM t0_template
15885WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15886CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15887BEGIN
15888UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15889f_charbig = 'updated by trigger'
15890      WHERE f_int1 = - old.f_int1;
15891END|
15892UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15893WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15894
15895# check trigger-4 success: 	1
15896DROP TRIGGER trg_1;
15897UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15898f_int2 = CAST(f_char1 AS SIGNED INT),
15899f_charbig = 'just inserted'
15900   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15901DELETE FROM t0_aux
15902WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15903INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15904SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15905'just inserted' FROM t0_template
15906WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15907CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15908BEGIN
15909UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15910f_charbig = 'updated by trigger'
15911      WHERE f_int1 = new.f_int1;
15912END|
15913UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15914WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15915
15916# check trigger-5 success: 	1
15917DROP TRIGGER trg_1;
15918UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15919f_int2 = CAST(f_char1 AS SIGNED INT),
15920f_charbig = 'just inserted'
15921   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15922DELETE FROM t0_aux
15923WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15924INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15925SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15926'just inserted' FROM t0_template
15927WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15928CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15929BEGIN
15930UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15931f_charbig = 'updated by trigger'
15932      WHERE f_int1 = - old.f_int1;
15933END|
15934UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15935WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15936
15937# check trigger-6 success: 	1
15938DROP TRIGGER trg_1;
15939UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15940f_int2 = CAST(f_char1 AS SIGNED INT),
15941f_charbig = 'just inserted'
15942   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15943DELETE FROM t0_aux
15944WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15945INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15946SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15947'just inserted' FROM t0_template
15948WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15949CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15950BEGIN
15951UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15952f_charbig = 'updated by trigger'
15953      WHERE f_int1 = - old.f_int1;
15954END|
15955DELETE FROM t0_aux
15956WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15957
15958# check trigger-7 success: 	1
15959DROP TRIGGER trg_1;
15960UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15961f_int2 = CAST(f_char1 AS SIGNED INT),
15962f_charbig = 'just inserted'
15963   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15964DELETE FROM t0_aux
15965WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15966INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15967SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15968'just inserted' FROM t0_template
15969WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15970CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15971BEGIN
15972UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15973f_charbig = 'updated by trigger'
15974      WHERE f_int1 = - old.f_int1;
15975END|
15976DELETE FROM t0_aux
15977WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15978
15979# check trigger-8 success: 	1
15980DROP TRIGGER trg_1;
15981UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15982f_int2 = CAST(f_char1 AS SIGNED INT),
15983f_charbig = 'just inserted'
15984   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15985DELETE FROM t0_aux
15986WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15987DELETE FROM t1
15988WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15989CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15990BEGIN
15991SET new.f_int1 = old.f_int1 + @max_row,
15992new.f_int2 = old.f_int2 - @max_row,
15993new.f_charbig = '####updated per update trigger####';
15994END|
15995UPDATE t1
15996SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15997f_charbig = '####updated per update statement itself####';
15998
15999# check trigger-9 success: 	1
16000DROP TRIGGER trg_2;
16001UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16002f_int2 = CAST(f_char1 AS SIGNED INT),
16003f_charbig = CONCAT('===',f_char1,'===');
16004CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16005BEGIN
16006SET new.f_int1 = new.f_int1 + @max_row,
16007new.f_int2 = new.f_int2 - @max_row,
16008new.f_charbig = '####updated per update trigger####';
16009END|
16010UPDATE t1
16011SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16012f_charbig = '####updated per update statement itself####';
16013
16014# check trigger-10 success: 	1
16015DROP TRIGGER trg_2;
16016UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16017f_int2 = CAST(f_char1 AS SIGNED INT),
16018f_charbig = CONCAT('===',f_char1,'===');
16019CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16020BEGIN
16021SET new.f_int1 = @my_max1 + @counter,
16022new.f_int2 = @my_min2 - @counter,
16023new.f_charbig = '####updated per insert trigger####';
16024SET @counter = @counter + 1;
16025END|
16026SET @counter = 1;
16027SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16028INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16029SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16030CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16031WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16032ORDER BY f_int1;
16033DROP TRIGGER trg_3;
16034
16035# check trigger-11 success: 	1
16036DELETE FROM t1
16037WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16038AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16039AND f_charbig = '####updated per insert trigger####';
16040CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16041BEGIN
16042SET new.f_int1 = @my_max1 + @counter,
16043new.f_int2 = @my_min2 - @counter,
16044new.f_charbig = '####updated per insert trigger####';
16045SET @counter = @counter + 1;
16046END|
16047SET @counter = 1;
16048SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16049INSERT INTO t1 (f_char1, f_char2, f_charbig)
16050SELECT CAST(f_int1 AS CHAR),
16051CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16052WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16053ORDER BY f_int1;
16054DROP TRIGGER trg_3;
16055
16056# check trigger-12 success: 	1
16057DELETE FROM t1
16058WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16059AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16060AND f_charbig = '####updated per insert trigger####';
16061ANALYZE  TABLE t1;
16062Table	Op	Msg_type	Msg_text
16063test.t1	analyze	status	OK
16064CHECK    TABLE t1 EXTENDED;
16065Table	Op	Msg_type	Msg_text
16066test.t1	check	status	OK
16067CHECKSUM TABLE t1 EXTENDED;
16068Table	Checksum
16069test.t1	<some_value>
16070OPTIMIZE TABLE t1;
16071Table	Op	Msg_type	Msg_text
16072test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16073test.t1	optimize	status	OK
16074# check layout success:    1
16075REPAIR   TABLE t1 EXTENDED;
16076Table	Op	Msg_type	Msg_text
16077test.t1	repair	status	OK
16078# check layout success:    1
16079TRUNCATE t1;
16080
16081# check TRUNCATE success: 	1
16082# check layout success:    1
16083# End usability test (inc/partition_check.inc)
16084DROP TABLE t1;
16085DROP TABLE IF EXISTS t1;
16086CREATE TABLE t1 (
16087f_int1 INTEGER,
16088f_int2 INTEGER,
16089f_char1 CHAR(20),
16090f_char2 CHAR(20),
16091f_charbig VARCHAR(1000)
16092, UNIQUE INDEX uidx1 (f_int2,f_int1)
16093)
16094PARTITION BY HASH(f_int1) PARTITIONS 2;
16095INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16096SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16097WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16098ALTER TABLE t1 MODIFY f_int2 BIGINT;
16099INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16100SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16101WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16102# Start usability test (inc/partition_check.inc)
16103create_command
16104SHOW CREATE TABLE t1;
16105Table	Create Table
16106t1	CREATE TABLE `t1` (
16107  `f_int1` int(11) DEFAULT NULL,
16108  `f_int2` bigint(20) DEFAULT NULL,
16109  `f_char1` char(20) DEFAULT NULL,
16110  `f_char2` char(20) DEFAULT NULL,
16111  `f_charbig` varchar(1000) DEFAULT NULL,
16112  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
16113) ENGINE=TokuDB DEFAULT CHARSET=latin1
16114/*!50100 PARTITION BY HASH (f_int1)
16115PARTITIONS 2 */
16116
16117# check prerequisites-1 success:    1
16118# check COUNT(*) success:    1
16119# check MIN/MAX(f_int1) success:    1
16120# check MIN/MAX(f_int2) success:    1
16121INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16122SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16123CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16124WHERE f_int1 IN (2,3);
16125ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16126# check prerequisites-3 success:    1
16127# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16128INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16129SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16130CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16131WHERE f_int1 IN (2,3);
16132DELETE FROM t1 WHERE f_charbig = 'delete me';
16133INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16134SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16135CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16136WHERE f_int1 IN (2,3);
16137DELETE FROM t1 WHERE f_charbig = 'delete me';
16138# check read via f_int1 success: 1
16139# check read via f_int2 success: 1
16140
16141# check multiple-1 success: 	1
16142DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16143
16144# check multiple-2 success: 	1
16145INSERT INTO t1 SELECT * FROM t0_template
16146WHERE MOD(f_int1,3) = 0;
16147
16148# check multiple-3 success: 	1
16149UPDATE t1 SET f_int1 = f_int1 + @max_row
16150WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16151AND @max_row_div2 + @max_row_div4;
16152
16153# check multiple-4 success: 	1
16154DELETE FROM t1
16155WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16156AND @max_row_div2 + @max_row_div4 + @max_row;
16157
16158# check multiple-5 success: 	1
16159SELECT COUNT(*) INTO @try_count FROM t0_template
16160WHERE MOD(f_int1,3) = 0
16161AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16162SELECT COUNT(*) INTO @clash_count
16163FROM t1 INNER JOIN t0_template USING(f_int1)
16164WHERE MOD(f_int1,3) = 0
16165AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16166SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16167INSERT INTO t1
16168SET f_int1 = @cur_value , f_int2 = @cur_value,
16169f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16170f_charbig = '#SINGLE#';
16171
16172# check single-1 success: 	1
16173SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16174INSERT INTO t1
16175SET f_int1 = @cur_value , f_int2 = @cur_value,
16176f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16177f_charbig = '#SINGLE#';
16178
16179# check single-2 success: 	1
16180SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16181SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16182UPDATE t1 SET f_int1 = @cur_value2
16183WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16184
16185# check single-3 success: 	1
16186SET @cur_value1= -1;
16187SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16188UPDATE t1 SET f_int1 = @cur_value1
16189WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16190
16191# check single-4 success: 	1
16192SELECT MAX(f_int1) INTO @cur_value FROM t1;
16193DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16194
16195# check single-5 success: 	1
16196DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16197
16198# check single-6 success: 	1
16199INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16200
16201# check single-7 success: 	1
16202DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16203DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16204INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16205f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16206f_charbig = '#NULL#';
16207INSERT INTO t1
16208SET f_int1 = NULL , f_int2 = -@max_row,
16209f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16210f_charbig = '#NULL#';
16211# check null success:    1
16212
16213# check null-1 success: 	1
16214UPDATE t1 SET f_int1 = -@max_row
16215WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16216AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16217
16218# check null-2 success: 	1
16219UPDATE t1 SET f_int1 = NULL
16220WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16221AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16222
16223# check null-3 success: 	1
16224DELETE FROM t1
16225WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16226AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16227
16228# check null-4 success: 	1
16229DELETE FROM t1
16230WHERE f_int1 = 0 AND f_int2 = 0
16231AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16232AND f_charbig = '#NULL#';
16233INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16234SELECT f_int1, f_int1, '', '', 'was inserted'
16235   FROM t0_template source_tab
16236WHERE MOD(f_int1,3) = 0
16237AND f_int1 BETWEEN @max_row_div2 AND @max_row
16238ON DUPLICATE KEY
16239UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16240f_int2 = 2 * @max_row + source_tab.f_int1,
16241f_charbig = 'was updated';
16242
16243# check unique-1-a success: 	1
16244
16245# check unique-1-b success: 	1
16246DELETE FROM t1 WHERE f_charbig = 'was inserted';
16247UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16248f_int2 = CAST(f_char1 AS SIGNED INT),
16249f_charbig = CONCAT('===',f_char1,'===')
16250WHERE f_charbig = 'was updated';
16251REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16252SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16253   FROM t0_template source_tab
16254WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16255
16256# check replace success: 	1
16257DELETE FROM t1
16258WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16259DELETE FROM t1
16260WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16261f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16262UPDATE t1 SET f_int2 = f_int1,
16263f_char1 = CAST(f_int1 AS CHAR),
16264f_char2 = CAST(f_int1 AS CHAR),
16265f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16266WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16267SET AUTOCOMMIT= 0;
16268INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16269SELECT f_int1, f_int1, '', '', 'was inserted'
16270FROM t0_template source_tab
16271WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16272
16273# check transactions-1 success: 	1
16274COMMIT WORK;
16275
16276# check transactions-2 success: 	1
16277ROLLBACK WORK;
16278
16279# check transactions-3 success: 	1
16280DELETE FROM t1 WHERE f_charbig = 'was inserted';
16281COMMIT WORK;
16282ROLLBACK WORK;
16283
16284# check transactions-4 success: 	1
16285INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16286SELECT f_int1, f_int1, '', '', 'was inserted'
16287FROM t0_template source_tab
16288WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16289
16290# check transactions-5 success: 	1
16291ROLLBACK WORK;
16292
16293# check transactions-6 success: 	1
16294# INFO: Storage engine used for t1 seems to be transactional.
16295COMMIT;
16296
16297# check transactions-7 success: 	1
16298DELETE FROM t1 WHERE f_charbig = 'was inserted';
16299COMMIT WORK;
16300SET @@session.sql_mode = 'traditional';
16301Warnings:
16302Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16303SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16304INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16305SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16306'', '', 'was inserted' FROM t0_template
16307WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16308ERROR 22012: Division by 0
16309COMMIT;
16310
16311# check transactions-8 success: 	1
16312# INFO: Storage engine used for t1 seems to be able to revert
16313#       changes made by the failing statement.
16314SET @@session.sql_mode = '';
16315Warnings:
16316Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16317SET AUTOCOMMIT= 1;
16318DELETE FROM t1 WHERE f_charbig = 'was inserted';
16319COMMIT WORK;
16320UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16321
16322# check special-1 success: 	1
16323UPDATE t1 SET f_charbig = '';
16324
16325# check special-2 success: 	1
16326UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16327INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16328SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16329WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16330INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16331SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16332'just inserted' FROM t0_template
16333WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16334CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16335BEGIN
16336UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16337f_charbig = 'updated by trigger'
16338      WHERE f_int1 = new.f_int1;
16339END|
16340INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16341SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16342WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16343
16344# check trigger-1 success: 	1
16345DROP TRIGGER trg_1;
16346UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16347f_int2 = CAST(f_char1 AS SIGNED INT),
16348f_charbig = 'just inserted'
16349   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16350DELETE FROM t0_aux
16351WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16352INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16353SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16354'just inserted' FROM t0_template
16355WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16356CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16357BEGIN
16358UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16359f_charbig = 'updated by trigger'
16360      WHERE f_int1 = new.f_int1;
16361END|
16362INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16363SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16364WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16365
16366# check trigger-2 success: 	1
16367DROP TRIGGER trg_1;
16368UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16369f_int2 = CAST(f_char1 AS SIGNED INT),
16370f_charbig = 'just inserted'
16371   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16372DELETE FROM t0_aux
16373WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16374INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16375SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16376'just inserted' FROM t0_template
16377WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16378CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16379BEGIN
16380UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16381f_charbig = 'updated by trigger'
16382      WHERE f_int1 = new.f_int1;
16383END|
16384UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16385WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16386
16387# check trigger-3 success: 	1
16388DROP TRIGGER trg_1;
16389UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16390f_int2 = CAST(f_char1 AS SIGNED INT),
16391f_charbig = 'just inserted'
16392   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16393DELETE FROM t0_aux
16394WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16395INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16396SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16397'just inserted' FROM t0_template
16398WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16399CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16400BEGIN
16401UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16402f_charbig = 'updated by trigger'
16403      WHERE f_int1 = - old.f_int1;
16404END|
16405UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16406WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16407
16408# check trigger-4 success: 	1
16409DROP TRIGGER trg_1;
16410UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16411f_int2 = CAST(f_char1 AS SIGNED INT),
16412f_charbig = 'just inserted'
16413   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16414DELETE FROM t0_aux
16415WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16416INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16417SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16418'just inserted' FROM t0_template
16419WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16420CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16421BEGIN
16422UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16423f_charbig = 'updated by trigger'
16424      WHERE f_int1 = new.f_int1;
16425END|
16426UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16427WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16428
16429# check trigger-5 success: 	1
16430DROP TRIGGER trg_1;
16431UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16432f_int2 = CAST(f_char1 AS SIGNED INT),
16433f_charbig = 'just inserted'
16434   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16435DELETE FROM t0_aux
16436WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16437INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16438SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16439'just inserted' FROM t0_template
16440WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16441CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16442BEGIN
16443UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16444f_charbig = 'updated by trigger'
16445      WHERE f_int1 = - old.f_int1;
16446END|
16447UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16448WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16449
16450# check trigger-6 success: 	1
16451DROP TRIGGER trg_1;
16452UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16453f_int2 = CAST(f_char1 AS SIGNED INT),
16454f_charbig = 'just inserted'
16455   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16456DELETE FROM t0_aux
16457WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16458INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16459SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16460'just inserted' FROM t0_template
16461WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16462CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16463BEGIN
16464UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16465f_charbig = 'updated by trigger'
16466      WHERE f_int1 = - old.f_int1;
16467END|
16468DELETE FROM t0_aux
16469WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16470
16471# check trigger-7 success: 	1
16472DROP TRIGGER trg_1;
16473UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16474f_int2 = CAST(f_char1 AS SIGNED INT),
16475f_charbig = 'just inserted'
16476   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16477DELETE FROM t0_aux
16478WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16479INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16480SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16481'just inserted' FROM t0_template
16482WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16483CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16484BEGIN
16485UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16486f_charbig = 'updated by trigger'
16487      WHERE f_int1 = - old.f_int1;
16488END|
16489DELETE FROM t0_aux
16490WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16491
16492# check trigger-8 success: 	1
16493DROP TRIGGER trg_1;
16494UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16495f_int2 = CAST(f_char1 AS SIGNED INT),
16496f_charbig = 'just inserted'
16497   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16498DELETE FROM t0_aux
16499WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16500DELETE FROM t1
16501WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16502CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16503BEGIN
16504SET new.f_int1 = old.f_int1 + @max_row,
16505new.f_int2 = old.f_int2 - @max_row,
16506new.f_charbig = '####updated per update trigger####';
16507END|
16508UPDATE t1
16509SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16510f_charbig = '####updated per update statement itself####';
16511
16512# check trigger-9 success: 	1
16513DROP TRIGGER trg_2;
16514UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16515f_int2 = CAST(f_char1 AS SIGNED INT),
16516f_charbig = CONCAT('===',f_char1,'===');
16517CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16518BEGIN
16519SET new.f_int1 = new.f_int1 + @max_row,
16520new.f_int2 = new.f_int2 - @max_row,
16521new.f_charbig = '####updated per update trigger####';
16522END|
16523UPDATE t1
16524SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16525f_charbig = '####updated per update statement itself####';
16526
16527# check trigger-10 success: 	1
16528DROP TRIGGER trg_2;
16529UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16530f_int2 = CAST(f_char1 AS SIGNED INT),
16531f_charbig = CONCAT('===',f_char1,'===');
16532CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16533BEGIN
16534SET new.f_int1 = @my_max1 + @counter,
16535new.f_int2 = @my_min2 - @counter,
16536new.f_charbig = '####updated per insert trigger####';
16537SET @counter = @counter + 1;
16538END|
16539SET @counter = 1;
16540SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16541INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16542SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16543CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16544WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16545ORDER BY f_int1;
16546DROP TRIGGER trg_3;
16547
16548# check trigger-11 success: 	1
16549DELETE FROM t1
16550WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16551AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16552AND f_charbig = '####updated per insert trigger####';
16553CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16554BEGIN
16555SET new.f_int1 = @my_max1 + @counter,
16556new.f_int2 = @my_min2 - @counter,
16557new.f_charbig = '####updated per insert trigger####';
16558SET @counter = @counter + 1;
16559END|
16560SET @counter = 1;
16561SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16562INSERT INTO t1 (f_char1, f_char2, f_charbig)
16563SELECT CAST(f_int1 AS CHAR),
16564CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16565WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16566ORDER BY f_int1;
16567DROP TRIGGER trg_3;
16568
16569# check trigger-12 success: 	1
16570DELETE FROM t1
16571WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16572AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16573AND f_charbig = '####updated per insert trigger####';
16574ANALYZE  TABLE t1;
16575Table	Op	Msg_type	Msg_text
16576test.t1	analyze	status	OK
16577CHECK    TABLE t1 EXTENDED;
16578Table	Op	Msg_type	Msg_text
16579test.t1	check	status	OK
16580CHECKSUM TABLE t1 EXTENDED;
16581Table	Checksum
16582test.t1	<some_value>
16583OPTIMIZE TABLE t1;
16584Table	Op	Msg_type	Msg_text
16585test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16586test.t1	optimize	status	OK
16587# check layout success:    1
16588REPAIR   TABLE t1 EXTENDED;
16589Table	Op	Msg_type	Msg_text
16590test.t1	repair	status	OK
16591# check layout success:    1
16592TRUNCATE t1;
16593
16594# check TRUNCATE success: 	1
16595# check layout success:    1
16596# End usability test (inc/partition_check.inc)
16597DROP TABLE t1;
16598CREATE TABLE t1 (
16599f_int1 INTEGER,
16600f_int2 INTEGER,
16601f_char1 CHAR(20),
16602f_char2 CHAR(20),
16603f_charbig VARCHAR(1000)
16604, UNIQUE INDEX uidx1 (f_int2,f_int1)
16605)
16606PARTITION BY KEY(f_int1) PARTITIONS 5;
16607INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16608SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16609WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16610ALTER TABLE t1 MODIFY f_int2 BIGINT;
16611INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16612SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16613WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16614# Start usability test (inc/partition_check.inc)
16615create_command
16616SHOW CREATE TABLE t1;
16617Table	Create Table
16618t1	CREATE TABLE `t1` (
16619  `f_int1` int(11) DEFAULT NULL,
16620  `f_int2` bigint(20) DEFAULT NULL,
16621  `f_char1` char(20) DEFAULT NULL,
16622  `f_char2` char(20) DEFAULT NULL,
16623  `f_charbig` varchar(1000) DEFAULT NULL,
16624  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
16625) ENGINE=TokuDB DEFAULT CHARSET=latin1
16626/*!50100 PARTITION BY KEY (f_int1)
16627PARTITIONS 5 */
16628
16629# check prerequisites-1 success:    1
16630# check COUNT(*) success:    1
16631# check MIN/MAX(f_int1) success:    1
16632# check MIN/MAX(f_int2) success:    1
16633INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16634SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16635CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16636WHERE f_int1 IN (2,3);
16637ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16638# check prerequisites-3 success:    1
16639# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16640INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16641SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16642CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16643WHERE f_int1 IN (2,3);
16644DELETE FROM t1 WHERE f_charbig = 'delete me';
16645INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16646SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16647CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16648WHERE f_int1 IN (2,3);
16649DELETE FROM t1 WHERE f_charbig = 'delete me';
16650# check read via f_int1 success: 1
16651# check read via f_int2 success: 1
16652
16653# check multiple-1 success: 	1
16654DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16655
16656# check multiple-2 success: 	1
16657INSERT INTO t1 SELECT * FROM t0_template
16658WHERE MOD(f_int1,3) = 0;
16659
16660# check multiple-3 success: 	1
16661UPDATE t1 SET f_int1 = f_int1 + @max_row
16662WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16663AND @max_row_div2 + @max_row_div4;
16664
16665# check multiple-4 success: 	1
16666DELETE FROM t1
16667WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16668AND @max_row_div2 + @max_row_div4 + @max_row;
16669
16670# check multiple-5 success: 	1
16671SELECT COUNT(*) INTO @try_count FROM t0_template
16672WHERE MOD(f_int1,3) = 0
16673AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16674SELECT COUNT(*) INTO @clash_count
16675FROM t1 INNER JOIN t0_template USING(f_int1)
16676WHERE MOD(f_int1,3) = 0
16677AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16678SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16679INSERT INTO t1
16680SET f_int1 = @cur_value , f_int2 = @cur_value,
16681f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16682f_charbig = '#SINGLE#';
16683
16684# check single-1 success: 	1
16685SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16686INSERT INTO t1
16687SET f_int1 = @cur_value , f_int2 = @cur_value,
16688f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16689f_charbig = '#SINGLE#';
16690
16691# check single-2 success: 	1
16692SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16693SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16694UPDATE t1 SET f_int1 = @cur_value2
16695WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16696
16697# check single-3 success: 	1
16698SET @cur_value1= -1;
16699SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16700UPDATE t1 SET f_int1 = @cur_value1
16701WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16702
16703# check single-4 success: 	1
16704SELECT MAX(f_int1) INTO @cur_value FROM t1;
16705DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16706
16707# check single-5 success: 	1
16708DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16709
16710# check single-6 success: 	1
16711INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16712
16713# check single-7 success: 	1
16714DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16715DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16716INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16717f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16718f_charbig = '#NULL#';
16719INSERT INTO t1
16720SET f_int1 = NULL , f_int2 = -@max_row,
16721f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16722f_charbig = '#NULL#';
16723# check null success:    1
16724
16725# check null-1 success: 	1
16726UPDATE t1 SET f_int1 = -@max_row
16727WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16728AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16729
16730# check null-2 success: 	1
16731UPDATE t1 SET f_int1 = NULL
16732WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16733AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16734
16735# check null-3 success: 	1
16736DELETE FROM t1
16737WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16738AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16739
16740# check null-4 success: 	1
16741DELETE FROM t1
16742WHERE f_int1 = 0 AND f_int2 = 0
16743AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16744AND f_charbig = '#NULL#';
16745INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16746SELECT f_int1, f_int1, '', '', 'was inserted'
16747   FROM t0_template source_tab
16748WHERE MOD(f_int1,3) = 0
16749AND f_int1 BETWEEN @max_row_div2 AND @max_row
16750ON DUPLICATE KEY
16751UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16752f_int2 = 2 * @max_row + source_tab.f_int1,
16753f_charbig = 'was updated';
16754
16755# check unique-1-a success: 	1
16756
16757# check unique-1-b success: 	1
16758DELETE FROM t1 WHERE f_charbig = 'was inserted';
16759UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16760f_int2 = CAST(f_char1 AS SIGNED INT),
16761f_charbig = CONCAT('===',f_char1,'===')
16762WHERE f_charbig = 'was updated';
16763REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16764SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16765   FROM t0_template source_tab
16766WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16767
16768# check replace success: 	1
16769DELETE FROM t1
16770WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16771DELETE FROM t1
16772WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16773f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16774UPDATE t1 SET f_int2 = f_int1,
16775f_char1 = CAST(f_int1 AS CHAR),
16776f_char2 = CAST(f_int1 AS CHAR),
16777f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16778WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16779SET AUTOCOMMIT= 0;
16780INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16781SELECT f_int1, f_int1, '', '', 'was inserted'
16782FROM t0_template source_tab
16783WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16784
16785# check transactions-1 success: 	1
16786COMMIT WORK;
16787
16788# check transactions-2 success: 	1
16789ROLLBACK WORK;
16790
16791# check transactions-3 success: 	1
16792DELETE FROM t1 WHERE f_charbig = 'was inserted';
16793COMMIT WORK;
16794ROLLBACK WORK;
16795
16796# check transactions-4 success: 	1
16797INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16798SELECT f_int1, f_int1, '', '', 'was inserted'
16799FROM t0_template source_tab
16800WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16801
16802# check transactions-5 success: 	1
16803ROLLBACK WORK;
16804
16805# check transactions-6 success: 	1
16806# INFO: Storage engine used for t1 seems to be transactional.
16807COMMIT;
16808
16809# check transactions-7 success: 	1
16810DELETE FROM t1 WHERE f_charbig = 'was inserted';
16811COMMIT WORK;
16812SET @@session.sql_mode = 'traditional';
16813Warnings:
16814Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16815SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16816INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16817SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16818'', '', 'was inserted' FROM t0_template
16819WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16820ERROR 22012: Division by 0
16821COMMIT;
16822
16823# check transactions-8 success: 	1
16824# INFO: Storage engine used for t1 seems to be able to revert
16825#       changes made by the failing statement.
16826SET @@session.sql_mode = '';
16827Warnings:
16828Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16829SET AUTOCOMMIT= 1;
16830DELETE FROM t1 WHERE f_charbig = 'was inserted';
16831COMMIT WORK;
16832UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16833
16834# check special-1 success: 	1
16835UPDATE t1 SET f_charbig = '';
16836
16837# check special-2 success: 	1
16838UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16839INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16840SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16841WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16842INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16843SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16844'just inserted' FROM t0_template
16845WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16846CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16847BEGIN
16848UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16849f_charbig = 'updated by trigger'
16850      WHERE f_int1 = new.f_int1;
16851END|
16852INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16853SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16854WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16855
16856# check trigger-1 success: 	1
16857DROP TRIGGER trg_1;
16858UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16859f_int2 = CAST(f_char1 AS SIGNED INT),
16860f_charbig = 'just inserted'
16861   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16862DELETE FROM t0_aux
16863WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16864INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16865SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16866'just inserted' FROM t0_template
16867WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16868CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16869BEGIN
16870UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16871f_charbig = 'updated by trigger'
16872      WHERE f_int1 = new.f_int1;
16873END|
16874INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16875SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16876WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16877
16878# check trigger-2 success: 	1
16879DROP TRIGGER trg_1;
16880UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16881f_int2 = CAST(f_char1 AS SIGNED INT),
16882f_charbig = 'just inserted'
16883   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16884DELETE FROM t0_aux
16885WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16886INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16887SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16888'just inserted' FROM t0_template
16889WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16890CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16891BEGIN
16892UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16893f_charbig = 'updated by trigger'
16894      WHERE f_int1 = new.f_int1;
16895END|
16896UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16897WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16898
16899# check trigger-3 success: 	1
16900DROP TRIGGER trg_1;
16901UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16902f_int2 = CAST(f_char1 AS SIGNED INT),
16903f_charbig = 'just inserted'
16904   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16905DELETE FROM t0_aux
16906WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16907INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16908SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16909'just inserted' FROM t0_template
16910WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16911CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16912BEGIN
16913UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16914f_charbig = 'updated by trigger'
16915      WHERE f_int1 = - old.f_int1;
16916END|
16917UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16918WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16919
16920# check trigger-4 success: 	1
16921DROP TRIGGER trg_1;
16922UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16923f_int2 = CAST(f_char1 AS SIGNED INT),
16924f_charbig = 'just inserted'
16925   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16926DELETE FROM t0_aux
16927WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16928INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16929SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16930'just inserted' FROM t0_template
16931WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16932CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16933BEGIN
16934UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16935f_charbig = 'updated by trigger'
16936      WHERE f_int1 = new.f_int1;
16937END|
16938UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16939WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16940
16941# check trigger-5 success: 	1
16942DROP TRIGGER trg_1;
16943UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16944f_int2 = CAST(f_char1 AS SIGNED INT),
16945f_charbig = 'just inserted'
16946   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16947DELETE FROM t0_aux
16948WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16949INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16950SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16951'just inserted' FROM t0_template
16952WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16953CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16954BEGIN
16955UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16956f_charbig = 'updated by trigger'
16957      WHERE f_int1 = - old.f_int1;
16958END|
16959UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16960WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16961
16962# check trigger-6 success: 	1
16963DROP TRIGGER trg_1;
16964UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16965f_int2 = CAST(f_char1 AS SIGNED INT),
16966f_charbig = 'just inserted'
16967   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16968DELETE FROM t0_aux
16969WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16970INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16971SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16972'just inserted' FROM t0_template
16973WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16974CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16975BEGIN
16976UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16977f_charbig = 'updated by trigger'
16978      WHERE f_int1 = - old.f_int1;
16979END|
16980DELETE FROM t0_aux
16981WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16982
16983# check trigger-7 success: 	1
16984DROP TRIGGER trg_1;
16985UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16986f_int2 = CAST(f_char1 AS SIGNED INT),
16987f_charbig = 'just inserted'
16988   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16989DELETE FROM t0_aux
16990WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16991INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16992SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16993'just inserted' FROM t0_template
16994WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16995CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16996BEGIN
16997UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16998f_charbig = 'updated by trigger'
16999      WHERE f_int1 = - old.f_int1;
17000END|
17001DELETE FROM t0_aux
17002WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17003
17004# check trigger-8 success: 	1
17005DROP TRIGGER trg_1;
17006UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17007f_int2 = CAST(f_char1 AS SIGNED INT),
17008f_charbig = 'just inserted'
17009   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17010DELETE FROM t0_aux
17011WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17012DELETE FROM t1
17013WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17014CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17015BEGIN
17016SET new.f_int1 = old.f_int1 + @max_row,
17017new.f_int2 = old.f_int2 - @max_row,
17018new.f_charbig = '####updated per update trigger####';
17019END|
17020UPDATE t1
17021SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17022f_charbig = '####updated per update statement itself####';
17023
17024# check trigger-9 success: 	1
17025DROP TRIGGER trg_2;
17026UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17027f_int2 = CAST(f_char1 AS SIGNED INT),
17028f_charbig = CONCAT('===',f_char1,'===');
17029CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17030BEGIN
17031SET new.f_int1 = new.f_int1 + @max_row,
17032new.f_int2 = new.f_int2 - @max_row,
17033new.f_charbig = '####updated per update trigger####';
17034END|
17035UPDATE t1
17036SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17037f_charbig = '####updated per update statement itself####';
17038
17039# check trigger-10 success: 	1
17040DROP TRIGGER trg_2;
17041UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17042f_int2 = CAST(f_char1 AS SIGNED INT),
17043f_charbig = CONCAT('===',f_char1,'===');
17044CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17045BEGIN
17046SET new.f_int1 = @my_max1 + @counter,
17047new.f_int2 = @my_min2 - @counter,
17048new.f_charbig = '####updated per insert trigger####';
17049SET @counter = @counter + 1;
17050END|
17051SET @counter = 1;
17052SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17053INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17054SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17055CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17056WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17057ORDER BY f_int1;
17058DROP TRIGGER trg_3;
17059
17060# check trigger-11 success: 	1
17061DELETE FROM t1
17062WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17063AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17064AND f_charbig = '####updated per insert trigger####';
17065CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17066BEGIN
17067SET new.f_int1 = @my_max1 + @counter,
17068new.f_int2 = @my_min2 - @counter,
17069new.f_charbig = '####updated per insert trigger####';
17070SET @counter = @counter + 1;
17071END|
17072SET @counter = 1;
17073SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17074INSERT INTO t1 (f_char1, f_char2, f_charbig)
17075SELECT CAST(f_int1 AS CHAR),
17076CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17077WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17078ORDER BY f_int1;
17079DROP TRIGGER trg_3;
17080
17081# check trigger-12 success: 	1
17082DELETE FROM t1
17083WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17084AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17085AND f_charbig = '####updated per insert trigger####';
17086ANALYZE  TABLE t1;
17087Table	Op	Msg_type	Msg_text
17088test.t1	analyze	status	OK
17089CHECK    TABLE t1 EXTENDED;
17090Table	Op	Msg_type	Msg_text
17091test.t1	check	status	OK
17092CHECKSUM TABLE t1 EXTENDED;
17093Table	Checksum
17094test.t1	<some_value>
17095OPTIMIZE TABLE t1;
17096Table	Op	Msg_type	Msg_text
17097test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
17098test.t1	optimize	status	OK
17099# check layout success:    1
17100REPAIR   TABLE t1 EXTENDED;
17101Table	Op	Msg_type	Msg_text
17102test.t1	repair	status	OK
17103# check layout success:    1
17104TRUNCATE t1;
17105
17106# check TRUNCATE success: 	1
17107# check layout success:    1
17108# End usability test (inc/partition_check.inc)
17109DROP TABLE t1;
17110CREATE TABLE t1 (
17111f_int1 INTEGER,
17112f_int2 INTEGER,
17113f_char1 CHAR(20),
17114f_char2 CHAR(20),
17115f_charbig VARCHAR(1000)
17116, UNIQUE INDEX uidx1 (f_int2,f_int1)
17117)
17118PARTITION BY LIST(MOD(f_int1,4))
17119(PARTITION part_3 VALUES IN (-3),
17120PARTITION part_2 VALUES IN (-2),
17121PARTITION part_1 VALUES IN (-1),
17122PARTITION part_N VALUES IN (NULL),
17123PARTITION part0 VALUES IN (0),
17124PARTITION part1 VALUES IN (1),
17125PARTITION part2 VALUES IN (2),
17126PARTITION part3 VALUES IN (3));
17127INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17128SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17129WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
17130ALTER TABLE t1 MODIFY f_int2 BIGINT;
17131INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17132SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17133WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
17134# Start usability test (inc/partition_check.inc)
17135create_command
17136SHOW CREATE TABLE t1;
17137Table	Create Table
17138t1	CREATE TABLE `t1` (
17139  `f_int1` int(11) DEFAULT NULL,
17140  `f_int2` bigint(20) DEFAULT NULL,
17141  `f_char1` char(20) DEFAULT NULL,
17142  `f_char2` char(20) DEFAULT NULL,
17143  `f_charbig` varchar(1000) DEFAULT NULL,
17144  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
17145) ENGINE=TokuDB DEFAULT CHARSET=latin1
17146/*!50100 PARTITION BY LIST (MOD(f_int1,4))
17147(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB,
17148 PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB,
17149 PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB,
17150 PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB,
17151 PARTITION part0 VALUES IN (0) ENGINE = TokuDB,
17152 PARTITION part1 VALUES IN (1) ENGINE = TokuDB,
17153 PARTITION part2 VALUES IN (2) ENGINE = TokuDB,
17154 PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */
17155
17156# check prerequisites-1 success:    1
17157# check COUNT(*) success:    1
17158# check MIN/MAX(f_int1) success:    1
17159# check MIN/MAX(f_int2) success:    1
17160INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17161SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17162CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17163WHERE f_int1 IN (2,3);
17164ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
17165# check prerequisites-3 success:    1
17166# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17167INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17168SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17169CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17170WHERE f_int1 IN (2,3);
17171DELETE FROM t1 WHERE f_charbig = 'delete me';
17172INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17173SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17174CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17175WHERE f_int1 IN (2,3);
17176DELETE FROM t1 WHERE f_charbig = 'delete me';
17177# check read via f_int1 success: 1
17178# check read via f_int2 success: 1
17179
17180# check multiple-1 success: 	1
17181DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17182
17183# check multiple-2 success: 	1
17184INSERT INTO t1 SELECT * FROM t0_template
17185WHERE MOD(f_int1,3) = 0;
17186
17187# check multiple-3 success: 	1
17188UPDATE t1 SET f_int1 = f_int1 + @max_row
17189WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17190AND @max_row_div2 + @max_row_div4;
17191
17192# check multiple-4 success: 	1
17193DELETE FROM t1
17194WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17195AND @max_row_div2 + @max_row_div4 + @max_row;
17196
17197# check multiple-5 success: 	1
17198SELECT COUNT(*) INTO @try_count FROM t0_template
17199WHERE MOD(f_int1,3) = 0
17200AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17201SELECT COUNT(*) INTO @clash_count
17202FROM t1 INNER JOIN t0_template USING(f_int1)
17203WHERE MOD(f_int1,3) = 0
17204AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17205SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17206INSERT INTO t1
17207SET f_int1 = @cur_value , f_int2 = @cur_value,
17208f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17209f_charbig = '#SINGLE#';
17210
17211# check single-1 success: 	1
17212SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17213INSERT INTO t1
17214SET f_int1 = @cur_value , f_int2 = @cur_value,
17215f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17216f_charbig = '#SINGLE#';
17217
17218# check single-2 success: 	1
17219SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17220SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17221UPDATE t1 SET f_int1 = @cur_value2
17222WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17223
17224# check single-3 success: 	1
17225SET @cur_value1= -1;
17226SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17227UPDATE t1 SET f_int1 = @cur_value1
17228WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17229
17230# check single-4 success: 	1
17231SELECT MAX(f_int1) INTO @cur_value FROM t1;
17232DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17233
17234# check single-5 success: 	1
17235DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17236
17237# check single-6 success: 	1
17238INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17239
17240# check single-7 success: 	1
17241DELETE FROM t1 WHERE f_charbig = '#2147483647##';
17242DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17243INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17244f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17245f_charbig = '#NULL#';
17246INSERT INTO t1
17247SET f_int1 = NULL , f_int2 = -@max_row,
17248f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17249f_charbig = '#NULL#';
17250# check null success:    1
17251
17252# check null-1 success: 	1
17253UPDATE t1 SET f_int1 = -@max_row
17254WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17255AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17256
17257# check null-2 success: 	1
17258UPDATE t1 SET f_int1 = NULL
17259WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17260AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17261
17262# check null-3 success: 	1
17263DELETE FROM t1
17264WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17265AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17266
17267# check null-4 success: 	1
17268DELETE FROM t1
17269WHERE f_int1 = 0 AND f_int2 = 0
17270AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17271AND f_charbig = '#NULL#';
17272INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17273SELECT f_int1, f_int1, '', '', 'was inserted'
17274   FROM t0_template source_tab
17275WHERE MOD(f_int1,3) = 0
17276AND f_int1 BETWEEN @max_row_div2 AND @max_row
17277ON DUPLICATE KEY
17278UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17279f_int2 = 2 * @max_row + source_tab.f_int1,
17280f_charbig = 'was updated';
17281
17282# check unique-1-a success: 	1
17283
17284# check unique-1-b success: 	1
17285DELETE FROM t1 WHERE f_charbig = 'was inserted';
17286UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17287f_int2 = CAST(f_char1 AS SIGNED INT),
17288f_charbig = CONCAT('===',f_char1,'===')
17289WHERE f_charbig = 'was updated';
17290REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17291SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17292   FROM t0_template source_tab
17293WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17294
17295# check replace success: 	1
17296DELETE FROM t1
17297WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17298DELETE FROM t1
17299WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17300f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17301UPDATE t1 SET f_int2 = f_int1,
17302f_char1 = CAST(f_int1 AS CHAR),
17303f_char2 = CAST(f_int1 AS CHAR),
17304f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17305WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17306SET AUTOCOMMIT= 0;
17307INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17308SELECT f_int1, f_int1, '', '', 'was inserted'
17309FROM t0_template source_tab
17310WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17311
17312# check transactions-1 success: 	1
17313COMMIT WORK;
17314
17315# check transactions-2 success: 	1
17316ROLLBACK WORK;
17317
17318# check transactions-3 success: 	1
17319DELETE FROM t1 WHERE f_charbig = 'was inserted';
17320COMMIT WORK;
17321ROLLBACK WORK;
17322
17323# check transactions-4 success: 	1
17324INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17325SELECT f_int1, f_int1, '', '', 'was inserted'
17326FROM t0_template source_tab
17327WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17328
17329# check transactions-5 success: 	1
17330ROLLBACK WORK;
17331
17332# check transactions-6 success: 	1
17333# INFO: Storage engine used for t1 seems to be transactional.
17334COMMIT;
17335
17336# check transactions-7 success: 	1
17337DELETE FROM t1 WHERE f_charbig = 'was inserted';
17338COMMIT WORK;
17339SET @@session.sql_mode = 'traditional';
17340Warnings:
17341Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17342SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17343INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17344SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17345'', '', 'was inserted' FROM t0_template
17346WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17347ERROR 22012: Division by 0
17348COMMIT;
17349
17350# check transactions-8 success: 	1
17351# INFO: Storage engine used for t1 seems to be able to revert
17352#       changes made by the failing statement.
17353SET @@session.sql_mode = '';
17354Warnings:
17355Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17356SET AUTOCOMMIT= 1;
17357DELETE FROM t1 WHERE f_charbig = 'was inserted';
17358COMMIT WORK;
17359UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17360
17361# check special-1 success: 	1
17362UPDATE t1 SET f_charbig = '';
17363
17364# check special-2 success: 	1
17365UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17366INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17367SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17368WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17369INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17370SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17371'just inserted' FROM t0_template
17372WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17373CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17374BEGIN
17375UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17376f_charbig = 'updated by trigger'
17377      WHERE f_int1 = new.f_int1;
17378END|
17379INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17380SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17381WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17382
17383# check trigger-1 success: 	1
17384DROP TRIGGER trg_1;
17385UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17386f_int2 = CAST(f_char1 AS SIGNED INT),
17387f_charbig = 'just inserted'
17388   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17389DELETE FROM t0_aux
17390WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17391INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17392SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17393'just inserted' FROM t0_template
17394WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17395CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17396BEGIN
17397UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17398f_charbig = 'updated by trigger'
17399      WHERE f_int1 = new.f_int1;
17400END|
17401INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17402SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17403WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17404
17405# check trigger-2 success: 	1
17406DROP TRIGGER trg_1;
17407UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17408f_int2 = CAST(f_char1 AS SIGNED INT),
17409f_charbig = 'just inserted'
17410   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17411DELETE FROM t0_aux
17412WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17413INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17414SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17415'just inserted' FROM t0_template
17416WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17417CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17418BEGIN
17419UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17420f_charbig = 'updated by trigger'
17421      WHERE f_int1 = new.f_int1;
17422END|
17423UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17424WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17425
17426# check trigger-3 success: 	1
17427DROP TRIGGER trg_1;
17428UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17429f_int2 = CAST(f_char1 AS SIGNED INT),
17430f_charbig = 'just inserted'
17431   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17432DELETE FROM t0_aux
17433WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17434INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17435SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17436'just inserted' FROM t0_template
17437WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17438CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17439BEGIN
17440UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17441f_charbig = 'updated by trigger'
17442      WHERE f_int1 = - old.f_int1;
17443END|
17444UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17445WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17446
17447# check trigger-4 success: 	1
17448DROP TRIGGER trg_1;
17449UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17450f_int2 = CAST(f_char1 AS SIGNED INT),
17451f_charbig = 'just inserted'
17452   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17453DELETE FROM t0_aux
17454WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17455INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17456SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17457'just inserted' FROM t0_template
17458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17459CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17460BEGIN
17461UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17462f_charbig = 'updated by trigger'
17463      WHERE f_int1 = new.f_int1;
17464END|
17465UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17466WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17467
17468# check trigger-5 success: 	1
17469DROP TRIGGER trg_1;
17470UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17471f_int2 = CAST(f_char1 AS SIGNED INT),
17472f_charbig = 'just inserted'
17473   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17474DELETE FROM t0_aux
17475WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17476INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17477SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17478'just inserted' FROM t0_template
17479WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17480CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17481BEGIN
17482UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17483f_charbig = 'updated by trigger'
17484      WHERE f_int1 = - old.f_int1;
17485END|
17486UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17487WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17488
17489# check trigger-6 success: 	1
17490DROP TRIGGER trg_1;
17491UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17492f_int2 = CAST(f_char1 AS SIGNED INT),
17493f_charbig = 'just inserted'
17494   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17495DELETE FROM t0_aux
17496WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17497INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17498SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17499'just inserted' FROM t0_template
17500WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17501CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17502BEGIN
17503UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17504f_charbig = 'updated by trigger'
17505      WHERE f_int1 = - old.f_int1;
17506END|
17507DELETE FROM t0_aux
17508WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17509
17510# check trigger-7 success: 	1
17511DROP TRIGGER trg_1;
17512UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17513f_int2 = CAST(f_char1 AS SIGNED INT),
17514f_charbig = 'just inserted'
17515   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17516DELETE FROM t0_aux
17517WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17518INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17519SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17520'just inserted' FROM t0_template
17521WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17522CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17523BEGIN
17524UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17525f_charbig = 'updated by trigger'
17526      WHERE f_int1 = - old.f_int1;
17527END|
17528DELETE FROM t0_aux
17529WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17530
17531# check trigger-8 success: 	1
17532DROP TRIGGER trg_1;
17533UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17534f_int2 = CAST(f_char1 AS SIGNED INT),
17535f_charbig = 'just inserted'
17536   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17537DELETE FROM t0_aux
17538WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17539DELETE FROM t1
17540WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17541CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17542BEGIN
17543SET new.f_int1 = old.f_int1 + @max_row,
17544new.f_int2 = old.f_int2 - @max_row,
17545new.f_charbig = '####updated per update trigger####';
17546END|
17547UPDATE t1
17548SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17549f_charbig = '####updated per update statement itself####';
17550
17551# check trigger-9 success: 	1
17552DROP TRIGGER trg_2;
17553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17554f_int2 = CAST(f_char1 AS SIGNED INT),
17555f_charbig = CONCAT('===',f_char1,'===');
17556CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17557BEGIN
17558SET new.f_int1 = new.f_int1 + @max_row,
17559new.f_int2 = new.f_int2 - @max_row,
17560new.f_charbig = '####updated per update trigger####';
17561END|
17562UPDATE t1
17563SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17564f_charbig = '####updated per update statement itself####';
17565
17566# check trigger-10 success: 	1
17567DROP TRIGGER trg_2;
17568UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17569f_int2 = CAST(f_char1 AS SIGNED INT),
17570f_charbig = CONCAT('===',f_char1,'===');
17571CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17572BEGIN
17573SET new.f_int1 = @my_max1 + @counter,
17574new.f_int2 = @my_min2 - @counter,
17575new.f_charbig = '####updated per insert trigger####';
17576SET @counter = @counter + 1;
17577END|
17578SET @counter = 1;
17579SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17580INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17581SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17582CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17583WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17584ORDER BY f_int1;
17585DROP TRIGGER trg_3;
17586
17587# check trigger-11 success: 	1
17588DELETE FROM t1
17589WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17590AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17591AND f_charbig = '####updated per insert trigger####';
17592CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17593BEGIN
17594SET new.f_int1 = @my_max1 + @counter,
17595new.f_int2 = @my_min2 - @counter,
17596new.f_charbig = '####updated per insert trigger####';
17597SET @counter = @counter + 1;
17598END|
17599SET @counter = 1;
17600SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17601INSERT INTO t1 (f_char1, f_char2, f_charbig)
17602SELECT CAST(f_int1 AS CHAR),
17603CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17604WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17605ORDER BY f_int1;
17606DROP TRIGGER trg_3;
17607
17608# check trigger-12 success: 	1
17609DELETE FROM t1
17610WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17611AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17612AND f_charbig = '####updated per insert trigger####';
17613ANALYZE  TABLE t1;
17614Table	Op	Msg_type	Msg_text
17615test.t1	analyze	status	OK
17616CHECK    TABLE t1 EXTENDED;
17617Table	Op	Msg_type	Msg_text
17618test.t1	check	status	OK
17619CHECKSUM TABLE t1 EXTENDED;
17620Table	Checksum
17621test.t1	<some_value>
17622OPTIMIZE TABLE t1;
17623Table	Op	Msg_type	Msg_text
17624test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
17625test.t1	optimize	status	OK
17626# check layout success:    1
17627REPAIR   TABLE t1 EXTENDED;
17628Table	Op	Msg_type	Msg_text
17629test.t1	repair	status	OK
17630# check layout success:    1
17631TRUNCATE t1;
17632
17633# check TRUNCATE success: 	1
17634# check layout success:    1
17635# End usability test (inc/partition_check.inc)
17636DROP TABLE t1;
17637CREATE TABLE t1 (
17638f_int1 INTEGER,
17639f_int2 INTEGER,
17640f_char1 CHAR(20),
17641f_char2 CHAR(20),
17642f_charbig VARCHAR(1000)
17643, UNIQUE INDEX uidx1 (f_int2,f_int1)
17644)
17645PARTITION BY RANGE(f_int1)
17646(PARTITION parta VALUES LESS THAN (0),
17647PARTITION partb VALUES LESS THAN (5),
17648PARTITION partc VALUES LESS THAN (10),
17649PARTITION partd VALUES LESS THAN (10 + 5),
17650PARTITION parte VALUES LESS THAN (20),
17651PARTITION partf VALUES LESS THAN (2147483646));
17652INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17653SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17654WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
17655ALTER TABLE t1 MODIFY f_int2 BIGINT;
17656INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17657SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17658WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
17659# Start usability test (inc/partition_check.inc)
17660create_command
17661SHOW CREATE TABLE t1;
17662Table	Create Table
17663t1	CREATE TABLE `t1` (
17664  `f_int1` int(11) DEFAULT NULL,
17665  `f_int2` bigint(20) DEFAULT NULL,
17666  `f_char1` char(20) DEFAULT NULL,
17667  `f_char2` char(20) DEFAULT NULL,
17668  `f_charbig` varchar(1000) DEFAULT NULL,
17669  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
17670) ENGINE=TokuDB DEFAULT CHARSET=latin1
17671/*!50100 PARTITION BY RANGE (f_int1)
17672(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
17673 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
17674 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
17675 PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB,
17676 PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB,
17677 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
17678
17679# check prerequisites-1 success:    1
17680# check COUNT(*) success:    1
17681# check MIN/MAX(f_int1) success:    1
17682# check MIN/MAX(f_int2) success:    1
17683INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17684SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17685CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17686WHERE f_int1 IN (2,3);
17687ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
17688# check prerequisites-3 success:    1
17689# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17690INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17691SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17692CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17693WHERE f_int1 IN (2,3);
17694DELETE FROM t1 WHERE f_charbig = 'delete me';
17695INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17696SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17697CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17698WHERE f_int1 IN (2,3);
17699DELETE FROM t1 WHERE f_charbig = 'delete me';
17700# check read via f_int1 success: 1
17701# check read via f_int2 success: 1
17702
17703# check multiple-1 success: 	1
17704DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17705
17706# check multiple-2 success: 	1
17707INSERT INTO t1 SELECT * FROM t0_template
17708WHERE MOD(f_int1,3) = 0;
17709
17710# check multiple-3 success: 	1
17711UPDATE t1 SET f_int1 = f_int1 + @max_row
17712WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17713AND @max_row_div2 + @max_row_div4;
17714
17715# check multiple-4 success: 	1
17716DELETE FROM t1
17717WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17718AND @max_row_div2 + @max_row_div4 + @max_row;
17719
17720# check multiple-5 success: 	1
17721SELECT COUNT(*) INTO @try_count FROM t0_template
17722WHERE MOD(f_int1,3) = 0
17723AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17724SELECT COUNT(*) INTO @clash_count
17725FROM t1 INNER JOIN t0_template USING(f_int1)
17726WHERE MOD(f_int1,3) = 0
17727AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17728SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17729INSERT INTO t1
17730SET f_int1 = @cur_value , f_int2 = @cur_value,
17731f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17732f_charbig = '#SINGLE#';
17733
17734# check single-1 success: 	1
17735SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17736INSERT INTO t1
17737SET f_int1 = @cur_value , f_int2 = @cur_value,
17738f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17739f_charbig = '#SINGLE#';
17740
17741# check single-2 success: 	1
17742SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17743SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17744UPDATE t1 SET f_int1 = @cur_value2
17745WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17746
17747# check single-3 success: 	1
17748SET @cur_value1= -1;
17749SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17750UPDATE t1 SET f_int1 = @cur_value1
17751WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17752
17753# check single-4 success: 	1
17754SELECT MAX(f_int1) INTO @cur_value FROM t1;
17755DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17756
17757# check single-5 success: 	1
17758DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17759
17760# check single-6 success: 	1
17761INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17762ERROR HY000: Table has no partition for value 2147483647
17763DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17764INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17765f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17766f_charbig = '#NULL#';
17767INSERT INTO t1
17768SET f_int1 = NULL , f_int2 = -@max_row,
17769f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17770f_charbig = '#NULL#';
17771# check null success:    1
17772
17773# check null-1 success: 	1
17774UPDATE t1 SET f_int1 = -@max_row
17775WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17776AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17777
17778# check null-2 success: 	1
17779UPDATE t1 SET f_int1 = NULL
17780WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17781AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17782
17783# check null-3 success: 	1
17784DELETE FROM t1
17785WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17786AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17787
17788# check null-4 success: 	1
17789DELETE FROM t1
17790WHERE f_int1 = 0 AND f_int2 = 0
17791AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17792AND f_charbig = '#NULL#';
17793INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17794SELECT f_int1, f_int1, '', '', 'was inserted'
17795   FROM t0_template source_tab
17796WHERE MOD(f_int1,3) = 0
17797AND f_int1 BETWEEN @max_row_div2 AND @max_row
17798ON DUPLICATE KEY
17799UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17800f_int2 = 2 * @max_row + source_tab.f_int1,
17801f_charbig = 'was updated';
17802
17803# check unique-1-a success: 	1
17804
17805# check unique-1-b success: 	1
17806DELETE FROM t1 WHERE f_charbig = 'was inserted';
17807UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17808f_int2 = CAST(f_char1 AS SIGNED INT),
17809f_charbig = CONCAT('===',f_char1,'===')
17810WHERE f_charbig = 'was updated';
17811REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17812SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17813   FROM t0_template source_tab
17814WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17815
17816# check replace success: 	1
17817DELETE FROM t1
17818WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17819DELETE FROM t1
17820WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17821f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17822UPDATE t1 SET f_int2 = f_int1,
17823f_char1 = CAST(f_int1 AS CHAR),
17824f_char2 = CAST(f_int1 AS CHAR),
17825f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17826WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17827SET AUTOCOMMIT= 0;
17828INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17829SELECT f_int1, f_int1, '', '', 'was inserted'
17830FROM t0_template source_tab
17831WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17832
17833# check transactions-1 success: 	1
17834COMMIT WORK;
17835
17836# check transactions-2 success: 	1
17837ROLLBACK WORK;
17838
17839# check transactions-3 success: 	1
17840DELETE FROM t1 WHERE f_charbig = 'was inserted';
17841COMMIT WORK;
17842ROLLBACK WORK;
17843
17844# check transactions-4 success: 	1
17845INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17846SELECT f_int1, f_int1, '', '', 'was inserted'
17847FROM t0_template source_tab
17848WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17849
17850# check transactions-5 success: 	1
17851ROLLBACK WORK;
17852
17853# check transactions-6 success: 	1
17854# INFO: Storage engine used for t1 seems to be transactional.
17855COMMIT;
17856
17857# check transactions-7 success: 	1
17858DELETE FROM t1 WHERE f_charbig = 'was inserted';
17859COMMIT WORK;
17860SET @@session.sql_mode = 'traditional';
17861Warnings:
17862Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17863SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17864INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17865SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17866'', '', 'was inserted' FROM t0_template
17867WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17868ERROR 22012: Division by 0
17869COMMIT;
17870
17871# check transactions-8 success: 	1
17872# INFO: Storage engine used for t1 seems to be able to revert
17873#       changes made by the failing statement.
17874SET @@session.sql_mode = '';
17875Warnings:
17876Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17877SET AUTOCOMMIT= 1;
17878DELETE FROM t1 WHERE f_charbig = 'was inserted';
17879COMMIT WORK;
17880UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17881
17882# check special-1 success: 	1
17883UPDATE t1 SET f_charbig = '';
17884
17885# check special-2 success: 	1
17886UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17887INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17888SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17889WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17890INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17891SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17892'just inserted' FROM t0_template
17893WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17894CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17895BEGIN
17896UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17897f_charbig = 'updated by trigger'
17898      WHERE f_int1 = new.f_int1;
17899END|
17900INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17901SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17902WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17903
17904# check trigger-1 success: 	1
17905DROP TRIGGER trg_1;
17906UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17907f_int2 = CAST(f_char1 AS SIGNED INT),
17908f_charbig = 'just inserted'
17909   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17910DELETE FROM t0_aux
17911WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17912INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17913SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17914'just inserted' FROM t0_template
17915WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17916CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17917BEGIN
17918UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17919f_charbig = 'updated by trigger'
17920      WHERE f_int1 = new.f_int1;
17921END|
17922INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17923SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17924WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17925
17926# check trigger-2 success: 	1
17927DROP TRIGGER trg_1;
17928UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17929f_int2 = CAST(f_char1 AS SIGNED INT),
17930f_charbig = 'just inserted'
17931   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17932DELETE FROM t0_aux
17933WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17934INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17935SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17936'just inserted' FROM t0_template
17937WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17938CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17939BEGIN
17940UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17941f_charbig = 'updated by trigger'
17942      WHERE f_int1 = new.f_int1;
17943END|
17944UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17945WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17946
17947# check trigger-3 success: 	1
17948DROP TRIGGER trg_1;
17949UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17950f_int2 = CAST(f_char1 AS SIGNED INT),
17951f_charbig = 'just inserted'
17952   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17953DELETE FROM t0_aux
17954WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17955INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17956SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17957'just inserted' FROM t0_template
17958WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17959CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17960BEGIN
17961UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17962f_charbig = 'updated by trigger'
17963      WHERE f_int1 = - old.f_int1;
17964END|
17965UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17966WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17967
17968# check trigger-4 success: 	1
17969DROP TRIGGER trg_1;
17970UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17971f_int2 = CAST(f_char1 AS SIGNED INT),
17972f_charbig = 'just inserted'
17973   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17974DELETE FROM t0_aux
17975WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17976INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17977SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17978'just inserted' FROM t0_template
17979WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17980CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17981BEGIN
17982UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17983f_charbig = 'updated by trigger'
17984      WHERE f_int1 = new.f_int1;
17985END|
17986UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17987WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17988
17989# check trigger-5 success: 	1
17990DROP TRIGGER trg_1;
17991UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17992f_int2 = CAST(f_char1 AS SIGNED INT),
17993f_charbig = 'just inserted'
17994   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17995DELETE FROM t0_aux
17996WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17997INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17998SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17999'just inserted' FROM t0_template
18000WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18001CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18002BEGIN
18003UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18004f_charbig = 'updated by trigger'
18005      WHERE f_int1 = - old.f_int1;
18006END|
18007UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18008WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18009
18010# check trigger-6 success: 	1
18011DROP TRIGGER trg_1;
18012UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18013f_int2 = CAST(f_char1 AS SIGNED INT),
18014f_charbig = 'just inserted'
18015   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18016DELETE FROM t0_aux
18017WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18018INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18019SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18020'just inserted' FROM t0_template
18021WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18022CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18023BEGIN
18024UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18025f_charbig = 'updated by trigger'
18026      WHERE f_int1 = - old.f_int1;
18027END|
18028DELETE FROM t0_aux
18029WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18030
18031# check trigger-7 success: 	1
18032DROP TRIGGER trg_1;
18033UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18034f_int2 = CAST(f_char1 AS SIGNED INT),
18035f_charbig = 'just inserted'
18036   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18037DELETE FROM t0_aux
18038WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18039INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18040SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18041'just inserted' FROM t0_template
18042WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18043CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18044BEGIN
18045UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18046f_charbig = 'updated by trigger'
18047      WHERE f_int1 = - old.f_int1;
18048END|
18049DELETE FROM t0_aux
18050WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18051
18052# check trigger-8 success: 	1
18053DROP TRIGGER trg_1;
18054UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18055f_int2 = CAST(f_char1 AS SIGNED INT),
18056f_charbig = 'just inserted'
18057   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18058DELETE FROM t0_aux
18059WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18060DELETE FROM t1
18061WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18062CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18063BEGIN
18064SET new.f_int1 = old.f_int1 + @max_row,
18065new.f_int2 = old.f_int2 - @max_row,
18066new.f_charbig = '####updated per update trigger####';
18067END|
18068UPDATE t1
18069SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18070f_charbig = '####updated per update statement itself####';
18071
18072# check trigger-9 success: 	1
18073DROP TRIGGER trg_2;
18074UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18075f_int2 = CAST(f_char1 AS SIGNED INT),
18076f_charbig = CONCAT('===',f_char1,'===');
18077CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18078BEGIN
18079SET new.f_int1 = new.f_int1 + @max_row,
18080new.f_int2 = new.f_int2 - @max_row,
18081new.f_charbig = '####updated per update trigger####';
18082END|
18083UPDATE t1
18084SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18085f_charbig = '####updated per update statement itself####';
18086
18087# check trigger-10 success: 	1
18088DROP TRIGGER trg_2;
18089UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18090f_int2 = CAST(f_char1 AS SIGNED INT),
18091f_charbig = CONCAT('===',f_char1,'===');
18092CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18093BEGIN
18094SET new.f_int1 = @my_max1 + @counter,
18095new.f_int2 = @my_min2 - @counter,
18096new.f_charbig = '####updated per insert trigger####';
18097SET @counter = @counter + 1;
18098END|
18099SET @counter = 1;
18100SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18101INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18102SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18103CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18104WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18105ORDER BY f_int1;
18106DROP TRIGGER trg_3;
18107
18108# check trigger-11 success: 	1
18109DELETE FROM t1
18110WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18111AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18112AND f_charbig = '####updated per insert trigger####';
18113CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18114BEGIN
18115SET new.f_int1 = @my_max1 + @counter,
18116new.f_int2 = @my_min2 - @counter,
18117new.f_charbig = '####updated per insert trigger####';
18118SET @counter = @counter + 1;
18119END|
18120SET @counter = 1;
18121SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18122INSERT INTO t1 (f_char1, f_char2, f_charbig)
18123SELECT CAST(f_int1 AS CHAR),
18124CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18125WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18126ORDER BY f_int1;
18127DROP TRIGGER trg_3;
18128
18129# check trigger-12 success: 	1
18130DELETE FROM t1
18131WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18132AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18133AND f_charbig = '####updated per insert trigger####';
18134ANALYZE  TABLE t1;
18135Table	Op	Msg_type	Msg_text
18136test.t1	analyze	status	OK
18137CHECK    TABLE t1 EXTENDED;
18138Table	Op	Msg_type	Msg_text
18139test.t1	check	status	OK
18140CHECKSUM TABLE t1 EXTENDED;
18141Table	Checksum
18142test.t1	<some_value>
18143OPTIMIZE TABLE t1;
18144Table	Op	Msg_type	Msg_text
18145test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
18146test.t1	optimize	status	OK
18147# check layout success:    1
18148REPAIR   TABLE t1 EXTENDED;
18149Table	Op	Msg_type	Msg_text
18150test.t1	repair	status	OK
18151# check layout success:    1
18152TRUNCATE t1;
18153
18154# check TRUNCATE success: 	1
18155# check layout success:    1
18156# End usability test (inc/partition_check.inc)
18157DROP TABLE t1;
18158CREATE TABLE t1 (
18159f_int1 INTEGER,
18160f_int2 INTEGER,
18161f_char1 CHAR(20),
18162f_char2 CHAR(20),
18163f_charbig VARCHAR(1000)
18164, UNIQUE INDEX uidx1 (f_int2,f_int1)
18165)
18166PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
18167(PARTITION parta VALUES LESS THAN (0),
18168PARTITION partb VALUES LESS THAN (5),
18169PARTITION partc VALUES LESS THAN (10),
18170PARTITION partd VALUES LESS THAN (2147483646));
18171INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18172SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18173WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
18174ALTER TABLE t1 MODIFY f_int2 BIGINT;
18175INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18176SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18177WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
18178# Start usability test (inc/partition_check.inc)
18179create_command
18180SHOW CREATE TABLE t1;
18181Table	Create Table
18182t1	CREATE TABLE `t1` (
18183  `f_int1` int(11) DEFAULT NULL,
18184  `f_int2` bigint(20) DEFAULT NULL,
18185  `f_char1` char(20) DEFAULT NULL,
18186  `f_char2` char(20) DEFAULT NULL,
18187  `f_charbig` varchar(1000) DEFAULT NULL,
18188  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
18189) ENGINE=TokuDB DEFAULT CHARSET=latin1
18190/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
18191SUBPARTITION BY HASH (f_int1)
18192SUBPARTITIONS 2
18193(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB,
18194 PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB,
18195 PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB,
18196 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */
18197
18198# check prerequisites-1 success:    1
18199# check COUNT(*) success:    1
18200# check MIN/MAX(f_int1) success:    1
18201# check MIN/MAX(f_int2) success:    1
18202INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18203SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18204CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18205WHERE f_int1 IN (2,3);
18206ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
18207# check prerequisites-3 success:    1
18208# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18209INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18210SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18211CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18212WHERE f_int1 IN (2,3);
18213DELETE FROM t1 WHERE f_charbig = 'delete me';
18214INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18215SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18216CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18217WHERE f_int1 IN (2,3);
18218DELETE FROM t1 WHERE f_charbig = 'delete me';
18219# check read via f_int1 success: 1
18220# check read via f_int2 success: 1
18221
18222# check multiple-1 success: 	1
18223DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18224
18225# check multiple-2 success: 	1
18226INSERT INTO t1 SELECT * FROM t0_template
18227WHERE MOD(f_int1,3) = 0;
18228
18229# check multiple-3 success: 	1
18230UPDATE t1 SET f_int1 = f_int1 + @max_row
18231WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18232AND @max_row_div2 + @max_row_div4;
18233
18234# check multiple-4 success: 	1
18235DELETE FROM t1
18236WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18237AND @max_row_div2 + @max_row_div4 + @max_row;
18238
18239# check multiple-5 success: 	1
18240SELECT COUNT(*) INTO @try_count FROM t0_template
18241WHERE MOD(f_int1,3) = 0
18242AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18243SELECT COUNT(*) INTO @clash_count
18244FROM t1 INNER JOIN t0_template USING(f_int1)
18245WHERE MOD(f_int1,3) = 0
18246AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18247SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18248INSERT INTO t1
18249SET f_int1 = @cur_value , f_int2 = @cur_value,
18250f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18251f_charbig = '#SINGLE#';
18252
18253# check single-1 success: 	1
18254SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18255INSERT INTO t1
18256SET f_int1 = @cur_value , f_int2 = @cur_value,
18257f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18258f_charbig = '#SINGLE#';
18259
18260# check single-2 success: 	1
18261SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18262SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18263UPDATE t1 SET f_int1 = @cur_value2
18264WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18265
18266# check single-3 success: 	1
18267SET @cur_value1= -1;
18268SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18269UPDATE t1 SET f_int1 = @cur_value1
18270WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18271
18272# check single-4 success: 	1
18273SELECT MAX(f_int1) INTO @cur_value FROM t1;
18274DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18275
18276# check single-5 success: 	1
18277DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18278
18279# check single-6 success: 	1
18280INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18281
18282# check single-7 success: 	1
18283DELETE FROM t1 WHERE f_charbig = '#2147483647##';
18284DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18285INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18286f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18287f_charbig = '#NULL#';
18288INSERT INTO t1
18289SET f_int1 = NULL , f_int2 = -@max_row,
18290f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18291f_charbig = '#NULL#';
18292# check null success:    1
18293
18294# check null-1 success: 	1
18295UPDATE t1 SET f_int1 = -@max_row
18296WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18297AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18298
18299# check null-2 success: 	1
18300UPDATE t1 SET f_int1 = NULL
18301WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18302AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18303
18304# check null-3 success: 	1
18305DELETE FROM t1
18306WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18307AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18308
18309# check null-4 success: 	1
18310DELETE FROM t1
18311WHERE f_int1 = 0 AND f_int2 = 0
18312AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18313AND f_charbig = '#NULL#';
18314INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18315SELECT f_int1, f_int1, '', '', 'was inserted'
18316   FROM t0_template source_tab
18317WHERE MOD(f_int1,3) = 0
18318AND f_int1 BETWEEN @max_row_div2 AND @max_row
18319ON DUPLICATE KEY
18320UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18321f_int2 = 2 * @max_row + source_tab.f_int1,
18322f_charbig = 'was updated';
18323
18324# check unique-1-a success: 	1
18325
18326# check unique-1-b success: 	1
18327DELETE FROM t1 WHERE f_charbig = 'was inserted';
18328UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18329f_int2 = CAST(f_char1 AS SIGNED INT),
18330f_charbig = CONCAT('===',f_char1,'===')
18331WHERE f_charbig = 'was updated';
18332REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18333SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18334   FROM t0_template source_tab
18335WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18336
18337# check replace success: 	1
18338DELETE FROM t1
18339WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18340DELETE FROM t1
18341WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18342f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18343UPDATE t1 SET f_int2 = f_int1,
18344f_char1 = CAST(f_int1 AS CHAR),
18345f_char2 = CAST(f_int1 AS CHAR),
18346f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18347WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18348SET AUTOCOMMIT= 0;
18349INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18350SELECT f_int1, f_int1, '', '', 'was inserted'
18351FROM t0_template source_tab
18352WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18353
18354# check transactions-1 success: 	1
18355COMMIT WORK;
18356
18357# check transactions-2 success: 	1
18358ROLLBACK WORK;
18359
18360# check transactions-3 success: 	1
18361DELETE FROM t1 WHERE f_charbig = 'was inserted';
18362COMMIT WORK;
18363ROLLBACK WORK;
18364
18365# check transactions-4 success: 	1
18366INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18367SELECT f_int1, f_int1, '', '', 'was inserted'
18368FROM t0_template source_tab
18369WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18370
18371# check transactions-5 success: 	1
18372ROLLBACK WORK;
18373
18374# check transactions-6 success: 	1
18375# INFO: Storage engine used for t1 seems to be transactional.
18376COMMIT;
18377
18378# check transactions-7 success: 	1
18379DELETE FROM t1 WHERE f_charbig = 'was inserted';
18380COMMIT WORK;
18381SET @@session.sql_mode = 'traditional';
18382Warnings:
18383Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18384SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18385INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18386SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18387'', '', 'was inserted' FROM t0_template
18388WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18389ERROR 22012: Division by 0
18390COMMIT;
18391
18392# check transactions-8 success: 	1
18393# INFO: Storage engine used for t1 seems to be able to revert
18394#       changes made by the failing statement.
18395SET @@session.sql_mode = '';
18396Warnings:
18397Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18398SET AUTOCOMMIT= 1;
18399DELETE FROM t1 WHERE f_charbig = 'was inserted';
18400COMMIT WORK;
18401UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18402
18403# check special-1 success: 	1
18404UPDATE t1 SET f_charbig = '';
18405
18406# check special-2 success: 	1
18407UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18408INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18409SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18410WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18411INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18412SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18413'just inserted' FROM t0_template
18414WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18415CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18416BEGIN
18417UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18418f_charbig = 'updated by trigger'
18419      WHERE f_int1 = new.f_int1;
18420END|
18421INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18422SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18424
18425# check trigger-1 success: 	1
18426DROP TRIGGER trg_1;
18427UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18428f_int2 = CAST(f_char1 AS SIGNED INT),
18429f_charbig = 'just inserted'
18430   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18431DELETE FROM t0_aux
18432WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18433INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18434SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18435'just inserted' FROM t0_template
18436WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18437CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18438BEGIN
18439UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18440f_charbig = 'updated by trigger'
18441      WHERE f_int1 = new.f_int1;
18442END|
18443INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18444SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18445WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18446
18447# check trigger-2 success: 	1
18448DROP TRIGGER trg_1;
18449UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18450f_int2 = CAST(f_char1 AS SIGNED INT),
18451f_charbig = 'just inserted'
18452   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18453DELETE FROM t0_aux
18454WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18455INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18456SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18457'just inserted' FROM t0_template
18458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18459CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18460BEGIN
18461UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18462f_charbig = 'updated by trigger'
18463      WHERE f_int1 = new.f_int1;
18464END|
18465UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18466WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18467
18468# check trigger-3 success: 	1
18469DROP TRIGGER trg_1;
18470UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18471f_int2 = CAST(f_char1 AS SIGNED INT),
18472f_charbig = 'just inserted'
18473   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18474DELETE FROM t0_aux
18475WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18476INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18477SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18478'just inserted' FROM t0_template
18479WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18480CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18481BEGIN
18482UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18483f_charbig = 'updated by trigger'
18484      WHERE f_int1 = - old.f_int1;
18485END|
18486UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18487WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18488
18489# check trigger-4 success: 	1
18490DROP TRIGGER trg_1;
18491UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18492f_int2 = CAST(f_char1 AS SIGNED INT),
18493f_charbig = 'just inserted'
18494   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18495DELETE FROM t0_aux
18496WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18497INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18498SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18499'just inserted' FROM t0_template
18500WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18501CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18502BEGIN
18503UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18504f_charbig = 'updated by trigger'
18505      WHERE f_int1 = new.f_int1;
18506END|
18507UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18508WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18509
18510# check trigger-5 success: 	1
18511DROP TRIGGER trg_1;
18512UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18513f_int2 = CAST(f_char1 AS SIGNED INT),
18514f_charbig = 'just inserted'
18515   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18516DELETE FROM t0_aux
18517WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18518INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18519SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18520'just inserted' FROM t0_template
18521WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18522CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18523BEGIN
18524UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18525f_charbig = 'updated by trigger'
18526      WHERE f_int1 = - old.f_int1;
18527END|
18528UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18529WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18530
18531# check trigger-6 success: 	1
18532DROP TRIGGER trg_1;
18533UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18534f_int2 = CAST(f_char1 AS SIGNED INT),
18535f_charbig = 'just inserted'
18536   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18537DELETE FROM t0_aux
18538WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18539INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18540SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18541'just inserted' FROM t0_template
18542WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18543CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18544BEGIN
18545UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18546f_charbig = 'updated by trigger'
18547      WHERE f_int1 = - old.f_int1;
18548END|
18549DELETE FROM t0_aux
18550WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18551
18552# check trigger-7 success: 	1
18553DROP TRIGGER trg_1;
18554UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18555f_int2 = CAST(f_char1 AS SIGNED INT),
18556f_charbig = 'just inserted'
18557   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18558DELETE FROM t0_aux
18559WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18560INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18561SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18562'just inserted' FROM t0_template
18563WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18564CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18565BEGIN
18566UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18567f_charbig = 'updated by trigger'
18568      WHERE f_int1 = - old.f_int1;
18569END|
18570DELETE FROM t0_aux
18571WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18572
18573# check trigger-8 success: 	1
18574DROP TRIGGER trg_1;
18575UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18576f_int2 = CAST(f_char1 AS SIGNED INT),
18577f_charbig = 'just inserted'
18578   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18579DELETE FROM t0_aux
18580WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18581DELETE FROM t1
18582WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18583CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18584BEGIN
18585SET new.f_int1 = old.f_int1 + @max_row,
18586new.f_int2 = old.f_int2 - @max_row,
18587new.f_charbig = '####updated per update trigger####';
18588END|
18589UPDATE t1
18590SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18591f_charbig = '####updated per update statement itself####';
18592
18593# check trigger-9 success: 	1
18594DROP TRIGGER trg_2;
18595UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18596f_int2 = CAST(f_char1 AS SIGNED INT),
18597f_charbig = CONCAT('===',f_char1,'===');
18598CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18599BEGIN
18600SET new.f_int1 = new.f_int1 + @max_row,
18601new.f_int2 = new.f_int2 - @max_row,
18602new.f_charbig = '####updated per update trigger####';
18603END|
18604UPDATE t1
18605SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18606f_charbig = '####updated per update statement itself####';
18607
18608# check trigger-10 success: 	1
18609DROP TRIGGER trg_2;
18610UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18611f_int2 = CAST(f_char1 AS SIGNED INT),
18612f_charbig = CONCAT('===',f_char1,'===');
18613CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18614BEGIN
18615SET new.f_int1 = @my_max1 + @counter,
18616new.f_int2 = @my_min2 - @counter,
18617new.f_charbig = '####updated per insert trigger####';
18618SET @counter = @counter + 1;
18619END|
18620SET @counter = 1;
18621SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18622INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18623SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18624CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18625WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18626ORDER BY f_int1;
18627DROP TRIGGER trg_3;
18628
18629# check trigger-11 success: 	1
18630DELETE FROM t1
18631WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18632AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18633AND f_charbig = '####updated per insert trigger####';
18634CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18635BEGIN
18636SET new.f_int1 = @my_max1 + @counter,
18637new.f_int2 = @my_min2 - @counter,
18638new.f_charbig = '####updated per insert trigger####';
18639SET @counter = @counter + 1;
18640END|
18641SET @counter = 1;
18642SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18643INSERT INTO t1 (f_char1, f_char2, f_charbig)
18644SELECT CAST(f_int1 AS CHAR),
18645CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18646WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18647ORDER BY f_int1;
18648DROP TRIGGER trg_3;
18649
18650# check trigger-12 success: 	1
18651DELETE FROM t1
18652WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18653AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18654AND f_charbig = '####updated per insert trigger####';
18655ANALYZE  TABLE t1;
18656Table	Op	Msg_type	Msg_text
18657test.t1	analyze	status	OK
18658CHECK    TABLE t1 EXTENDED;
18659Table	Op	Msg_type	Msg_text
18660test.t1	check	status	OK
18661CHECKSUM TABLE t1 EXTENDED;
18662Table	Checksum
18663test.t1	<some_value>
18664OPTIMIZE TABLE t1;
18665Table	Op	Msg_type	Msg_text
18666test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
18667test.t1	optimize	status	OK
18668# check layout success:    1
18669REPAIR   TABLE t1 EXTENDED;
18670Table	Op	Msg_type	Msg_text
18671test.t1	repair	status	OK
18672# check layout success:    1
18673TRUNCATE t1;
18674
18675# check TRUNCATE success: 	1
18676# check layout success:    1
18677# End usability test (inc/partition_check.inc)
18678DROP TABLE t1;
18679CREATE TABLE t1 (
18680f_int1 INTEGER,
18681f_int2 INTEGER,
18682f_char1 CHAR(20),
18683f_char2 CHAR(20),
18684f_charbig VARCHAR(1000)
18685, UNIQUE INDEX uidx1 (f_int2,f_int1)
18686)
18687PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
18688(PARTITION part1 VALUES LESS THAN (0)
18689(SUBPARTITION subpart11, SUBPARTITION subpart12),
18690PARTITION part2 VALUES LESS THAN (5)
18691(SUBPARTITION subpart21, SUBPARTITION subpart22),
18692PARTITION part3 VALUES LESS THAN (10)
18693(SUBPARTITION subpart31, SUBPARTITION subpart32),
18694PARTITION part4 VALUES LESS THAN (2147483646)
18695(SUBPARTITION subpart41, SUBPARTITION subpart42));
18696INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18697SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18698WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
18699ALTER TABLE t1 MODIFY f_int2 BIGINT;
18700INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18701SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18702WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
18703# Start usability test (inc/partition_check.inc)
18704create_command
18705SHOW CREATE TABLE t1;
18706Table	Create Table
18707t1	CREATE TABLE `t1` (
18708  `f_int1` int(11) DEFAULT NULL,
18709  `f_int2` bigint(20) DEFAULT NULL,
18710  `f_char1` char(20) DEFAULT NULL,
18711  `f_char2` char(20) DEFAULT NULL,
18712  `f_charbig` varchar(1000) DEFAULT NULL,
18713  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
18714) ENGINE=TokuDB DEFAULT CHARSET=latin1
18715/*!50100 PARTITION BY RANGE (f_int1)
18716SUBPARTITION BY KEY (f_int1)
18717(PARTITION part1 VALUES LESS THAN (0)
18718 (SUBPARTITION subpart11 ENGINE = TokuDB,
18719  SUBPARTITION subpart12 ENGINE = TokuDB),
18720 PARTITION part2 VALUES LESS THAN (5)
18721 (SUBPARTITION subpart21 ENGINE = TokuDB,
18722  SUBPARTITION subpart22 ENGINE = TokuDB),
18723 PARTITION part3 VALUES LESS THAN (10)
18724 (SUBPARTITION subpart31 ENGINE = TokuDB,
18725  SUBPARTITION subpart32 ENGINE = TokuDB),
18726 PARTITION part4 VALUES LESS THAN (2147483646)
18727 (SUBPARTITION subpart41 ENGINE = TokuDB,
18728  SUBPARTITION subpart42 ENGINE = TokuDB)) */
18729
18730# check prerequisites-1 success:    1
18731# check COUNT(*) success:    1
18732# check MIN/MAX(f_int1) success:    1
18733# check MIN/MAX(f_int2) success:    1
18734INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18735SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18736CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18737WHERE f_int1 IN (2,3);
18738ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
18739# check prerequisites-3 success:    1
18740# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18741INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18742SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18743CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18744WHERE f_int1 IN (2,3);
18745DELETE FROM t1 WHERE f_charbig = 'delete me';
18746INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18747SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18748CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18749WHERE f_int1 IN (2,3);
18750DELETE FROM t1 WHERE f_charbig = 'delete me';
18751# check read via f_int1 success: 1
18752# check read via f_int2 success: 1
18753
18754# check multiple-1 success: 	1
18755DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18756
18757# check multiple-2 success: 	1
18758INSERT INTO t1 SELECT * FROM t0_template
18759WHERE MOD(f_int1,3) = 0;
18760
18761# check multiple-3 success: 	1
18762UPDATE t1 SET f_int1 = f_int1 + @max_row
18763WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18764AND @max_row_div2 + @max_row_div4;
18765
18766# check multiple-4 success: 	1
18767DELETE FROM t1
18768WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18769AND @max_row_div2 + @max_row_div4 + @max_row;
18770
18771# check multiple-5 success: 	1
18772SELECT COUNT(*) INTO @try_count FROM t0_template
18773WHERE MOD(f_int1,3) = 0
18774AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18775SELECT COUNT(*) INTO @clash_count
18776FROM t1 INNER JOIN t0_template USING(f_int1)
18777WHERE MOD(f_int1,3) = 0
18778AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18779SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18780INSERT INTO t1
18781SET f_int1 = @cur_value , f_int2 = @cur_value,
18782f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18783f_charbig = '#SINGLE#';
18784
18785# check single-1 success: 	1
18786SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18787INSERT INTO t1
18788SET f_int1 = @cur_value , f_int2 = @cur_value,
18789f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18790f_charbig = '#SINGLE#';
18791
18792# check single-2 success: 	1
18793SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18794SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18795UPDATE t1 SET f_int1 = @cur_value2
18796WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18797
18798# check single-3 success: 	1
18799SET @cur_value1= -1;
18800SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18801UPDATE t1 SET f_int1 = @cur_value1
18802WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18803
18804# check single-4 success: 	1
18805SELECT MAX(f_int1) INTO @cur_value FROM t1;
18806DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18807
18808# check single-5 success: 	1
18809DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18810
18811# check single-6 success: 	1
18812INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18813ERROR HY000: Table has no partition for value 2147483647
18814DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18815INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18816f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18817f_charbig = '#NULL#';
18818INSERT INTO t1
18819SET f_int1 = NULL , f_int2 = -@max_row,
18820f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18821f_charbig = '#NULL#';
18822# check null success:    1
18823
18824# check null-1 success: 	1
18825UPDATE t1 SET f_int1 = -@max_row
18826WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18827AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18828
18829# check null-2 success: 	1
18830UPDATE t1 SET f_int1 = NULL
18831WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18832AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18833
18834# check null-3 success: 	1
18835DELETE FROM t1
18836WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18837AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18838
18839# check null-4 success: 	1
18840DELETE FROM t1
18841WHERE f_int1 = 0 AND f_int2 = 0
18842AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18843AND f_charbig = '#NULL#';
18844INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18845SELECT f_int1, f_int1, '', '', 'was inserted'
18846   FROM t0_template source_tab
18847WHERE MOD(f_int1,3) = 0
18848AND f_int1 BETWEEN @max_row_div2 AND @max_row
18849ON DUPLICATE KEY
18850UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18851f_int2 = 2 * @max_row + source_tab.f_int1,
18852f_charbig = 'was updated';
18853
18854# check unique-1-a success: 	1
18855
18856# check unique-1-b success: 	1
18857DELETE FROM t1 WHERE f_charbig = 'was inserted';
18858UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18859f_int2 = CAST(f_char1 AS SIGNED INT),
18860f_charbig = CONCAT('===',f_char1,'===')
18861WHERE f_charbig = 'was updated';
18862REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18863SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18864   FROM t0_template source_tab
18865WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18866
18867# check replace success: 	1
18868DELETE FROM t1
18869WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18870DELETE FROM t1
18871WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18872f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18873UPDATE t1 SET f_int2 = f_int1,
18874f_char1 = CAST(f_int1 AS CHAR),
18875f_char2 = CAST(f_int1 AS CHAR),
18876f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18877WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18878SET AUTOCOMMIT= 0;
18879INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18880SELECT f_int1, f_int1, '', '', 'was inserted'
18881FROM t0_template source_tab
18882WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18883
18884# check transactions-1 success: 	1
18885COMMIT WORK;
18886
18887# check transactions-2 success: 	1
18888ROLLBACK WORK;
18889
18890# check transactions-3 success: 	1
18891DELETE FROM t1 WHERE f_charbig = 'was inserted';
18892COMMIT WORK;
18893ROLLBACK WORK;
18894
18895# check transactions-4 success: 	1
18896INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18897SELECT f_int1, f_int1, '', '', 'was inserted'
18898FROM t0_template source_tab
18899WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18900
18901# check transactions-5 success: 	1
18902ROLLBACK WORK;
18903
18904# check transactions-6 success: 	1
18905# INFO: Storage engine used for t1 seems to be transactional.
18906COMMIT;
18907
18908# check transactions-7 success: 	1
18909DELETE FROM t1 WHERE f_charbig = 'was inserted';
18910COMMIT WORK;
18911SET @@session.sql_mode = 'traditional';
18912Warnings:
18913Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18914SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18915INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18916SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18917'', '', 'was inserted' FROM t0_template
18918WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18919ERROR 22012: Division by 0
18920COMMIT;
18921
18922# check transactions-8 success: 	1
18923# INFO: Storage engine used for t1 seems to be able to revert
18924#       changes made by the failing statement.
18925SET @@session.sql_mode = '';
18926Warnings:
18927Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18928SET AUTOCOMMIT= 1;
18929DELETE FROM t1 WHERE f_charbig = 'was inserted';
18930COMMIT WORK;
18931UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18932
18933# check special-1 success: 	1
18934UPDATE t1 SET f_charbig = '';
18935
18936# check special-2 success: 	1
18937UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18938INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18939SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18940WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18941INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18942SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18943'just inserted' FROM t0_template
18944WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18945CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18946BEGIN
18947UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18948f_charbig = 'updated by trigger'
18949      WHERE f_int1 = new.f_int1;
18950END|
18951INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18952SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18953WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18954
18955# check trigger-1 success: 	1
18956DROP TRIGGER trg_1;
18957UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18958f_int2 = CAST(f_char1 AS SIGNED INT),
18959f_charbig = 'just inserted'
18960   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18961DELETE FROM t0_aux
18962WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18963INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18964SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18965'just inserted' FROM t0_template
18966WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18967CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18968BEGIN
18969UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18970f_charbig = 'updated by trigger'
18971      WHERE f_int1 = new.f_int1;
18972END|
18973INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18974SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18975WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18976
18977# check trigger-2 success: 	1
18978DROP TRIGGER trg_1;
18979UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18980f_int2 = CAST(f_char1 AS SIGNED INT),
18981f_charbig = 'just inserted'
18982   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18983DELETE FROM t0_aux
18984WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18985INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18986SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18987'just inserted' FROM t0_template
18988WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18989CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18990BEGIN
18991UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18992f_charbig = 'updated by trigger'
18993      WHERE f_int1 = new.f_int1;
18994END|
18995UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18996WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18997
18998# check trigger-3 success: 	1
18999DROP TRIGGER trg_1;
19000UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19001f_int2 = CAST(f_char1 AS SIGNED INT),
19002f_charbig = 'just inserted'
19003   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19004DELETE FROM t0_aux
19005WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19006INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19007SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19008'just inserted' FROM t0_template
19009WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19010CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19011BEGIN
19012UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19013f_charbig = 'updated by trigger'
19014      WHERE f_int1 = - old.f_int1;
19015END|
19016UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19017WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19018
19019# check trigger-4 success: 	1
19020DROP TRIGGER trg_1;
19021UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19022f_int2 = CAST(f_char1 AS SIGNED INT),
19023f_charbig = 'just inserted'
19024   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19025DELETE FROM t0_aux
19026WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19027INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19028SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19029'just inserted' FROM t0_template
19030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19031CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19032BEGIN
19033UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19034f_charbig = 'updated by trigger'
19035      WHERE f_int1 = new.f_int1;
19036END|
19037UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19038WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19039
19040# check trigger-5 success: 	1
19041DROP TRIGGER trg_1;
19042UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19043f_int2 = CAST(f_char1 AS SIGNED INT),
19044f_charbig = 'just inserted'
19045   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19046DELETE FROM t0_aux
19047WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19048INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19049SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19050'just inserted' FROM t0_template
19051WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19052CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19053BEGIN
19054UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19055f_charbig = 'updated by trigger'
19056      WHERE f_int1 = - old.f_int1;
19057END|
19058UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19059WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19060
19061# check trigger-6 success: 	1
19062DROP TRIGGER trg_1;
19063UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19064f_int2 = CAST(f_char1 AS SIGNED INT),
19065f_charbig = 'just inserted'
19066   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19067DELETE FROM t0_aux
19068WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19069INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19070SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19071'just inserted' FROM t0_template
19072WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19073CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19074BEGIN
19075UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19076f_charbig = 'updated by trigger'
19077      WHERE f_int1 = - old.f_int1;
19078END|
19079DELETE FROM t0_aux
19080WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19081
19082# check trigger-7 success: 	1
19083DROP TRIGGER trg_1;
19084UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19085f_int2 = CAST(f_char1 AS SIGNED INT),
19086f_charbig = 'just inserted'
19087   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19088DELETE FROM t0_aux
19089WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19090INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19091SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19092'just inserted' FROM t0_template
19093WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19094CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19095BEGIN
19096UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19097f_charbig = 'updated by trigger'
19098      WHERE f_int1 = - old.f_int1;
19099END|
19100DELETE FROM t0_aux
19101WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19102
19103# check trigger-8 success: 	1
19104DROP TRIGGER trg_1;
19105UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19106f_int2 = CAST(f_char1 AS SIGNED INT),
19107f_charbig = 'just inserted'
19108   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19109DELETE FROM t0_aux
19110WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19111DELETE FROM t1
19112WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19113CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19114BEGIN
19115SET new.f_int1 = old.f_int1 + @max_row,
19116new.f_int2 = old.f_int2 - @max_row,
19117new.f_charbig = '####updated per update trigger####';
19118END|
19119UPDATE t1
19120SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19121f_charbig = '####updated per update statement itself####';
19122
19123# check trigger-9 success: 	1
19124DROP TRIGGER trg_2;
19125UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19126f_int2 = CAST(f_char1 AS SIGNED INT),
19127f_charbig = CONCAT('===',f_char1,'===');
19128CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19129BEGIN
19130SET new.f_int1 = new.f_int1 + @max_row,
19131new.f_int2 = new.f_int2 - @max_row,
19132new.f_charbig = '####updated per update trigger####';
19133END|
19134UPDATE t1
19135SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19136f_charbig = '####updated per update statement itself####';
19137
19138# check trigger-10 success: 	1
19139DROP TRIGGER trg_2;
19140UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19141f_int2 = CAST(f_char1 AS SIGNED INT),
19142f_charbig = CONCAT('===',f_char1,'===');
19143CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19144BEGIN
19145SET new.f_int1 = @my_max1 + @counter,
19146new.f_int2 = @my_min2 - @counter,
19147new.f_charbig = '####updated per insert trigger####';
19148SET @counter = @counter + 1;
19149END|
19150SET @counter = 1;
19151SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19152INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19153SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19154CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19155WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19156ORDER BY f_int1;
19157DROP TRIGGER trg_3;
19158
19159# check trigger-11 success: 	1
19160DELETE FROM t1
19161WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19162AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19163AND f_charbig = '####updated per insert trigger####';
19164CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19165BEGIN
19166SET new.f_int1 = @my_max1 + @counter,
19167new.f_int2 = @my_min2 - @counter,
19168new.f_charbig = '####updated per insert trigger####';
19169SET @counter = @counter + 1;
19170END|
19171SET @counter = 1;
19172SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19173INSERT INTO t1 (f_char1, f_char2, f_charbig)
19174SELECT CAST(f_int1 AS CHAR),
19175CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19176WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19177ORDER BY f_int1;
19178DROP TRIGGER trg_3;
19179
19180# check trigger-12 success: 	1
19181DELETE FROM t1
19182WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19183AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19184AND f_charbig = '####updated per insert trigger####';
19185ANALYZE  TABLE t1;
19186Table	Op	Msg_type	Msg_text
19187test.t1	analyze	status	OK
19188CHECK    TABLE t1 EXTENDED;
19189Table	Op	Msg_type	Msg_text
19190test.t1	check	status	OK
19191CHECKSUM TABLE t1 EXTENDED;
19192Table	Checksum
19193test.t1	<some_value>
19194OPTIMIZE TABLE t1;
19195Table	Op	Msg_type	Msg_text
19196test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
19197test.t1	optimize	status	OK
19198# check layout success:    1
19199REPAIR   TABLE t1 EXTENDED;
19200Table	Op	Msg_type	Msg_text
19201test.t1	repair	status	OK
19202# check layout success:    1
19203TRUNCATE t1;
19204
19205# check TRUNCATE success: 	1
19206# check layout success:    1
19207# End usability test (inc/partition_check.inc)
19208DROP TABLE t1;
19209CREATE TABLE t1 (
19210f_int1 INTEGER,
19211f_int2 INTEGER,
19212f_char1 CHAR(20),
19213f_char2 CHAR(20),
19214f_charbig VARCHAR(1000)
19215, UNIQUE INDEX uidx1 (f_int2,f_int1)
19216)
19217PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
19218(PARTITION part1 VALUES IN (0)
19219(SUBPARTITION sp11, SUBPARTITION sp12),
19220PARTITION part2 VALUES IN (1)
19221(SUBPARTITION sp21, SUBPARTITION sp22),
19222PARTITION part3 VALUES IN (2)
19223(SUBPARTITION sp31, SUBPARTITION sp32),
19224PARTITION part4 VALUES IN (NULL)
19225(SUBPARTITION sp41, SUBPARTITION sp42));
19226INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19227SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19228WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
19229ALTER TABLE t1 MODIFY f_int2 BIGINT;
19230INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19231SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19232WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
19233# Start usability test (inc/partition_check.inc)
19234create_command
19235SHOW CREATE TABLE t1;
19236Table	Create Table
19237t1	CREATE TABLE `t1` (
19238  `f_int1` int(11) DEFAULT NULL,
19239  `f_int2` bigint(20) DEFAULT NULL,
19240  `f_char1` char(20) DEFAULT NULL,
19241  `f_char2` char(20) DEFAULT NULL,
19242  `f_charbig` varchar(1000) DEFAULT NULL,
19243  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
19244) ENGINE=TokuDB DEFAULT CHARSET=latin1
19245/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
19246SUBPARTITION BY HASH (f_int1 + 1)
19247(PARTITION part1 VALUES IN (0)
19248 (SUBPARTITION sp11 ENGINE = TokuDB,
19249  SUBPARTITION sp12 ENGINE = TokuDB),
19250 PARTITION part2 VALUES IN (1)
19251 (SUBPARTITION sp21 ENGINE = TokuDB,
19252  SUBPARTITION sp22 ENGINE = TokuDB),
19253 PARTITION part3 VALUES IN (2)
19254 (SUBPARTITION sp31 ENGINE = TokuDB,
19255  SUBPARTITION sp32 ENGINE = TokuDB),
19256 PARTITION part4 VALUES IN (NULL)
19257 (SUBPARTITION sp41 ENGINE = TokuDB,
19258  SUBPARTITION sp42 ENGINE = TokuDB)) */
19259
19260# check prerequisites-1 success:    1
19261# check COUNT(*) success:    1
19262# check MIN/MAX(f_int1) success:    1
19263# check MIN/MAX(f_int2) success:    1
19264INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19265SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19266CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19267WHERE f_int1 IN (2,3);
19268ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
19269# check prerequisites-3 success:    1
19270# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19271INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19272SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19273CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19274WHERE f_int1 IN (2,3);
19275DELETE FROM t1 WHERE f_charbig = 'delete me';
19276INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19277SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19278CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19279WHERE f_int1 IN (2,3);
19280DELETE FROM t1 WHERE f_charbig = 'delete me';
19281# check read via f_int1 success: 1
19282# check read via f_int2 success: 1
19283
19284# check multiple-1 success: 	1
19285DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19286
19287# check multiple-2 success: 	1
19288INSERT INTO t1 SELECT * FROM t0_template
19289WHERE MOD(f_int1,3) = 0;
19290
19291# check multiple-3 success: 	1
19292UPDATE t1 SET f_int1 = f_int1 + @max_row
19293WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19294AND @max_row_div2 + @max_row_div4;
19295
19296# check multiple-4 success: 	1
19297DELETE FROM t1
19298WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19299AND @max_row_div2 + @max_row_div4 + @max_row;
19300
19301# check multiple-5 success: 	1
19302SELECT COUNT(*) INTO @try_count FROM t0_template
19303WHERE MOD(f_int1,3) = 0
19304AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19305SELECT COUNT(*) INTO @clash_count
19306FROM t1 INNER JOIN t0_template USING(f_int1)
19307WHERE MOD(f_int1,3) = 0
19308AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19309SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19310INSERT INTO t1
19311SET f_int1 = @cur_value , f_int2 = @cur_value,
19312f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19313f_charbig = '#SINGLE#';
19314
19315# check single-1 success: 	1
19316SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19317INSERT INTO t1
19318SET f_int1 = @cur_value , f_int2 = @cur_value,
19319f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19320f_charbig = '#SINGLE#';
19321
19322# check single-2 success: 	1
19323SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19324SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19325UPDATE t1 SET f_int1 = @cur_value2
19326WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19327
19328# check single-3 success: 	1
19329SET @cur_value1= -1;
19330SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19331UPDATE t1 SET f_int1 = @cur_value1
19332WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19333
19334# check single-4 success: 	1
19335SELECT MAX(f_int1) INTO @cur_value FROM t1;
19336DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19337
19338# check single-5 success: 	1
19339DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19340
19341# check single-6 success: 	1
19342INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19343
19344# check single-7 success: 	1
19345DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19346DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19347INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19348f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19349f_charbig = '#NULL#';
19350INSERT INTO t1
19351SET f_int1 = NULL , f_int2 = -@max_row,
19352f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19353f_charbig = '#NULL#';
19354# check null success:    1
19355
19356# check null-1 success: 	1
19357UPDATE t1 SET f_int1 = -@max_row
19358WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19359AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19360
19361# check null-2 success: 	1
19362UPDATE t1 SET f_int1 = NULL
19363WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19364AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19365
19366# check null-3 success: 	1
19367DELETE FROM t1
19368WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19369AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19370
19371# check null-4 success: 	1
19372DELETE FROM t1
19373WHERE f_int1 = 0 AND f_int2 = 0
19374AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19375AND f_charbig = '#NULL#';
19376INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19377SELECT f_int1, f_int1, '', '', 'was inserted'
19378   FROM t0_template source_tab
19379WHERE MOD(f_int1,3) = 0
19380AND f_int1 BETWEEN @max_row_div2 AND @max_row
19381ON DUPLICATE KEY
19382UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19383f_int2 = 2 * @max_row + source_tab.f_int1,
19384f_charbig = 'was updated';
19385
19386# check unique-1-a success: 	1
19387
19388# check unique-1-b success: 	1
19389DELETE FROM t1 WHERE f_charbig = 'was inserted';
19390UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19391f_int2 = CAST(f_char1 AS SIGNED INT),
19392f_charbig = CONCAT('===',f_char1,'===')
19393WHERE f_charbig = 'was updated';
19394REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19395SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19396   FROM t0_template source_tab
19397WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19398
19399# check replace success: 	1
19400DELETE FROM t1
19401WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19402DELETE FROM t1
19403WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19404f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19405UPDATE t1 SET f_int2 = f_int1,
19406f_char1 = CAST(f_int1 AS CHAR),
19407f_char2 = CAST(f_int1 AS CHAR),
19408f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19409WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19410SET AUTOCOMMIT= 0;
19411INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19412SELECT f_int1, f_int1, '', '', 'was inserted'
19413FROM t0_template source_tab
19414WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19415
19416# check transactions-1 success: 	1
19417COMMIT WORK;
19418
19419# check transactions-2 success: 	1
19420ROLLBACK WORK;
19421
19422# check transactions-3 success: 	1
19423DELETE FROM t1 WHERE f_charbig = 'was inserted';
19424COMMIT WORK;
19425ROLLBACK WORK;
19426
19427# check transactions-4 success: 	1
19428INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19429SELECT f_int1, f_int1, '', '', 'was inserted'
19430FROM t0_template source_tab
19431WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19432
19433# check transactions-5 success: 	1
19434ROLLBACK WORK;
19435
19436# check transactions-6 success: 	1
19437# INFO: Storage engine used for t1 seems to be transactional.
19438COMMIT;
19439
19440# check transactions-7 success: 	1
19441DELETE FROM t1 WHERE f_charbig = 'was inserted';
19442COMMIT WORK;
19443SET @@session.sql_mode = 'traditional';
19444Warnings:
19445Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19446SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19447INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19448SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19449'', '', 'was inserted' FROM t0_template
19450WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19451ERROR 22012: Division by 0
19452COMMIT;
19453
19454# check transactions-8 success: 	1
19455# INFO: Storage engine used for t1 seems to be able to revert
19456#       changes made by the failing statement.
19457SET @@session.sql_mode = '';
19458Warnings:
19459Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19460SET AUTOCOMMIT= 1;
19461DELETE FROM t1 WHERE f_charbig = 'was inserted';
19462COMMIT WORK;
19463UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19464
19465# check special-1 success: 	1
19466UPDATE t1 SET f_charbig = '';
19467
19468# check special-2 success: 	1
19469UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19470INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19471SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19472WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19473INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19474SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19475'just inserted' FROM t0_template
19476WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19477CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19478BEGIN
19479UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19480f_charbig = 'updated by trigger'
19481      WHERE f_int1 = new.f_int1;
19482END|
19483INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19484SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19485WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19486
19487# check trigger-1 success: 	1
19488DROP TRIGGER trg_1;
19489UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19490f_int2 = CAST(f_char1 AS SIGNED INT),
19491f_charbig = 'just inserted'
19492   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19493DELETE FROM t0_aux
19494WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19495INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19496SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19497'just inserted' FROM t0_template
19498WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19499CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
19500BEGIN
19501UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19502f_charbig = 'updated by trigger'
19503      WHERE f_int1 = new.f_int1;
19504END|
19505INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19506SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19507WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19508
19509# check trigger-2 success: 	1
19510DROP TRIGGER trg_1;
19511UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19512f_int2 = CAST(f_char1 AS SIGNED INT),
19513f_charbig = 'just inserted'
19514   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19515DELETE FROM t0_aux
19516WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19517INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19518SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19519'just inserted' FROM t0_template
19520WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19521CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19522BEGIN
19523UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19524f_charbig = 'updated by trigger'
19525      WHERE f_int1 = new.f_int1;
19526END|
19527UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19528WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19529
19530# check trigger-3 success: 	1
19531DROP TRIGGER trg_1;
19532UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19533f_int2 = CAST(f_char1 AS SIGNED INT),
19534f_charbig = 'just inserted'
19535   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19536DELETE FROM t0_aux
19537WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19538INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19539SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19540'just inserted' FROM t0_template
19541WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19542CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19543BEGIN
19544UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19545f_charbig = 'updated by trigger'
19546      WHERE f_int1 = - old.f_int1;
19547END|
19548UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19549WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19550
19551# check trigger-4 success: 	1
19552DROP TRIGGER trg_1;
19553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19554f_int2 = CAST(f_char1 AS SIGNED INT),
19555f_charbig = 'just inserted'
19556   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19557DELETE FROM t0_aux
19558WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19559INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19560SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19561'just inserted' FROM t0_template
19562WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19563CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19564BEGIN
19565UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19566f_charbig = 'updated by trigger'
19567      WHERE f_int1 = new.f_int1;
19568END|
19569UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19570WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19571
19572# check trigger-5 success: 	1
19573DROP TRIGGER trg_1;
19574UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19575f_int2 = CAST(f_char1 AS SIGNED INT),
19576f_charbig = 'just inserted'
19577   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19578DELETE FROM t0_aux
19579WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19580INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19581SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19582'just inserted' FROM t0_template
19583WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19584CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19585BEGIN
19586UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19587f_charbig = 'updated by trigger'
19588      WHERE f_int1 = - old.f_int1;
19589END|
19590UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19591WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19592
19593# check trigger-6 success: 	1
19594DROP TRIGGER trg_1;
19595UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19596f_int2 = CAST(f_char1 AS SIGNED INT),
19597f_charbig = 'just inserted'
19598   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19599DELETE FROM t0_aux
19600WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19601INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19602SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19603'just inserted' FROM t0_template
19604WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19605CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19606BEGIN
19607UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19608f_charbig = 'updated by trigger'
19609      WHERE f_int1 = - old.f_int1;
19610END|
19611DELETE FROM t0_aux
19612WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19613
19614# check trigger-7 success: 	1
19615DROP TRIGGER trg_1;
19616UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19617f_int2 = CAST(f_char1 AS SIGNED INT),
19618f_charbig = 'just inserted'
19619   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19620DELETE FROM t0_aux
19621WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19622INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19623SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19624'just inserted' FROM t0_template
19625WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19626CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19627BEGIN
19628UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19629f_charbig = 'updated by trigger'
19630      WHERE f_int1 = - old.f_int1;
19631END|
19632DELETE FROM t0_aux
19633WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19634
19635# check trigger-8 success: 	1
19636DROP TRIGGER trg_1;
19637UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19638f_int2 = CAST(f_char1 AS SIGNED INT),
19639f_charbig = 'just inserted'
19640   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19641DELETE FROM t0_aux
19642WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19643DELETE FROM t1
19644WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19645CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19646BEGIN
19647SET new.f_int1 = old.f_int1 + @max_row,
19648new.f_int2 = old.f_int2 - @max_row,
19649new.f_charbig = '####updated per update trigger####';
19650END|
19651UPDATE t1
19652SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19653f_charbig = '####updated per update statement itself####';
19654
19655# check trigger-9 success: 	1
19656DROP TRIGGER trg_2;
19657UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19658f_int2 = CAST(f_char1 AS SIGNED INT),
19659f_charbig = CONCAT('===',f_char1,'===');
19660CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19661BEGIN
19662SET new.f_int1 = new.f_int1 + @max_row,
19663new.f_int2 = new.f_int2 - @max_row,
19664new.f_charbig = '####updated per update trigger####';
19665END|
19666UPDATE t1
19667SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19668f_charbig = '####updated per update statement itself####';
19669
19670# check trigger-10 success: 	1
19671DROP TRIGGER trg_2;
19672UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19673f_int2 = CAST(f_char1 AS SIGNED INT),
19674f_charbig = CONCAT('===',f_char1,'===');
19675CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19676BEGIN
19677SET new.f_int1 = @my_max1 + @counter,
19678new.f_int2 = @my_min2 - @counter,
19679new.f_charbig = '####updated per insert trigger####';
19680SET @counter = @counter + 1;
19681END|
19682SET @counter = 1;
19683SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19684INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19685SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19686CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19687WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19688ORDER BY f_int1;
19689DROP TRIGGER trg_3;
19690
19691# check trigger-11 success: 	1
19692DELETE FROM t1
19693WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19694AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19695AND f_charbig = '####updated per insert trigger####';
19696CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19697BEGIN
19698SET new.f_int1 = @my_max1 + @counter,
19699new.f_int2 = @my_min2 - @counter,
19700new.f_charbig = '####updated per insert trigger####';
19701SET @counter = @counter + 1;
19702END|
19703SET @counter = 1;
19704SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19705INSERT INTO t1 (f_char1, f_char2, f_charbig)
19706SELECT CAST(f_int1 AS CHAR),
19707CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19708WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19709ORDER BY f_int1;
19710DROP TRIGGER trg_3;
19711
19712# check trigger-12 success: 	1
19713DELETE FROM t1
19714WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19715AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19716AND f_charbig = '####updated per insert trigger####';
19717ANALYZE  TABLE t1;
19718Table	Op	Msg_type	Msg_text
19719test.t1	analyze	status	OK
19720CHECK    TABLE t1 EXTENDED;
19721Table	Op	Msg_type	Msg_text
19722test.t1	check	status	OK
19723CHECKSUM TABLE t1 EXTENDED;
19724Table	Checksum
19725test.t1	<some_value>
19726OPTIMIZE TABLE t1;
19727Table	Op	Msg_type	Msg_text
19728test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
19729test.t1	optimize	status	OK
19730# check layout success:    1
19731REPAIR   TABLE t1 EXTENDED;
19732Table	Op	Msg_type	Msg_text
19733test.t1	repair	status	OK
19734# check layout success:    1
19735TRUNCATE t1;
19736
19737# check TRUNCATE success: 	1
19738# check layout success:    1
19739# End usability test (inc/partition_check.inc)
19740DROP TABLE t1;
19741CREATE TABLE t1 (
19742f_int1 INTEGER,
19743f_int2 INTEGER,
19744f_char1 CHAR(20),
19745f_char2 CHAR(20),
19746f_charbig VARCHAR(1000)
19747, UNIQUE INDEX uidx1 (f_int2,f_int1)
19748)
19749PARTITION BY LIST(ABS(MOD(f_int1,2)))
19750SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
19751(PARTITION part1 VALUES IN (0),
19752PARTITION part2 VALUES IN (1),
19753PARTITION part3 VALUES IN (NULL));
19754INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19755SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19756WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
19757ALTER TABLE t1 MODIFY f_int2 BIGINT;
19758INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19759SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19760WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
19761# Start usability test (inc/partition_check.inc)
19762create_command
19763SHOW CREATE TABLE t1;
19764Table	Create Table
19765t1	CREATE TABLE `t1` (
19766  `f_int1` int(11) DEFAULT NULL,
19767  `f_int2` bigint(20) DEFAULT NULL,
19768  `f_char1` char(20) DEFAULT NULL,
19769  `f_char2` char(20) DEFAULT NULL,
19770  `f_charbig` varchar(1000) DEFAULT NULL,
19771  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
19772) ENGINE=TokuDB DEFAULT CHARSET=latin1
19773/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
19774SUBPARTITION BY KEY (f_int1)
19775SUBPARTITIONS 3
19776(PARTITION part1 VALUES IN (0) ENGINE = TokuDB,
19777 PARTITION part2 VALUES IN (1) ENGINE = TokuDB,
19778 PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */
19779
19780# check prerequisites-1 success:    1
19781# check COUNT(*) success:    1
19782# check MIN/MAX(f_int1) success:    1
19783# check MIN/MAX(f_int2) success:    1
19784INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19785SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19786CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19787WHERE f_int1 IN (2,3);
19788ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
19789# check prerequisites-3 success:    1
19790# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19791INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19792SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19793CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19794WHERE f_int1 IN (2,3);
19795DELETE FROM t1 WHERE f_charbig = 'delete me';
19796INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19797SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19798CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19799WHERE f_int1 IN (2,3);
19800DELETE FROM t1 WHERE f_charbig = 'delete me';
19801# check read via f_int1 success: 1
19802# check read via f_int2 success: 1
19803
19804# check multiple-1 success: 	1
19805DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19806
19807# check multiple-2 success: 	1
19808INSERT INTO t1 SELECT * FROM t0_template
19809WHERE MOD(f_int1,3) = 0;
19810
19811# check multiple-3 success: 	1
19812UPDATE t1 SET f_int1 = f_int1 + @max_row
19813WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19814AND @max_row_div2 + @max_row_div4;
19815
19816# check multiple-4 success: 	1
19817DELETE FROM t1
19818WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19819AND @max_row_div2 + @max_row_div4 + @max_row;
19820
19821# check multiple-5 success: 	1
19822SELECT COUNT(*) INTO @try_count FROM t0_template
19823WHERE MOD(f_int1,3) = 0
19824AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19825SELECT COUNT(*) INTO @clash_count
19826FROM t1 INNER JOIN t0_template USING(f_int1)
19827WHERE MOD(f_int1,3) = 0
19828AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19829SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19830INSERT INTO t1
19831SET f_int1 = @cur_value , f_int2 = @cur_value,
19832f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19833f_charbig = '#SINGLE#';
19834
19835# check single-1 success: 	1
19836SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19837INSERT INTO t1
19838SET f_int1 = @cur_value , f_int2 = @cur_value,
19839f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19840f_charbig = '#SINGLE#';
19841
19842# check single-2 success: 	1
19843SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19844SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19845UPDATE t1 SET f_int1 = @cur_value2
19846WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19847
19848# check single-3 success: 	1
19849SET @cur_value1= -1;
19850SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19851UPDATE t1 SET f_int1 = @cur_value1
19852WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19853
19854# check single-4 success: 	1
19855SELECT MAX(f_int1) INTO @cur_value FROM t1;
19856DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19857
19858# check single-5 success: 	1
19859DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19860
19861# check single-6 success: 	1
19862INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19863
19864# check single-7 success: 	1
19865DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19866DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19867INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19868f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19869f_charbig = '#NULL#';
19870INSERT INTO t1
19871SET f_int1 = NULL , f_int2 = -@max_row,
19872f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19873f_charbig = '#NULL#';
19874# check null success:    1
19875
19876# check null-1 success: 	1
19877UPDATE t1 SET f_int1 = -@max_row
19878WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19879AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19880
19881# check null-2 success: 	1
19882UPDATE t1 SET f_int1 = NULL
19883WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19884AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19885
19886# check null-3 success: 	1
19887DELETE FROM t1
19888WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19889AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19890
19891# check null-4 success: 	1
19892DELETE FROM t1
19893WHERE f_int1 = 0 AND f_int2 = 0
19894AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19895AND f_charbig = '#NULL#';
19896INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19897SELECT f_int1, f_int1, '', '', 'was inserted'
19898   FROM t0_template source_tab
19899WHERE MOD(f_int1,3) = 0
19900AND f_int1 BETWEEN @max_row_div2 AND @max_row
19901ON DUPLICATE KEY
19902UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19903f_int2 = 2 * @max_row + source_tab.f_int1,
19904f_charbig = 'was updated';
19905
19906# check unique-1-a success: 	1
19907
19908# check unique-1-b success: 	1
19909DELETE FROM t1 WHERE f_charbig = 'was inserted';
19910UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19911f_int2 = CAST(f_char1 AS SIGNED INT),
19912f_charbig = CONCAT('===',f_char1,'===')
19913WHERE f_charbig = 'was updated';
19914REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19915SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19916   FROM t0_template source_tab
19917WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19918
19919# check replace success: 	1
19920DELETE FROM t1
19921WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19922DELETE FROM t1
19923WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19924f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19925UPDATE t1 SET f_int2 = f_int1,
19926f_char1 = CAST(f_int1 AS CHAR),
19927f_char2 = CAST(f_int1 AS CHAR),
19928f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19929WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19930SET AUTOCOMMIT= 0;
19931INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19932SELECT f_int1, f_int1, '', '', 'was inserted'
19933FROM t0_template source_tab
19934WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19935
19936# check transactions-1 success: 	1
19937COMMIT WORK;
19938
19939# check transactions-2 success: 	1
19940ROLLBACK WORK;
19941
19942# check transactions-3 success: 	1
19943DELETE FROM t1 WHERE f_charbig = 'was inserted';
19944COMMIT WORK;
19945ROLLBACK WORK;
19946
19947# check transactions-4 success: 	1
19948INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19949SELECT f_int1, f_int1, '', '', 'was inserted'
19950FROM t0_template source_tab
19951WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19952
19953# check transactions-5 success: 	1
19954ROLLBACK WORK;
19955
19956# check transactions-6 success: 	1
19957# INFO: Storage engine used for t1 seems to be transactional.
19958COMMIT;
19959
19960# check transactions-7 success: 	1
19961DELETE FROM t1 WHERE f_charbig = 'was inserted';
19962COMMIT WORK;
19963SET @@session.sql_mode = 'traditional';
19964Warnings:
19965Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19966SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19967INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19968SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19969'', '', 'was inserted' FROM t0_template
19970WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19971ERROR 22012: Division by 0
19972COMMIT;
19973
19974# check transactions-8 success: 	1
19975# INFO: Storage engine used for t1 seems to be able to revert
19976#       changes made by the failing statement.
19977SET @@session.sql_mode = '';
19978Warnings:
19979Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19980SET AUTOCOMMIT= 1;
19981DELETE FROM t1 WHERE f_charbig = 'was inserted';
19982COMMIT WORK;
19983UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19984
19985# check special-1 success: 	1
19986UPDATE t1 SET f_charbig = '';
19987
19988# check special-2 success: 	1
19989UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19990INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19991SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19992WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19993INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19994SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19995'just inserted' FROM t0_template
19996WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19997CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19998BEGIN
19999UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20000f_charbig = 'updated by trigger'
20001      WHERE f_int1 = new.f_int1;
20002END|
20003INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20004SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20005WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20006
20007# check trigger-1 success: 	1
20008DROP TRIGGER trg_1;
20009UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20010f_int2 = CAST(f_char1 AS SIGNED INT),
20011f_charbig = 'just inserted'
20012   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20013DELETE FROM t0_aux
20014WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20015INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20016SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20017'just inserted' FROM t0_template
20018WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20019CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20020BEGIN
20021UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20022f_charbig = 'updated by trigger'
20023      WHERE f_int1 = new.f_int1;
20024END|
20025INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20026SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20027WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20028
20029# check trigger-2 success: 	1
20030DROP TRIGGER trg_1;
20031UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20032f_int2 = CAST(f_char1 AS SIGNED INT),
20033f_charbig = 'just inserted'
20034   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20035DELETE FROM t0_aux
20036WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20037INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20038SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20039'just inserted' FROM t0_template
20040WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20041CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20042BEGIN
20043UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20044f_charbig = 'updated by trigger'
20045      WHERE f_int1 = new.f_int1;
20046END|
20047UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20048WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20049
20050# check trigger-3 success: 	1
20051DROP TRIGGER trg_1;
20052UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20053f_int2 = CAST(f_char1 AS SIGNED INT),
20054f_charbig = 'just inserted'
20055   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20056DELETE FROM t0_aux
20057WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20058INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20059SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20060'just inserted' FROM t0_template
20061WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20062CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20063BEGIN
20064UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20065f_charbig = 'updated by trigger'
20066      WHERE f_int1 = - old.f_int1;
20067END|
20068UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20069WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20070
20071# check trigger-4 success: 	1
20072DROP TRIGGER trg_1;
20073UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20074f_int2 = CAST(f_char1 AS SIGNED INT),
20075f_charbig = 'just inserted'
20076   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20077DELETE FROM t0_aux
20078WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20079INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20080SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20081'just inserted' FROM t0_template
20082WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20083CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20084BEGIN
20085UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20086f_charbig = 'updated by trigger'
20087      WHERE f_int1 = new.f_int1;
20088END|
20089UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20090WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20091
20092# check trigger-5 success: 	1
20093DROP TRIGGER trg_1;
20094UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20095f_int2 = CAST(f_char1 AS SIGNED INT),
20096f_charbig = 'just inserted'
20097   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20098DELETE FROM t0_aux
20099WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20100INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20101SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20102'just inserted' FROM t0_template
20103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20104CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20105BEGIN
20106UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20107f_charbig = 'updated by trigger'
20108      WHERE f_int1 = - old.f_int1;
20109END|
20110UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20111WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20112
20113# check trigger-6 success: 	1
20114DROP TRIGGER trg_1;
20115UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20116f_int2 = CAST(f_char1 AS SIGNED INT),
20117f_charbig = 'just inserted'
20118   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20119DELETE FROM t0_aux
20120WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20121INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20122SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20123'just inserted' FROM t0_template
20124WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20125CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20126BEGIN
20127UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20128f_charbig = 'updated by trigger'
20129      WHERE f_int1 = - old.f_int1;
20130END|
20131DELETE FROM t0_aux
20132WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20133
20134# check trigger-7 success: 	1
20135DROP TRIGGER trg_1;
20136UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20137f_int2 = CAST(f_char1 AS SIGNED INT),
20138f_charbig = 'just inserted'
20139   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20140DELETE FROM t0_aux
20141WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20142INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20143SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20144'just inserted' FROM t0_template
20145WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20146CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20147BEGIN
20148UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20149f_charbig = 'updated by trigger'
20150      WHERE f_int1 = - old.f_int1;
20151END|
20152DELETE FROM t0_aux
20153WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20154
20155# check trigger-8 success: 	1
20156DROP TRIGGER trg_1;
20157UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20158f_int2 = CAST(f_char1 AS SIGNED INT),
20159f_charbig = 'just inserted'
20160   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20161DELETE FROM t0_aux
20162WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20163DELETE FROM t1
20164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20165CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20166BEGIN
20167SET new.f_int1 = old.f_int1 + @max_row,
20168new.f_int2 = old.f_int2 - @max_row,
20169new.f_charbig = '####updated per update trigger####';
20170END|
20171UPDATE t1
20172SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20173f_charbig = '####updated per update statement itself####';
20174
20175# check trigger-9 success: 	1
20176DROP TRIGGER trg_2;
20177UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20178f_int2 = CAST(f_char1 AS SIGNED INT),
20179f_charbig = CONCAT('===',f_char1,'===');
20180CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20181BEGIN
20182SET new.f_int1 = new.f_int1 + @max_row,
20183new.f_int2 = new.f_int2 - @max_row,
20184new.f_charbig = '####updated per update trigger####';
20185END|
20186UPDATE t1
20187SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20188f_charbig = '####updated per update statement itself####';
20189
20190# check trigger-10 success: 	1
20191DROP TRIGGER trg_2;
20192UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20193f_int2 = CAST(f_char1 AS SIGNED INT),
20194f_charbig = CONCAT('===',f_char1,'===');
20195CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20196BEGIN
20197SET new.f_int1 = @my_max1 + @counter,
20198new.f_int2 = @my_min2 - @counter,
20199new.f_charbig = '####updated per insert trigger####';
20200SET @counter = @counter + 1;
20201END|
20202SET @counter = 1;
20203SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20204INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20205SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20206CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20207WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20208ORDER BY f_int1;
20209DROP TRIGGER trg_3;
20210
20211# check trigger-11 success: 	1
20212DELETE FROM t1
20213WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20214AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20215AND f_charbig = '####updated per insert trigger####';
20216CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20217BEGIN
20218SET new.f_int1 = @my_max1 + @counter,
20219new.f_int2 = @my_min2 - @counter,
20220new.f_charbig = '####updated per insert trigger####';
20221SET @counter = @counter + 1;
20222END|
20223SET @counter = 1;
20224SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20225INSERT INTO t1 (f_char1, f_char2, f_charbig)
20226SELECT CAST(f_int1 AS CHAR),
20227CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20228WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20229ORDER BY f_int1;
20230DROP TRIGGER trg_3;
20231
20232# check trigger-12 success: 	1
20233DELETE FROM t1
20234WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20235AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20236AND f_charbig = '####updated per insert trigger####';
20237ANALYZE  TABLE t1;
20238Table	Op	Msg_type	Msg_text
20239test.t1	analyze	status	OK
20240CHECK    TABLE t1 EXTENDED;
20241Table	Op	Msg_type	Msg_text
20242test.t1	check	status	OK
20243CHECKSUM TABLE t1 EXTENDED;
20244Table	Checksum
20245test.t1	<some_value>
20246OPTIMIZE TABLE t1;
20247Table	Op	Msg_type	Msg_text
20248test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
20249test.t1	optimize	status	OK
20250# check layout success:    1
20251REPAIR   TABLE t1 EXTENDED;
20252Table	Op	Msg_type	Msg_text
20253test.t1	repair	status	OK
20254# check layout success:    1
20255TRUNCATE t1;
20256
20257# check TRUNCATE success: 	1
20258# check layout success:    1
20259# End usability test (inc/partition_check.inc)
20260DROP TABLE t1;
20261DROP VIEW  IF EXISTS v1;
20262DROP TABLE IF EXISTS t1;
20263DROP TABLE IF EXISTS t0_aux;
20264DROP TABLE IF EXISTS t0_definition;
20265DROP TABLE IF EXISTS t0_template;
20266