2
SET @@session.storage_engine = 'MyISAM';
4
#------------------------------------------------------------------------
5
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
6
# needed in many testcases
7
#------------------------------------------------------------------------
8
SELECT @max_row DIV 2 INTO @max_row_div2;
9
SELECT @max_row DIV 3 INTO @max_row_div3;
10
SELECT @max_row DIV 4 INTO @max_row_div4;
11
SET @max_int_4 = 2147483647;
12
DROP TABLE IF EXISTS t0_template;
13
CREATE TABLE t0_template (
18
f_charbig VARCHAR(1000) ,
21
# Logging of <max_row> INSERTs into t0_template suppressed
22
DROP TABLE IF EXISTS t0_definition;
23
CREATE TABLE t0_definition (
25
create_command VARBINARY(5000),
26
file_list VARBINARY(10000),
29
DROP TABLE IF EXISTS t0_aux;
30
CREATE TABLE t0_aux ( f_int1 INTEGER,
34
f_charbig VARCHAR(1000) )
37
SET @@session.sql_mode= '';
38
# End of basic preparations needed for all tests
39
#-----------------------------------------------
41
#========================================================================
42
# 1. ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX
43
#========================================================================
44
#------------------------------------------------------------------------
45
# 1.2 ADD PRIMARY KEY or UNIQUE INDEX to table with two columns
46
# (f_int1 and f_int2) within the partitioning function
47
#------------------------------------------------------------------------
48
# 1.2.2 UNIQUE INDEX consisting of two columns
49
DROP TABLE IF EXISTS t1;
55
f_charbig VARCHAR(1000)
58
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
59
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
60
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
61
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
62
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
63
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
64
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
65
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
66
# Start usability test (inc/partition_check.inc)
70
t1 CREATE TABLE `t1` (
71
`f_int1` int(11) DEFAULT NULL,
72
`f_int2` int(11) DEFAULT NULL,
73
`f_char1` char(20) DEFAULT NULL,
74
`f_char2` char(20) DEFAULT NULL,
75
`f_charbig` varchar(1000) DEFAULT NULL,
76
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
77
) ENGINE=MyISAM DEFAULT CHARSET=latin1
78
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
89
# check prerequisites-1 success: 1
90
# check COUNT(*) success: 1
91
# check MIN/MAX(f_int1) success: 1
92
# check MIN/MAX(f_int2) success: 1
93
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
94
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
95
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
96
WHERE f_int1 IN (2,3);
97
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
98
# check prerequisites-3 success: 1
99
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
100
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
101
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
102
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
103
WHERE f_int1 IN (2,3);
104
DELETE FROM t1 WHERE f_charbig = 'delete me';
105
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
106
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
107
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
108
WHERE f_int1 IN (2,3);
109
DELETE FROM t1 WHERE f_charbig = 'delete me';
110
# check read via f_int1 success: 1
111
# check read via f_int2 success: 1
113
# check multiple-1 success: 1
114
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
116
# check multiple-2 success: 1
117
INSERT INTO t1 SELECT * FROM t0_template
118
WHERE MOD(f_int1,3) = 0;
120
# check multiple-3 success: 1
121
UPDATE t1 SET f_int1 = f_int1 + @max_row
122
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
123
AND @max_row_div2 + @max_row_div4;
125
# check multiple-4 success: 1
127
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
128
AND @max_row_div2 + @max_row_div4 + @max_row;
130
# check multiple-5 success: 1
131
SELECT COUNT(*) INTO @try_count FROM t0_template
132
WHERE MOD(f_int1,3) = 0
133
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
134
SELECT COUNT(*) INTO @clash_count
135
FROM t1 INNER JOIN t0_template USING(f_int1)
136
WHERE MOD(f_int1,3) = 0
137
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
138
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
140
SET f_int1 = @cur_value , f_int2 = @cur_value,
141
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
142
f_charbig = '#SINGLE#';
144
# check single-1 success: 1
145
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
147
SET f_int1 = @cur_value , f_int2 = @cur_value,
148
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
149
f_charbig = '#SINGLE#';
151
# check single-2 success: 1
152
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
153
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
154
UPDATE t1 SET f_int1 = @cur_value2
155
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
157
# check single-3 success: 1
159
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
160
UPDATE t1 SET f_int1 = @cur_value1
161
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
163
# check single-4 success: 1
164
SELECT MAX(f_int1) INTO @cur_value FROM t1;
165
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
167
# check single-5 success: 1
168
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
170
# check single-6 success: 1
171
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
173
# check single-7 success: 1
174
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
175
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
176
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
177
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
178
f_charbig = '#NULL#';
180
SET f_int1 = NULL , f_int2 = -@max_row,
181
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
182
f_charbig = '#NULL#';
183
# check null success: 1
185
# check null-1 success: 1
186
UPDATE t1 SET f_int1 = -@max_row
187
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
188
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
190
# check null-2 success: 1
191
UPDATE t1 SET f_int1 = NULL
192
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
193
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
195
# check null-3 success: 1
197
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
198
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
200
# check null-4 success: 1
202
WHERE f_int1 = 0 AND f_int2 = 0
203
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
204
AND f_charbig = '#NULL#';
205
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
206
SELECT f_int1, f_int1, '', '', 'was inserted'
207
FROM t0_template source_tab
208
WHERE MOD(f_int1,3) = 0
209
AND f_int1 BETWEEN @max_row_div2 AND @max_row
211
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
212
f_int2 = 2 * @max_row + source_tab.f_int1,
213
f_charbig = 'was updated';
215
# check unique-1-a success: 1
217
# check unique-1-b success: 1
218
DELETE FROM t1 WHERE f_charbig = 'was inserted';
219
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
220
f_int2 = CAST(f_char1 AS SIGNED INT),
221
f_charbig = CONCAT('===',f_char1,'===')
222
WHERE f_charbig = 'was updated';
223
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
224
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
225
FROM t0_template source_tab
226
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
228
# check replace success: 1
230
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
232
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
233
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
234
UPDATE t1 SET f_int2 = f_int1,
235
f_char1 = CAST(f_int1 AS CHAR),
236
f_char2 = CAST(f_int1 AS CHAR),
237
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
238
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
240
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
241
SELECT f_int1, f_int1, '', '', 'was inserted'
242
FROM t0_template source_tab
243
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
245
# check transactions-1 success: 1
248
# check transactions-2 success: 1
251
# check transactions-3 success: 1
252
DELETE FROM t1 WHERE f_charbig = 'was inserted';
256
# check transactions-4 success: 1
257
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
258
SELECT f_int1, f_int1, '', '', 'was inserted'
259
FROM t0_template source_tab
260
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
262
# check transactions-5 success: 1
265
Warning 1196 Some non-transactional changed tables couldn't be rolled back
267
# check transactions-6 success: 1
268
# INFO: Storage engine used for t1 seems to be not transactional.
271
# check transactions-7 success: 1
272
DELETE FROM t1 WHERE f_charbig = 'was inserted';
274
SET @@session.sql_mode = 'traditional';
275
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
276
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
277
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
278
'', '', 'was inserted' FROM t0_template
279
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
280
ERROR 22012: Division by 0
283
# check transactions-8 success: 1
284
# INFO: Storage engine used for t1 seems to be unable to revert
285
# changes made by the failing statement.
286
SET @@session.sql_mode = '';
288
DELETE FROM t1 WHERE f_charbig = 'was inserted';
290
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
292
# check special-1 success: 1
293
UPDATE t1 SET f_charbig = '';
295
# check special-2 success: 1
296
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
297
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
298
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
301
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
302
'just inserted' FROM t0_template
303
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
304
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
306
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
307
f_charbig = 'updated by trigger'
308
WHERE f_int1 = new.f_int1;
310
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
311
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
312
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
314
# check trigger-1 success: 1
316
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
317
f_int2 = CAST(f_char1 AS SIGNED INT),
318
f_charbig = 'just inserted'
319
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
321
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
322
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
323
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
324
'just inserted' FROM t0_template
325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
326
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
328
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
329
f_charbig = 'updated by trigger'
330
WHERE f_int1 = new.f_int1;
332
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
333
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
336
# check trigger-2 success: 1
338
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
339
f_int2 = CAST(f_char1 AS SIGNED INT),
340
f_charbig = 'just inserted'
341
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
343
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
344
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
345
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
346
'just inserted' FROM t0_template
347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
348
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
350
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
351
f_charbig = 'updated by trigger'
352
WHERE f_int1 = new.f_int1;
354
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
355
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
357
# check trigger-3 success: 1
359
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
360
f_int2 = CAST(f_char1 AS SIGNED INT),
361
f_charbig = 'just inserted'
362
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
364
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
365
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
366
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
367
'just inserted' FROM t0_template
368
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
369
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
371
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
372
f_charbig = 'updated by trigger'
373
WHERE f_int1 = - old.f_int1;
375
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
376
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
378
# check trigger-4 success: 1
380
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
381
f_int2 = CAST(f_char1 AS SIGNED INT),
382
f_charbig = 'just inserted'
383
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
385
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
387
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
388
'just inserted' FROM t0_template
389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
390
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
392
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
393
f_charbig = 'updated by trigger'
394
WHERE f_int1 = new.f_int1;
396
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
397
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
399
# check trigger-5 success: 1
401
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
402
f_int2 = CAST(f_char1 AS SIGNED INT),
403
f_charbig = 'just inserted'
404
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
406
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
407
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
408
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
409
'just inserted' FROM t0_template
410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
411
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
413
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
414
f_charbig = 'updated by trigger'
415
WHERE f_int1 = - old.f_int1;
417
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
418
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
420
# check trigger-6 success: 1
422
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
423
f_int2 = CAST(f_char1 AS SIGNED INT),
424
f_charbig = 'just inserted'
425
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
427
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
428
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
429
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
430
'just inserted' FROM t0_template
431
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
432
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
434
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
435
f_charbig = 'updated by trigger'
436
WHERE f_int1 = - old.f_int1;
439
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
441
# check trigger-7 success: 1
443
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
444
f_int2 = CAST(f_char1 AS SIGNED INT),
445
f_charbig = 'just inserted'
446
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
448
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
449
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
450
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
451
'just inserted' FROM t0_template
452
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
453
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
455
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
456
f_charbig = 'updated by trigger'
457
WHERE f_int1 = - old.f_int1;
460
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
462
# check trigger-8 success: 1
464
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
465
f_int2 = CAST(f_char1 AS SIGNED INT),
466
f_charbig = 'just inserted'
467
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
469
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
472
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
474
SET new.f_int1 = old.f_int1 + @max_row,
475
new.f_int2 = old.f_int2 - @max_row,
476
new.f_charbig = '####updated per update trigger####';
479
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
480
f_charbig = '####updated per update statement itself####';
482
# check trigger-9 success: 1
484
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
485
f_int2 = CAST(f_char1 AS SIGNED INT),
486
f_charbig = CONCAT('===',f_char1,'===');
487
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
489
SET new.f_int1 = new.f_int1 + @max_row,
490
new.f_int2 = new.f_int2 - @max_row,
491
new.f_charbig = '####updated per update trigger####';
494
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
495
f_charbig = '####updated per update statement itself####';
497
# check trigger-10 success: 1
499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
500
f_int2 = CAST(f_char1 AS SIGNED INT),
501
f_charbig = CONCAT('===',f_char1,'===');
502
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
504
SET new.f_int1 = @my_max1 + @counter,
505
new.f_int2 = @my_min2 - @counter,
506
new.f_charbig = '####updated per insert trigger####';
507
SET @counter = @counter + 1;
510
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
511
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
512
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
513
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
514
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
518
# check trigger-11 success: 1
520
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
521
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
522
AND f_charbig = '####updated per insert trigger####';
523
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
525
SET new.f_int1 = @my_max1 + @counter,
526
new.f_int2 = @my_min2 - @counter,
527
new.f_charbig = '####updated per insert trigger####';
528
SET @counter = @counter + 1;
531
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
532
INSERT INTO t1 (f_char1, f_char2, f_charbig)
533
SELECT CAST(f_int1 AS CHAR),
534
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
539
# check trigger-12 success: 1
541
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
542
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
543
AND f_charbig = '####updated per insert trigger####';
545
Table Op Msg_type Msg_text
546
test.t1 analyze status OK
547
CHECK TABLE t1 EXTENDED;
548
Table Op Msg_type Msg_text
549
test.t1 check status OK
550
CHECKSUM TABLE t1 EXTENDED;
554
Table Op Msg_type Msg_text
555
test.t1 optimize status OK
556
# check layout success: 1
557
REPAIR TABLE t1 EXTENDED;
558
Table Op Msg_type Msg_text
559
test.t1 repair status OK
560
# check layout success: 1
563
# check TRUNCATE success: 1
564
# check layout success: 1
565
# End usability test (inc/partition_check.inc)
572
f_charbig VARCHAR(1000)
575
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
576
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
577
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
578
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
579
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
580
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
581
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
582
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
583
# Start usability test (inc/partition_check.inc)
585
SHOW CREATE TABLE t1;
587
t1 CREATE TABLE `t1` (
588
`f_int1` int(11) DEFAULT NULL,
589
`f_int2` int(11) DEFAULT NULL,
590
`f_char1` char(20) DEFAULT NULL,
591
`f_char2` char(20) DEFAULT NULL,
592
`f_charbig` varchar(1000) DEFAULT NULL,
593
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
594
) ENGINE=MyISAM DEFAULT CHARSET=latin1
595
/*!50100 PARTITION BY KEY (f_int1,f_int2)
612
# check prerequisites-1 success: 1
613
# check COUNT(*) success: 1
614
# check MIN/MAX(f_int1) success: 1
615
# check MIN/MAX(f_int2) success: 1
616
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
617
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
618
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
619
WHERE f_int1 IN (2,3);
620
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
621
# check prerequisites-3 success: 1
622
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
623
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
624
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
625
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
626
WHERE f_int1 IN (2,3);
627
DELETE FROM t1 WHERE f_charbig = 'delete me';
628
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
629
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
630
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
631
WHERE f_int1 IN (2,3);
632
DELETE FROM t1 WHERE f_charbig = 'delete me';
633
# check read via f_int1 success: 1
634
# check read via f_int2 success: 1
636
# check multiple-1 success: 1
637
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
639
# check multiple-2 success: 1
640
INSERT INTO t1 SELECT * FROM t0_template
641
WHERE MOD(f_int1,3) = 0;
643
# check multiple-3 success: 1
644
UPDATE t1 SET f_int1 = f_int1 + @max_row
645
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
646
AND @max_row_div2 + @max_row_div4;
648
# check multiple-4 success: 1
650
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
651
AND @max_row_div2 + @max_row_div4 + @max_row;
653
# check multiple-5 success: 1
654
SELECT COUNT(*) INTO @try_count FROM t0_template
655
WHERE MOD(f_int1,3) = 0
656
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
657
SELECT COUNT(*) INTO @clash_count
658
FROM t1 INNER JOIN t0_template USING(f_int1)
659
WHERE MOD(f_int1,3) = 0
660
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
661
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
663
SET f_int1 = @cur_value , f_int2 = @cur_value,
664
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
665
f_charbig = '#SINGLE#';
667
# check single-1 success: 1
668
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
670
SET f_int1 = @cur_value , f_int2 = @cur_value,
671
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
672
f_charbig = '#SINGLE#';
674
# check single-2 success: 1
675
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
676
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
677
UPDATE t1 SET f_int1 = @cur_value2
678
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
680
# check single-3 success: 1
682
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
683
UPDATE t1 SET f_int1 = @cur_value1
684
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
686
# check single-4 success: 1
687
SELECT MAX(f_int1) INTO @cur_value FROM t1;
688
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
690
# check single-5 success: 1
691
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
693
# check single-6 success: 1
694
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
696
# check single-7 success: 1
697
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
698
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
699
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
700
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
701
f_charbig = '#NULL#';
703
SET f_int1 = NULL , f_int2 = -@max_row,
704
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
705
f_charbig = '#NULL#';
706
# check null success: 1
708
# check null-1 success: 1
709
UPDATE t1 SET f_int1 = -@max_row
710
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
711
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
713
# check null-2 success: 1
714
UPDATE t1 SET f_int1 = NULL
715
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
716
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
718
# check null-3 success: 1
720
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
721
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
723
# check null-4 success: 1
725
WHERE f_int1 = 0 AND f_int2 = 0
726
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
727
AND f_charbig = '#NULL#';
728
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
729
SELECT f_int1, f_int1, '', '', 'was inserted'
730
FROM t0_template source_tab
731
WHERE MOD(f_int1,3) = 0
732
AND f_int1 BETWEEN @max_row_div2 AND @max_row
734
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
735
f_int2 = 2 * @max_row + source_tab.f_int1,
736
f_charbig = 'was updated';
738
# check unique-1-a success: 1
740
# check unique-1-b success: 1
741
DELETE FROM t1 WHERE f_charbig = 'was inserted';
742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
743
f_int2 = CAST(f_char1 AS SIGNED INT),
744
f_charbig = CONCAT('===',f_char1,'===')
745
WHERE f_charbig = 'was updated';
746
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
747
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
748
FROM t0_template source_tab
749
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
751
# check replace success: 1
753
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
755
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
756
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
757
UPDATE t1 SET f_int2 = f_int1,
758
f_char1 = CAST(f_int1 AS CHAR),
759
f_char2 = CAST(f_int1 AS CHAR),
760
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
761
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
763
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
764
SELECT f_int1, f_int1, '', '', 'was inserted'
765
FROM t0_template source_tab
766
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
768
# check transactions-1 success: 1
771
# check transactions-2 success: 1
774
# check transactions-3 success: 1
775
DELETE FROM t1 WHERE f_charbig = 'was inserted';
779
# check transactions-4 success: 1
780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
781
SELECT f_int1, f_int1, '', '', 'was inserted'
782
FROM t0_template source_tab
783
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
785
# check transactions-5 success: 1
788
Warning 1196 Some non-transactional changed tables couldn't be rolled back
790
# check transactions-6 success: 1
791
# INFO: Storage engine used for t1 seems to be not transactional.
794
# check transactions-7 success: 1
795
DELETE FROM t1 WHERE f_charbig = 'was inserted';
797
SET @@session.sql_mode = 'traditional';
798
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
799
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
800
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
801
'', '', 'was inserted' FROM t0_template
802
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
803
ERROR 22012: Division by 0
806
# check transactions-8 success: 1
807
# INFO: Storage engine used for t1 seems to be unable to revert
808
# changes made by the failing statement.
809
SET @@session.sql_mode = '';
811
DELETE FROM t1 WHERE f_charbig = 'was inserted';
813
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
815
# check special-1 success: 1
816
UPDATE t1 SET f_charbig = '';
818
# check special-2 success: 1
819
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
820
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
821
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
824
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
825
'just inserted' FROM t0_template
826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
827
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
829
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
830
f_charbig = 'updated by trigger'
831
WHERE f_int1 = new.f_int1;
833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
834
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
837
# check trigger-1 success: 1
839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
840
f_int2 = CAST(f_char1 AS SIGNED INT),
841
f_charbig = 'just inserted'
842
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
844
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
845
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
846
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
847
'just inserted' FROM t0_template
848
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
849
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
851
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
852
f_charbig = 'updated by trigger'
853
WHERE f_int1 = new.f_int1;
855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
856
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
859
# check trigger-2 success: 1
861
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
862
f_int2 = CAST(f_char1 AS SIGNED INT),
863
f_charbig = 'just inserted'
864
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
866
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
867
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
868
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
869
'just inserted' FROM t0_template
870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
871
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
873
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
874
f_charbig = 'updated by trigger'
875
WHERE f_int1 = new.f_int1;
877
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
878
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
880
# check trigger-3 success: 1
882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
883
f_int2 = CAST(f_char1 AS SIGNED INT),
884
f_charbig = 'just inserted'
885
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
887
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
889
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
890
'just inserted' FROM t0_template
891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
892
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
894
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
895
f_charbig = 'updated by trigger'
896
WHERE f_int1 = - old.f_int1;
898
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
899
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
901
# check trigger-4 success: 1
903
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
904
f_int2 = CAST(f_char1 AS SIGNED INT),
905
f_charbig = 'just inserted'
906
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
908
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
909
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
910
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
911
'just inserted' FROM t0_template
912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
913
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
915
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
916
f_charbig = 'updated by trigger'
917
WHERE f_int1 = new.f_int1;
919
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
920
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
922
# check trigger-5 success: 1
924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
925
f_int2 = CAST(f_char1 AS SIGNED INT),
926
f_charbig = 'just inserted'
927
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
929
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
932
'just inserted' FROM t0_template
933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
934
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
937
f_charbig = 'updated by trigger'
938
WHERE f_int1 = - old.f_int1;
940
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
941
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
943
# check trigger-6 success: 1
945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
946
f_int2 = CAST(f_char1 AS SIGNED INT),
947
f_charbig = 'just inserted'
948
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
950
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
953
'just inserted' FROM t0_template
954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
955
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
958
f_charbig = 'updated by trigger'
959
WHERE f_int1 = - old.f_int1;
962
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
964
# check trigger-7 success: 1
966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
967
f_int2 = CAST(f_char1 AS SIGNED INT),
968
f_charbig = 'just inserted'
969
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
971
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
972
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
973
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
974
'just inserted' FROM t0_template
975
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
976
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
978
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
979
f_charbig = 'updated by trigger'
980
WHERE f_int1 = - old.f_int1;
983
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
985
# check trigger-8 success: 1
987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
988
f_int2 = CAST(f_char1 AS SIGNED INT),
989
f_charbig = 'just inserted'
990
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
992
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
995
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
997
SET new.f_int1 = old.f_int1 + @max_row,
998
new.f_int2 = old.f_int2 - @max_row,
999
new.f_charbig = '####updated per update trigger####';
1002
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1003
f_charbig = '####updated per update statement itself####';
1005
# check trigger-9 success: 1
1007
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1008
f_int2 = CAST(f_char1 AS SIGNED INT),
1009
f_charbig = CONCAT('===',f_char1,'===');
1010
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1012
SET new.f_int1 = new.f_int1 + @max_row,
1013
new.f_int2 = new.f_int2 - @max_row,
1014
new.f_charbig = '####updated per update trigger####';
1017
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1018
f_charbig = '####updated per update statement itself####';
1020
# check trigger-10 success: 1
1022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1023
f_int2 = CAST(f_char1 AS SIGNED INT),
1024
f_charbig = CONCAT('===',f_char1,'===');
1025
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1027
SET new.f_int1 = @my_max1 + @counter,
1028
new.f_int2 = @my_min2 - @counter,
1029
new.f_charbig = '####updated per insert trigger####';
1030
SET @counter = @counter + 1;
1033
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1034
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1035
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1036
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1041
# check trigger-11 success: 1
1043
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1044
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1045
AND f_charbig = '####updated per insert trigger####';
1046
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1048
SET new.f_int1 = @my_max1 + @counter,
1049
new.f_int2 = @my_min2 - @counter,
1050
new.f_charbig = '####updated per insert trigger####';
1051
SET @counter = @counter + 1;
1054
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1055
INSERT INTO t1 (f_char1, f_char2, f_charbig)
1056
SELECT CAST(f_int1 AS CHAR),
1057
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1062
# check trigger-12 success: 1
1064
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1065
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1066
AND f_charbig = '####updated per insert trigger####';
1068
Table Op Msg_type Msg_text
1069
test.t1 analyze status OK
1070
CHECK TABLE t1 EXTENDED;
1071
Table Op Msg_type Msg_text
1072
test.t1 check status OK
1073
CHECKSUM TABLE t1 EXTENDED;
1075
test.t1 <some_value>
1077
Table Op Msg_type Msg_text
1078
test.t1 optimize status OK
1079
# check layout success: 1
1080
REPAIR TABLE t1 EXTENDED;
1081
Table Op Msg_type Msg_text
1082
test.t1 repair status OK
1083
# check layout success: 1
1086
# check TRUNCATE success: 1
1087
# check layout success: 1
1088
# End usability test (inc/partition_check.inc)
1095
f_charbig VARCHAR(1000)
1098
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
1099
(PARTITION part_3 VALUES IN (-3),
1100
PARTITION part_2 VALUES IN (-2),
1101
PARTITION part_1 VALUES IN (-1),
1102
PARTITION part_N VALUES IN (NULL),
1103
PARTITION part0 VALUES IN (0),
1104
PARTITION part1 VALUES IN (1),
1105
PARTITION part2 VALUES IN (2),
1106
PARTITION part3 VALUES IN (3));
1107
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1108
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1109
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1110
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
1111
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1112
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1113
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1114
# Start usability test (inc/partition_check.inc)
1116
SHOW CREATE TABLE t1;
1118
t1 CREATE TABLE `t1` (
1119
`f_int1` int(11) DEFAULT NULL,
1120
`f_int2` int(11) DEFAULT NULL,
1121
`f_char1` char(20) DEFAULT NULL,
1122
`f_char2` char(20) DEFAULT NULL,
1123
`f_charbig` varchar(1000) DEFAULT NULL,
1124
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
1125
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1126
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
1127
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
1128
PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
1129
PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
1130
PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
1131
PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
1132
PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
1133
PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
1134
PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
1156
# check prerequisites-1 success: 1
1157
# check COUNT(*) success: 1
1158
# check MIN/MAX(f_int1) success: 1
1159
# check MIN/MAX(f_int2) success: 1
1160
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1161
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1162
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1163
WHERE f_int1 IN (2,3);
1164
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
1165
# check prerequisites-3 success: 1
1166
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
1167
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1168
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1169
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1170
WHERE f_int1 IN (2,3);
1171
DELETE FROM t1 WHERE f_charbig = 'delete me';
1172
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1173
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1174
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1175
WHERE f_int1 IN (2,3);
1176
DELETE FROM t1 WHERE f_charbig = 'delete me';
1177
# check read via f_int1 success: 1
1178
# check read via f_int2 success: 1
1180
# check multiple-1 success: 1
1181
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1183
# check multiple-2 success: 1
1184
INSERT INTO t1 SELECT * FROM t0_template
1185
WHERE MOD(f_int1,3) = 0;
1187
# check multiple-3 success: 1
1188
UPDATE t1 SET f_int1 = f_int1 + @max_row
1189
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1190
AND @max_row_div2 + @max_row_div4;
1192
# check multiple-4 success: 1
1194
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1195
AND @max_row_div2 + @max_row_div4 + @max_row;
1197
# check multiple-5 success: 1
1198
SELECT COUNT(*) INTO @try_count FROM t0_template
1199
WHERE MOD(f_int1,3) = 0
1200
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1201
SELECT COUNT(*) INTO @clash_count
1202
FROM t1 INNER JOIN t0_template USING(f_int1)
1203
WHERE MOD(f_int1,3) = 0
1204
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1205
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1207
SET f_int1 = @cur_value , f_int2 = @cur_value,
1208
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1209
f_charbig = '#SINGLE#';
1211
# check single-1 success: 1
1212
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1214
SET f_int1 = @cur_value , f_int2 = @cur_value,
1215
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1216
f_charbig = '#SINGLE#';
1218
# check single-2 success: 1
1219
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1220
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1221
UPDATE t1 SET f_int1 = @cur_value2
1222
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1224
# check single-3 success: 1
1225
SET @cur_value1= -1;
1226
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1227
UPDATE t1 SET f_int1 = @cur_value1
1228
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1230
# check single-4 success: 1
1231
SELECT MAX(f_int1) INTO @cur_value FROM t1;
1232
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1234
# check single-5 success: 1
1235
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1237
# check single-6 success: 1
1238
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1240
# check single-7 success: 1
1241
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
1242
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1243
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1244
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1245
f_charbig = '#NULL#';
1247
SET f_int1 = NULL , f_int2 = -@max_row,
1248
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1249
f_charbig = '#NULL#';
1250
# check null success: 1
1252
# check null-1 success: 1
1253
UPDATE t1 SET f_int1 = -@max_row
1254
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1255
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1257
# check null-2 success: 1
1258
UPDATE t1 SET f_int1 = NULL
1259
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1260
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1262
# check null-3 success: 1
1264
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1265
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1267
# check null-4 success: 1
1269
WHERE f_int1 = 0 AND f_int2 = 0
1270
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1271
AND f_charbig = '#NULL#';
1272
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1273
SELECT f_int1, f_int1, '', '', 'was inserted'
1274
FROM t0_template source_tab
1275
WHERE MOD(f_int1,3) = 0
1276
AND f_int1 BETWEEN @max_row_div2 AND @max_row
1278
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
1279
f_int2 = 2 * @max_row + source_tab.f_int1,
1280
f_charbig = 'was updated';
1282
# check unique-1-a success: 1
1284
# check unique-1-b success: 1
1285
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1286
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1287
f_int2 = CAST(f_char1 AS SIGNED INT),
1288
f_charbig = CONCAT('===',f_char1,'===')
1289
WHERE f_charbig = 'was updated';
1290
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1291
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
1292
FROM t0_template source_tab
1293
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1295
# check replace success: 1
1297
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
1299
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
1300
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
1301
UPDATE t1 SET f_int2 = f_int1,
1302
f_char1 = CAST(f_int1 AS CHAR),
1303
f_char2 = CAST(f_int1 AS CHAR),
1304
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
1305
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
1307
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1308
SELECT f_int1, f_int1, '', '', 'was inserted'
1309
FROM t0_template source_tab
1310
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1312
# check transactions-1 success: 1
1315
# check transactions-2 success: 1
1318
# check transactions-3 success: 1
1319
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1323
# check transactions-4 success: 1
1324
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1325
SELECT f_int1, f_int1, '', '', 'was inserted'
1326
FROM t0_template source_tab
1327
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1329
# check transactions-5 success: 1
1332
Warning 1196 Some non-transactional changed tables couldn't be rolled back
1334
# check transactions-6 success: 1
1335
# INFO: Storage engine used for t1 seems to be not transactional.
1338
# check transactions-7 success: 1
1339
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1341
SET @@session.sql_mode = 'traditional';
1342
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1343
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1344
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1345
'', '', 'was inserted' FROM t0_template
1346
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1347
ERROR 22012: Division by 0
1350
# check transactions-8 success: 1
1351
# INFO: Storage engine used for t1 seems to be unable to revert
1352
# changes made by the failing statement.
1353
SET @@session.sql_mode = '';
1355
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1357
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1359
# check special-1 success: 1
1360
UPDATE t1 SET f_charbig = '';
1362
# check special-2 success: 1
1363
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1364
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1365
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1368
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1369
'just inserted' FROM t0_template
1370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1371
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1373
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1374
f_charbig = 'updated by trigger'
1375
WHERE f_int1 = new.f_int1;
1377
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1378
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1381
# check trigger-1 success: 1
1383
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1384
f_int2 = CAST(f_char1 AS SIGNED INT),
1385
f_charbig = 'just inserted'
1386
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1388
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1389
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1390
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1391
'just inserted' FROM t0_template
1392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1393
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1395
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1396
f_charbig = 'updated by trigger'
1397
WHERE f_int1 = new.f_int1;
1399
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1400
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1403
# check trigger-2 success: 1
1405
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1406
f_int2 = CAST(f_char1 AS SIGNED INT),
1407
f_charbig = 'just inserted'
1408
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1410
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1411
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1412
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1413
'just inserted' FROM t0_template
1414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1415
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1417
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1418
f_charbig = 'updated by trigger'
1419
WHERE f_int1 = new.f_int1;
1421
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
1422
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1424
# check trigger-3 success: 1
1426
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1427
f_int2 = CAST(f_char1 AS SIGNED INT),
1428
f_charbig = 'just inserted'
1429
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1431
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1432
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1433
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1434
'just inserted' FROM t0_template
1435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1436
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1438
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1439
f_charbig = 'updated by trigger'
1440
WHERE f_int1 = - old.f_int1;
1442
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
1443
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1445
# check trigger-4 success: 1
1447
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1448
f_int2 = CAST(f_char1 AS SIGNED INT),
1449
f_charbig = 'just inserted'
1450
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1452
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1453
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1454
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1455
'just inserted' FROM t0_template
1456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1457
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1459
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1460
f_charbig = 'updated by trigger'
1461
WHERE f_int1 = new.f_int1;
1463
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
1464
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1466
# check trigger-5 success: 1
1468
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1469
f_int2 = CAST(f_char1 AS SIGNED INT),
1470
f_charbig = 'just inserted'
1471
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1473
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1474
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1475
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1476
'just inserted' FROM t0_template
1477
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1478
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1480
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1481
f_charbig = 'updated by trigger'
1482
WHERE f_int1 = - old.f_int1;
1484
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
1485
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1487
# check trigger-6 success: 1
1489
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1490
f_int2 = CAST(f_char1 AS SIGNED INT),
1491
f_charbig = 'just inserted'
1492
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1494
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1495
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1496
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1497
'just inserted' FROM t0_template
1498
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1499
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1501
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1502
f_charbig = 'updated by trigger'
1503
WHERE f_int1 = - old.f_int1;
1506
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1508
# check trigger-7 success: 1
1510
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1511
f_int2 = CAST(f_char1 AS SIGNED INT),
1512
f_charbig = 'just inserted'
1513
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1515
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1516
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1517
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1518
'just inserted' FROM t0_template
1519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1520
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1522
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1523
f_charbig = 'updated by trigger'
1524
WHERE f_int1 = - old.f_int1;
1527
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1529
# check trigger-8 success: 1
1531
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1532
f_int2 = CAST(f_char1 AS SIGNED INT),
1533
f_charbig = 'just inserted'
1534
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1536
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1538
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1539
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1541
SET new.f_int1 = old.f_int1 + @max_row,
1542
new.f_int2 = old.f_int2 - @max_row,
1543
new.f_charbig = '####updated per update trigger####';
1546
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1547
f_charbig = '####updated per update statement itself####';
1549
# check trigger-9 success: 1
1551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1552
f_int2 = CAST(f_char1 AS SIGNED INT),
1553
f_charbig = CONCAT('===',f_char1,'===');
1554
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1556
SET new.f_int1 = new.f_int1 + @max_row,
1557
new.f_int2 = new.f_int2 - @max_row,
1558
new.f_charbig = '####updated per update trigger####';
1561
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1562
f_charbig = '####updated per update statement itself####';
1564
# check trigger-10 success: 1
1566
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1567
f_int2 = CAST(f_char1 AS SIGNED INT),
1568
f_charbig = CONCAT('===',f_char1,'===');
1569
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1571
SET new.f_int1 = @my_max1 + @counter,
1572
new.f_int2 = @my_min2 - @counter,
1573
new.f_charbig = '####updated per insert trigger####';
1574
SET @counter = @counter + 1;
1577
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1578
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1579
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1580
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1585
# check trigger-11 success: 1
1587
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1588
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1589
AND f_charbig = '####updated per insert trigger####';
1590
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1592
SET new.f_int1 = @my_max1 + @counter,
1593
new.f_int2 = @my_min2 - @counter,
1594
new.f_charbig = '####updated per insert trigger####';
1595
SET @counter = @counter + 1;
1598
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1599
INSERT INTO t1 (f_char1, f_char2, f_charbig)
1600
SELECT CAST(f_int1 AS CHAR),
1601
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1606
# check trigger-12 success: 1
1608
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1609
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1610
AND f_charbig = '####updated per insert trigger####';
1612
Table Op Msg_type Msg_text
1613
test.t1 analyze status OK
1614
CHECK TABLE t1 EXTENDED;
1615
Table Op Msg_type Msg_text
1616
test.t1 check status OK
1617
CHECKSUM TABLE t1 EXTENDED;
1619
test.t1 <some_value>
1621
Table Op Msg_type Msg_text
1622
test.t1 optimize status OK
1623
# check layout success: 1
1624
REPAIR TABLE t1 EXTENDED;
1625
Table Op Msg_type Msg_text
1626
test.t1 repair status OK
1627
# check layout success: 1
1630
# check TRUNCATE success: 1
1631
# check layout success: 1
1632
# End usability test (inc/partition_check.inc)
1639
f_charbig VARCHAR(1000)
1642
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
1643
(PARTITION parta VALUES LESS THAN (0),
1644
PARTITION partb VALUES LESS THAN (5),
1645
PARTITION partc VALUES LESS THAN (10),
1646
PARTITION partd VALUES LESS THAN (10 + 5),
1647
PARTITION parte VALUES LESS THAN (20),
1648
PARTITION partf VALUES LESS THAN (2147483646));
1649
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1650
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1651
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1652
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
1653
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1654
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1655
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1656
# Start usability test (inc/partition_check.inc)
1658
SHOW CREATE TABLE t1;
1660
t1 CREATE TABLE `t1` (
1661
`f_int1` int(11) DEFAULT NULL,
1662
`f_int2` int(11) DEFAULT NULL,
1663
`f_char1` char(20) DEFAULT NULL,
1664
`f_char2` char(20) DEFAULT NULL,
1665
`f_charbig` varchar(1000) DEFAULT NULL,
1666
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
1667
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1668
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
1669
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
1670
PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
1671
PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
1672
PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
1673
PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
1674
PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
1692
# check prerequisites-1 success: 1
1693
# check COUNT(*) success: 1
1694
# check MIN/MAX(f_int1) success: 1
1695
# check MIN/MAX(f_int2) success: 1
1696
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1697
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1698
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1699
WHERE f_int1 IN (2,3);
1700
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
1701
# check prerequisites-3 success: 1
1702
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
1703
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1704
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1705
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1706
WHERE f_int1 IN (2,3);
1707
DELETE FROM t1 WHERE f_charbig = 'delete me';
1708
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1709
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1710
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1711
WHERE f_int1 IN (2,3);
1712
DELETE FROM t1 WHERE f_charbig = 'delete me';
1713
# check read via f_int1 success: 1
1714
# check read via f_int2 success: 1
1716
# check multiple-1 success: 1
1717
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1719
# check multiple-2 success: 1
1720
INSERT INTO t1 SELECT * FROM t0_template
1721
WHERE MOD(f_int1,3) = 0;
1723
# check multiple-3 success: 1
1724
UPDATE t1 SET f_int1 = f_int1 + @max_row
1725
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1726
AND @max_row_div2 + @max_row_div4;
1728
# check multiple-4 success: 1
1730
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1731
AND @max_row_div2 + @max_row_div4 + @max_row;
1733
# check multiple-5 success: 1
1734
SELECT COUNT(*) INTO @try_count FROM t0_template
1735
WHERE MOD(f_int1,3) = 0
1736
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1737
SELECT COUNT(*) INTO @clash_count
1738
FROM t1 INNER JOIN t0_template USING(f_int1)
1739
WHERE MOD(f_int1,3) = 0
1740
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1741
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1743
SET f_int1 = @cur_value , f_int2 = @cur_value,
1744
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1745
f_charbig = '#SINGLE#';
1747
# check single-1 success: 1
1748
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1750
SET f_int1 = @cur_value , f_int2 = @cur_value,
1751
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1752
f_charbig = '#SINGLE#';
1754
# check single-2 success: 1
1755
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1756
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1757
UPDATE t1 SET f_int1 = @cur_value2
1758
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1760
# check single-3 success: 1
1761
SET @cur_value1= -1;
1762
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1763
UPDATE t1 SET f_int1 = @cur_value1
1764
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1766
# check single-4 success: 1
1767
SELECT MAX(f_int1) INTO @cur_value FROM t1;
1768
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1770
# check single-5 success: 1
1771
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1773
# check single-6 success: 1
1774
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1775
ERROR HY000: Table has no partition for value 2147483647
1776
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1777
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1778
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1779
f_charbig = '#NULL#';
1781
SET f_int1 = NULL , f_int2 = -@max_row,
1782
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1783
f_charbig = '#NULL#';
1784
# check null success: 1
1786
# check null-1 success: 1
1787
UPDATE t1 SET f_int1 = -@max_row
1788
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1789
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1791
# check null-2 success: 1
1792
UPDATE t1 SET f_int1 = NULL
1793
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1794
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1796
# check null-3 success: 1
1798
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1799
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1801
# check null-4 success: 1
1803
WHERE f_int1 = 0 AND f_int2 = 0
1804
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1805
AND f_charbig = '#NULL#';
1806
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1807
SELECT f_int1, f_int1, '', '', 'was inserted'
1808
FROM t0_template source_tab
1809
WHERE MOD(f_int1,3) = 0
1810
AND f_int1 BETWEEN @max_row_div2 AND @max_row
1812
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
1813
f_int2 = 2 * @max_row + source_tab.f_int1,
1814
f_charbig = 'was updated';
1816
# check unique-1-a success: 1
1818
# check unique-1-b success: 1
1819
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1820
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1821
f_int2 = CAST(f_char1 AS SIGNED INT),
1822
f_charbig = CONCAT('===',f_char1,'===')
1823
WHERE f_charbig = 'was updated';
1824
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1825
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
1826
FROM t0_template source_tab
1827
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1829
# check replace success: 1
1831
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
1833
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
1834
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
1835
UPDATE t1 SET f_int2 = f_int1,
1836
f_char1 = CAST(f_int1 AS CHAR),
1837
f_char2 = CAST(f_int1 AS CHAR),
1838
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
1839
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
1841
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1842
SELECT f_int1, f_int1, '', '', 'was inserted'
1843
FROM t0_template source_tab
1844
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1846
# check transactions-1 success: 1
1849
# check transactions-2 success: 1
1852
# check transactions-3 success: 1
1853
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1857
# check transactions-4 success: 1
1858
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1859
SELECT f_int1, f_int1, '', '', 'was inserted'
1860
FROM t0_template source_tab
1861
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1863
# check transactions-5 success: 1
1866
Warning 1196 Some non-transactional changed tables couldn't be rolled back
1868
# check transactions-6 success: 1
1869
# INFO: Storage engine used for t1 seems to be not transactional.
1872
# check transactions-7 success: 1
1873
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1875
SET @@session.sql_mode = 'traditional';
1876
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1878
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1879
'', '', 'was inserted' FROM t0_template
1880
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1881
ERROR 22012: Division by 0
1884
# check transactions-8 success: 1
1885
# INFO: Storage engine used for t1 seems to be unable to revert
1886
# changes made by the failing statement.
1887
SET @@session.sql_mode = '';
1889
DELETE FROM t1 WHERE f_charbig = 'was inserted';
1891
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1893
# check special-1 success: 1
1894
UPDATE t1 SET f_charbig = '';
1896
# check special-2 success: 1
1897
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1898
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1899
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1901
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1902
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1903
'just inserted' FROM t0_template
1904
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1905
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1907
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1908
f_charbig = 'updated by trigger'
1909
WHERE f_int1 = new.f_int1;
1911
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1912
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1915
# check trigger-1 success: 1
1917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1918
f_int2 = CAST(f_char1 AS SIGNED INT),
1919
f_charbig = 'just inserted'
1920
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1925
'just inserted' FROM t0_template
1926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1927
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1930
f_charbig = 'updated by trigger'
1931
WHERE f_int1 = new.f_int1;
1933
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1934
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1937
# check trigger-2 success: 1
1939
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1940
f_int2 = CAST(f_char1 AS SIGNED INT),
1941
f_charbig = 'just inserted'
1942
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1944
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1946
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1947
'just inserted' FROM t0_template
1948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1949
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1951
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1952
f_charbig = 'updated by trigger'
1953
WHERE f_int1 = new.f_int1;
1955
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
1956
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1958
# check trigger-3 success: 1
1960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1961
f_int2 = CAST(f_char1 AS SIGNED INT),
1962
f_charbig = 'just inserted'
1963
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1965
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1966
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1967
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1968
'just inserted' FROM t0_template
1969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1970
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1972
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1973
f_charbig = 'updated by trigger'
1974
WHERE f_int1 = - old.f_int1;
1976
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
1977
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1979
# check trigger-4 success: 1
1981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1982
f_int2 = CAST(f_char1 AS SIGNED INT),
1983
f_charbig = 'just inserted'
1984
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1986
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1987
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1988
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1989
'just inserted' FROM t0_template
1990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1991
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1993
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1994
f_charbig = 'updated by trigger'
1995
WHERE f_int1 = new.f_int1;
1997
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
1998
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2000
# check trigger-5 success: 1
2002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2003
f_int2 = CAST(f_char1 AS SIGNED INT),
2004
f_charbig = 'just inserted'
2005
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2007
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2008
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2009
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2010
'just inserted' FROM t0_template
2011
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2012
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2014
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2015
f_charbig = 'updated by trigger'
2016
WHERE f_int1 = - old.f_int1;
2018
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
2019
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2021
# check trigger-6 success: 1
2023
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2024
f_int2 = CAST(f_char1 AS SIGNED INT),
2025
f_charbig = 'just inserted'
2026
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2028
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2029
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2030
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2031
'just inserted' FROM t0_template
2032
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2033
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2035
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2036
f_charbig = 'updated by trigger'
2037
WHERE f_int1 = - old.f_int1;
2040
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2042
# check trigger-7 success: 1
2044
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2045
f_int2 = CAST(f_char1 AS SIGNED INT),
2046
f_charbig = 'just inserted'
2047
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2049
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2051
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2052
'just inserted' FROM t0_template
2053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2054
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2056
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2057
f_charbig = 'updated by trigger'
2058
WHERE f_int1 = - old.f_int1;
2061
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2063
# check trigger-8 success: 1
2065
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2066
f_int2 = CAST(f_char1 AS SIGNED INT),
2067
f_charbig = 'just inserted'
2068
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2070
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2073
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2075
SET new.f_int1 = old.f_int1 + @max_row,
2076
new.f_int2 = old.f_int2 - @max_row,
2077
new.f_charbig = '####updated per update trigger####';
2080
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2081
f_charbig = '####updated per update statement itself####';
2083
# check trigger-9 success: 1
2085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2086
f_int2 = CAST(f_char1 AS SIGNED INT),
2087
f_charbig = CONCAT('===',f_char1,'===');
2088
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2090
SET new.f_int1 = new.f_int1 + @max_row,
2091
new.f_int2 = new.f_int2 - @max_row,
2092
new.f_charbig = '####updated per update trigger####';
2095
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2096
f_charbig = '####updated per update statement itself####';
2098
# check trigger-10 success: 1
2100
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2101
f_int2 = CAST(f_char1 AS SIGNED INT),
2102
f_charbig = CONCAT('===',f_char1,'===');
2103
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2105
SET new.f_int1 = @my_max1 + @counter,
2106
new.f_int2 = @my_min2 - @counter,
2107
new.f_charbig = '####updated per insert trigger####';
2108
SET @counter = @counter + 1;
2111
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2112
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2113
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2114
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2119
# check trigger-11 success: 1
2121
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2122
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2123
AND f_charbig = '####updated per insert trigger####';
2124
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2126
SET new.f_int1 = @my_max1 + @counter,
2127
new.f_int2 = @my_min2 - @counter,
2128
new.f_charbig = '####updated per insert trigger####';
2129
SET @counter = @counter + 1;
2132
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2133
INSERT INTO t1 (f_char1, f_char2, f_charbig)
2134
SELECT CAST(f_int1 AS CHAR),
2135
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2140
# check trigger-12 success: 1
2142
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2143
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2144
AND f_charbig = '####updated per insert trigger####';
2146
Table Op Msg_type Msg_text
2147
test.t1 analyze status OK
2148
CHECK TABLE t1 EXTENDED;
2149
Table Op Msg_type Msg_text
2150
test.t1 check status OK
2151
CHECKSUM TABLE t1 EXTENDED;
2153
test.t1 <some_value>
2155
Table Op Msg_type Msg_text
2156
test.t1 optimize status OK
2157
# check layout success: 1
2158
REPAIR TABLE t1 EXTENDED;
2159
Table Op Msg_type Msg_text
2160
test.t1 repair status OK
2161
# check layout success: 1
2164
# check TRUNCATE success: 1
2165
# check layout success: 1
2166
# End usability test (inc/partition_check.inc)
2173
f_charbig VARCHAR(1000)
2176
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
2177
(PARTITION parta VALUES LESS THAN (0),
2178
PARTITION partb VALUES LESS THAN (5),
2179
PARTITION partc VALUES LESS THAN (10),
2180
PARTITION partd VALUES LESS THAN (2147483646));
2181
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2182
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2183
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2184
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
2185
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2186
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2187
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2188
# Start usability test (inc/partition_check.inc)
2190
SHOW CREATE TABLE t1;
2192
t1 CREATE TABLE `t1` (
2193
`f_int1` int(11) DEFAULT NULL,
2194
`f_int2` int(11) DEFAULT NULL,
2195
`f_char1` char(20) DEFAULT NULL,
2196
`f_char2` char(20) DEFAULT NULL,
2197
`f_charbig` varchar(1000) DEFAULT NULL,
2198
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
2199
) ENGINE=MyISAM DEFAULT CHARSET=latin1
2200
/*!50100 PARTITION BY RANGE (f_int1)
2201
SUBPARTITION BY HASH (f_int2)
2203
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
2204
PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
2205
PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
2206
PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
2209
t1#P#parta#SP#partasp0.MYD
2210
t1#P#parta#SP#partasp0.MYI
2211
t1#P#parta#SP#partasp1.MYD
2212
t1#P#parta#SP#partasp1.MYI
2213
t1#P#partb#SP#partbsp0.MYD
2214
t1#P#partb#SP#partbsp0.MYI
2215
t1#P#partb#SP#partbsp1.MYD
2216
t1#P#partb#SP#partbsp1.MYI
2217
t1#P#partc#SP#partcsp0.MYD
2218
t1#P#partc#SP#partcsp0.MYI
2219
t1#P#partc#SP#partcsp1.MYD
2220
t1#P#partc#SP#partcsp1.MYI
2221
t1#P#partd#SP#partdsp0.MYD
2222
t1#P#partd#SP#partdsp0.MYI
2223
t1#P#partd#SP#partdsp1.MYD
2224
t1#P#partd#SP#partdsp1.MYI
2228
# check prerequisites-1 success: 1
2229
# check COUNT(*) success: 1
2230
# check MIN/MAX(f_int1) success: 1
2231
# check MIN/MAX(f_int2) success: 1
2232
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2233
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2234
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2235
WHERE f_int1 IN (2,3);
2236
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
2237
# check prerequisites-3 success: 1
2238
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
2239
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2240
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2241
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2242
WHERE f_int1 IN (2,3);
2243
DELETE FROM t1 WHERE f_charbig = 'delete me';
2244
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2245
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2246
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2247
WHERE f_int1 IN (2,3);
2248
DELETE FROM t1 WHERE f_charbig = 'delete me';
2249
# check read via f_int1 success: 1
2250
# check read via f_int2 success: 1
2252
# check multiple-1 success: 1
2253
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2255
# check multiple-2 success: 1
2256
INSERT INTO t1 SELECT * FROM t0_template
2257
WHERE MOD(f_int1,3) = 0;
2259
# check multiple-3 success: 1
2260
UPDATE t1 SET f_int1 = f_int1 + @max_row
2261
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2262
AND @max_row_div2 + @max_row_div4;
2264
# check multiple-4 success: 1
2266
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2267
AND @max_row_div2 + @max_row_div4 + @max_row;
2269
# check multiple-5 success: 1
2270
SELECT COUNT(*) INTO @try_count FROM t0_template
2271
WHERE MOD(f_int1,3) = 0
2272
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2273
SELECT COUNT(*) INTO @clash_count
2274
FROM t1 INNER JOIN t0_template USING(f_int1)
2275
WHERE MOD(f_int1,3) = 0
2276
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2277
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2279
SET f_int1 = @cur_value , f_int2 = @cur_value,
2280
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2281
f_charbig = '#SINGLE#';
2283
# check single-1 success: 1
2284
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2286
SET f_int1 = @cur_value , f_int2 = @cur_value,
2287
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2288
f_charbig = '#SINGLE#';
2290
# check single-2 success: 1
2291
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2292
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2293
UPDATE t1 SET f_int1 = @cur_value2
2294
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2296
# check single-3 success: 1
2297
SET @cur_value1= -1;
2298
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2299
UPDATE t1 SET f_int1 = @cur_value1
2300
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2302
# check single-4 success: 1
2303
SELECT MAX(f_int1) INTO @cur_value FROM t1;
2304
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2306
# check single-5 success: 1
2307
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2309
# check single-6 success: 1
2310
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2311
ERROR HY000: Table has no partition for value 2147483647
2312
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2313
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2314
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2315
f_charbig = '#NULL#';
2317
SET f_int1 = NULL , f_int2 = -@max_row,
2318
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2319
f_charbig = '#NULL#';
2320
# check null success: 1
2322
# check null-1 success: 1
2323
UPDATE t1 SET f_int1 = -@max_row
2324
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2325
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2327
# check null-2 success: 1
2328
UPDATE t1 SET f_int1 = NULL
2329
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2330
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2332
# check null-3 success: 1
2334
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2335
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2337
# check null-4 success: 1
2339
WHERE f_int1 = 0 AND f_int2 = 0
2340
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2341
AND f_charbig = '#NULL#';
2342
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2343
SELECT f_int1, f_int1, '', '', 'was inserted'
2344
FROM t0_template source_tab
2345
WHERE MOD(f_int1,3) = 0
2346
AND f_int1 BETWEEN @max_row_div2 AND @max_row
2348
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
2349
f_int2 = 2 * @max_row + source_tab.f_int1,
2350
f_charbig = 'was updated';
2352
# check unique-1-a success: 1
2354
# check unique-1-b success: 1
2355
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2356
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2357
f_int2 = CAST(f_char1 AS SIGNED INT),
2358
f_charbig = CONCAT('===',f_char1,'===')
2359
WHERE f_charbig = 'was updated';
2360
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2361
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
2362
FROM t0_template source_tab
2363
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2365
# check replace success: 1
2367
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
2369
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
2370
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
2371
UPDATE t1 SET f_int2 = f_int1,
2372
f_char1 = CAST(f_int1 AS CHAR),
2373
f_char2 = CAST(f_int1 AS CHAR),
2374
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
2375
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
2377
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2378
SELECT f_int1, f_int1, '', '', 'was inserted'
2379
FROM t0_template source_tab
2380
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2382
# check transactions-1 success: 1
2385
# check transactions-2 success: 1
2388
# check transactions-3 success: 1
2389
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2393
# check transactions-4 success: 1
2394
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2395
SELECT f_int1, f_int1, '', '', 'was inserted'
2396
FROM t0_template source_tab
2397
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2399
# check transactions-5 success: 1
2402
Warning 1196 Some non-transactional changed tables couldn't be rolled back
2404
# check transactions-6 success: 1
2405
# INFO: Storage engine used for t1 seems to be not transactional.
2408
# check transactions-7 success: 1
2409
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2411
SET @@session.sql_mode = 'traditional';
2412
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2414
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2415
'', '', 'was inserted' FROM t0_template
2416
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2417
ERROR 22012: Division by 0
2420
# check transactions-8 success: 1
2421
# INFO: Storage engine used for t1 seems to be unable to revert
2422
# changes made by the failing statement.
2423
SET @@session.sql_mode = '';
2425
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2427
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2429
# check special-1 success: 1
2430
UPDATE t1 SET f_charbig = '';
2432
# check special-2 success: 1
2433
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2434
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2435
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2437
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2438
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2439
'just inserted' FROM t0_template
2440
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2441
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2443
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2444
f_charbig = 'updated by trigger'
2445
WHERE f_int1 = new.f_int1;
2447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2448
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2451
# check trigger-1 success: 1
2453
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2454
f_int2 = CAST(f_char1 AS SIGNED INT),
2455
f_charbig = 'just inserted'
2456
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2458
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2459
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2460
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2461
'just inserted' FROM t0_template
2462
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2463
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2465
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2466
f_charbig = 'updated by trigger'
2467
WHERE f_int1 = new.f_int1;
2469
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2470
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2473
# check trigger-2 success: 1
2475
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2476
f_int2 = CAST(f_char1 AS SIGNED INT),
2477
f_charbig = 'just inserted'
2478
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2480
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2482
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2483
'just inserted' FROM t0_template
2484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2485
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2487
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2488
f_charbig = 'updated by trigger'
2489
WHERE f_int1 = new.f_int1;
2491
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
2492
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2494
# check trigger-3 success: 1
2496
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2497
f_int2 = CAST(f_char1 AS SIGNED INT),
2498
f_charbig = 'just inserted'
2499
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2501
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2503
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2504
'just inserted' FROM t0_template
2505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2506
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2508
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2509
f_charbig = 'updated by trigger'
2510
WHERE f_int1 = - old.f_int1;
2512
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
2513
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2515
# check trigger-4 success: 1
2517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2518
f_int2 = CAST(f_char1 AS SIGNED INT),
2519
f_charbig = 'just inserted'
2520
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2525
'just inserted' FROM t0_template
2526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2527
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2530
f_charbig = 'updated by trigger'
2531
WHERE f_int1 = new.f_int1;
2533
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
2534
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2536
# check trigger-5 success: 1
2538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2539
f_int2 = CAST(f_char1 AS SIGNED INT),
2540
f_charbig = 'just inserted'
2541
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2543
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2545
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2546
'just inserted' FROM t0_template
2547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2548
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2550
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2551
f_charbig = 'updated by trigger'
2552
WHERE f_int1 = - old.f_int1;
2554
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
2555
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2557
# check trigger-6 success: 1
2559
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2560
f_int2 = CAST(f_char1 AS SIGNED INT),
2561
f_charbig = 'just inserted'
2562
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2564
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2566
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2567
'just inserted' FROM t0_template
2568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2569
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2571
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2572
f_charbig = 'updated by trigger'
2573
WHERE f_int1 = - old.f_int1;
2576
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2578
# check trigger-7 success: 1
2580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2581
f_int2 = CAST(f_char1 AS SIGNED INT),
2582
f_charbig = 'just inserted'
2583
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2585
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2587
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2588
'just inserted' FROM t0_template
2589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2590
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2592
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2593
f_charbig = 'updated by trigger'
2594
WHERE f_int1 = - old.f_int1;
2597
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2599
# check trigger-8 success: 1
2601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2602
f_int2 = CAST(f_char1 AS SIGNED INT),
2603
f_charbig = 'just inserted'
2604
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2606
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2609
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2611
SET new.f_int1 = old.f_int1 + @max_row,
2612
new.f_int2 = old.f_int2 - @max_row,
2613
new.f_charbig = '####updated per update trigger####';
2616
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2617
f_charbig = '####updated per update statement itself####';
2619
# check trigger-9 success: 1
2621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2622
f_int2 = CAST(f_char1 AS SIGNED INT),
2623
f_charbig = CONCAT('===',f_char1,'===');
2624
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2626
SET new.f_int1 = new.f_int1 + @max_row,
2627
new.f_int2 = new.f_int2 - @max_row,
2628
new.f_charbig = '####updated per update trigger####';
2631
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2632
f_charbig = '####updated per update statement itself####';
2634
# check trigger-10 success: 1
2636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2637
f_int2 = CAST(f_char1 AS SIGNED INT),
2638
f_charbig = CONCAT('===',f_char1,'===');
2639
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2641
SET new.f_int1 = @my_max1 + @counter,
2642
new.f_int2 = @my_min2 - @counter,
2643
new.f_charbig = '####updated per insert trigger####';
2644
SET @counter = @counter + 1;
2647
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2648
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2649
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2650
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2655
# check trigger-11 success: 1
2657
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2658
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2659
AND f_charbig = '####updated per insert trigger####';
2660
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2662
SET new.f_int1 = @my_max1 + @counter,
2663
new.f_int2 = @my_min2 - @counter,
2664
new.f_charbig = '####updated per insert trigger####';
2665
SET @counter = @counter + 1;
2668
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2669
INSERT INTO t1 (f_char1, f_char2, f_charbig)
2670
SELECT CAST(f_int1 AS CHAR),
2671
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2676
# check trigger-12 success: 1
2678
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2679
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2680
AND f_charbig = '####updated per insert trigger####';
2682
Table Op Msg_type Msg_text
2683
test.t1 analyze status OK
2684
CHECK TABLE t1 EXTENDED;
2685
Table Op Msg_type Msg_text
2686
test.t1 check status OK
2687
CHECKSUM TABLE t1 EXTENDED;
2689
test.t1 <some_value>
2691
Table Op Msg_type Msg_text
2692
test.t1 optimize status OK
2693
# check layout success: 1
2694
REPAIR TABLE t1 EXTENDED;
2695
Table Op Msg_type Msg_text
2696
test.t1 repair status OK
2697
# check layout success: 1
2700
# check TRUNCATE success: 1
2701
# check layout success: 1
2702
# End usability test (inc/partition_check.inc)
2709
f_charbig VARCHAR(1000)
2712
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
2713
(PARTITION part1 VALUES LESS THAN (0)
2714
(SUBPARTITION subpart11, SUBPARTITION subpart12),
2715
PARTITION part2 VALUES LESS THAN (5)
2716
(SUBPARTITION subpart21, SUBPARTITION subpart22),
2717
PARTITION part3 VALUES LESS THAN (10)
2718
(SUBPARTITION subpart31, SUBPARTITION subpart32),
2719
PARTITION part4 VALUES LESS THAN (2147483646)
2720
(SUBPARTITION subpart41, SUBPARTITION subpart42));
2721
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2722
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2723
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2724
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
2725
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2726
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2727
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2728
# Start usability test (inc/partition_check.inc)
2730
SHOW CREATE TABLE t1;
2732
t1 CREATE TABLE `t1` (
2733
`f_int1` int(11) DEFAULT NULL,
2734
`f_int2` int(11) DEFAULT NULL,
2735
`f_char1` char(20) DEFAULT NULL,
2736
`f_char2` char(20) DEFAULT NULL,
2737
`f_charbig` varchar(1000) DEFAULT NULL,
2738
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
2739
) ENGINE=MyISAM DEFAULT CHARSET=latin1
2740
/*!50100 PARTITION BY RANGE (f_int1)
2741
SUBPARTITION BY KEY (f_int2)
2742
(PARTITION part1 VALUES LESS THAN (0)
2743
(SUBPARTITION subpart11 ENGINE = MyISAM,
2744
SUBPARTITION subpart12 ENGINE = MyISAM),
2745
PARTITION part2 VALUES LESS THAN (5)
2746
(SUBPARTITION subpart21 ENGINE = MyISAM,
2747
SUBPARTITION subpart22 ENGINE = MyISAM),
2748
PARTITION part3 VALUES LESS THAN (10)
2749
(SUBPARTITION subpart31 ENGINE = MyISAM,
2750
SUBPARTITION subpart32 ENGINE = MyISAM),
2751
PARTITION part4 VALUES LESS THAN (2147483646)
2752
(SUBPARTITION subpart41 ENGINE = MyISAM,
2753
SUBPARTITION subpart42 ENGINE = MyISAM)) */
2756
t1#P#part1#SP#subpart11.MYD
2757
t1#P#part1#SP#subpart11.MYI
2758
t1#P#part1#SP#subpart12.MYD
2759
t1#P#part1#SP#subpart12.MYI
2760
t1#P#part2#SP#subpart21.MYD
2761
t1#P#part2#SP#subpart21.MYI
2762
t1#P#part2#SP#subpart22.MYD
2763
t1#P#part2#SP#subpart22.MYI
2764
t1#P#part3#SP#subpart31.MYD
2765
t1#P#part3#SP#subpart31.MYI
2766
t1#P#part3#SP#subpart32.MYD
2767
t1#P#part3#SP#subpart32.MYI
2768
t1#P#part4#SP#subpart41.MYD
2769
t1#P#part4#SP#subpart41.MYI
2770
t1#P#part4#SP#subpart42.MYD
2771
t1#P#part4#SP#subpart42.MYI
2775
# check prerequisites-1 success: 1
2776
# check COUNT(*) success: 1
2777
# check MIN/MAX(f_int1) success: 1
2778
# check MIN/MAX(f_int2) success: 1
2779
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2780
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2781
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2782
WHERE f_int1 IN (2,3);
2783
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
2784
# check prerequisites-3 success: 1
2785
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
2786
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2787
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2788
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2789
WHERE f_int1 IN (2,3);
2790
DELETE FROM t1 WHERE f_charbig = 'delete me';
2791
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2792
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2793
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2794
WHERE f_int1 IN (2,3);
2795
DELETE FROM t1 WHERE f_charbig = 'delete me';
2796
# check read via f_int1 success: 1
2797
# check read via f_int2 success: 1
2799
# check multiple-1 success: 1
2800
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2802
# check multiple-2 success: 1
2803
INSERT INTO t1 SELECT * FROM t0_template
2804
WHERE MOD(f_int1,3) = 0;
2806
# check multiple-3 success: 1
2807
UPDATE t1 SET f_int1 = f_int1 + @max_row
2808
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2809
AND @max_row_div2 + @max_row_div4;
2811
# check multiple-4 success: 1
2813
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2814
AND @max_row_div2 + @max_row_div4 + @max_row;
2816
# check multiple-5 success: 1
2817
SELECT COUNT(*) INTO @try_count FROM t0_template
2818
WHERE MOD(f_int1,3) = 0
2819
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2820
SELECT COUNT(*) INTO @clash_count
2821
FROM t1 INNER JOIN t0_template USING(f_int1)
2822
WHERE MOD(f_int1,3) = 0
2823
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2824
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2826
SET f_int1 = @cur_value , f_int2 = @cur_value,
2827
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2828
f_charbig = '#SINGLE#';
2830
# check single-1 success: 1
2831
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2833
SET f_int1 = @cur_value , f_int2 = @cur_value,
2834
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2835
f_charbig = '#SINGLE#';
2837
# check single-2 success: 1
2838
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2839
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2840
UPDATE t1 SET f_int1 = @cur_value2
2841
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2843
# check single-3 success: 1
2844
SET @cur_value1= -1;
2845
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2846
UPDATE t1 SET f_int1 = @cur_value1
2847
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2849
# check single-4 success: 1
2850
SELECT MAX(f_int1) INTO @cur_value FROM t1;
2851
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2853
# check single-5 success: 1
2854
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2856
# check single-6 success: 1
2857
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2858
ERROR HY000: Table has no partition for value 2147483647
2859
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2860
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2861
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2862
f_charbig = '#NULL#';
2864
SET f_int1 = NULL , f_int2 = -@max_row,
2865
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2866
f_charbig = '#NULL#';
2867
# check null success: 1
2869
# check null-1 success: 1
2870
UPDATE t1 SET f_int1 = -@max_row
2871
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2872
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2874
# check null-2 success: 1
2875
UPDATE t1 SET f_int1 = NULL
2876
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2877
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2879
# check null-3 success: 1
2881
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2882
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2884
# check null-4 success: 1
2886
WHERE f_int1 = 0 AND f_int2 = 0
2887
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2888
AND f_charbig = '#NULL#';
2889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2890
SELECT f_int1, f_int1, '', '', 'was inserted'
2891
FROM t0_template source_tab
2892
WHERE MOD(f_int1,3) = 0
2893
AND f_int1 BETWEEN @max_row_div2 AND @max_row
2895
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
2896
f_int2 = 2 * @max_row + source_tab.f_int1,
2897
f_charbig = 'was updated';
2899
# check unique-1-a success: 1
2901
# check unique-1-b success: 1
2902
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2903
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2904
f_int2 = CAST(f_char1 AS SIGNED INT),
2905
f_charbig = CONCAT('===',f_char1,'===')
2906
WHERE f_charbig = 'was updated';
2907
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2908
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
2909
FROM t0_template source_tab
2910
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2912
# check replace success: 1
2914
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
2916
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
2917
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
2918
UPDATE t1 SET f_int2 = f_int1,
2919
f_char1 = CAST(f_int1 AS CHAR),
2920
f_char2 = CAST(f_int1 AS CHAR),
2921
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
2922
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
2924
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2925
SELECT f_int1, f_int1, '', '', 'was inserted'
2926
FROM t0_template source_tab
2927
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2929
# check transactions-1 success: 1
2932
# check transactions-2 success: 1
2935
# check transactions-3 success: 1
2936
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2940
# check transactions-4 success: 1
2941
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2942
SELECT f_int1, f_int1, '', '', 'was inserted'
2943
FROM t0_template source_tab
2944
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2946
# check transactions-5 success: 1
2949
Warning 1196 Some non-transactional changed tables couldn't be rolled back
2951
# check transactions-6 success: 1
2952
# INFO: Storage engine used for t1 seems to be not transactional.
2955
# check transactions-7 success: 1
2956
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2958
SET @@session.sql_mode = 'traditional';
2959
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2960
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2961
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2962
'', '', 'was inserted' FROM t0_template
2963
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2964
ERROR 22012: Division by 0
2967
# check transactions-8 success: 1
2968
# INFO: Storage engine used for t1 seems to be unable to revert
2969
# changes made by the failing statement.
2970
SET @@session.sql_mode = '';
2972
DELETE FROM t1 WHERE f_charbig = 'was inserted';
2974
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2976
# check special-1 success: 1
2977
UPDATE t1 SET f_charbig = '';
2979
# check special-2 success: 1
2980
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2981
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2982
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2984
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2985
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2986
'just inserted' FROM t0_template
2987
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2988
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2990
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2991
f_charbig = 'updated by trigger'
2992
WHERE f_int1 = new.f_int1;
2994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2995
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2998
# check trigger-1 success: 1
3000
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3001
f_int2 = CAST(f_char1 AS SIGNED INT),
3002
f_charbig = 'just inserted'
3003
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3005
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3006
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3007
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3008
'just inserted' FROM t0_template
3009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3010
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3012
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3013
f_charbig = 'updated by trigger'
3014
WHERE f_int1 = new.f_int1;
3016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3017
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3020
# check trigger-2 success: 1
3022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3023
f_int2 = CAST(f_char1 AS SIGNED INT),
3024
f_charbig = 'just inserted'
3025
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3030
'just inserted' FROM t0_template
3031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3032
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3035
f_charbig = 'updated by trigger'
3036
WHERE f_int1 = new.f_int1;
3038
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3039
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3041
# check trigger-3 success: 1
3043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3044
f_int2 = CAST(f_char1 AS SIGNED INT),
3045
f_charbig = 'just inserted'
3046
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3048
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3050
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3051
'just inserted' FROM t0_template
3052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3053
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3055
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3056
f_charbig = 'updated by trigger'
3057
WHERE f_int1 = - old.f_int1;
3059
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3060
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3062
# check trigger-4 success: 1
3064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3065
f_int2 = CAST(f_char1 AS SIGNED INT),
3066
f_charbig = 'just inserted'
3067
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3072
'just inserted' FROM t0_template
3073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3074
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3077
f_charbig = 'updated by trigger'
3078
WHERE f_int1 = new.f_int1;
3080
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3083
# check trigger-5 success: 1
3085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3086
f_int2 = CAST(f_char1 AS SIGNED INT),
3087
f_charbig = 'just inserted'
3088
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3093
'just inserted' FROM t0_template
3094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3095
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3098
f_charbig = 'updated by trigger'
3099
WHERE f_int1 = - old.f_int1;
3101
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3104
# check trigger-6 success: 1
3106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3107
f_int2 = CAST(f_char1 AS SIGNED INT),
3108
f_charbig = 'just inserted'
3109
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3114
'just inserted' FROM t0_template
3115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3116
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3119
f_charbig = 'updated by trigger'
3120
WHERE f_int1 = - old.f_int1;
3123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3125
# check trigger-7 success: 1
3127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3128
f_int2 = CAST(f_char1 AS SIGNED INT),
3129
f_charbig = 'just inserted'
3130
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3135
'just inserted' FROM t0_template
3136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3137
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3140
f_charbig = 'updated by trigger'
3141
WHERE f_int1 = - old.f_int1;
3144
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3146
# check trigger-8 success: 1
3148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3149
f_int2 = CAST(f_char1 AS SIGNED INT),
3150
f_charbig = 'just inserted'
3151
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3156
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3158
SET new.f_int1 = old.f_int1 + @max_row,
3159
new.f_int2 = old.f_int2 - @max_row,
3160
new.f_charbig = '####updated per update trigger####';
3163
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3164
f_charbig = '####updated per update statement itself####';
3166
# check trigger-9 success: 1
3168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3169
f_int2 = CAST(f_char1 AS SIGNED INT),
3170
f_charbig = CONCAT('===',f_char1,'===');
3171
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3173
SET new.f_int1 = new.f_int1 + @max_row,
3174
new.f_int2 = new.f_int2 - @max_row,
3175
new.f_charbig = '####updated per update trigger####';
3178
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3179
f_charbig = '####updated per update statement itself####';
3181
# check trigger-10 success: 1
3183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3184
f_int2 = CAST(f_char1 AS SIGNED INT),
3185
f_charbig = CONCAT('===',f_char1,'===');
3186
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3188
SET new.f_int1 = @my_max1 + @counter,
3189
new.f_int2 = @my_min2 - @counter,
3190
new.f_charbig = '####updated per insert trigger####';
3191
SET @counter = @counter + 1;
3194
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3195
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3196
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3197
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3202
# check trigger-11 success: 1
3204
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3205
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3206
AND f_charbig = '####updated per insert trigger####';
3207
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3209
SET new.f_int1 = @my_max1 + @counter,
3210
new.f_int2 = @my_min2 - @counter,
3211
new.f_charbig = '####updated per insert trigger####';
3212
SET @counter = @counter + 1;
3215
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3216
INSERT INTO t1 (f_char1, f_char2, f_charbig)
3217
SELECT CAST(f_int1 AS CHAR),
3218
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3223
# check trigger-12 success: 1
3225
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3226
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3227
AND f_charbig = '####updated per insert trigger####';
3229
Table Op Msg_type Msg_text
3230
test.t1 analyze status OK
3231
CHECK TABLE t1 EXTENDED;
3232
Table Op Msg_type Msg_text
3233
test.t1 check status OK
3234
CHECKSUM TABLE t1 EXTENDED;
3236
test.t1 <some_value>
3238
Table Op Msg_type Msg_text
3239
test.t1 optimize status OK
3240
# check layout success: 1
3241
REPAIR TABLE t1 EXTENDED;
3242
Table Op Msg_type Msg_text
3243
test.t1 repair status OK
3244
# check layout success: 1
3247
# check TRUNCATE success: 1
3248
# check layout success: 1
3249
# End usability test (inc/partition_check.inc)
3256
f_charbig VARCHAR(1000)
3259
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
3260
(PARTITION part1 VALUES IN (0)
3261
(SUBPARTITION sp11, SUBPARTITION sp12),
3262
PARTITION part2 VALUES IN (1)
3263
(SUBPARTITION sp21, SUBPARTITION sp22),
3264
PARTITION part3 VALUES IN (2)
3265
(SUBPARTITION sp31, SUBPARTITION sp32),
3266
PARTITION part4 VALUES IN (NULL)
3267
(SUBPARTITION sp41, SUBPARTITION sp42));
3268
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3269
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3270
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3271
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
3272
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3273
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3274
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3275
# Start usability test (inc/partition_check.inc)
3277
SHOW CREATE TABLE t1;
3279
t1 CREATE TABLE `t1` (
3280
`f_int1` int(11) DEFAULT NULL,
3281
`f_int2` int(11) DEFAULT NULL,
3282
`f_char1` char(20) DEFAULT NULL,
3283
`f_char2` char(20) DEFAULT NULL,
3284
`f_charbig` varchar(1000) DEFAULT NULL,
3285
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
3286
) ENGINE=MyISAM DEFAULT CHARSET=latin1
3287
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
3288
SUBPARTITION BY HASH (f_int2 + 1)
3289
(PARTITION part1 VALUES IN (0)
3290
(SUBPARTITION sp11 ENGINE = MyISAM,
3291
SUBPARTITION sp12 ENGINE = MyISAM),
3292
PARTITION part2 VALUES IN (1)
3293
(SUBPARTITION sp21 ENGINE = MyISAM,
3294
SUBPARTITION sp22 ENGINE = MyISAM),
3295
PARTITION part3 VALUES IN (2)
3296
(SUBPARTITION sp31 ENGINE = MyISAM,
3297
SUBPARTITION sp32 ENGINE = MyISAM),
3298
PARTITION part4 VALUES IN (NULL)
3299
(SUBPARTITION sp41 ENGINE = MyISAM,
3300
SUBPARTITION sp42 ENGINE = MyISAM)) */
3303
t1#P#part1#SP#sp11.MYD
3304
t1#P#part1#SP#sp11.MYI
3305
t1#P#part1#SP#sp12.MYD
3306
t1#P#part1#SP#sp12.MYI
3307
t1#P#part2#SP#sp21.MYD
3308
t1#P#part2#SP#sp21.MYI
3309
t1#P#part2#SP#sp22.MYD
3310
t1#P#part2#SP#sp22.MYI
3311
t1#P#part3#SP#sp31.MYD
3312
t1#P#part3#SP#sp31.MYI
3313
t1#P#part3#SP#sp32.MYD
3314
t1#P#part3#SP#sp32.MYI
3315
t1#P#part4#SP#sp41.MYD
3316
t1#P#part4#SP#sp41.MYI
3317
t1#P#part4#SP#sp42.MYD
3318
t1#P#part4#SP#sp42.MYI
3322
# check prerequisites-1 success: 1
3323
# check COUNT(*) success: 1
3324
# check MIN/MAX(f_int1) success: 1
3325
# check MIN/MAX(f_int2) success: 1
3326
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3327
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3328
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3329
WHERE f_int1 IN (2,3);
3330
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
3331
# check prerequisites-3 success: 1
3332
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3333
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3334
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3335
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3336
WHERE f_int1 IN (2,3);
3337
DELETE FROM t1 WHERE f_charbig = 'delete me';
3338
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3339
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3340
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3341
WHERE f_int1 IN (2,3);
3342
DELETE FROM t1 WHERE f_charbig = 'delete me';
3343
# check read via f_int1 success: 1
3344
# check read via f_int2 success: 1
3346
# check multiple-1 success: 1
3347
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3349
# check multiple-2 success: 1
3350
INSERT INTO t1 SELECT * FROM t0_template
3351
WHERE MOD(f_int1,3) = 0;
3353
# check multiple-3 success: 1
3354
UPDATE t1 SET f_int1 = f_int1 + @max_row
3355
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3356
AND @max_row_div2 + @max_row_div4;
3358
# check multiple-4 success: 1
3360
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3361
AND @max_row_div2 + @max_row_div4 + @max_row;
3363
# check multiple-5 success: 1
3364
SELECT COUNT(*) INTO @try_count FROM t0_template
3365
WHERE MOD(f_int1,3) = 0
3366
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3367
SELECT COUNT(*) INTO @clash_count
3368
FROM t1 INNER JOIN t0_template USING(f_int1)
3369
WHERE MOD(f_int1,3) = 0
3370
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3371
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3373
SET f_int1 = @cur_value , f_int2 = @cur_value,
3374
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3375
f_charbig = '#SINGLE#';
3377
# check single-1 success: 1
3378
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3380
SET f_int1 = @cur_value , f_int2 = @cur_value,
3381
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3382
f_charbig = '#SINGLE#';
3384
# check single-2 success: 1
3385
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3386
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3387
UPDATE t1 SET f_int1 = @cur_value2
3388
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3390
# check single-3 success: 1
3391
SET @cur_value1= -1;
3392
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3393
UPDATE t1 SET f_int1 = @cur_value1
3394
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3396
# check single-4 success: 1
3397
SELECT MAX(f_int1) INTO @cur_value FROM t1;
3398
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3400
# check single-5 success: 1
3401
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3403
# check single-6 success: 1
3404
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3406
# check single-7 success: 1
3407
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3408
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3409
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3410
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3411
f_charbig = '#NULL#';
3413
SET f_int1 = NULL , f_int2 = -@max_row,
3414
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3415
f_charbig = '#NULL#';
3416
# check null success: 1
3418
# check null-1 success: 1
3419
UPDATE t1 SET f_int1 = -@max_row
3420
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3421
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3423
# check null-2 success: 1
3424
UPDATE t1 SET f_int1 = NULL
3425
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3426
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3428
# check null-3 success: 1
3430
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3431
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3433
# check null-4 success: 1
3435
WHERE f_int1 = 0 AND f_int2 = 0
3436
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3437
AND f_charbig = '#NULL#';
3438
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3439
SELECT f_int1, f_int1, '', '', 'was inserted'
3440
FROM t0_template source_tab
3441
WHERE MOD(f_int1,3) = 0
3442
AND f_int1 BETWEEN @max_row_div2 AND @max_row
3444
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3445
f_int2 = 2 * @max_row + source_tab.f_int1,
3446
f_charbig = 'was updated';
3448
# check unique-1-a success: 1
3450
# check unique-1-b success: 1
3451
DELETE FROM t1 WHERE f_charbig = 'was inserted';
3452
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3453
f_int2 = CAST(f_char1 AS SIGNED INT),
3454
f_charbig = CONCAT('===',f_char1,'===')
3455
WHERE f_charbig = 'was updated';
3456
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3457
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3458
FROM t0_template source_tab
3459
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3461
# check replace success: 1
3463
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3465
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3466
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3467
UPDATE t1 SET f_int2 = f_int1,
3468
f_char1 = CAST(f_int1 AS CHAR),
3469
f_char2 = CAST(f_int1 AS CHAR),
3470
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3471
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3473
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3474
SELECT f_int1, f_int1, '', '', 'was inserted'
3475
FROM t0_template source_tab
3476
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3478
# check transactions-1 success: 1
3481
# check transactions-2 success: 1
3484
# check transactions-3 success: 1
3485
DELETE FROM t1 WHERE f_charbig = 'was inserted';
3489
# check transactions-4 success: 1
3490
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3491
SELECT f_int1, f_int1, '', '', 'was inserted'
3492
FROM t0_template source_tab
3493
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3495
# check transactions-5 success: 1
3498
Warning 1196 Some non-transactional changed tables couldn't be rolled back
3500
# check transactions-6 success: 1
3501
# INFO: Storage engine used for t1 seems to be not transactional.
3504
# check transactions-7 success: 1
3505
DELETE FROM t1 WHERE f_charbig = 'was inserted';
3507
SET @@session.sql_mode = 'traditional';
3508
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3509
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3510
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3511
'', '', 'was inserted' FROM t0_template
3512
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3513
ERROR 22012: Division by 0
3516
# check transactions-8 success: 1
3517
# INFO: Storage engine used for t1 seems to be unable to revert
3518
# changes made by the failing statement.
3519
SET @@session.sql_mode = '';
3521
DELETE FROM t1 WHERE f_charbig = 'was inserted';
3523
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3525
# check special-1 success: 1
3526
UPDATE t1 SET f_charbig = '';
3528
# check special-2 success: 1
3529
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3530
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3531
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3533
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3534
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3535
'just inserted' FROM t0_template
3536
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3537
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3539
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3540
f_charbig = 'updated by trigger'
3541
WHERE f_int1 = new.f_int1;
3543
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3544
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3545
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3547
# check trigger-1 success: 1
3549
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3550
f_int2 = CAST(f_char1 AS SIGNED INT),
3551
f_charbig = 'just inserted'
3552
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3554
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3555
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3556
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3557
'just inserted' FROM t0_template
3558
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3559
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3561
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3562
f_charbig = 'updated by trigger'
3563
WHERE f_int1 = new.f_int1;
3565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3566
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3569
# check trigger-2 success: 1
3571
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3572
f_int2 = CAST(f_char1 AS SIGNED INT),
3573
f_charbig = 'just inserted'
3574
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3576
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3577
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3578
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3579
'just inserted' FROM t0_template
3580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3581
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3583
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3584
f_charbig = 'updated by trigger'
3585
WHERE f_int1 = new.f_int1;
3587
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3588
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3590
# check trigger-3 success: 1
3592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3593
f_int2 = CAST(f_char1 AS SIGNED INT),
3594
f_charbig = 'just inserted'
3595
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3597
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3598
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3599
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3600
'just inserted' FROM t0_template
3601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3602
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3604
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3605
f_charbig = 'updated by trigger'
3606
WHERE f_int1 = - old.f_int1;
3608
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3609
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3611
# check trigger-4 success: 1
3613
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3614
f_int2 = CAST(f_char1 AS SIGNED INT),
3615
f_charbig = 'just inserted'
3616
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3618
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3619
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3620
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3621
'just inserted' FROM t0_template
3622
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3623
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3625
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3626
f_charbig = 'updated by trigger'
3627
WHERE f_int1 = new.f_int1;
3629
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3630
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3632
# check trigger-5 success: 1
3634
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3635
f_int2 = CAST(f_char1 AS SIGNED INT),
3636
f_charbig = 'just inserted'
3637
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3639
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3640
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3641
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3642
'just inserted' FROM t0_template
3643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3644
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3646
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3647
f_charbig = 'updated by trigger'
3648
WHERE f_int1 = - old.f_int1;
3650
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
3651
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3653
# check trigger-6 success: 1
3655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3656
f_int2 = CAST(f_char1 AS SIGNED INT),
3657
f_charbig = 'just inserted'
3658
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3660
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3662
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3663
'just inserted' FROM t0_template
3664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3665
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3668
f_charbig = 'updated by trigger'
3669
WHERE f_int1 = - old.f_int1;
3672
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3674
# check trigger-7 success: 1
3676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3677
f_int2 = CAST(f_char1 AS SIGNED INT),
3678
f_charbig = 'just inserted'
3679
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3681
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3683
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3684
'just inserted' FROM t0_template
3685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3686
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3688
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3689
f_charbig = 'updated by trigger'
3690
WHERE f_int1 = - old.f_int1;
3693
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3695
# check trigger-8 success: 1
3697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3698
f_int2 = CAST(f_char1 AS SIGNED INT),
3699
f_charbig = 'just inserted'
3700
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3702
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3705
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3707
SET new.f_int1 = old.f_int1 + @max_row,
3708
new.f_int2 = old.f_int2 - @max_row,
3709
new.f_charbig = '####updated per update trigger####';
3712
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3713
f_charbig = '####updated per update statement itself####';
3715
# check trigger-9 success: 1
3717
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3718
f_int2 = CAST(f_char1 AS SIGNED INT),
3719
f_charbig = CONCAT('===',f_char1,'===');
3720
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3722
SET new.f_int1 = new.f_int1 + @max_row,
3723
new.f_int2 = new.f_int2 - @max_row,
3724
new.f_charbig = '####updated per update trigger####';
3727
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3728
f_charbig = '####updated per update statement itself####';
3730
# check trigger-10 success: 1
3732
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3733
f_int2 = CAST(f_char1 AS SIGNED INT),
3734
f_charbig = CONCAT('===',f_char1,'===');
3735
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3737
SET new.f_int1 = @my_max1 + @counter,
3738
new.f_int2 = @my_min2 - @counter,
3739
new.f_charbig = '####updated per insert trigger####';
3740
SET @counter = @counter + 1;
3743
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3744
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3745
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3746
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3751
# check trigger-11 success: 1
3753
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3754
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3755
AND f_charbig = '####updated per insert trigger####';
3756
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3758
SET new.f_int1 = @my_max1 + @counter,
3759
new.f_int2 = @my_min2 - @counter,
3760
new.f_charbig = '####updated per insert trigger####';
3761
SET @counter = @counter + 1;
3764
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3765
INSERT INTO t1 (f_char1, f_char2, f_charbig)
3766
SELECT CAST(f_int1 AS CHAR),
3767
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3772
# check trigger-12 success: 1
3774
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3775
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3776
AND f_charbig = '####updated per insert trigger####';
3778
Table Op Msg_type Msg_text
3779
test.t1 analyze status OK
3780
CHECK TABLE t1 EXTENDED;
3781
Table Op Msg_type Msg_text
3782
test.t1 check status OK
3783
CHECKSUM TABLE t1 EXTENDED;
3785
test.t1 <some_value>
3787
Table Op Msg_type Msg_text
3788
test.t1 optimize status OK
3789
# check layout success: 1
3790
REPAIR TABLE t1 EXTENDED;
3791
Table Op Msg_type Msg_text
3792
test.t1 repair status OK
3793
# check layout success: 1
3796
# check TRUNCATE success: 1
3797
# check layout success: 1
3798
# End usability test (inc/partition_check.inc)
3805
f_charbig VARCHAR(1000)
3808
PARTITION BY LIST(ABS(MOD(f_int1,2)))
3809
SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
3810
(PARTITION part1 VALUES IN (0),
3811
PARTITION part2 VALUES IN (1),
3812
PARTITION part3 VALUES IN (NULL));
3813
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3814
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3815
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3816
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
3817
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3818
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3819
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3820
# Start usability test (inc/partition_check.inc)
3822
SHOW CREATE TABLE t1;
3824
t1 CREATE TABLE `t1` (
3825
`f_int1` int(11) DEFAULT NULL,
3826
`f_int2` int(11) DEFAULT NULL,
3827
`f_char1` char(20) DEFAULT NULL,
3828
`f_char2` char(20) DEFAULT NULL,
3829
`f_charbig` varchar(1000) DEFAULT NULL,
3830
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
3831
) ENGINE=MyISAM DEFAULT CHARSET=latin1
3832
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
3833
SUBPARTITION BY KEY (f_int2)
3835
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
3836
PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
3837
PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
3840
t1#P#part1#SP#part1sp0.MYD
3841
t1#P#part1#SP#part1sp0.MYI
3842
t1#P#part1#SP#part1sp1.MYD
3843
t1#P#part1#SP#part1sp1.MYI
3844
t1#P#part1#SP#part1sp2.MYD
3845
t1#P#part1#SP#part1sp2.MYI
3846
t1#P#part2#SP#part2sp0.MYD
3847
t1#P#part2#SP#part2sp0.MYI
3848
t1#P#part2#SP#part2sp1.MYD
3849
t1#P#part2#SP#part2sp1.MYI
3850
t1#P#part2#SP#part2sp2.MYD
3851
t1#P#part2#SP#part2sp2.MYI
3852
t1#P#part3#SP#part3sp0.MYD
3853
t1#P#part3#SP#part3sp0.MYI
3854
t1#P#part3#SP#part3sp1.MYD
3855
t1#P#part3#SP#part3sp1.MYI
3856
t1#P#part3#SP#part3sp2.MYD
3857
t1#P#part3#SP#part3sp2.MYI
3861
# check prerequisites-1 success: 1
3862
# check COUNT(*) success: 1
3863
# check MIN/MAX(f_int1) success: 1
3864
# check MIN/MAX(f_int2) success: 1
3865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3866
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3867
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3868
WHERE f_int1 IN (2,3);
3869
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
3870
# check prerequisites-3 success: 1
3871
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3872
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3873
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3874
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3875
WHERE f_int1 IN (2,3);
3876
DELETE FROM t1 WHERE f_charbig = 'delete me';
3877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3878
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3879
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3880
WHERE f_int1 IN (2,3);
3881
DELETE FROM t1 WHERE f_charbig = 'delete me';
3882
# check read via f_int1 success: 1
3883
# check read via f_int2 success: 1
3885
# check multiple-1 success: 1
3886
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3888
# check multiple-2 success: 1
3889
INSERT INTO t1 SELECT * FROM t0_template
3890
WHERE MOD(f_int1,3) = 0;
3892
# check multiple-3 success: 1
3893
UPDATE t1 SET f_int1 = f_int1 + @max_row
3894
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3895
AND @max_row_div2 + @max_row_div4;
3897
# check multiple-4 success: 1
3899
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3900
AND @max_row_div2 + @max_row_div4 + @max_row;
3902
# check multiple-5 success: 1
3903
SELECT COUNT(*) INTO @try_count FROM t0_template
3904
WHERE MOD(f_int1,3) = 0
3905
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3906
SELECT COUNT(*) INTO @clash_count
3907
FROM t1 INNER JOIN t0_template USING(f_int1)
3908
WHERE MOD(f_int1,3) = 0
3909
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3910
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3912
SET f_int1 = @cur_value , f_int2 = @cur_value,
3913
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3914
f_charbig = '#SINGLE#';
3916
# check single-1 success: 1
3917
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3919
SET f_int1 = @cur_value , f_int2 = @cur_value,
3920
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3921
f_charbig = '#SINGLE#';
3923
# check single-2 success: 1
3924
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3925
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3926
UPDATE t1 SET f_int1 = @cur_value2
3927
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3929
# check single-3 success: 1
3930
SET @cur_value1= -1;
3931
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3932
UPDATE t1 SET f_int1 = @cur_value1
3933
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3935
# check single-4 success: 1
3936
SELECT MAX(f_int1) INTO @cur_value FROM t1;
3937
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3939
# check single-5 success: 1
3940
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3942
# check single-6 success: 1
3943
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3945
# check single-7 success: 1
3946
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3947
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3948
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3949
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3950
f_charbig = '#NULL#';
3952
SET f_int1 = NULL , f_int2 = -@max_row,
3953
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3954
f_charbig = '#NULL#';
3955
# check null success: 1
3957
# check null-1 success: 1
3958
UPDATE t1 SET f_int1 = -@max_row
3959
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3960
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3962
# check null-2 success: 1
3963
UPDATE t1 SET f_int1 = NULL
3964
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3965
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3967
# check null-3 success: 1
3969
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3970
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3972
# check null-4 success: 1
3974
WHERE f_int1 = 0 AND f_int2 = 0
3975
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3976
AND f_charbig = '#NULL#';
3977
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3978
SELECT f_int1, f_int1, '', '', 'was inserted'
3979
FROM t0_template source_tab
3980
WHERE MOD(f_int1,3) = 0
3981
AND f_int1 BETWEEN @max_row_div2 AND @max_row
3983
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3984
f_int2 = 2 * @max_row + source_tab.f_int1,
3985
f_charbig = 'was updated';
3987
# check unique-1-a success: 1
3989
# check unique-1-b success: 1
3990
DELETE FROM t1 WHERE f_charbig = 'was inserted';
3991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3992
f_int2 = CAST(f_char1 AS SIGNED INT),
3993
f_charbig = CONCAT('===',f_char1,'===')
3994
WHERE f_charbig = 'was updated';
3995
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3996
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3997
FROM t0_template source_tab
3998
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4000
# check replace success: 1
4002
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4004
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4005
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4006
UPDATE t1 SET f_int2 = f_int1,
4007
f_char1 = CAST(f_int1 AS CHAR),
4008
f_char2 = CAST(f_int1 AS CHAR),
4009
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4010
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4012
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4013
SELECT f_int1, f_int1, '', '', 'was inserted'
4014
FROM t0_template source_tab
4015
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4017
# check transactions-1 success: 1
4020
# check transactions-2 success: 1
4023
# check transactions-3 success: 1
4024
DELETE FROM t1 WHERE f_charbig = 'was inserted';
4028
# check transactions-4 success: 1
4029
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4030
SELECT f_int1, f_int1, '', '', 'was inserted'
4031
FROM t0_template source_tab
4032
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4034
# check transactions-5 success: 1
4037
Warning 1196 Some non-transactional changed tables couldn't be rolled back
4039
# check transactions-6 success: 1
4040
# INFO: Storage engine used for t1 seems to be not transactional.
4043
# check transactions-7 success: 1
4044
DELETE FROM t1 WHERE f_charbig = 'was inserted';
4046
SET @@session.sql_mode = 'traditional';
4047
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4048
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4049
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4050
'', '', 'was inserted' FROM t0_template
4051
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4052
ERROR 22012: Division by 0
4055
# check transactions-8 success: 1
4056
# INFO: Storage engine used for t1 seems to be unable to revert
4057
# changes made by the failing statement.
4058
SET @@session.sql_mode = '';
4060
DELETE FROM t1 WHERE f_charbig = 'was inserted';
4062
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4064
# check special-1 success: 1
4065
UPDATE t1 SET f_charbig = '';
4067
# check special-2 success: 1
4068
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4069
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4070
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4073
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4074
'just inserted' FROM t0_template
4075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4076
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4078
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4079
f_charbig = 'updated by trigger'
4080
WHERE f_int1 = new.f_int1;
4082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4083
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4086
# check trigger-1 success: 1
4088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4089
f_int2 = CAST(f_char1 AS SIGNED INT),
4090
f_charbig = 'just inserted'
4091
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4096
'just inserted' FROM t0_template
4097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4098
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4101
f_charbig = 'updated by trigger'
4102
WHERE f_int1 = new.f_int1;
4104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4105
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4108
# check trigger-2 success: 1
4110
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4111
f_int2 = CAST(f_char1 AS SIGNED INT),
4112
f_charbig = 'just inserted'
4113
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4115
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4116
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4117
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4118
'just inserted' FROM t0_template
4119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4120
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4122
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4123
f_charbig = 'updated by trigger'
4124
WHERE f_int1 = new.f_int1;
4126
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4127
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4129
# check trigger-3 success: 1
4131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4132
f_int2 = CAST(f_char1 AS SIGNED INT),
4133
f_charbig = 'just inserted'
4134
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4136
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4137
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4138
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4139
'just inserted' FROM t0_template
4140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4141
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4143
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4144
f_charbig = 'updated by trigger'
4145
WHERE f_int1 = - old.f_int1;
4147
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4148
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4150
# check trigger-4 success: 1
4152
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4153
f_int2 = CAST(f_char1 AS SIGNED INT),
4154
f_charbig = 'just inserted'
4155
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4157
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4158
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4159
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4160
'just inserted' FROM t0_template
4161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4162
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4164
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4165
f_charbig = 'updated by trigger'
4166
WHERE f_int1 = new.f_int1;
4168
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4169
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4171
# check trigger-5 success: 1
4173
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4174
f_int2 = CAST(f_char1 AS SIGNED INT),
4175
f_charbig = 'just inserted'
4176
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4178
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4180
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4181
'just inserted' FROM t0_template
4182
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4183
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4185
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4186
f_charbig = 'updated by trigger'
4187
WHERE f_int1 = - old.f_int1;
4189
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4190
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4192
# check trigger-6 success: 1
4194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4195
f_int2 = CAST(f_char1 AS SIGNED INT),
4196
f_charbig = 'just inserted'
4197
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4199
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4202
'just inserted' FROM t0_template
4203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4204
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4207
f_charbig = 'updated by trigger'
4208
WHERE f_int1 = - old.f_int1;
4211
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4213
# check trigger-7 success: 1
4215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4216
f_int2 = CAST(f_char1 AS SIGNED INT),
4217
f_charbig = 'just inserted'
4218
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4220
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4223
'just inserted' FROM t0_template
4224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4225
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4228
f_charbig = 'updated by trigger'
4229
WHERE f_int1 = - old.f_int1;
4232
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4234
# check trigger-8 success: 1
4236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4237
f_int2 = CAST(f_char1 AS SIGNED INT),
4238
f_charbig = 'just inserted'
4239
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4241
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4244
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4246
SET new.f_int1 = old.f_int1 + @max_row,
4247
new.f_int2 = old.f_int2 - @max_row,
4248
new.f_charbig = '####updated per update trigger####';
4251
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4252
f_charbig = '####updated per update statement itself####';
4254
# check trigger-9 success: 1
4256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4257
f_int2 = CAST(f_char1 AS SIGNED INT),
4258
f_charbig = CONCAT('===',f_char1,'===');
4259
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4261
SET new.f_int1 = new.f_int1 + @max_row,
4262
new.f_int2 = new.f_int2 - @max_row,
4263
new.f_charbig = '####updated per update trigger####';
4266
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4267
f_charbig = '####updated per update statement itself####';
4269
# check trigger-10 success: 1
4271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4272
f_int2 = CAST(f_char1 AS SIGNED INT),
4273
f_charbig = CONCAT('===',f_char1,'===');
4274
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4276
SET new.f_int1 = @my_max1 + @counter,
4277
new.f_int2 = @my_min2 - @counter,
4278
new.f_charbig = '####updated per insert trigger####';
4279
SET @counter = @counter + 1;
4282
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4283
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4284
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4285
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4290
# check trigger-11 success: 1
4292
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4293
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4294
AND f_charbig = '####updated per insert trigger####';
4295
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4297
SET new.f_int1 = @my_max1 + @counter,
4298
new.f_int2 = @my_min2 - @counter,
4299
new.f_charbig = '####updated per insert trigger####';
4300
SET @counter = @counter + 1;
4303
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4304
INSERT INTO t1 (f_char1, f_char2, f_charbig)
4305
SELECT CAST(f_int1 AS CHAR),
4306
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4311
# check trigger-12 success: 1
4313
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4314
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4315
AND f_charbig = '####updated per insert trigger####';
4317
Table Op Msg_type Msg_text
4318
test.t1 analyze status OK
4319
CHECK TABLE t1 EXTENDED;
4320
Table Op Msg_type Msg_text
4321
test.t1 check status OK
4322
CHECKSUM TABLE t1 EXTENDED;
4324
test.t1 <some_value>
4326
Table Op Msg_type Msg_text
4327
test.t1 optimize status OK
4328
# check layout success: 1
4329
REPAIR TABLE t1 EXTENDED;
4330
Table Op Msg_type Msg_text
4331
test.t1 repair status OK
4332
# check layout success: 1
4335
# check TRUNCATE success: 1
4336
# check layout success: 1
4337
# End usability test (inc/partition_check.inc)
4339
DROP TABLE IF EXISTS t1;
4345
f_charbig VARCHAR(1000)
4348
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
4349
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4350
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4351
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4352
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
4353
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4354
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4355
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4356
# Start usability test (inc/partition_check.inc)
4358
SHOW CREATE TABLE t1;
4360
t1 CREATE TABLE `t1` (
4361
`f_int1` int(11) DEFAULT NULL,
4362
`f_int2` int(11) DEFAULT NULL,
4363
`f_char1` char(20) DEFAULT NULL,
4364
`f_char2` char(20) DEFAULT NULL,
4365
`f_charbig` varchar(1000) DEFAULT NULL,
4366
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
4367
) ENGINE=MyISAM DEFAULT CHARSET=latin1
4368
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
4379
# check prerequisites-1 success: 1
4380
# check COUNT(*) success: 1
4381
# check MIN/MAX(f_int1) success: 1
4382
# check MIN/MAX(f_int2) success: 1
4383
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4384
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4385
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4386
WHERE f_int1 IN (2,3);
4387
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
4388
# check prerequisites-3 success: 1
4389
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4390
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4391
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4392
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4393
WHERE f_int1 IN (2,3);
4394
DELETE FROM t1 WHERE f_charbig = 'delete me';
4395
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4396
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4397
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4398
WHERE f_int1 IN (2,3);
4399
DELETE FROM t1 WHERE f_charbig = 'delete me';
4400
# check read via f_int1 success: 1
4401
# check read via f_int2 success: 1
4403
# check multiple-1 success: 1
4404
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4406
# check multiple-2 success: 1
4407
INSERT INTO t1 SELECT * FROM t0_template
4408
WHERE MOD(f_int1,3) = 0;
4410
# check multiple-3 success: 1
4411
UPDATE t1 SET f_int1 = f_int1 + @max_row
4412
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4413
AND @max_row_div2 + @max_row_div4;
4415
# check multiple-4 success: 1
4417
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4418
AND @max_row_div2 + @max_row_div4 + @max_row;
4420
# check multiple-5 success: 1
4421
SELECT COUNT(*) INTO @try_count FROM t0_template
4422
WHERE MOD(f_int1,3) = 0
4423
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4424
SELECT COUNT(*) INTO @clash_count
4425
FROM t1 INNER JOIN t0_template USING(f_int1)
4426
WHERE MOD(f_int1,3) = 0
4427
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4428
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4430
SET f_int1 = @cur_value , f_int2 = @cur_value,
4431
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4432
f_charbig = '#SINGLE#';
4434
# check single-1 success: 1
4435
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4437
SET f_int1 = @cur_value , f_int2 = @cur_value,
4438
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4439
f_charbig = '#SINGLE#';
4441
# check single-2 success: 1
4442
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4443
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4444
UPDATE t1 SET f_int1 = @cur_value2
4445
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4447
# check single-3 success: 1
4448
SET @cur_value1= -1;
4449
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4450
UPDATE t1 SET f_int1 = @cur_value1
4451
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4453
# check single-4 success: 1
4454
SELECT MAX(f_int1) INTO @cur_value FROM t1;
4455
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4457
# check single-5 success: 1
4458
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4460
# check single-6 success: 1
4461
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4463
# check single-7 success: 1
4464
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4465
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4466
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4467
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4468
f_charbig = '#NULL#';
4470
SET f_int1 = NULL , f_int2 = -@max_row,
4471
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4472
f_charbig = '#NULL#';
4473
# check null success: 1
4475
# check null-1 success: 1
4476
UPDATE t1 SET f_int1 = -@max_row
4477
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4478
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4480
# check null-2 success: 1
4481
UPDATE t1 SET f_int1 = NULL
4482
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4483
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4485
# check null-3 success: 1
4487
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4488
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4490
# check null-4 success: 1
4492
WHERE f_int1 = 0 AND f_int2 = 0
4493
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4494
AND f_charbig = '#NULL#';
4495
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4496
SELECT f_int1, f_int1, '', '', 'was inserted'
4497
FROM t0_template source_tab
4498
WHERE MOD(f_int1,3) = 0
4499
AND f_int1 BETWEEN @max_row_div2 AND @max_row
4501
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4502
f_int2 = 2 * @max_row + source_tab.f_int1,
4503
f_charbig = 'was updated';
4505
# check unique-1-a success: 1
4507
# check unique-1-b success: 1
4508
DELETE FROM t1 WHERE f_charbig = 'was inserted';
4509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4510
f_int2 = CAST(f_char1 AS SIGNED INT),
4511
f_charbig = CONCAT('===',f_char1,'===')
4512
WHERE f_charbig = 'was updated';
4513
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4514
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4515
FROM t0_template source_tab
4516
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4518
# check replace success: 1
4520
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4522
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4523
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4524
UPDATE t1 SET f_int2 = f_int1,
4525
f_char1 = CAST(f_int1 AS CHAR),
4526
f_char2 = CAST(f_int1 AS CHAR),
4527
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4528
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4531
SELECT f_int1, f_int1, '', '', 'was inserted'
4532
FROM t0_template source_tab
4533
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4535
# check transactions-1 success: 1
4538
# check transactions-2 success: 1
4541
# check transactions-3 success: 1
4542
DELETE FROM t1 WHERE f_charbig = 'was inserted';
4546
# check transactions-4 success: 1
4547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4548
SELECT f_int1, f_int1, '', '', 'was inserted'
4549
FROM t0_template source_tab
4550
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4552
# check transactions-5 success: 1
4555
Warning 1196 Some non-transactional changed tables couldn't be rolled back
4557
# check transactions-6 success: 1
4558
# INFO: Storage engine used for t1 seems to be not transactional.
4561
# check transactions-7 success: 1
4562
DELETE FROM t1 WHERE f_charbig = 'was inserted';
4564
SET @@session.sql_mode = 'traditional';
4565
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4566
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4567
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4568
'', '', 'was inserted' FROM t0_template
4569
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4570
ERROR 22012: Division by 0
4573
# check transactions-8 success: 1
4574
# INFO: Storage engine used for t1 seems to be unable to revert
4575
# changes made by the failing statement.
4576
SET @@session.sql_mode = '';
4578
DELETE FROM t1 WHERE f_charbig = 'was inserted';
4580
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4582
# check special-1 success: 1
4583
UPDATE t1 SET f_charbig = '';
4585
# check special-2 success: 1
4586
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4587
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4588
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4590
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4591
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4592
'just inserted' FROM t0_template
4593
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4594
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4596
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4597
f_charbig = 'updated by trigger'
4598
WHERE f_int1 = new.f_int1;
4600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4601
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4604
# check trigger-1 success: 1
4606
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4607
f_int2 = CAST(f_char1 AS SIGNED INT),
4608
f_charbig = 'just inserted'
4609
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4611
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4613
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4614
'just inserted' FROM t0_template
4615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4616
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4618
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4619
f_charbig = 'updated by trigger'
4620
WHERE f_int1 = new.f_int1;
4622
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4623
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4624
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4626
# check trigger-2 success: 1
4628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4629
f_int2 = CAST(f_char1 AS SIGNED INT),
4630
f_charbig = 'just inserted'
4631
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4636
'just inserted' FROM t0_template
4637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4638
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4641
f_charbig = 'updated by trigger'
4642
WHERE f_int1 = new.f_int1;
4644
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4647
# check trigger-3 success: 1
4649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4650
f_int2 = CAST(f_char1 AS SIGNED INT),
4651
f_charbig = 'just inserted'
4652
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4655
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4656
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4657
'just inserted' FROM t0_template
4658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4659
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4661
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4662
f_charbig = 'updated by trigger'
4663
WHERE f_int1 = - old.f_int1;
4665
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4666
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4668
# check trigger-4 success: 1
4670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4671
f_int2 = CAST(f_char1 AS SIGNED INT),
4672
f_charbig = 'just inserted'
4673
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4678
'just inserted' FROM t0_template
4679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4680
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4683
f_charbig = 'updated by trigger'
4684
WHERE f_int1 = new.f_int1;
4686
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4687
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4689
# check trigger-5 success: 1
4691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4692
f_int2 = CAST(f_char1 AS SIGNED INT),
4693
f_charbig = 'just inserted'
4694
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4699
'just inserted' FROM t0_template
4700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4701
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4704
f_charbig = 'updated by trigger'
4705
WHERE f_int1 = - old.f_int1;
4707
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
4708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4710
# check trigger-6 success: 1
4712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4713
f_int2 = CAST(f_char1 AS SIGNED INT),
4714
f_charbig = 'just inserted'
4715
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4720
'just inserted' FROM t0_template
4721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4722
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4725
f_charbig = 'updated by trigger'
4726
WHERE f_int1 = - old.f_int1;
4729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4731
# check trigger-7 success: 1
4733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4734
f_int2 = CAST(f_char1 AS SIGNED INT),
4735
f_charbig = 'just inserted'
4736
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4741
'just inserted' FROM t0_template
4742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4743
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4746
f_charbig = 'updated by trigger'
4747
WHERE f_int1 = - old.f_int1;
4750
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4752
# check trigger-8 success: 1
4754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4755
f_int2 = CAST(f_char1 AS SIGNED INT),
4756
f_charbig = 'just inserted'
4757
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4759
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4762
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4764
SET new.f_int1 = old.f_int1 + @max_row,
4765
new.f_int2 = old.f_int2 - @max_row,
4766
new.f_charbig = '####updated per update trigger####';
4769
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4770
f_charbig = '####updated per update statement itself####';
4772
# check trigger-9 success: 1
4774
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4775
f_int2 = CAST(f_char1 AS SIGNED INT),
4776
f_charbig = CONCAT('===',f_char1,'===');
4777
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4779
SET new.f_int1 = new.f_int1 + @max_row,
4780
new.f_int2 = new.f_int2 - @max_row,
4781
new.f_charbig = '####updated per update trigger####';
4784
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4785
f_charbig = '####updated per update statement itself####';
4787
# check trigger-10 success: 1
4789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4790
f_int2 = CAST(f_char1 AS SIGNED INT),
4791
f_charbig = CONCAT('===',f_char1,'===');
4792
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4794
SET new.f_int1 = @my_max1 + @counter,
4795
new.f_int2 = @my_min2 - @counter,
4796
new.f_charbig = '####updated per insert trigger####';
4797
SET @counter = @counter + 1;
4800
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4801
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4802
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4803
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4804
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4808
# check trigger-11 success: 1
4810
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4811
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4812
AND f_charbig = '####updated per insert trigger####';
4813
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4815
SET new.f_int1 = @my_max1 + @counter,
4816
new.f_int2 = @my_min2 - @counter,
4817
new.f_charbig = '####updated per insert trigger####';
4818
SET @counter = @counter + 1;
4821
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4822
INSERT INTO t1 (f_char1, f_char2, f_charbig)
4823
SELECT CAST(f_int1 AS CHAR),
4824
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4825
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4829
# check trigger-12 success: 1
4831
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4832
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4833
AND f_charbig = '####updated per insert trigger####';
4835
Table Op Msg_type Msg_text
4836
test.t1 analyze status OK
4837
CHECK TABLE t1 EXTENDED;
4838
Table Op Msg_type Msg_text
4839
test.t1 check status OK
4840
CHECKSUM TABLE t1 EXTENDED;
4842
test.t1 <some_value>
4844
Table Op Msg_type Msg_text
4845
test.t1 optimize status OK
4846
# check layout success: 1
4847
REPAIR TABLE t1 EXTENDED;
4848
Table Op Msg_type Msg_text
4849
test.t1 repair status OK
4850
# check layout success: 1
4853
# check TRUNCATE success: 1
4854
# check layout success: 1
4855
# End usability test (inc/partition_check.inc)
4862
f_charbig VARCHAR(1000)
4865
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
4866
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4867
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4868
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4869
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
4870
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4871
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4872
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4873
# Start usability test (inc/partition_check.inc)
4875
SHOW CREATE TABLE t1;
4877
t1 CREATE TABLE `t1` (
4878
`f_int1` int(11) DEFAULT NULL,
4879
`f_int2` int(11) DEFAULT NULL,
4880
`f_char1` char(20) DEFAULT NULL,
4881
`f_char2` char(20) DEFAULT NULL,
4882
`f_charbig` varchar(1000) DEFAULT NULL,
4883
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
4884
) ENGINE=MyISAM DEFAULT CHARSET=latin1
4885
/*!50100 PARTITION BY KEY (f_int1,f_int2)
4902
# check prerequisites-1 success: 1
4903
# check COUNT(*) success: 1
4904
# check MIN/MAX(f_int1) success: 1
4905
# check MIN/MAX(f_int2) success: 1
4906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4907
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4908
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4909
WHERE f_int1 IN (2,3);
4910
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
4911
# check prerequisites-3 success: 1
4912
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4913
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4914
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4915
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4916
WHERE f_int1 IN (2,3);
4917
DELETE FROM t1 WHERE f_charbig = 'delete me';
4918
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4919
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4920
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4921
WHERE f_int1 IN (2,3);
4922
DELETE FROM t1 WHERE f_charbig = 'delete me';
4923
# check read via f_int1 success: 1
4924
# check read via f_int2 success: 1
4926
# check multiple-1 success: 1
4927
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4929
# check multiple-2 success: 1
4930
INSERT INTO t1 SELECT * FROM t0_template
4931
WHERE MOD(f_int1,3) = 0;
4933
# check multiple-3 success: 1
4934
UPDATE t1 SET f_int1 = f_int1 + @max_row
4935
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4936
AND @max_row_div2 + @max_row_div4;
4938
# check multiple-4 success: 1
4940
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4941
AND @max_row_div2 + @max_row_div4 + @max_row;
4943
# check multiple-5 success: 1
4944
SELECT COUNT(*) INTO @try_count FROM t0_template
4945
WHERE MOD(f_int1,3) = 0
4946
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4947
SELECT COUNT(*) INTO @clash_count
4948
FROM t1 INNER JOIN t0_template USING(f_int1)
4949
WHERE MOD(f_int1,3) = 0
4950
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4951
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4953
SET f_int1 = @cur_value , f_int2 = @cur_value,
4954
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4955
f_charbig = '#SINGLE#';
4957
# check single-1 success: 1
4958
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4960
SET f_int1 = @cur_value , f_int2 = @cur_value,
4961
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4962
f_charbig = '#SINGLE#';
4964
# check single-2 success: 1
4965
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4966
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4967
UPDATE t1 SET f_int1 = @cur_value2
4968
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4970
# check single-3 success: 1
4971
SET @cur_value1= -1;
4972
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4973
UPDATE t1 SET f_int1 = @cur_value1
4974
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4976
# check single-4 success: 1
4977
SELECT MAX(f_int1) INTO @cur_value FROM t1;
4978
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4980
# check single-5 success: 1
4981
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4983
# check single-6 success: 1
4984
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4986
# check single-7 success: 1
4987
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4988
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4989
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4990
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4991
f_charbig = '#NULL#';
4993
SET f_int1 = NULL , f_int2 = -@max_row,
4994
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4995
f_charbig = '#NULL#';
4996
# check null success: 1
4998
# check null-1 success: 1
4999
UPDATE t1 SET f_int1 = -@max_row
5000
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5001
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5003
# check null-2 success: 1
5004
UPDATE t1 SET f_int1 = NULL
5005
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5006
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5008
# check null-3 success: 1
5010
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5011
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5013
# check null-4 success: 1
5015
WHERE f_int1 = 0 AND f_int2 = 0
5016
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5017
AND f_charbig = '#NULL#';
5018
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5019
SELECT f_int1, f_int1, '', '', 'was inserted'
5020
FROM t0_template source_tab
5021
WHERE MOD(f_int1,3) = 0
5022
AND f_int1 BETWEEN @max_row_div2 AND @max_row
5024
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5025
f_int2 = 2 * @max_row + source_tab.f_int1,
5026
f_charbig = 'was updated';
5028
# check unique-1-a success: 1
5030
# check unique-1-b success: 1
5031
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5033
f_int2 = CAST(f_char1 AS SIGNED INT),
5034
f_charbig = CONCAT('===',f_char1,'===')
5035
WHERE f_charbig = 'was updated';
5036
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5037
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5038
FROM t0_template source_tab
5039
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5041
# check replace success: 1
5043
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5045
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5046
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5047
UPDATE t1 SET f_int2 = f_int1,
5048
f_char1 = CAST(f_int1 AS CHAR),
5049
f_char2 = CAST(f_int1 AS CHAR),
5050
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5051
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5053
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5054
SELECT f_int1, f_int1, '', '', 'was inserted'
5055
FROM t0_template source_tab
5056
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5058
# check transactions-1 success: 1
5061
# check transactions-2 success: 1
5064
# check transactions-3 success: 1
5065
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5069
# check transactions-4 success: 1
5070
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5071
SELECT f_int1, f_int1, '', '', 'was inserted'
5072
FROM t0_template source_tab
5073
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5075
# check transactions-5 success: 1
5078
Warning 1196 Some non-transactional changed tables couldn't be rolled back
5080
# check transactions-6 success: 1
5081
# INFO: Storage engine used for t1 seems to be not transactional.
5084
# check transactions-7 success: 1
5085
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5087
SET @@session.sql_mode = 'traditional';
5088
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5089
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5090
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5091
'', '', 'was inserted' FROM t0_template
5092
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5093
ERROR 22012: Division by 0
5096
# check transactions-8 success: 1
5097
# INFO: Storage engine used for t1 seems to be unable to revert
5098
# changes made by the failing statement.
5099
SET @@session.sql_mode = '';
5101
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5103
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5105
# check special-1 success: 1
5106
UPDATE t1 SET f_charbig = '';
5108
# check special-2 success: 1
5109
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5110
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5111
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5112
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5114
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5115
'just inserted' FROM t0_template
5116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5117
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5119
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5120
f_charbig = 'updated by trigger'
5121
WHERE f_int1 = new.f_int1;
5123
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5124
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5127
# check trigger-1 success: 1
5129
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5130
f_int2 = CAST(f_char1 AS SIGNED INT),
5131
f_charbig = 'just inserted'
5132
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5134
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5136
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5137
'just inserted' FROM t0_template
5138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5139
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5141
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5142
f_charbig = 'updated by trigger'
5143
WHERE f_int1 = new.f_int1;
5145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5146
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5149
# check trigger-2 success: 1
5151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5152
f_int2 = CAST(f_char1 AS SIGNED INT),
5153
f_charbig = 'just inserted'
5154
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5159
'just inserted' FROM t0_template
5160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5161
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5164
f_charbig = 'updated by trigger'
5165
WHERE f_int1 = new.f_int1;
5167
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5168
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5170
# check trigger-3 success: 1
5172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5173
f_int2 = CAST(f_char1 AS SIGNED INT),
5174
f_charbig = 'just inserted'
5175
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5180
'just inserted' FROM t0_template
5181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5182
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5185
f_charbig = 'updated by trigger'
5186
WHERE f_int1 = - old.f_int1;
5188
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5189
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5191
# check trigger-4 success: 1
5193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5194
f_int2 = CAST(f_char1 AS SIGNED INT),
5195
f_charbig = 'just inserted'
5196
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5200
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5201
'just inserted' FROM t0_template
5202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5203
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5205
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5206
f_charbig = 'updated by trigger'
5207
WHERE f_int1 = new.f_int1;
5209
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5210
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5212
# check trigger-5 success: 1
5214
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5215
f_int2 = CAST(f_char1 AS SIGNED INT),
5216
f_charbig = 'just inserted'
5217
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5219
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5220
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5221
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5222
'just inserted' FROM t0_template
5223
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5224
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5226
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5227
f_charbig = 'updated by trigger'
5228
WHERE f_int1 = - old.f_int1;
5230
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5231
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5233
# check trigger-6 success: 1
5235
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5236
f_int2 = CAST(f_char1 AS SIGNED INT),
5237
f_charbig = 'just inserted'
5238
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5240
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5242
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5243
'just inserted' FROM t0_template
5244
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5245
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5247
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5248
f_charbig = 'updated by trigger'
5249
WHERE f_int1 = - old.f_int1;
5252
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5254
# check trigger-7 success: 1
5256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5257
f_int2 = CAST(f_char1 AS SIGNED INT),
5258
f_charbig = 'just inserted'
5259
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5261
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5262
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5263
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5264
'just inserted' FROM t0_template
5265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5266
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5268
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5269
f_charbig = 'updated by trigger'
5270
WHERE f_int1 = - old.f_int1;
5273
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5275
# check trigger-8 success: 1
5277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5278
f_int2 = CAST(f_char1 AS SIGNED INT),
5279
f_charbig = 'just inserted'
5280
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5282
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5285
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5287
SET new.f_int1 = old.f_int1 + @max_row,
5288
new.f_int2 = old.f_int2 - @max_row,
5289
new.f_charbig = '####updated per update trigger####';
5292
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5293
f_charbig = '####updated per update statement itself####';
5295
# check trigger-9 success: 1
5297
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5298
f_int2 = CAST(f_char1 AS SIGNED INT),
5299
f_charbig = CONCAT('===',f_char1,'===');
5300
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5302
SET new.f_int1 = new.f_int1 + @max_row,
5303
new.f_int2 = new.f_int2 - @max_row,
5304
new.f_charbig = '####updated per update trigger####';
5307
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5308
f_charbig = '####updated per update statement itself####';
5310
# check trigger-10 success: 1
5312
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5313
f_int2 = CAST(f_char1 AS SIGNED INT),
5314
f_charbig = CONCAT('===',f_char1,'===');
5315
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5317
SET new.f_int1 = @my_max1 + @counter,
5318
new.f_int2 = @my_min2 - @counter,
5319
new.f_charbig = '####updated per insert trigger####';
5320
SET @counter = @counter + 1;
5323
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5324
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5325
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5326
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5331
# check trigger-11 success: 1
5333
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5334
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5335
AND f_charbig = '####updated per insert trigger####';
5336
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5338
SET new.f_int1 = @my_max1 + @counter,
5339
new.f_int2 = @my_min2 - @counter,
5340
new.f_charbig = '####updated per insert trigger####';
5341
SET @counter = @counter + 1;
5344
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5345
INSERT INTO t1 (f_char1, f_char2, f_charbig)
5346
SELECT CAST(f_int1 AS CHAR),
5347
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5348
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5352
# check trigger-12 success: 1
5354
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5355
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5356
AND f_charbig = '####updated per insert trigger####';
5358
Table Op Msg_type Msg_text
5359
test.t1 analyze status OK
5360
CHECK TABLE t1 EXTENDED;
5361
Table Op Msg_type Msg_text
5362
test.t1 check status OK
5363
CHECKSUM TABLE t1 EXTENDED;
5365
test.t1 <some_value>
5367
Table Op Msg_type Msg_text
5368
test.t1 optimize status OK
5369
# check layout success: 1
5370
REPAIR TABLE t1 EXTENDED;
5371
Table Op Msg_type Msg_text
5372
test.t1 repair status OK
5373
# check layout success: 1
5376
# check TRUNCATE success: 1
5377
# check layout success: 1
5378
# End usability test (inc/partition_check.inc)
5385
f_charbig VARCHAR(1000)
5388
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
5389
(PARTITION part_3 VALUES IN (-3),
5390
PARTITION part_2 VALUES IN (-2),
5391
PARTITION part_1 VALUES IN (-1),
5392
PARTITION part_N VALUES IN (NULL),
5393
PARTITION part0 VALUES IN (0),
5394
PARTITION part1 VALUES IN (1),
5395
PARTITION part2 VALUES IN (2),
5396
PARTITION part3 VALUES IN (3));
5397
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5398
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5399
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5400
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
5401
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5402
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5403
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5404
# Start usability test (inc/partition_check.inc)
5406
SHOW CREATE TABLE t1;
5408
t1 CREATE TABLE `t1` (
5409
`f_int1` int(11) DEFAULT NULL,
5410
`f_int2` int(11) DEFAULT NULL,
5411
`f_char1` char(20) DEFAULT NULL,
5412
`f_char2` char(20) DEFAULT NULL,
5413
`f_charbig` varchar(1000) DEFAULT NULL,
5414
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
5415
) ENGINE=MyISAM DEFAULT CHARSET=latin1
5416
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
5417
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
5418
PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
5419
PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
5420
PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
5421
PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
5422
PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
5423
PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
5424
PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
5446
# check prerequisites-1 success: 1
5447
# check COUNT(*) success: 1
5448
# check MIN/MAX(f_int1) success: 1
5449
# check MIN/MAX(f_int2) success: 1
5450
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5451
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5452
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5453
WHERE f_int1 IN (2,3);
5454
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
5455
# check prerequisites-3 success: 1
5456
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5457
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5458
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5459
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5460
WHERE f_int1 IN (2,3);
5461
DELETE FROM t1 WHERE f_charbig = 'delete me';
5462
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5463
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5464
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5465
WHERE f_int1 IN (2,3);
5466
DELETE FROM t1 WHERE f_charbig = 'delete me';
5467
# check read via f_int1 success: 1
5468
# check read via f_int2 success: 1
5470
# check multiple-1 success: 1
5471
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5473
# check multiple-2 success: 1
5474
INSERT INTO t1 SELECT * FROM t0_template
5475
WHERE MOD(f_int1,3) = 0;
5477
# check multiple-3 success: 1
5478
UPDATE t1 SET f_int1 = f_int1 + @max_row
5479
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5480
AND @max_row_div2 + @max_row_div4;
5482
# check multiple-4 success: 1
5484
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5485
AND @max_row_div2 + @max_row_div4 + @max_row;
5487
# check multiple-5 success: 1
5488
SELECT COUNT(*) INTO @try_count FROM t0_template
5489
WHERE MOD(f_int1,3) = 0
5490
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5491
SELECT COUNT(*) INTO @clash_count
5492
FROM t1 INNER JOIN t0_template USING(f_int1)
5493
WHERE MOD(f_int1,3) = 0
5494
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5495
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5497
SET f_int1 = @cur_value , f_int2 = @cur_value,
5498
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5499
f_charbig = '#SINGLE#';
5501
# check single-1 success: 1
5502
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5504
SET f_int1 = @cur_value , f_int2 = @cur_value,
5505
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5506
f_charbig = '#SINGLE#';
5508
# check single-2 success: 1
5509
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5510
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5511
UPDATE t1 SET f_int1 = @cur_value2
5512
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5514
# check single-3 success: 1
5515
SET @cur_value1= -1;
5516
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5517
UPDATE t1 SET f_int1 = @cur_value1
5518
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5520
# check single-4 success: 1
5521
SELECT MAX(f_int1) INTO @cur_value FROM t1;
5522
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5524
# check single-5 success: 1
5525
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5527
# check single-6 success: 1
5528
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5530
# check single-7 success: 1
5531
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
5532
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5533
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5534
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5535
f_charbig = '#NULL#';
5537
SET f_int1 = NULL , f_int2 = -@max_row,
5538
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5539
f_charbig = '#NULL#';
5540
# check null success: 1
5542
# check null-1 success: 1
5543
UPDATE t1 SET f_int1 = -@max_row
5544
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5545
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5547
# check null-2 success: 1
5548
UPDATE t1 SET f_int1 = NULL
5549
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5550
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5552
# check null-3 success: 1
5554
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5555
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5557
# check null-4 success: 1
5559
WHERE f_int1 = 0 AND f_int2 = 0
5560
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5561
AND f_charbig = '#NULL#';
5562
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5563
SELECT f_int1, f_int1, '', '', 'was inserted'
5564
FROM t0_template source_tab
5565
WHERE MOD(f_int1,3) = 0
5566
AND f_int1 BETWEEN @max_row_div2 AND @max_row
5568
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5569
f_int2 = 2 * @max_row + source_tab.f_int1,
5570
f_charbig = 'was updated';
5572
# check unique-1-a success: 1
5574
# check unique-1-b success: 1
5575
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5576
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5577
f_int2 = CAST(f_char1 AS SIGNED INT),
5578
f_charbig = CONCAT('===',f_char1,'===')
5579
WHERE f_charbig = 'was updated';
5580
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5581
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5582
FROM t0_template source_tab
5583
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5585
# check replace success: 1
5587
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5589
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5590
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5591
UPDATE t1 SET f_int2 = f_int1,
5592
f_char1 = CAST(f_int1 AS CHAR),
5593
f_char2 = CAST(f_int1 AS CHAR),
5594
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5595
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5597
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5598
SELECT f_int1, f_int1, '', '', 'was inserted'
5599
FROM t0_template source_tab
5600
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5602
# check transactions-1 success: 1
5605
# check transactions-2 success: 1
5608
# check transactions-3 success: 1
5609
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5613
# check transactions-4 success: 1
5614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5615
SELECT f_int1, f_int1, '', '', 'was inserted'
5616
FROM t0_template source_tab
5617
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5619
# check transactions-5 success: 1
5622
Warning 1196 Some non-transactional changed tables couldn't be rolled back
5624
# check transactions-6 success: 1
5625
# INFO: Storage engine used for t1 seems to be not transactional.
5628
# check transactions-7 success: 1
5629
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5631
SET @@session.sql_mode = 'traditional';
5632
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5633
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5634
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5635
'', '', 'was inserted' FROM t0_template
5636
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5637
ERROR 22012: Division by 0
5640
# check transactions-8 success: 1
5641
# INFO: Storage engine used for t1 seems to be unable to revert
5642
# changes made by the failing statement.
5643
SET @@session.sql_mode = '';
5645
DELETE FROM t1 WHERE f_charbig = 'was inserted';
5647
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5649
# check special-1 success: 1
5650
UPDATE t1 SET f_charbig = '';
5652
# check special-2 success: 1
5653
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5654
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5655
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5656
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5659
'just inserted' FROM t0_template
5660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5661
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5664
f_charbig = 'updated by trigger'
5665
WHERE f_int1 = new.f_int1;
5667
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5668
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5669
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5671
# check trigger-1 success: 1
5673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5674
f_int2 = CAST(f_char1 AS SIGNED INT),
5675
f_charbig = 'just inserted'
5676
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5681
'just inserted' FROM t0_template
5682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5683
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5686
f_charbig = 'updated by trigger'
5687
WHERE f_int1 = new.f_int1;
5689
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5690
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5693
# check trigger-2 success: 1
5695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5696
f_int2 = CAST(f_char1 AS SIGNED INT),
5697
f_charbig = 'just inserted'
5698
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5700
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5702
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5703
'just inserted' FROM t0_template
5704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5705
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5707
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5708
f_charbig = 'updated by trigger'
5709
WHERE f_int1 = new.f_int1;
5711
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5712
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5714
# check trigger-3 success: 1
5716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5717
f_int2 = CAST(f_char1 AS SIGNED INT),
5718
f_charbig = 'just inserted'
5719
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5722
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5723
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5724
'just inserted' FROM t0_template
5725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5726
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5728
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5729
f_charbig = 'updated by trigger'
5730
WHERE f_int1 = - old.f_int1;
5732
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5733
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5735
# check trigger-4 success: 1
5737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5738
f_int2 = CAST(f_char1 AS SIGNED INT),
5739
f_charbig = 'just inserted'
5740
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5742
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5743
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5744
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5745
'just inserted' FROM t0_template
5746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5747
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5749
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5750
f_charbig = 'updated by trigger'
5751
WHERE f_int1 = new.f_int1;
5753
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5754
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5756
# check trigger-5 success: 1
5758
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5759
f_int2 = CAST(f_char1 AS SIGNED INT),
5760
f_charbig = 'just inserted'
5761
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5763
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5764
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5765
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5766
'just inserted' FROM t0_template
5767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5768
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5770
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5771
f_charbig = 'updated by trigger'
5772
WHERE f_int1 = - old.f_int1;
5774
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
5775
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5777
# check trigger-6 success: 1
5779
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5780
f_int2 = CAST(f_char1 AS SIGNED INT),
5781
f_charbig = 'just inserted'
5782
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5784
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5785
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5786
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5787
'just inserted' FROM t0_template
5788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5789
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5791
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5792
f_charbig = 'updated by trigger'
5793
WHERE f_int1 = - old.f_int1;
5796
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5798
# check trigger-7 success: 1
5800
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5801
f_int2 = CAST(f_char1 AS SIGNED INT),
5802
f_charbig = 'just inserted'
5803
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5805
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5806
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5807
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5808
'just inserted' FROM t0_template
5809
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5810
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5812
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5813
f_charbig = 'updated by trigger'
5814
WHERE f_int1 = - old.f_int1;
5817
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5819
# check trigger-8 success: 1
5821
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5822
f_int2 = CAST(f_char1 AS SIGNED INT),
5823
f_charbig = 'just inserted'
5824
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5826
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5829
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5831
SET new.f_int1 = old.f_int1 + @max_row,
5832
new.f_int2 = old.f_int2 - @max_row,
5833
new.f_charbig = '####updated per update trigger####';
5836
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5837
f_charbig = '####updated per update statement itself####';
5839
# check trigger-9 success: 1
5841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5842
f_int2 = CAST(f_char1 AS SIGNED INT),
5843
f_charbig = CONCAT('===',f_char1,'===');
5844
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5846
SET new.f_int1 = new.f_int1 + @max_row,
5847
new.f_int2 = new.f_int2 - @max_row,
5848
new.f_charbig = '####updated per update trigger####';
5851
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5852
f_charbig = '####updated per update statement itself####';
5854
# check trigger-10 success: 1
5856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5857
f_int2 = CAST(f_char1 AS SIGNED INT),
5858
f_charbig = CONCAT('===',f_char1,'===');
5859
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5861
SET new.f_int1 = @my_max1 + @counter,
5862
new.f_int2 = @my_min2 - @counter,
5863
new.f_charbig = '####updated per insert trigger####';
5864
SET @counter = @counter + 1;
5867
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5868
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5869
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5870
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5875
# check trigger-11 success: 1
5877
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5878
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5879
AND f_charbig = '####updated per insert trigger####';
5880
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5882
SET new.f_int1 = @my_max1 + @counter,
5883
new.f_int2 = @my_min2 - @counter,
5884
new.f_charbig = '####updated per insert trigger####';
5885
SET @counter = @counter + 1;
5888
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5889
INSERT INTO t1 (f_char1, f_char2, f_charbig)
5890
SELECT CAST(f_int1 AS CHAR),
5891
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5896
# check trigger-12 success: 1
5898
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5899
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5900
AND f_charbig = '####updated per insert trigger####';
5902
Table Op Msg_type Msg_text
5903
test.t1 analyze status OK
5904
CHECK TABLE t1 EXTENDED;
5905
Table Op Msg_type Msg_text
5906
test.t1 check status OK
5907
CHECKSUM TABLE t1 EXTENDED;
5909
test.t1 <some_value>
5911
Table Op Msg_type Msg_text
5912
test.t1 optimize status OK
5913
# check layout success: 1
5914
REPAIR TABLE t1 EXTENDED;
5915
Table Op Msg_type Msg_text
5916
test.t1 repair status OK
5917
# check layout success: 1
5920
# check TRUNCATE success: 1
5921
# check layout success: 1
5922
# End usability test (inc/partition_check.inc)
5929
f_charbig VARCHAR(1000)
5932
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
5933
(PARTITION parta VALUES LESS THAN (0),
5934
PARTITION partb VALUES LESS THAN (5),
5935
PARTITION partc VALUES LESS THAN (10),
5936
PARTITION partd VALUES LESS THAN (10 + 5),
5937
PARTITION parte VALUES LESS THAN (20),
5938
PARTITION partf VALUES LESS THAN (2147483646));
5939
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5940
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5941
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5942
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
5943
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5944
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5945
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5946
# Start usability test (inc/partition_check.inc)
5948
SHOW CREATE TABLE t1;
5950
t1 CREATE TABLE `t1` (
5951
`f_int1` int(11) DEFAULT NULL,
5952
`f_int2` int(11) DEFAULT NULL,
5953
`f_char1` char(20) DEFAULT NULL,
5954
`f_char2` char(20) DEFAULT NULL,
5955
`f_charbig` varchar(1000) DEFAULT NULL,
5956
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
5957
) ENGINE=MyISAM DEFAULT CHARSET=latin1
5958
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
5959
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
5960
PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
5961
PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
5962
PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
5963
PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
5964
PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
5982
# check prerequisites-1 success: 1
5983
# check COUNT(*) success: 1
5984
# check MIN/MAX(f_int1) success: 1
5985
# check MIN/MAX(f_int2) success: 1
5986
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5987
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5988
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5989
WHERE f_int1 IN (2,3);
5990
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
5991
# check prerequisites-3 success: 1
5992
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5993
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5994
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5995
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5996
WHERE f_int1 IN (2,3);
5997
DELETE FROM t1 WHERE f_charbig = 'delete me';
5998
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5999
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6000
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6001
WHERE f_int1 IN (2,3);
6002
DELETE FROM t1 WHERE f_charbig = 'delete me';
6003
# check read via f_int1 success: 1
6004
# check read via f_int2 success: 1
6006
# check multiple-1 success: 1
6007
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6009
# check multiple-2 success: 1
6010
INSERT INTO t1 SELECT * FROM t0_template
6011
WHERE MOD(f_int1,3) = 0;
6013
# check multiple-3 success: 1
6014
UPDATE t1 SET f_int1 = f_int1 + @max_row
6015
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6016
AND @max_row_div2 + @max_row_div4;
6018
# check multiple-4 success: 1
6020
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6021
AND @max_row_div2 + @max_row_div4 + @max_row;
6023
# check multiple-5 success: 1
6024
SELECT COUNT(*) INTO @try_count FROM t0_template
6025
WHERE MOD(f_int1,3) = 0
6026
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6027
SELECT COUNT(*) INTO @clash_count
6028
FROM t1 INNER JOIN t0_template USING(f_int1)
6029
WHERE MOD(f_int1,3) = 0
6030
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6031
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6033
SET f_int1 = @cur_value , f_int2 = @cur_value,
6034
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6035
f_charbig = '#SINGLE#';
6037
# check single-1 success: 1
6038
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6040
SET f_int1 = @cur_value , f_int2 = @cur_value,
6041
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6042
f_charbig = '#SINGLE#';
6044
# check single-2 success: 1
6045
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6046
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6047
UPDATE t1 SET f_int1 = @cur_value2
6048
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6050
# check single-3 success: 1
6051
SET @cur_value1= -1;
6052
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6053
UPDATE t1 SET f_int1 = @cur_value1
6054
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6056
# check single-4 success: 1
6057
SELECT MAX(f_int1) INTO @cur_value FROM t1;
6058
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6060
# check single-5 success: 1
6061
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6063
# check single-6 success: 1
6064
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6065
ERROR HY000: Table has no partition for value 2147483647
6066
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6067
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6068
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6069
f_charbig = '#NULL#';
6071
SET f_int1 = NULL , f_int2 = -@max_row,
6072
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6073
f_charbig = '#NULL#';
6074
# check null success: 1
6076
# check null-1 success: 1
6077
UPDATE t1 SET f_int1 = -@max_row
6078
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6079
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6081
# check null-2 success: 1
6082
UPDATE t1 SET f_int1 = NULL
6083
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6084
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6086
# check null-3 success: 1
6088
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6089
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6091
# check null-4 success: 1
6093
WHERE f_int1 = 0 AND f_int2 = 0
6094
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6095
AND f_charbig = '#NULL#';
6096
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6097
SELECT f_int1, f_int1, '', '', 'was inserted'
6098
FROM t0_template source_tab
6099
WHERE MOD(f_int1,3) = 0
6100
AND f_int1 BETWEEN @max_row_div2 AND @max_row
6102
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6103
f_int2 = 2 * @max_row + source_tab.f_int1,
6104
f_charbig = 'was updated';
6106
# check unique-1-a success: 1
6108
# check unique-1-b success: 1
6109
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6110
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6111
f_int2 = CAST(f_char1 AS SIGNED INT),
6112
f_charbig = CONCAT('===',f_char1,'===')
6113
WHERE f_charbig = 'was updated';
6114
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6115
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6116
FROM t0_template source_tab
6117
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6119
# check replace success: 1
6121
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6123
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6124
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6125
UPDATE t1 SET f_int2 = f_int1,
6126
f_char1 = CAST(f_int1 AS CHAR),
6127
f_char2 = CAST(f_int1 AS CHAR),
6128
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6129
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6131
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6132
SELECT f_int1, f_int1, '', '', 'was inserted'
6133
FROM t0_template source_tab
6134
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6136
# check transactions-1 success: 1
6139
# check transactions-2 success: 1
6142
# check transactions-3 success: 1
6143
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6147
# check transactions-4 success: 1
6148
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6149
SELECT f_int1, f_int1, '', '', 'was inserted'
6150
FROM t0_template source_tab
6151
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6153
# check transactions-5 success: 1
6156
Warning 1196 Some non-transactional changed tables couldn't be rolled back
6158
# check transactions-6 success: 1
6159
# INFO: Storage engine used for t1 seems to be not transactional.
6162
# check transactions-7 success: 1
6163
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6165
SET @@session.sql_mode = 'traditional';
6166
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6167
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6168
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6169
'', '', 'was inserted' FROM t0_template
6170
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6171
ERROR 22012: Division by 0
6174
# check transactions-8 success: 1
6175
# INFO: Storage engine used for t1 seems to be unable to revert
6176
# changes made by the failing statement.
6177
SET @@session.sql_mode = '';
6179
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6181
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6183
# check special-1 success: 1
6184
UPDATE t1 SET f_charbig = '';
6186
# check special-2 success: 1
6187
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6188
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6189
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6193
'just inserted' FROM t0_template
6194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6195
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6198
f_charbig = 'updated by trigger'
6199
WHERE f_int1 = new.f_int1;
6201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6202
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6205
# check trigger-1 success: 1
6207
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6208
f_int2 = CAST(f_char1 AS SIGNED INT),
6209
f_charbig = 'just inserted'
6210
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6212
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6213
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6214
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6215
'just inserted' FROM t0_template
6216
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6217
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6219
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6220
f_charbig = 'updated by trigger'
6221
WHERE f_int1 = new.f_int1;
6223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6224
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6227
# check trigger-2 success: 1
6229
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6230
f_int2 = CAST(f_char1 AS SIGNED INT),
6231
f_charbig = 'just inserted'
6232
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6234
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6235
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6236
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6237
'just inserted' FROM t0_template
6238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6239
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6241
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6242
f_charbig = 'updated by trigger'
6243
WHERE f_int1 = new.f_int1;
6245
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6246
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6248
# check trigger-3 success: 1
6250
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6251
f_int2 = CAST(f_char1 AS SIGNED INT),
6252
f_charbig = 'just inserted'
6253
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6255
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6257
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6258
'just inserted' FROM t0_template
6259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6260
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6262
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6263
f_charbig = 'updated by trigger'
6264
WHERE f_int1 = - old.f_int1;
6266
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6267
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6269
# check trigger-4 success: 1
6271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6272
f_int2 = CAST(f_char1 AS SIGNED INT),
6273
f_charbig = 'just inserted'
6274
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6276
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6278
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6279
'just inserted' FROM t0_template
6280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6281
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6283
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6284
f_charbig = 'updated by trigger'
6285
WHERE f_int1 = new.f_int1;
6287
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6288
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6290
# check trigger-5 success: 1
6292
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6293
f_int2 = CAST(f_char1 AS SIGNED INT),
6294
f_charbig = 'just inserted'
6295
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6297
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6298
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6299
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6300
'just inserted' FROM t0_template
6301
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6302
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6304
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6305
f_charbig = 'updated by trigger'
6306
WHERE f_int1 = - old.f_int1;
6308
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6309
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6311
# check trigger-6 success: 1
6313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6314
f_int2 = CAST(f_char1 AS SIGNED INT),
6315
f_charbig = 'just inserted'
6316
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6318
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6319
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6320
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6321
'just inserted' FROM t0_template
6322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6323
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6325
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6326
f_charbig = 'updated by trigger'
6327
WHERE f_int1 = - old.f_int1;
6330
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6332
# check trigger-7 success: 1
6334
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6335
f_int2 = CAST(f_char1 AS SIGNED INT),
6336
f_charbig = 'just inserted'
6337
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6339
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6341
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6342
'just inserted' FROM t0_template
6343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6344
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6346
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6347
f_charbig = 'updated by trigger'
6348
WHERE f_int1 = - old.f_int1;
6351
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6353
# check trigger-8 success: 1
6355
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6356
f_int2 = CAST(f_char1 AS SIGNED INT),
6357
f_charbig = 'just inserted'
6358
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6360
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6362
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6363
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6365
SET new.f_int1 = old.f_int1 + @max_row,
6366
new.f_int2 = old.f_int2 - @max_row,
6367
new.f_charbig = '####updated per update trigger####';
6370
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6371
f_charbig = '####updated per update statement itself####';
6373
# check trigger-9 success: 1
6375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6376
f_int2 = CAST(f_char1 AS SIGNED INT),
6377
f_charbig = CONCAT('===',f_char1,'===');
6378
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6380
SET new.f_int1 = new.f_int1 + @max_row,
6381
new.f_int2 = new.f_int2 - @max_row,
6382
new.f_charbig = '####updated per update trigger####';
6385
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6386
f_charbig = '####updated per update statement itself####';
6388
# check trigger-10 success: 1
6390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6391
f_int2 = CAST(f_char1 AS SIGNED INT),
6392
f_charbig = CONCAT('===',f_char1,'===');
6393
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6395
SET new.f_int1 = @my_max1 + @counter,
6396
new.f_int2 = @my_min2 - @counter,
6397
new.f_charbig = '####updated per insert trigger####';
6398
SET @counter = @counter + 1;
6401
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6402
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6403
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6404
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6409
# check trigger-11 success: 1
6411
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6412
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6413
AND f_charbig = '####updated per insert trigger####';
6414
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6416
SET new.f_int1 = @my_max1 + @counter,
6417
new.f_int2 = @my_min2 - @counter,
6418
new.f_charbig = '####updated per insert trigger####';
6419
SET @counter = @counter + 1;
6422
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6423
INSERT INTO t1 (f_char1, f_char2, f_charbig)
6424
SELECT CAST(f_int1 AS CHAR),
6425
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6430
# check trigger-12 success: 1
6432
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6433
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6434
AND f_charbig = '####updated per insert trigger####';
6436
Table Op Msg_type Msg_text
6437
test.t1 analyze status OK
6438
CHECK TABLE t1 EXTENDED;
6439
Table Op Msg_type Msg_text
6440
test.t1 check status OK
6441
CHECKSUM TABLE t1 EXTENDED;
6443
test.t1 <some_value>
6445
Table Op Msg_type Msg_text
6446
test.t1 optimize status OK
6447
# check layout success: 1
6448
REPAIR TABLE t1 EXTENDED;
6449
Table Op Msg_type Msg_text
6450
test.t1 repair status OK
6451
# check layout success: 1
6454
# check TRUNCATE success: 1
6455
# check layout success: 1
6456
# End usability test (inc/partition_check.inc)
6463
f_charbig VARCHAR(1000)
6466
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
6467
(PARTITION parta VALUES LESS THAN (0),
6468
PARTITION partb VALUES LESS THAN (5),
6469
PARTITION partc VALUES LESS THAN (10),
6470
PARTITION partd VALUES LESS THAN (2147483646));
6471
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6472
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6473
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6474
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
6475
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6476
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6477
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6478
# Start usability test (inc/partition_check.inc)
6480
SHOW CREATE TABLE t1;
6482
t1 CREATE TABLE `t1` (
6483
`f_int1` int(11) DEFAULT NULL,
6484
`f_int2` int(11) DEFAULT NULL,
6485
`f_char1` char(20) DEFAULT NULL,
6486
`f_char2` char(20) DEFAULT NULL,
6487
`f_charbig` varchar(1000) DEFAULT NULL,
6488
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
6489
) ENGINE=MyISAM DEFAULT CHARSET=latin1
6490
/*!50100 PARTITION BY RANGE (f_int1)
6491
SUBPARTITION BY HASH (f_int2)
6493
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
6494
PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
6495
PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
6496
PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
6499
t1#P#parta#SP#partasp0.MYD
6500
t1#P#parta#SP#partasp0.MYI
6501
t1#P#parta#SP#partasp1.MYD
6502
t1#P#parta#SP#partasp1.MYI
6503
t1#P#partb#SP#partbsp0.MYD
6504
t1#P#partb#SP#partbsp0.MYI
6505
t1#P#partb#SP#partbsp1.MYD
6506
t1#P#partb#SP#partbsp1.MYI
6507
t1#P#partc#SP#partcsp0.MYD
6508
t1#P#partc#SP#partcsp0.MYI
6509
t1#P#partc#SP#partcsp1.MYD
6510
t1#P#partc#SP#partcsp1.MYI
6511
t1#P#partd#SP#partdsp0.MYD
6512
t1#P#partd#SP#partdsp0.MYI
6513
t1#P#partd#SP#partdsp1.MYD
6514
t1#P#partd#SP#partdsp1.MYI
6518
# check prerequisites-1 success: 1
6519
# check COUNT(*) success: 1
6520
# check MIN/MAX(f_int1) success: 1
6521
# check MIN/MAX(f_int2) success: 1
6522
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6523
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6524
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6525
WHERE f_int1 IN (2,3);
6526
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
6527
# check prerequisites-3 success: 1
6528
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6529
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6530
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6531
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6532
WHERE f_int1 IN (2,3);
6533
DELETE FROM t1 WHERE f_charbig = 'delete me';
6534
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6535
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6536
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6537
WHERE f_int1 IN (2,3);
6538
DELETE FROM t1 WHERE f_charbig = 'delete me';
6539
# check read via f_int1 success: 1
6540
# check read via f_int2 success: 1
6542
# check multiple-1 success: 1
6543
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6545
# check multiple-2 success: 1
6546
INSERT INTO t1 SELECT * FROM t0_template
6547
WHERE MOD(f_int1,3) = 0;
6549
# check multiple-3 success: 1
6550
UPDATE t1 SET f_int1 = f_int1 + @max_row
6551
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6552
AND @max_row_div2 + @max_row_div4;
6554
# check multiple-4 success: 1
6556
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6557
AND @max_row_div2 + @max_row_div4 + @max_row;
6559
# check multiple-5 success: 1
6560
SELECT COUNT(*) INTO @try_count FROM t0_template
6561
WHERE MOD(f_int1,3) = 0
6562
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6563
SELECT COUNT(*) INTO @clash_count
6564
FROM t1 INNER JOIN t0_template USING(f_int1)
6565
WHERE MOD(f_int1,3) = 0
6566
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6567
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6569
SET f_int1 = @cur_value , f_int2 = @cur_value,
6570
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6571
f_charbig = '#SINGLE#';
6573
# check single-1 success: 1
6574
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6576
SET f_int1 = @cur_value , f_int2 = @cur_value,
6577
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6578
f_charbig = '#SINGLE#';
6580
# check single-2 success: 1
6581
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6582
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6583
UPDATE t1 SET f_int1 = @cur_value2
6584
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6586
# check single-3 success: 1
6587
SET @cur_value1= -1;
6588
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6589
UPDATE t1 SET f_int1 = @cur_value1
6590
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6592
# check single-4 success: 1
6593
SELECT MAX(f_int1) INTO @cur_value FROM t1;
6594
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6596
# check single-5 success: 1
6597
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6599
# check single-6 success: 1
6600
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6601
ERROR HY000: Table has no partition for value 2147483647
6602
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6603
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6604
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6605
f_charbig = '#NULL#';
6607
SET f_int1 = NULL , f_int2 = -@max_row,
6608
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6609
f_charbig = '#NULL#';
6610
# check null success: 1
6612
# check null-1 success: 1
6613
UPDATE t1 SET f_int1 = -@max_row
6614
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6615
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6617
# check null-2 success: 1
6618
UPDATE t1 SET f_int1 = NULL
6619
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6620
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6622
# check null-3 success: 1
6624
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6625
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6627
# check null-4 success: 1
6629
WHERE f_int1 = 0 AND f_int2 = 0
6630
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6631
AND f_charbig = '#NULL#';
6632
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6633
SELECT f_int1, f_int1, '', '', 'was inserted'
6634
FROM t0_template source_tab
6635
WHERE MOD(f_int1,3) = 0
6636
AND f_int1 BETWEEN @max_row_div2 AND @max_row
6638
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6639
f_int2 = 2 * @max_row + source_tab.f_int1,
6640
f_charbig = 'was updated';
6642
# check unique-1-a success: 1
6644
# check unique-1-b success: 1
6645
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6646
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6647
f_int2 = CAST(f_char1 AS SIGNED INT),
6648
f_charbig = CONCAT('===',f_char1,'===')
6649
WHERE f_charbig = 'was updated';
6650
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6651
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6652
FROM t0_template source_tab
6653
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6655
# check replace success: 1
6657
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6659
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6660
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6661
UPDATE t1 SET f_int2 = f_int1,
6662
f_char1 = CAST(f_int1 AS CHAR),
6663
f_char2 = CAST(f_int1 AS CHAR),
6664
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6665
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6667
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6668
SELECT f_int1, f_int1, '', '', 'was inserted'
6669
FROM t0_template source_tab
6670
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6672
# check transactions-1 success: 1
6675
# check transactions-2 success: 1
6678
# check transactions-3 success: 1
6679
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6683
# check transactions-4 success: 1
6684
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6685
SELECT f_int1, f_int1, '', '', 'was inserted'
6686
FROM t0_template source_tab
6687
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6689
# check transactions-5 success: 1
6692
Warning 1196 Some non-transactional changed tables couldn't be rolled back
6694
# check transactions-6 success: 1
6695
# INFO: Storage engine used for t1 seems to be not transactional.
6698
# check transactions-7 success: 1
6699
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6701
SET @@session.sql_mode = 'traditional';
6702
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6703
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6704
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6705
'', '', 'was inserted' FROM t0_template
6706
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6707
ERROR 22012: Division by 0
6710
# check transactions-8 success: 1
6711
# INFO: Storage engine used for t1 seems to be unable to revert
6712
# changes made by the failing statement.
6713
SET @@session.sql_mode = '';
6715
DELETE FROM t1 WHERE f_charbig = 'was inserted';
6717
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6719
# check special-1 success: 1
6720
UPDATE t1 SET f_charbig = '';
6722
# check special-2 success: 1
6723
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6724
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6725
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6728
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6729
'just inserted' FROM t0_template
6730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6731
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6733
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6734
f_charbig = 'updated by trigger'
6735
WHERE f_int1 = new.f_int1;
6737
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6738
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6741
# check trigger-1 success: 1
6743
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6744
f_int2 = CAST(f_char1 AS SIGNED INT),
6745
f_charbig = 'just inserted'
6746
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6748
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6749
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6750
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6751
'just inserted' FROM t0_template
6752
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6753
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6755
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6756
f_charbig = 'updated by trigger'
6757
WHERE f_int1 = new.f_int1;
6759
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6760
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6763
# check trigger-2 success: 1
6765
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6766
f_int2 = CAST(f_char1 AS SIGNED INT),
6767
f_charbig = 'just inserted'
6768
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6770
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6771
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6772
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6773
'just inserted' FROM t0_template
6774
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6775
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6777
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6778
f_charbig = 'updated by trigger'
6779
WHERE f_int1 = new.f_int1;
6781
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6782
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6784
# check trigger-3 success: 1
6786
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6787
f_int2 = CAST(f_char1 AS SIGNED INT),
6788
f_charbig = 'just inserted'
6789
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6791
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6793
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6794
'just inserted' FROM t0_template
6795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6796
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6798
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6799
f_charbig = 'updated by trigger'
6800
WHERE f_int1 = - old.f_int1;
6802
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6803
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6805
# check trigger-4 success: 1
6807
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6808
f_int2 = CAST(f_char1 AS SIGNED INT),
6809
f_charbig = 'just inserted'
6810
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6812
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6813
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6814
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6815
'just inserted' FROM t0_template
6816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6817
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6819
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6820
f_charbig = 'updated by trigger'
6821
WHERE f_int1 = new.f_int1;
6823
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6824
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6826
# check trigger-5 success: 1
6828
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6829
f_int2 = CAST(f_char1 AS SIGNED INT),
6830
f_charbig = 'just inserted'
6831
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6833
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6834
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6835
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6836
'just inserted' FROM t0_template
6837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6838
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6840
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6841
f_charbig = 'updated by trigger'
6842
WHERE f_int1 = - old.f_int1;
6844
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
6845
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6847
# check trigger-6 success: 1
6849
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6850
f_int2 = CAST(f_char1 AS SIGNED INT),
6851
f_charbig = 'just inserted'
6852
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6854
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6856
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6857
'just inserted' FROM t0_template
6858
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6859
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6861
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6862
f_charbig = 'updated by trigger'
6863
WHERE f_int1 = - old.f_int1;
6866
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6868
# check trigger-7 success: 1
6870
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6871
f_int2 = CAST(f_char1 AS SIGNED INT),
6872
f_charbig = 'just inserted'
6873
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6875
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6876
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6877
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6878
'just inserted' FROM t0_template
6879
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6880
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6882
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6883
f_charbig = 'updated by trigger'
6884
WHERE f_int1 = - old.f_int1;
6887
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6889
# check trigger-8 success: 1
6891
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6892
f_int2 = CAST(f_char1 AS SIGNED INT),
6893
f_charbig = 'just inserted'
6894
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6896
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6899
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6901
SET new.f_int1 = old.f_int1 + @max_row,
6902
new.f_int2 = old.f_int2 - @max_row,
6903
new.f_charbig = '####updated per update trigger####';
6906
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6907
f_charbig = '####updated per update statement itself####';
6909
# check trigger-9 success: 1
6911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6912
f_int2 = CAST(f_char1 AS SIGNED INT),
6913
f_charbig = CONCAT('===',f_char1,'===');
6914
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6916
SET new.f_int1 = new.f_int1 + @max_row,
6917
new.f_int2 = new.f_int2 - @max_row,
6918
new.f_charbig = '####updated per update trigger####';
6921
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6922
f_charbig = '####updated per update statement itself####';
6924
# check trigger-10 success: 1
6926
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6927
f_int2 = CAST(f_char1 AS SIGNED INT),
6928
f_charbig = CONCAT('===',f_char1,'===');
6929
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6931
SET new.f_int1 = @my_max1 + @counter,
6932
new.f_int2 = @my_min2 - @counter,
6933
new.f_charbig = '####updated per insert trigger####';
6934
SET @counter = @counter + 1;
6937
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6938
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6939
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6940
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6941
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6945
# check trigger-11 success: 1
6947
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6948
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6949
AND f_charbig = '####updated per insert trigger####';
6950
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6952
SET new.f_int1 = @my_max1 + @counter,
6953
new.f_int2 = @my_min2 - @counter,
6954
new.f_charbig = '####updated per insert trigger####';
6955
SET @counter = @counter + 1;
6958
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6959
INSERT INTO t1 (f_char1, f_char2, f_charbig)
6960
SELECT CAST(f_int1 AS CHAR),
6961
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6962
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6966
# check trigger-12 success: 1
6968
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6969
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6970
AND f_charbig = '####updated per insert trigger####';
6972
Table Op Msg_type Msg_text
6973
test.t1 analyze status OK
6974
CHECK TABLE t1 EXTENDED;
6975
Table Op Msg_type Msg_text
6976
test.t1 check status OK
6977
CHECKSUM TABLE t1 EXTENDED;
6979
test.t1 <some_value>
6981
Table Op Msg_type Msg_text
6982
test.t1 optimize status OK
6983
# check layout success: 1
6984
REPAIR TABLE t1 EXTENDED;
6985
Table Op Msg_type Msg_text
6986
test.t1 repair status OK
6987
# check layout success: 1
6990
# check TRUNCATE success: 1
6991
# check layout success: 1
6992
# End usability test (inc/partition_check.inc)
6999
f_charbig VARCHAR(1000)
7002
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
7003
(PARTITION part1 VALUES LESS THAN (0)
7004
(SUBPARTITION subpart11, SUBPARTITION subpart12),
7005
PARTITION part2 VALUES LESS THAN (5)
7006
(SUBPARTITION subpart21, SUBPARTITION subpart22),
7007
PARTITION part3 VALUES LESS THAN (10)
7008
(SUBPARTITION subpart31, SUBPARTITION subpart32),
7009
PARTITION part4 VALUES LESS THAN (2147483646)
7010
(SUBPARTITION subpart41, SUBPARTITION subpart42));
7011
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7012
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7013
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7014
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
7015
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7016
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7017
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7018
# Start usability test (inc/partition_check.inc)
7020
SHOW CREATE TABLE t1;
7022
t1 CREATE TABLE `t1` (
7023
`f_int1` int(11) DEFAULT NULL,
7024
`f_int2` int(11) DEFAULT NULL,
7025
`f_char1` char(20) DEFAULT NULL,
7026
`f_char2` char(20) DEFAULT NULL,
7027
`f_charbig` varchar(1000) DEFAULT NULL,
7028
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
7029
) ENGINE=MyISAM DEFAULT CHARSET=latin1
7030
/*!50100 PARTITION BY RANGE (f_int1)
7031
SUBPARTITION BY KEY (f_int2)
7032
(PARTITION part1 VALUES LESS THAN (0)
7033
(SUBPARTITION subpart11 ENGINE = MyISAM,
7034
SUBPARTITION subpart12 ENGINE = MyISAM),
7035
PARTITION part2 VALUES LESS THAN (5)
7036
(SUBPARTITION subpart21 ENGINE = MyISAM,
7037
SUBPARTITION subpart22 ENGINE = MyISAM),
7038
PARTITION part3 VALUES LESS THAN (10)
7039
(SUBPARTITION subpart31 ENGINE = MyISAM,
7040
SUBPARTITION subpart32 ENGINE = MyISAM),
7041
PARTITION part4 VALUES LESS THAN (2147483646)
7042
(SUBPARTITION subpart41 ENGINE = MyISAM,
7043
SUBPARTITION subpart42 ENGINE = MyISAM)) */
7046
t1#P#part1#SP#subpart11.MYD
7047
t1#P#part1#SP#subpart11.MYI
7048
t1#P#part1#SP#subpart12.MYD
7049
t1#P#part1#SP#subpart12.MYI
7050
t1#P#part2#SP#subpart21.MYD
7051
t1#P#part2#SP#subpart21.MYI
7052
t1#P#part2#SP#subpart22.MYD
7053
t1#P#part2#SP#subpart22.MYI
7054
t1#P#part3#SP#subpart31.MYD
7055
t1#P#part3#SP#subpart31.MYI
7056
t1#P#part3#SP#subpart32.MYD
7057
t1#P#part3#SP#subpart32.MYI
7058
t1#P#part4#SP#subpart41.MYD
7059
t1#P#part4#SP#subpart41.MYI
7060
t1#P#part4#SP#subpart42.MYD
7061
t1#P#part4#SP#subpart42.MYI
7065
# check prerequisites-1 success: 1
7066
# check COUNT(*) success: 1
7067
# check MIN/MAX(f_int1) success: 1
7068
# check MIN/MAX(f_int2) success: 1
7069
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7070
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7071
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7072
WHERE f_int1 IN (2,3);
7073
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
7074
# check prerequisites-3 success: 1
7075
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7076
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7077
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7078
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7079
WHERE f_int1 IN (2,3);
7080
DELETE FROM t1 WHERE f_charbig = 'delete me';
7081
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7082
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7083
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7084
WHERE f_int1 IN (2,3);
7085
DELETE FROM t1 WHERE f_charbig = 'delete me';
7086
# check read via f_int1 success: 1
7087
# check read via f_int2 success: 1
7089
# check multiple-1 success: 1
7090
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7092
# check multiple-2 success: 1
7093
INSERT INTO t1 SELECT * FROM t0_template
7094
WHERE MOD(f_int1,3) = 0;
7096
# check multiple-3 success: 1
7097
UPDATE t1 SET f_int1 = f_int1 + @max_row
7098
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7099
AND @max_row_div2 + @max_row_div4;
7101
# check multiple-4 success: 1
7103
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7104
AND @max_row_div2 + @max_row_div4 + @max_row;
7106
# check multiple-5 success: 1
7107
SELECT COUNT(*) INTO @try_count FROM t0_template
7108
WHERE MOD(f_int1,3) = 0
7109
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7110
SELECT COUNT(*) INTO @clash_count
7111
FROM t1 INNER JOIN t0_template USING(f_int1)
7112
WHERE MOD(f_int1,3) = 0
7113
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7114
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7116
SET f_int1 = @cur_value , f_int2 = @cur_value,
7117
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7118
f_charbig = '#SINGLE#';
7120
# check single-1 success: 1
7121
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7123
SET f_int1 = @cur_value , f_int2 = @cur_value,
7124
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7125
f_charbig = '#SINGLE#';
7127
# check single-2 success: 1
7128
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7129
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7130
UPDATE t1 SET f_int1 = @cur_value2
7131
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7133
# check single-3 success: 1
7134
SET @cur_value1= -1;
7135
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7136
UPDATE t1 SET f_int1 = @cur_value1
7137
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7139
# check single-4 success: 1
7140
SELECT MAX(f_int1) INTO @cur_value FROM t1;
7141
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7143
# check single-5 success: 1
7144
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7146
# check single-6 success: 1
7147
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7148
ERROR HY000: Table has no partition for value 2147483647
7149
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7150
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7151
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7152
f_charbig = '#NULL#';
7154
SET f_int1 = NULL , f_int2 = -@max_row,
7155
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7156
f_charbig = '#NULL#';
7157
# check null success: 1
7159
# check null-1 success: 1
7160
UPDATE t1 SET f_int1 = -@max_row
7161
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7162
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7164
# check null-2 success: 1
7165
UPDATE t1 SET f_int1 = NULL
7166
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7167
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7169
# check null-3 success: 1
7171
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7172
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7174
# check null-4 success: 1
7176
WHERE f_int1 = 0 AND f_int2 = 0
7177
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7178
AND f_charbig = '#NULL#';
7179
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7180
SELECT f_int1, f_int1, '', '', 'was inserted'
7181
FROM t0_template source_tab
7182
WHERE MOD(f_int1,3) = 0
7183
AND f_int1 BETWEEN @max_row_div2 AND @max_row
7185
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7186
f_int2 = 2 * @max_row + source_tab.f_int1,
7187
f_charbig = 'was updated';
7189
# check unique-1-a success: 1
7191
# check unique-1-b success: 1
7192
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7194
f_int2 = CAST(f_char1 AS SIGNED INT),
7195
f_charbig = CONCAT('===',f_char1,'===')
7196
WHERE f_charbig = 'was updated';
7197
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7198
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7199
FROM t0_template source_tab
7200
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7202
# check replace success: 1
7204
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7206
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7207
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7208
UPDATE t1 SET f_int2 = f_int1,
7209
f_char1 = CAST(f_int1 AS CHAR),
7210
f_char2 = CAST(f_int1 AS CHAR),
7211
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7212
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7214
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7215
SELECT f_int1, f_int1, '', '', 'was inserted'
7216
FROM t0_template source_tab
7217
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7219
# check transactions-1 success: 1
7222
# check transactions-2 success: 1
7225
# check transactions-3 success: 1
7226
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7230
# check transactions-4 success: 1
7231
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7232
SELECT f_int1, f_int1, '', '', 'was inserted'
7233
FROM t0_template source_tab
7234
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7236
# check transactions-5 success: 1
7239
Warning 1196 Some non-transactional changed tables couldn't be rolled back
7241
# check transactions-6 success: 1
7242
# INFO: Storage engine used for t1 seems to be not transactional.
7245
# check transactions-7 success: 1
7246
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7248
SET @@session.sql_mode = 'traditional';
7249
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7250
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7251
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7252
'', '', 'was inserted' FROM t0_template
7253
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7254
ERROR 22012: Division by 0
7257
# check transactions-8 success: 1
7258
# INFO: Storage engine used for t1 seems to be unable to revert
7259
# changes made by the failing statement.
7260
SET @@session.sql_mode = '';
7262
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7264
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7266
# check special-1 success: 1
7267
UPDATE t1 SET f_charbig = '';
7269
# check special-2 success: 1
7270
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7271
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7272
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7273
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7276
'just inserted' FROM t0_template
7277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7278
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7281
f_charbig = 'updated by trigger'
7282
WHERE f_int1 = new.f_int1;
7284
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7285
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7288
# check trigger-1 success: 1
7290
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7291
f_int2 = CAST(f_char1 AS SIGNED INT),
7292
f_charbig = 'just inserted'
7293
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7295
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7296
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7297
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7298
'just inserted' FROM t0_template
7299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7300
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7302
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7303
f_charbig = 'updated by trigger'
7304
WHERE f_int1 = new.f_int1;
7306
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7307
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7310
# check trigger-2 success: 1
7312
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7313
f_int2 = CAST(f_char1 AS SIGNED INT),
7314
f_charbig = 'just inserted'
7315
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7317
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7319
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7320
'just inserted' FROM t0_template
7321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7322
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7324
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7325
f_charbig = 'updated by trigger'
7326
WHERE f_int1 = new.f_int1;
7328
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7329
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7331
# check trigger-3 success: 1
7333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7334
f_int2 = CAST(f_char1 AS SIGNED INT),
7335
f_charbig = 'just inserted'
7336
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7338
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7339
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7340
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7341
'just inserted' FROM t0_template
7342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7343
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7345
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7346
f_charbig = 'updated by trigger'
7347
WHERE f_int1 = - old.f_int1;
7349
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7350
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7352
# check trigger-4 success: 1
7354
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7355
f_int2 = CAST(f_char1 AS SIGNED INT),
7356
f_charbig = 'just inserted'
7357
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7359
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7360
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7361
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7362
'just inserted' FROM t0_template
7363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7364
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7366
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7367
f_charbig = 'updated by trigger'
7368
WHERE f_int1 = new.f_int1;
7370
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7371
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7373
# check trigger-5 success: 1
7375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7376
f_int2 = CAST(f_char1 AS SIGNED INT),
7377
f_charbig = 'just inserted'
7378
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7380
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7381
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7382
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7383
'just inserted' FROM t0_template
7384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7385
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7387
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7388
f_charbig = 'updated by trigger'
7389
WHERE f_int1 = - old.f_int1;
7391
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7392
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7394
# check trigger-6 success: 1
7396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7397
f_int2 = CAST(f_char1 AS SIGNED INT),
7398
f_charbig = 'just inserted'
7399
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7401
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7403
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7404
'just inserted' FROM t0_template
7405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7406
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7408
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7409
f_charbig = 'updated by trigger'
7410
WHERE f_int1 = - old.f_int1;
7413
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7415
# check trigger-7 success: 1
7417
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7418
f_int2 = CAST(f_char1 AS SIGNED INT),
7419
f_charbig = 'just inserted'
7420
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7422
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7423
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7424
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7425
'just inserted' FROM t0_template
7426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7427
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7429
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7430
f_charbig = 'updated by trigger'
7431
WHERE f_int1 = - old.f_int1;
7434
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7436
# check trigger-8 success: 1
7438
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7439
f_int2 = CAST(f_char1 AS SIGNED INT),
7440
f_charbig = 'just inserted'
7441
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7443
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7446
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7448
SET new.f_int1 = old.f_int1 + @max_row,
7449
new.f_int2 = old.f_int2 - @max_row,
7450
new.f_charbig = '####updated per update trigger####';
7453
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7454
f_charbig = '####updated per update statement itself####';
7456
# check trigger-9 success: 1
7458
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7459
f_int2 = CAST(f_char1 AS SIGNED INT),
7460
f_charbig = CONCAT('===',f_char1,'===');
7461
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7463
SET new.f_int1 = new.f_int1 + @max_row,
7464
new.f_int2 = new.f_int2 - @max_row,
7465
new.f_charbig = '####updated per update trigger####';
7468
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7469
f_charbig = '####updated per update statement itself####';
7471
# check trigger-10 success: 1
7473
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7474
f_int2 = CAST(f_char1 AS SIGNED INT),
7475
f_charbig = CONCAT('===',f_char1,'===');
7476
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7478
SET new.f_int1 = @my_max1 + @counter,
7479
new.f_int2 = @my_min2 - @counter,
7480
new.f_charbig = '####updated per insert trigger####';
7481
SET @counter = @counter + 1;
7484
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7485
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7486
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7487
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7488
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7492
# check trigger-11 success: 1
7494
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7495
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7496
AND f_charbig = '####updated per insert trigger####';
7497
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7499
SET new.f_int1 = @my_max1 + @counter,
7500
new.f_int2 = @my_min2 - @counter,
7501
new.f_charbig = '####updated per insert trigger####';
7502
SET @counter = @counter + 1;
7505
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7506
INSERT INTO t1 (f_char1, f_char2, f_charbig)
7507
SELECT CAST(f_int1 AS CHAR),
7508
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7509
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7513
# check trigger-12 success: 1
7515
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7516
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7517
AND f_charbig = '####updated per insert trigger####';
7519
Table Op Msg_type Msg_text
7520
test.t1 analyze status OK
7521
CHECK TABLE t1 EXTENDED;
7522
Table Op Msg_type Msg_text
7523
test.t1 check status OK
7524
CHECKSUM TABLE t1 EXTENDED;
7526
test.t1 <some_value>
7528
Table Op Msg_type Msg_text
7529
test.t1 optimize status OK
7530
# check layout success: 1
7531
REPAIR TABLE t1 EXTENDED;
7532
Table Op Msg_type Msg_text
7533
test.t1 repair status OK
7534
# check layout success: 1
7537
# check TRUNCATE success: 1
7538
# check layout success: 1
7539
# End usability test (inc/partition_check.inc)
7546
f_charbig VARCHAR(1000)
7549
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
7550
(PARTITION part1 VALUES IN (0)
7551
(SUBPARTITION sp11, SUBPARTITION sp12),
7552
PARTITION part2 VALUES IN (1)
7553
(SUBPARTITION sp21, SUBPARTITION sp22),
7554
PARTITION part3 VALUES IN (2)
7555
(SUBPARTITION sp31, SUBPARTITION sp32),
7556
PARTITION part4 VALUES IN (NULL)
7557
(SUBPARTITION sp41, SUBPARTITION sp42));
7558
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7559
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7560
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7561
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
7562
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7563
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7564
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7565
# Start usability test (inc/partition_check.inc)
7567
SHOW CREATE TABLE t1;
7569
t1 CREATE TABLE `t1` (
7570
`f_int1` int(11) DEFAULT NULL,
7571
`f_int2` int(11) DEFAULT NULL,
7572
`f_char1` char(20) DEFAULT NULL,
7573
`f_char2` char(20) DEFAULT NULL,
7574
`f_charbig` varchar(1000) DEFAULT NULL,
7575
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
7576
) ENGINE=MyISAM DEFAULT CHARSET=latin1
7577
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
7578
SUBPARTITION BY HASH (f_int2 + 1)
7579
(PARTITION part1 VALUES IN (0)
7580
(SUBPARTITION sp11 ENGINE = MyISAM,
7581
SUBPARTITION sp12 ENGINE = MyISAM),
7582
PARTITION part2 VALUES IN (1)
7583
(SUBPARTITION sp21 ENGINE = MyISAM,
7584
SUBPARTITION sp22 ENGINE = MyISAM),
7585
PARTITION part3 VALUES IN (2)
7586
(SUBPARTITION sp31 ENGINE = MyISAM,
7587
SUBPARTITION sp32 ENGINE = MyISAM),
7588
PARTITION part4 VALUES IN (NULL)
7589
(SUBPARTITION sp41 ENGINE = MyISAM,
7590
SUBPARTITION sp42 ENGINE = MyISAM)) */
7593
t1#P#part1#SP#sp11.MYD
7594
t1#P#part1#SP#sp11.MYI
7595
t1#P#part1#SP#sp12.MYD
7596
t1#P#part1#SP#sp12.MYI
7597
t1#P#part2#SP#sp21.MYD
7598
t1#P#part2#SP#sp21.MYI
7599
t1#P#part2#SP#sp22.MYD
7600
t1#P#part2#SP#sp22.MYI
7601
t1#P#part3#SP#sp31.MYD
7602
t1#P#part3#SP#sp31.MYI
7603
t1#P#part3#SP#sp32.MYD
7604
t1#P#part3#SP#sp32.MYI
7605
t1#P#part4#SP#sp41.MYD
7606
t1#P#part4#SP#sp41.MYI
7607
t1#P#part4#SP#sp42.MYD
7608
t1#P#part4#SP#sp42.MYI
7612
# check prerequisites-1 success: 1
7613
# check COUNT(*) success: 1
7614
# check MIN/MAX(f_int1) success: 1
7615
# check MIN/MAX(f_int2) success: 1
7616
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7617
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7618
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7619
WHERE f_int1 IN (2,3);
7620
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
7621
# check prerequisites-3 success: 1
7622
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7623
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7624
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7625
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7626
WHERE f_int1 IN (2,3);
7627
DELETE FROM t1 WHERE f_charbig = 'delete me';
7628
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7629
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7630
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7631
WHERE f_int1 IN (2,3);
7632
DELETE FROM t1 WHERE f_charbig = 'delete me';
7633
# check read via f_int1 success: 1
7634
# check read via f_int2 success: 1
7636
# check multiple-1 success: 1
7637
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7639
# check multiple-2 success: 1
7640
INSERT INTO t1 SELECT * FROM t0_template
7641
WHERE MOD(f_int1,3) = 0;
7643
# check multiple-3 success: 1
7644
UPDATE t1 SET f_int1 = f_int1 + @max_row
7645
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7646
AND @max_row_div2 + @max_row_div4;
7648
# check multiple-4 success: 1
7650
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7651
AND @max_row_div2 + @max_row_div4 + @max_row;
7653
# check multiple-5 success: 1
7654
SELECT COUNT(*) INTO @try_count FROM t0_template
7655
WHERE MOD(f_int1,3) = 0
7656
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7657
SELECT COUNT(*) INTO @clash_count
7658
FROM t1 INNER JOIN t0_template USING(f_int1)
7659
WHERE MOD(f_int1,3) = 0
7660
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7661
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7663
SET f_int1 = @cur_value , f_int2 = @cur_value,
7664
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7665
f_charbig = '#SINGLE#';
7667
# check single-1 success: 1
7668
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7670
SET f_int1 = @cur_value , f_int2 = @cur_value,
7671
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7672
f_charbig = '#SINGLE#';
7674
# check single-2 success: 1
7675
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7676
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7677
UPDATE t1 SET f_int1 = @cur_value2
7678
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7680
# check single-3 success: 1
7681
SET @cur_value1= -1;
7682
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7683
UPDATE t1 SET f_int1 = @cur_value1
7684
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7686
# check single-4 success: 1
7687
SELECT MAX(f_int1) INTO @cur_value FROM t1;
7688
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7690
# check single-5 success: 1
7691
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7693
# check single-6 success: 1
7694
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7696
# check single-7 success: 1
7697
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7698
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7699
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7700
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7701
f_charbig = '#NULL#';
7703
SET f_int1 = NULL , f_int2 = -@max_row,
7704
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7705
f_charbig = '#NULL#';
7706
# check null success: 1
7708
# check null-1 success: 1
7709
UPDATE t1 SET f_int1 = -@max_row
7710
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7711
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7713
# check null-2 success: 1
7714
UPDATE t1 SET f_int1 = NULL
7715
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7716
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7718
# check null-3 success: 1
7720
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7721
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7723
# check null-4 success: 1
7725
WHERE f_int1 = 0 AND f_int2 = 0
7726
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7727
AND f_charbig = '#NULL#';
7728
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7729
SELECT f_int1, f_int1, '', '', 'was inserted'
7730
FROM t0_template source_tab
7731
WHERE MOD(f_int1,3) = 0
7732
AND f_int1 BETWEEN @max_row_div2 AND @max_row
7734
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7735
f_int2 = 2 * @max_row + source_tab.f_int1,
7736
f_charbig = 'was updated';
7738
# check unique-1-a success: 1
7740
# check unique-1-b success: 1
7741
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7743
f_int2 = CAST(f_char1 AS SIGNED INT),
7744
f_charbig = CONCAT('===',f_char1,'===')
7745
WHERE f_charbig = 'was updated';
7746
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7747
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7748
FROM t0_template source_tab
7749
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7751
# check replace success: 1
7753
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7755
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7756
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7757
UPDATE t1 SET f_int2 = f_int1,
7758
f_char1 = CAST(f_int1 AS CHAR),
7759
f_char2 = CAST(f_int1 AS CHAR),
7760
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7761
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7763
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7764
SELECT f_int1, f_int1, '', '', 'was inserted'
7765
FROM t0_template source_tab
7766
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7768
# check transactions-1 success: 1
7771
# check transactions-2 success: 1
7774
# check transactions-3 success: 1
7775
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7779
# check transactions-4 success: 1
7780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7781
SELECT f_int1, f_int1, '', '', 'was inserted'
7782
FROM t0_template source_tab
7783
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7785
# check transactions-5 success: 1
7788
Warning 1196 Some non-transactional changed tables couldn't be rolled back
7790
# check transactions-6 success: 1
7791
# INFO: Storage engine used for t1 seems to be not transactional.
7794
# check transactions-7 success: 1
7795
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7797
SET @@session.sql_mode = 'traditional';
7798
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7799
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7800
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7801
'', '', 'was inserted' FROM t0_template
7802
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7803
ERROR 22012: Division by 0
7806
# check transactions-8 success: 1
7807
# INFO: Storage engine used for t1 seems to be unable to revert
7808
# changes made by the failing statement.
7809
SET @@session.sql_mode = '';
7811
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7813
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7815
# check special-1 success: 1
7816
UPDATE t1 SET f_charbig = '';
7818
# check special-2 success: 1
7819
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7820
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7821
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7824
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7825
'just inserted' FROM t0_template
7826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7827
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7829
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7830
f_charbig = 'updated by trigger'
7831
WHERE f_int1 = new.f_int1;
7833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7834
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7837
# check trigger-1 success: 1
7839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7840
f_int2 = CAST(f_char1 AS SIGNED INT),
7841
f_charbig = 'just inserted'
7842
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7844
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7845
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7846
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7847
'just inserted' FROM t0_template
7848
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7849
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7851
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7852
f_charbig = 'updated by trigger'
7853
WHERE f_int1 = new.f_int1;
7855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7856
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7859
# check trigger-2 success: 1
7861
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7862
f_int2 = CAST(f_char1 AS SIGNED INT),
7863
f_charbig = 'just inserted'
7864
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7866
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7867
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7868
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7869
'just inserted' FROM t0_template
7870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7871
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7873
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7874
f_charbig = 'updated by trigger'
7875
WHERE f_int1 = new.f_int1;
7877
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7878
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7880
# check trigger-3 success: 1
7882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7883
f_int2 = CAST(f_char1 AS SIGNED INT),
7884
f_charbig = 'just inserted'
7885
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7887
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7889
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7890
'just inserted' FROM t0_template
7891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7892
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7894
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7895
f_charbig = 'updated by trigger'
7896
WHERE f_int1 = - old.f_int1;
7898
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7899
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7901
# check trigger-4 success: 1
7903
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7904
f_int2 = CAST(f_char1 AS SIGNED INT),
7905
f_charbig = 'just inserted'
7906
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7908
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7909
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7910
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7911
'just inserted' FROM t0_template
7912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7913
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7915
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7916
f_charbig = 'updated by trigger'
7917
WHERE f_int1 = new.f_int1;
7919
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7920
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7922
# check trigger-5 success: 1
7924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7925
f_int2 = CAST(f_char1 AS SIGNED INT),
7926
f_charbig = 'just inserted'
7927
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7929
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7932
'just inserted' FROM t0_template
7933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7934
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7937
f_charbig = 'updated by trigger'
7938
WHERE f_int1 = - old.f_int1;
7940
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
7941
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7943
# check trigger-6 success: 1
7945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7946
f_int2 = CAST(f_char1 AS SIGNED INT),
7947
f_charbig = 'just inserted'
7948
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7950
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7953
'just inserted' FROM t0_template
7954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7955
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7958
f_charbig = 'updated by trigger'
7959
WHERE f_int1 = - old.f_int1;
7962
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7964
# check trigger-7 success: 1
7966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7967
f_int2 = CAST(f_char1 AS SIGNED INT),
7968
f_charbig = 'just inserted'
7969
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7971
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7972
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7973
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7974
'just inserted' FROM t0_template
7975
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7976
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7978
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7979
f_charbig = 'updated by trigger'
7980
WHERE f_int1 = - old.f_int1;
7983
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7985
# check trigger-8 success: 1
7987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7988
f_int2 = CAST(f_char1 AS SIGNED INT),
7989
f_charbig = 'just inserted'
7990
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7992
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7995
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7997
SET new.f_int1 = old.f_int1 + @max_row,
7998
new.f_int2 = old.f_int2 - @max_row,
7999
new.f_charbig = '####updated per update trigger####';
8002
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8003
f_charbig = '####updated per update statement itself####';
8005
# check trigger-9 success: 1
8007
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8008
f_int2 = CAST(f_char1 AS SIGNED INT),
8009
f_charbig = CONCAT('===',f_char1,'===');
8010
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8012
SET new.f_int1 = new.f_int1 + @max_row,
8013
new.f_int2 = new.f_int2 - @max_row,
8014
new.f_charbig = '####updated per update trigger####';
8017
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8018
f_charbig = '####updated per update statement itself####';
8020
# check trigger-10 success: 1
8022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8023
f_int2 = CAST(f_char1 AS SIGNED INT),
8024
f_charbig = CONCAT('===',f_char1,'===');
8025
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8027
SET new.f_int1 = @my_max1 + @counter,
8028
new.f_int2 = @my_min2 - @counter,
8029
new.f_charbig = '####updated per insert trigger####';
8030
SET @counter = @counter + 1;
8033
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8034
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8035
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8036
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8041
# check trigger-11 success: 1
8043
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8044
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8045
AND f_charbig = '####updated per insert trigger####';
8046
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8048
SET new.f_int1 = @my_max1 + @counter,
8049
new.f_int2 = @my_min2 - @counter,
8050
new.f_charbig = '####updated per insert trigger####';
8051
SET @counter = @counter + 1;
8054
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8055
INSERT INTO t1 (f_char1, f_char2, f_charbig)
8056
SELECT CAST(f_int1 AS CHAR),
8057
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8062
# check trigger-12 success: 1
8064
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8065
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8066
AND f_charbig = '####updated per insert trigger####';
8068
Table Op Msg_type Msg_text
8069
test.t1 analyze status OK
8070
CHECK TABLE t1 EXTENDED;
8071
Table Op Msg_type Msg_text
8072
test.t1 check status OK
8073
CHECKSUM TABLE t1 EXTENDED;
8075
test.t1 <some_value>
8077
Table Op Msg_type Msg_text
8078
test.t1 optimize status OK
8079
# check layout success: 1
8080
REPAIR TABLE t1 EXTENDED;
8081
Table Op Msg_type Msg_text
8082
test.t1 repair status OK
8083
# check layout success: 1
8086
# check TRUNCATE success: 1
8087
# check layout success: 1
8088
# End usability test (inc/partition_check.inc)
8095
f_charbig VARCHAR(1000)
8098
PARTITION BY LIST(ABS(MOD(f_int1,2)))
8099
SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
8100
(PARTITION part1 VALUES IN (0),
8101
PARTITION part2 VALUES IN (1),
8102
PARTITION part3 VALUES IN (NULL));
8103
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8104
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8105
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8106
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
8107
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8108
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8109
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8110
# Start usability test (inc/partition_check.inc)
8112
SHOW CREATE TABLE t1;
8114
t1 CREATE TABLE `t1` (
8115
`f_int1` int(11) DEFAULT NULL,
8116
`f_int2` int(11) DEFAULT NULL,
8117
`f_char1` char(20) DEFAULT NULL,
8118
`f_char2` char(20) DEFAULT NULL,
8119
`f_charbig` varchar(1000) DEFAULT NULL,
8120
UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
8121
) ENGINE=MyISAM DEFAULT CHARSET=latin1
8122
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
8123
SUBPARTITION BY KEY (f_int2)
8125
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
8126
PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
8127
PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
8130
t1#P#part1#SP#part1sp0.MYD
8131
t1#P#part1#SP#part1sp0.MYI
8132
t1#P#part1#SP#part1sp1.MYD
8133
t1#P#part1#SP#part1sp1.MYI
8134
t1#P#part1#SP#part1sp2.MYD
8135
t1#P#part1#SP#part1sp2.MYI
8136
t1#P#part2#SP#part2sp0.MYD
8137
t1#P#part2#SP#part2sp0.MYI
8138
t1#P#part2#SP#part2sp1.MYD
8139
t1#P#part2#SP#part2sp1.MYI
8140
t1#P#part2#SP#part2sp2.MYD
8141
t1#P#part2#SP#part2sp2.MYI
8142
t1#P#part3#SP#part3sp0.MYD
8143
t1#P#part3#SP#part3sp0.MYI
8144
t1#P#part3#SP#part3sp1.MYD
8145
t1#P#part3#SP#part3sp1.MYI
8146
t1#P#part3#SP#part3sp2.MYD
8147
t1#P#part3#SP#part3sp2.MYI
8151
# check prerequisites-1 success: 1
8152
# check COUNT(*) success: 1
8153
# check MIN/MAX(f_int1) success: 1
8154
# check MIN/MAX(f_int2) success: 1
8155
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8156
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8157
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8158
WHERE f_int1 IN (2,3);
8159
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
8160
# check prerequisites-3 success: 1
8161
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8162
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8163
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8164
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8165
WHERE f_int1 IN (2,3);
8166
DELETE FROM t1 WHERE f_charbig = 'delete me';
8167
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8168
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8169
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8170
WHERE f_int1 IN (2,3);
8171
DELETE FROM t1 WHERE f_charbig = 'delete me';
8172
# check read via f_int1 success: 1
8173
# check read via f_int2 success: 1
8175
# check multiple-1 success: 1
8176
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8178
# check multiple-2 success: 1
8179
INSERT INTO t1 SELECT * FROM t0_template
8180
WHERE MOD(f_int1,3) = 0;
8182
# check multiple-3 success: 1
8183
UPDATE t1 SET f_int1 = f_int1 + @max_row
8184
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8185
AND @max_row_div2 + @max_row_div4;
8187
# check multiple-4 success: 1
8189
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8190
AND @max_row_div2 + @max_row_div4 + @max_row;
8192
# check multiple-5 success: 1
8193
SELECT COUNT(*) INTO @try_count FROM t0_template
8194
WHERE MOD(f_int1,3) = 0
8195
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8196
SELECT COUNT(*) INTO @clash_count
8197
FROM t1 INNER JOIN t0_template USING(f_int1)
8198
WHERE MOD(f_int1,3) = 0
8199
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8200
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8202
SET f_int1 = @cur_value , f_int2 = @cur_value,
8203
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8204
f_charbig = '#SINGLE#';
8206
# check single-1 success: 1
8207
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8209
SET f_int1 = @cur_value , f_int2 = @cur_value,
8210
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8211
f_charbig = '#SINGLE#';
8213
# check single-2 success: 1
8214
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8215
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8216
UPDATE t1 SET f_int1 = @cur_value2
8217
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8219
# check single-3 success: 1
8220
SET @cur_value1= -1;
8221
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8222
UPDATE t1 SET f_int1 = @cur_value1
8223
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8225
# check single-4 success: 1
8226
SELECT MAX(f_int1) INTO @cur_value FROM t1;
8227
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8229
# check single-5 success: 1
8230
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8232
# check single-6 success: 1
8233
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8235
# check single-7 success: 1
8236
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8237
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8238
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8239
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8240
f_charbig = '#NULL#';
8242
SET f_int1 = NULL , f_int2 = -@max_row,
8243
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8244
f_charbig = '#NULL#';
8245
# check null success: 1
8247
# check null-1 success: 1
8248
UPDATE t1 SET f_int1 = -@max_row
8249
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8250
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8252
# check null-2 success: 1
8253
UPDATE t1 SET f_int1 = NULL
8254
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8255
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8257
# check null-3 success: 1
8259
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8260
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8262
# check null-4 success: 1
8264
WHERE f_int1 = 0 AND f_int2 = 0
8265
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8266
AND f_charbig = '#NULL#';
8267
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8268
SELECT f_int1, f_int1, '', '', 'was inserted'
8269
FROM t0_template source_tab
8270
WHERE MOD(f_int1,3) = 0
8271
AND f_int1 BETWEEN @max_row_div2 AND @max_row
8273
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8274
f_int2 = 2 * @max_row + source_tab.f_int1,
8275
f_charbig = 'was updated';
8277
# check unique-1-a success: 1
8279
# check unique-1-b success: 1
8280
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8281
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8282
f_int2 = CAST(f_char1 AS SIGNED INT),
8283
f_charbig = CONCAT('===',f_char1,'===')
8284
WHERE f_charbig = 'was updated';
8285
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8286
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8287
FROM t0_template source_tab
8288
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8290
# check replace success: 1
8292
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8294
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8295
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8296
UPDATE t1 SET f_int2 = f_int1,
8297
f_char1 = CAST(f_int1 AS CHAR),
8298
f_char2 = CAST(f_int1 AS CHAR),
8299
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8300
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8302
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8303
SELECT f_int1, f_int1, '', '', 'was inserted'
8304
FROM t0_template source_tab
8305
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8307
# check transactions-1 success: 1
8310
# check transactions-2 success: 1
8313
# check transactions-3 success: 1
8314
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8318
# check transactions-4 success: 1
8319
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8320
SELECT f_int1, f_int1, '', '', 'was inserted'
8321
FROM t0_template source_tab
8322
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8324
# check transactions-5 success: 1
8327
Warning 1196 Some non-transactional changed tables couldn't be rolled back
8329
# check transactions-6 success: 1
8330
# INFO: Storage engine used for t1 seems to be not transactional.
8333
# check transactions-7 success: 1
8334
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8336
SET @@session.sql_mode = 'traditional';
8337
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8338
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8339
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8340
'', '', 'was inserted' FROM t0_template
8341
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8342
ERROR 22012: Division by 0
8345
# check transactions-8 success: 1
8346
# INFO: Storage engine used for t1 seems to be unable to revert
8347
# changes made by the failing statement.
8348
SET @@session.sql_mode = '';
8350
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8352
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8354
# check special-1 success: 1
8355
UPDATE t1 SET f_charbig = '';
8357
# check special-2 success: 1
8358
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8359
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8360
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8362
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8363
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8364
'just inserted' FROM t0_template
8365
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8366
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8368
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8369
f_charbig = 'updated by trigger'
8370
WHERE f_int1 = new.f_int1;
8372
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8373
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8374
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8376
# check trigger-1 success: 1
8378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8379
f_int2 = CAST(f_char1 AS SIGNED INT),
8380
f_charbig = 'just inserted'
8381
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8386
'just inserted' FROM t0_template
8387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8388
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8391
f_charbig = 'updated by trigger'
8392
WHERE f_int1 = new.f_int1;
8394
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8395
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8396
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8398
# check trigger-2 success: 1
8400
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8401
f_int2 = CAST(f_char1 AS SIGNED INT),
8402
f_charbig = 'just inserted'
8403
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8405
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8406
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8407
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8408
'just inserted' FROM t0_template
8409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8410
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8412
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8413
f_charbig = 'updated by trigger'
8414
WHERE f_int1 = new.f_int1;
8416
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
8417
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8419
# check trigger-3 success: 1
8421
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8422
f_int2 = CAST(f_char1 AS SIGNED INT),
8423
f_charbig = 'just inserted'
8424
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8426
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8427
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8428
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8429
'just inserted' FROM t0_template
8430
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8431
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8433
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8434
f_charbig = 'updated by trigger'
8435
WHERE f_int1 = - old.f_int1;
8437
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
8438
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8440
# check trigger-4 success: 1
8442
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8443
f_int2 = CAST(f_char1 AS SIGNED INT),
8444
f_charbig = 'just inserted'
8445
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8447
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8448
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8449
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8450
'just inserted' FROM t0_template
8451
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8452
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8454
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8455
f_charbig = 'updated by trigger'
8456
WHERE f_int1 = new.f_int1;
8458
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
8459
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8461
# check trigger-5 success: 1
8463
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8464
f_int2 = CAST(f_char1 AS SIGNED INT),
8465
f_charbig = 'just inserted'
8466
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8468
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8469
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8470
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8471
'just inserted' FROM t0_template
8472
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8473
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8475
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8476
f_charbig = 'updated by trigger'
8477
WHERE f_int1 = - old.f_int1;
8479
UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
8480
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8482
# check trigger-6 success: 1
8484
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8485
f_int2 = CAST(f_char1 AS SIGNED INT),
8486
f_charbig = 'just inserted'
8487
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8489
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8490
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8491
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8492
'just inserted' FROM t0_template
8493
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8494
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8496
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8497
f_charbig = 'updated by trigger'
8498
WHERE f_int1 = - old.f_int1;
8501
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8503
# check trigger-7 success: 1
8505
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8506
f_int2 = CAST(f_char1 AS SIGNED INT),
8507
f_charbig = 'just inserted'
8508
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8510
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8511
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8512
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8513
'just inserted' FROM t0_template
8514
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8515
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8517
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8518
f_charbig = 'updated by trigger'
8519
WHERE f_int1 = - old.f_int1;
8522
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8524
# check trigger-8 success: 1
8526
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8527
f_int2 = CAST(f_char1 AS SIGNED INT),
8528
f_charbig = 'just inserted'
8529
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8531
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8534
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8536
SET new.f_int1 = old.f_int1 + @max_row,
8537
new.f_int2 = old.f_int2 - @max_row,
8538
new.f_charbig = '####updated per update trigger####';
8541
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8542
f_charbig = '####updated per update statement itself####';
8544
# check trigger-9 success: 1
8546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8547
f_int2 = CAST(f_char1 AS SIGNED INT),
8548
f_charbig = CONCAT('===',f_char1,'===');
8549
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8551
SET new.f_int1 = new.f_int1 + @max_row,
8552
new.f_int2 = new.f_int2 - @max_row,
8553
new.f_charbig = '####updated per update trigger####';
8556
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8557
f_charbig = '####updated per update statement itself####';
8559
# check trigger-10 success: 1
8561
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8562
f_int2 = CAST(f_char1 AS SIGNED INT),
8563
f_charbig = CONCAT('===',f_char1,'===');
8564
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8566
SET new.f_int1 = @my_max1 + @counter,
8567
new.f_int2 = @my_min2 - @counter,
8568
new.f_charbig = '####updated per insert trigger####';
8569
SET @counter = @counter + 1;
8572
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8573
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8574
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8575
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8580
# check trigger-11 success: 1
8582
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8583
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8584
AND f_charbig = '####updated per insert trigger####';
8585
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8587
SET new.f_int1 = @my_max1 + @counter,
8588
new.f_int2 = @my_min2 - @counter,
8589
new.f_charbig = '####updated per insert trigger####';
8590
SET @counter = @counter + 1;
8593
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8594
INSERT INTO t1 (f_char1, f_char2, f_charbig)
8595
SELECT CAST(f_int1 AS CHAR),
8596
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8601
# check trigger-12 success: 1
8603
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8604
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8605
AND f_charbig = '####updated per insert trigger####';
8607
Table Op Msg_type Msg_text
8608
test.t1 analyze status OK
8609
CHECK TABLE t1 EXTENDED;
8610
Table Op Msg_type Msg_text
8611
test.t1 check status OK
8612
CHECKSUM TABLE t1 EXTENDED;
8614
test.t1 <some_value>
8616
Table Op Msg_type Msg_text
8617
test.t1 optimize status OK
8618
# check layout success: 1
8619
REPAIR TABLE t1 EXTENDED;
8620
Table Op Msg_type Msg_text
8621
test.t1 repair status OK
8622
# check layout success: 1
8625
# check TRUNCATE success: 1
8626
# check layout success: 1
8627
# End usability test (inc/partition_check.inc)
8629
DROP VIEW IF EXISTS v1;
8630
DROP TABLE IF EXISTS t1;
8631
DROP TABLE IF EXISTS t0_aux;
8632
DROP TABLE IF EXISTS t0_definition;
8633
DROP TABLE IF EXISTS t0_template;