~jlukas79/+junk/mysql-server

« back to all changes in this revision

Viewing changes to mysql-test/suite/parts/r/partition_alter1_1_myisam.result

manual merge 6.0-main --> 6.0-bka-review

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
SET @max_row = 20;
 
2
SET @@session.storage_engine = 'MyISAM';
 
3
 
 
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 (
 
14
f_int1 INTEGER,
 
15
f_int2 INTEGER,
 
16
f_char1 CHAR(20),
 
17
f_char2 CHAR(20),
 
18
f_charbig VARCHAR(1000) ,
 
19
PRIMARY KEY(f_int1))
 
20
ENGINE = MEMORY;
 
21
#     Logging of <max_row> INSERTs into t0_template suppressed
 
22
DROP TABLE IF EXISTS t0_definition;
 
23
CREATE TABLE t0_definition (
 
24
state CHAR(3),
 
25
create_command VARBINARY(5000),
 
26
file_list      VARBINARY(10000),
 
27
PRIMARY KEY (state)
 
28
) ENGINE = MEMORY;
 
29
DROP TABLE IF EXISTS t0_aux;
 
30
CREATE TABLE t0_aux ( f_int1 INTEGER,
 
31
f_int2 INTEGER,
 
32
f_char1 CHAR(20),
 
33
f_char2 CHAR(20),
 
34
f_charbig VARCHAR(1000) )
 
35
ENGINE = MEMORY;
 
36
SET AUTOCOMMIT= 1;
 
37
SET @@session.sql_mode= '';
 
38
# End of basic preparations needed for all tests
 
39
#-----------------------------------------------
 
40
 
 
41
#========================================================================
 
42
#  1.    ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX
 
43
#========================================================================
 
44
#------------------------------------------------------------------------
 
45
#  1.1   ADD PRIMARY KEY or UNIQUE INDEX to table with one column (f_int1)
 
46
#        within the partitioning function
 
47
#------------------------------------------------------------------------
 
48
DROP TABLE IF EXISTS t1;
 
49
CREATE TABLE t1 (
 
50
f_int1 INTEGER,
 
51
f_int2 INTEGER,
 
52
f_char1 CHAR(20),
 
53
f_char2 CHAR(20),
 
54
f_charbig VARCHAR(1000)
 
55
 
 
56
)
 
57
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
58
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
60
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
61
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
62
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
63
DROP TABLE t1;
 
64
CREATE TABLE t1 (
 
65
f_int1 INTEGER,
 
66
f_int2 INTEGER,
 
67
f_char1 CHAR(20),
 
68
f_char2 CHAR(20),
 
69
f_charbig VARCHAR(1000)
 
70
 
 
71
)
 
72
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
73
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
75
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
76
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
77
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
78
DROP TABLE t1;
 
79
CREATE TABLE t1 (
 
80
f_int1 INTEGER,
 
81
f_int2 INTEGER,
 
82
f_char1 CHAR(20),
 
83
f_char2 CHAR(20),
 
84
f_charbig VARCHAR(1000)
 
85
 
 
86
)
 
87
PARTITION BY LIST(MOD(f_int1,4))
 
88
(PARTITION part_3 VALUES IN (-3),
 
89
PARTITION part_2 VALUES IN (-2),
 
90
PARTITION part_1 VALUES IN (-1),
 
91
PARTITION part_N VALUES IN (NULL),
 
92
PARTITION part0 VALUES IN (0),
 
93
PARTITION part1 VALUES IN (1),
 
94
PARTITION part2 VALUES IN (2),
 
95
PARTITION part3 VALUES IN (3));
 
96
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
97
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
98
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
99
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
100
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
101
DROP TABLE t1;
 
102
CREATE TABLE t1 (
 
103
f_int1 INTEGER,
 
104
f_int2 INTEGER,
 
105
f_char1 CHAR(20),
 
106
f_char2 CHAR(20),
 
107
f_charbig VARCHAR(1000)
 
108
 
 
109
)
 
110
PARTITION BY RANGE(f_int1)
 
111
(PARTITION parta VALUES LESS THAN (0),
 
112
PARTITION partb VALUES LESS THAN (5),
 
113
PARTITION partc VALUES LESS THAN (10),
 
114
PARTITION partd VALUES LESS THAN (10 + 5),
 
115
PARTITION parte VALUES LESS THAN (20),
 
116
PARTITION partf VALUES LESS THAN (2147483646));
 
117
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
118
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
119
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
120
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
121
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
122
DROP TABLE t1;
 
123
CREATE TABLE t1 (
 
124
f_int1 INTEGER,
 
125
f_int2 INTEGER,
 
126
f_char1 CHAR(20),
 
127
f_char2 CHAR(20),
 
128
f_charbig VARCHAR(1000)
 
129
 
 
130
)
 
131
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
132
(PARTITION parta VALUES LESS THAN (0),
 
133
PARTITION partb VALUES LESS THAN (5),
 
134
PARTITION partc VALUES LESS THAN (10),
 
135
PARTITION partd VALUES LESS THAN (2147483646));
 
136
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
137
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
138
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
139
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
140
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
141
DROP TABLE t1;
 
142
CREATE TABLE t1 (
 
143
f_int1 INTEGER,
 
144
f_int2 INTEGER,
 
145
f_char1 CHAR(20),
 
146
f_char2 CHAR(20),
 
147
f_charbig VARCHAR(1000)
 
148
 
 
149
)
 
150
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
151
(PARTITION part1 VALUES LESS THAN (0)
 
152
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
153
PARTITION part2 VALUES LESS THAN (5)
 
154
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
155
PARTITION part3 VALUES LESS THAN (10)
 
156
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
157
PARTITION part4 VALUES LESS THAN (2147483646)
 
158
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
159
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
160
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
161
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
162
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
163
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
164
DROP TABLE t1;
 
165
CREATE TABLE t1 (
 
166
f_int1 INTEGER,
 
167
f_int2 INTEGER,
 
168
f_char1 CHAR(20),
 
169
f_char2 CHAR(20),
 
170
f_charbig VARCHAR(1000)
 
171
 
 
172
)
 
173
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
174
(PARTITION part1 VALUES IN (0)
 
175
(SUBPARTITION sp11, SUBPARTITION sp12),
 
176
PARTITION part2 VALUES IN (1)
 
177
(SUBPARTITION sp21, SUBPARTITION sp22),
 
178
PARTITION part3 VALUES IN (2)
 
179
(SUBPARTITION sp31, SUBPARTITION sp32),
 
180
PARTITION part4 VALUES IN (NULL)
 
181
(SUBPARTITION sp41, SUBPARTITION sp42));
 
182
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
183
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
184
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
185
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
186
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
187
DROP TABLE t1;
 
188
CREATE TABLE t1 (
 
189
f_int1 INTEGER,
 
190
f_int2 INTEGER,
 
191
f_char1 CHAR(20),
 
192
f_char2 CHAR(20),
 
193
f_charbig VARCHAR(1000)
 
194
 
 
195
)
 
196
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
197
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
198
(PARTITION part1 VALUES IN (0),
 
199
PARTITION part2 VALUES IN (1),
 
200
PARTITION part3 VALUES IN (NULL));
 
201
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
202
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
203
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
204
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
205
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
206
DROP TABLE t1;
 
207
#  1.1.4 UNIQUE INDEX consisting of two columns
 
208
DROP TABLE IF EXISTS t1;
 
209
CREATE TABLE t1 (
 
210
f_int1 INTEGER,
 
211
f_int2 INTEGER,
 
212
f_char1 CHAR(20),
 
213
f_char2 CHAR(20),
 
214
f_charbig VARCHAR(1000)
 
215
 
 
216
)
 
217
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
218
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
219
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
220
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
221
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
222
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
223
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
224
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
225
# Start usability test (inc/partition_check.inc)
 
226
create_command
 
227
SHOW CREATE TABLE t1;
 
228
Table   Create Table
 
229
t1      CREATE TABLE `t1` (
 
230
  `f_int1` int(11) DEFAULT NULL,
 
231
  `f_int2` int(11) DEFAULT NULL,
 
232
  `f_char1` char(20) DEFAULT NULL,
 
233
  `f_char2` char(20) DEFAULT NULL,
 
234
  `f_charbig` varchar(1000) DEFAULT NULL,
 
235
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
236
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
237
 
 
238
unified filelist
 
239
t1#P#p0.MYD
 
240
t1#P#p0.MYI
 
241
t1#P#p1.MYD
 
242
t1#P#p1.MYI
 
243
t1.frm
 
244
t1.par
 
245
 
 
246
# check prerequisites-1 success:    1
 
247
# check COUNT(*) success:    1
 
248
# check MIN/MAX(f_int1) success:    1
 
249
# check MIN/MAX(f_int2) success:    1
 
250
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
251
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
252
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
253
WHERE f_int1 IN (2,3);
 
254
ERROR 23000: Can't write; duplicate key in table 't1'
 
255
# check prerequisites-3 success:    1
 
256
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
257
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
258
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
259
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
260
WHERE f_int1 IN (2,3);
 
261
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
262
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
263
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
264
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
265
WHERE f_int1 IN (2,3);
 
266
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
267
# check read via f_int1 success: 1
 
268
# check read via f_int2 success: 1
 
269
        
 
270
# check multiple-1 success:     1
 
271
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
272
        
 
273
# check multiple-2 success:     1
 
274
INSERT INTO t1 SELECT * FROM t0_template
 
275
WHERE MOD(f_int1,3) = 0;
 
276
        
 
277
# check multiple-3 success:     1
 
278
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
279
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
280
AND @max_row_div2 + @max_row_div4;
 
281
        
 
282
# check multiple-4 success:     1
 
283
DELETE FROM t1
 
284
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
285
AND @max_row_div2 + @max_row_div4 + @max_row;
 
286
        
 
287
# check multiple-5 success:     1
 
288
SELECT COUNT(*) INTO @try_count FROM t0_template
 
289
WHERE MOD(f_int1,3) = 0
 
290
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
291
SELECT COUNT(*) INTO @clash_count
 
292
FROM t1 INNER JOIN t0_template USING(f_int1)
 
293
WHERE MOD(f_int1,3) = 0
 
294
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
295
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
296
INSERT INTO t1
 
297
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
298
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
299
f_charbig = '#SINGLE#';
 
300
        
 
301
# check single-1 success:       1
 
302
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
303
INSERT INTO t1
 
304
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
305
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
306
f_charbig = '#SINGLE#';
 
307
        
 
308
# check single-2 success:       1
 
309
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
310
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
311
UPDATE t1 SET f_int1 = @cur_value2
 
312
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
313
        
 
314
# check single-3 success:       1
 
315
SET @cur_value1= -1;
 
316
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
317
UPDATE t1 SET f_int1 = @cur_value1
 
318
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
319
        
 
320
# check single-4 success:       1
 
321
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
322
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
323
        
 
324
# check single-5 success:       1
 
325
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
326
        
 
327
# check single-6 success:       1
 
328
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
329
        
 
330
# check single-7 success:       1
 
331
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
332
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
333
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
334
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
335
f_charbig = '#NULL#';
 
336
INSERT INTO t1
 
337
SET f_int1 = NULL , f_int2 = -@max_row,
 
338
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
339
f_charbig = '#NULL#';
 
340
# check null success:    1
 
341
        
 
342
# check null-1 success:         1
 
343
UPDATE t1 SET f_int1 = -@max_row
 
344
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
345
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
346
        
 
347
# check null-2 success:         1
 
348
UPDATE t1 SET f_int1 = NULL
 
349
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
350
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
351
        
 
352
# check null-3 success:         1
 
353
DELETE FROM t1
 
354
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
355
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
356
        
 
357
# check null-4 success:         1
 
358
DELETE FROM t1
 
359
WHERE f_int1 = 0 AND f_int2 = 0
 
360
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
361
AND f_charbig = '#NULL#';
 
362
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
363
SELECT f_int1, f_int1, '', '', 'was inserted'
 
364
   FROM t0_template source_tab
 
365
WHERE MOD(f_int1,3) = 0
 
366
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
367
ON DUPLICATE KEY
 
368
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
369
f_int2 = 2 * @max_row + source_tab.f_int1,
 
370
f_charbig = 'was updated';
 
371
        
 
372
# check unique-1-a success:     1
 
373
        
 
374
# check unique-1-b success:     1
 
375
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
376
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
377
f_int2 = CAST(f_char1 AS SIGNED INT),
 
378
f_charbig = CONCAT('===',f_char1,'===')
 
379
WHERE f_charbig = 'was updated';
 
380
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
381
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
382
   FROM t0_template source_tab
 
383
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
384
        
 
385
# check replace success:        1
 
386
DELETE FROM t1
 
387
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
388
DELETE FROM t1
 
389
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
390
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
391
UPDATE t1 SET f_int2 = f_int1,
 
392
f_char1 = CAST(f_int1 AS CHAR),
 
393
f_char2 = CAST(f_int1 AS CHAR),
 
394
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
395
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
396
SET AUTOCOMMIT= 0;
 
397
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
398
SELECT f_int1, f_int1, '', '', 'was inserted'
 
399
FROM t0_template source_tab
 
400
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
401
        
 
402
# check transactions-1 success:         1
 
403
COMMIT WORK;
 
404
        
 
405
# check transactions-2 success:         1
 
406
ROLLBACK WORK;
 
407
        
 
408
# check transactions-3 success:         1
 
409
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
410
COMMIT WORK;
 
411
ROLLBACK WORK;
 
412
        
 
413
# check transactions-4 success:         1
 
414
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
415
SELECT f_int1, f_int1, '', '', 'was inserted'
 
416
FROM t0_template source_tab
 
417
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
418
        
 
419
# check transactions-5 success:         1
 
420
ROLLBACK WORK;
 
421
Warnings:
 
422
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
423
        
 
424
# check transactions-6 success:         1
 
425
# INFO: Storage engine used for t1 seems to be not transactional.
 
426
COMMIT;
 
427
        
 
428
# check transactions-7 success:         1
 
429
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
430
COMMIT WORK;
 
431
SET @@session.sql_mode = 'traditional';
 
432
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
433
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
434
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
435
'', '', 'was inserted' FROM t0_template
 
436
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
437
ERROR 22012: Division by 0
 
438
COMMIT;
 
439
        
 
440
# check transactions-8 success:         1
 
441
# INFO: Storage engine used for t1 seems to be unable to revert
 
442
#       changes made by the failing statement.
 
443
SET @@session.sql_mode = '';
 
444
SET AUTOCOMMIT= 1;
 
445
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
446
COMMIT WORK;
 
447
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
448
        
 
449
# check special-1 success:      1
 
450
UPDATE t1 SET f_charbig = '';
 
451
        
 
452
# check special-2 success:      1
 
453
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
454
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
455
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
457
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
458
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
459
'just inserted' FROM t0_template
 
460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
461
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
462
BEGIN
 
463
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
464
f_charbig = 'updated by trigger'
 
465
      WHERE f_int1 = new.f_int1;
 
466
END|
 
467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
468
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
469
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
470
        
 
471
# check trigger-1 success:      1
 
472
DROP TRIGGER trg_1;
 
473
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
474
f_int2 = CAST(f_char1 AS SIGNED INT),
 
475
f_charbig = 'just inserted'
 
476
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
477
DELETE FROM t0_aux
 
478
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
479
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
480
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
481
'just inserted' FROM t0_template
 
482
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
483
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
484
BEGIN
 
485
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
486
f_charbig = 'updated by trigger'
 
487
      WHERE f_int1 = new.f_int1;
 
488
END|
 
489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
490
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
492
        
 
493
# check trigger-2 success:      1
 
494
DROP TRIGGER trg_1;
 
495
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
496
f_int2 = CAST(f_char1 AS SIGNED INT),
 
497
f_charbig = 'just inserted'
 
498
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
499
DELETE FROM t0_aux
 
500
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
501
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
502
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
503
'just inserted' FROM t0_template
 
504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
505
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
506
BEGIN
 
507
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
508
f_charbig = 'updated by trigger'
 
509
      WHERE f_int1 = new.f_int1;
 
510
END|
 
511
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
512
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
513
        
 
514
# check trigger-3 success:      1
 
515
DROP TRIGGER trg_1;
 
516
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
517
f_int2 = CAST(f_char1 AS SIGNED INT),
 
518
f_charbig = 'just inserted'
 
519
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
520
DELETE FROM t0_aux
 
521
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
522
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
523
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
524
'just inserted' FROM t0_template
 
525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
526
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
527
BEGIN
 
528
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
529
f_charbig = 'updated by trigger'
 
530
      WHERE f_int1 = - old.f_int1;
 
531
END|
 
532
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
533
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
534
        
 
535
# check trigger-4 success:      1
 
536
DROP TRIGGER trg_1;
 
537
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
538
f_int2 = CAST(f_char1 AS SIGNED INT),
 
539
f_charbig = 'just inserted'
 
540
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
541
DELETE FROM t0_aux
 
542
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
543
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
544
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
545
'just inserted' FROM t0_template
 
546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
547
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
548
BEGIN
 
549
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
550
f_charbig = 'updated by trigger'
 
551
      WHERE f_int1 = new.f_int1;
 
552
END|
 
553
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
554
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
555
        
 
556
# check trigger-5 success:      1
 
557
DROP TRIGGER trg_1;
 
558
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
559
f_int2 = CAST(f_char1 AS SIGNED INT),
 
560
f_charbig = 'just inserted'
 
561
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
562
DELETE FROM t0_aux
 
563
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
565
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
566
'just inserted' FROM t0_template
 
567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
568
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
569
BEGIN
 
570
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
571
f_charbig = 'updated by trigger'
 
572
      WHERE f_int1 = - old.f_int1;
 
573
END|
 
574
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
575
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
576
        
 
577
# check trigger-6 success:      1
 
578
DROP TRIGGER trg_1;
 
579
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
580
f_int2 = CAST(f_char1 AS SIGNED INT),
 
581
f_charbig = 'just inserted'
 
582
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
583
DELETE FROM t0_aux
 
584
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
586
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
587
'just inserted' FROM t0_template
 
588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
589
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
590
BEGIN
 
591
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
592
f_charbig = 'updated by trigger'
 
593
      WHERE f_int1 = - old.f_int1;
 
594
END|
 
595
DELETE FROM t0_aux
 
596
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
597
        
 
598
# check trigger-7 success:      1
 
599
DROP TRIGGER trg_1;
 
600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
602
f_charbig = 'just inserted'
 
603
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
604
DELETE FROM t0_aux
 
605
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
608
'just inserted' FROM t0_template
 
609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
610
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
611
BEGIN
 
612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
613
f_charbig = 'updated by trigger'
 
614
      WHERE f_int1 = - old.f_int1;
 
615
END|
 
616
DELETE FROM t0_aux
 
617
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
618
        
 
619
# check trigger-8 success:      1
 
620
DROP TRIGGER trg_1;
 
621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
623
f_charbig = 'just inserted'
 
624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
625
DELETE FROM t0_aux
 
626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
627
DELETE FROM t1
 
628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
629
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
630
BEGIN
 
631
SET new.f_int1 = old.f_int1 + @max_row,
 
632
new.f_int2 = old.f_int2 - @max_row,
 
633
new.f_charbig = '####updated per update trigger####';
 
634
END|
 
635
UPDATE t1
 
636
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
637
f_charbig = '####updated per update statement itself####';
 
638
        
 
639
# check trigger-9 success:      1
 
640
DROP TRIGGER trg_2;
 
641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
643
f_charbig = CONCAT('===',f_char1,'===');
 
644
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
645
BEGIN
 
646
SET new.f_int1 = new.f_int1 + @max_row,
 
647
new.f_int2 = new.f_int2 - @max_row,
 
648
new.f_charbig = '####updated per update trigger####';
 
649
END|
 
650
UPDATE t1
 
651
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
652
f_charbig = '####updated per update statement itself####';
 
653
        
 
654
# check trigger-10 success:     1
 
655
DROP TRIGGER trg_2;
 
656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
658
f_charbig = CONCAT('===',f_char1,'===');
 
659
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
660
BEGIN
 
661
SET new.f_int1 = @my_max1 + @counter,
 
662
new.f_int2 = @my_min2 - @counter,
 
663
new.f_charbig = '####updated per insert trigger####';
 
664
SET @counter = @counter + 1;
 
665
END|
 
666
SET @counter = 1;
 
667
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
668
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
669
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
670
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
672
ORDER BY f_int1;
 
673
DROP TRIGGER trg_3;
 
674
        
 
675
# check trigger-11 success:     1
 
676
DELETE FROM t1
 
677
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
678
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
679
AND f_charbig = '####updated per insert trigger####';
 
680
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
681
BEGIN
 
682
SET new.f_int1 = @my_max1 + @counter,
 
683
new.f_int2 = @my_min2 - @counter,
 
684
new.f_charbig = '####updated per insert trigger####';
 
685
SET @counter = @counter + 1;
 
686
END|
 
687
SET @counter = 1;
 
688
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
689
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
690
SELECT CAST(f_int1 AS CHAR),
 
691
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
692
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
693
ORDER BY f_int1;
 
694
DROP TRIGGER trg_3;
 
695
        
 
696
# check trigger-12 success:     1
 
697
DELETE FROM t1
 
698
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
699
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
700
AND f_charbig = '####updated per insert trigger####';
 
701
ANALYZE  TABLE t1;
 
702
Table   Op      Msg_type        Msg_text
 
703
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
704
CHECK    TABLE t1 EXTENDED;
 
705
Table   Op      Msg_type        Msg_text
 
706
test.t1 check   note    The storage engine for the table doesn't support check
 
707
CHECKSUM TABLE t1 EXTENDED;
 
708
Table   Checksum
 
709
test.t1 <some_value>
 
710
OPTIMIZE TABLE t1;
 
711
Table   Op      Msg_type        Msg_text
 
712
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
713
# check layout success:    1
 
714
REPAIR   TABLE t1 EXTENDED;
 
715
Table   Op      Msg_type        Msg_text
 
716
test.t1 repair  note    The storage engine for the table doesn't support repair
 
717
# check layout success:    1
 
718
TRUNCATE t1;
 
719
        
 
720
# check TRUNCATE success:       1
 
721
# check layout success:    1
 
722
# End usability test (inc/partition_check.inc)
 
723
DROP TABLE t1;
 
724
CREATE TABLE t1 (
 
725
f_int1 INTEGER,
 
726
f_int2 INTEGER,
 
727
f_char1 CHAR(20),
 
728
f_char2 CHAR(20),
 
729
f_charbig VARCHAR(1000)
 
730
 
 
731
)
 
732
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
733
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
734
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
735
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
736
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
737
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
738
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
739
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
740
# Start usability test (inc/partition_check.inc)
 
741
create_command
 
742
SHOW CREATE TABLE t1;
 
743
Table   Create Table
 
744
t1      CREATE TABLE `t1` (
 
745
  `f_int1` int(11) DEFAULT NULL,
 
746
  `f_int2` int(11) DEFAULT NULL,
 
747
  `f_char1` char(20) DEFAULT NULL,
 
748
  `f_char2` char(20) DEFAULT NULL,
 
749
  `f_charbig` varchar(1000) DEFAULT NULL,
 
750
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
751
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
752
 
 
753
unified filelist
 
754
t1#P#p0.MYD
 
755
t1#P#p0.MYI
 
756
t1#P#p1.MYD
 
757
t1#P#p1.MYI
 
758
t1#P#p2.MYD
 
759
t1#P#p2.MYI
 
760
t1#P#p3.MYD
 
761
t1#P#p3.MYI
 
762
t1#P#p4.MYD
 
763
t1#P#p4.MYI
 
764
t1.frm
 
765
t1.par
 
766
 
 
767
# check prerequisites-1 success:    1
 
768
# check COUNT(*) success:    1
 
769
# check MIN/MAX(f_int1) success:    1
 
770
# check MIN/MAX(f_int2) success:    1
 
771
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
772
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
773
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
774
WHERE f_int1 IN (2,3);
 
775
ERROR 23000: Can't write; duplicate key in table 't1'
 
776
# check prerequisites-3 success:    1
 
777
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
778
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
779
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
780
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
781
WHERE f_int1 IN (2,3);
 
782
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
783
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
784
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
785
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
786
WHERE f_int1 IN (2,3);
 
787
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
788
# check read via f_int1 success: 1
 
789
# check read via f_int2 success: 1
 
790
        
 
791
# check multiple-1 success:     1
 
792
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
793
        
 
794
# check multiple-2 success:     1
 
795
INSERT INTO t1 SELECT * FROM t0_template
 
796
WHERE MOD(f_int1,3) = 0;
 
797
        
 
798
# check multiple-3 success:     1
 
799
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
800
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
801
AND @max_row_div2 + @max_row_div4;
 
802
        
 
803
# check multiple-4 success:     1
 
804
DELETE FROM t1
 
805
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
806
AND @max_row_div2 + @max_row_div4 + @max_row;
 
807
        
 
808
# check multiple-5 success:     1
 
809
SELECT COUNT(*) INTO @try_count FROM t0_template
 
810
WHERE MOD(f_int1,3) = 0
 
811
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
812
SELECT COUNT(*) INTO @clash_count
 
813
FROM t1 INNER JOIN t0_template USING(f_int1)
 
814
WHERE MOD(f_int1,3) = 0
 
815
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
816
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
817
INSERT INTO t1
 
818
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
819
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
820
f_charbig = '#SINGLE#';
 
821
        
 
822
# check single-1 success:       1
 
823
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
824
INSERT INTO t1
 
825
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
826
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
827
f_charbig = '#SINGLE#';
 
828
        
 
829
# check single-2 success:       1
 
830
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
831
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
832
UPDATE t1 SET f_int1 = @cur_value2
 
833
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
834
        
 
835
# check single-3 success:       1
 
836
SET @cur_value1= -1;
 
837
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
838
UPDATE t1 SET f_int1 = @cur_value1
 
839
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
840
        
 
841
# check single-4 success:       1
 
842
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
843
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
844
        
 
845
# check single-5 success:       1
 
846
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
847
        
 
848
# check single-6 success:       1
 
849
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
850
        
 
851
# check single-7 success:       1
 
852
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
853
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
854
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
855
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
856
f_charbig = '#NULL#';
 
857
INSERT INTO t1
 
858
SET f_int1 = NULL , f_int2 = -@max_row,
 
859
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
860
f_charbig = '#NULL#';
 
861
# check null success:    1
 
862
        
 
863
# check null-1 success:         1
 
864
UPDATE t1 SET f_int1 = -@max_row
 
865
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
866
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
867
        
 
868
# check null-2 success:         1
 
869
UPDATE t1 SET f_int1 = NULL
 
870
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
871
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
872
        
 
873
# check null-3 success:         1
 
874
DELETE FROM t1
 
875
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
876
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
877
        
 
878
# check null-4 success:         1
 
879
DELETE FROM t1
 
880
WHERE f_int1 = 0 AND f_int2 = 0
 
881
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
882
AND f_charbig = '#NULL#';
 
883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
884
SELECT f_int1, f_int1, '', '', 'was inserted'
 
885
   FROM t0_template source_tab
 
886
WHERE MOD(f_int1,3) = 0
 
887
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
888
ON DUPLICATE KEY
 
889
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
890
f_int2 = 2 * @max_row + source_tab.f_int1,
 
891
f_charbig = 'was updated';
 
892
        
 
893
# check unique-1-a success:     1
 
894
        
 
895
# check unique-1-b success:     1
 
896
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
899
f_charbig = CONCAT('===',f_char1,'===')
 
900
WHERE f_charbig = 'was updated';
 
901
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
902
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
903
   FROM t0_template source_tab
 
904
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
905
        
 
906
# check replace success:        1
 
907
DELETE FROM t1
 
908
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
909
DELETE FROM t1
 
910
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
911
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
912
UPDATE t1 SET f_int2 = f_int1,
 
913
f_char1 = CAST(f_int1 AS CHAR),
 
914
f_char2 = CAST(f_int1 AS CHAR),
 
915
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
916
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
917
SET AUTOCOMMIT= 0;
 
918
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
919
SELECT f_int1, f_int1, '', '', 'was inserted'
 
920
FROM t0_template source_tab
 
921
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
922
        
 
923
# check transactions-1 success:         1
 
924
COMMIT WORK;
 
925
        
 
926
# check transactions-2 success:         1
 
927
ROLLBACK WORK;
 
928
        
 
929
# check transactions-3 success:         1
 
930
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
931
COMMIT WORK;
 
932
ROLLBACK WORK;
 
933
        
 
934
# check transactions-4 success:         1
 
935
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
936
SELECT f_int1, f_int1, '', '', 'was inserted'
 
937
FROM t0_template source_tab
 
938
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
939
        
 
940
# check transactions-5 success:         1
 
941
ROLLBACK WORK;
 
942
Warnings:
 
943
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
944
        
 
945
# check transactions-6 success:         1
 
946
# INFO: Storage engine used for t1 seems to be not transactional.
 
947
COMMIT;
 
948
        
 
949
# check transactions-7 success:         1
 
950
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
951
COMMIT WORK;
 
952
SET @@session.sql_mode = 'traditional';
 
953
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
955
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
956
'', '', 'was inserted' FROM t0_template
 
957
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
958
ERROR 22012: Division by 0
 
959
COMMIT;
 
960
        
 
961
# check transactions-8 success:         1
 
962
# INFO: Storage engine used for t1 seems to be unable to revert
 
963
#       changes made by the failing statement.
 
964
SET @@session.sql_mode = '';
 
965
SET AUTOCOMMIT= 1;
 
966
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
967
COMMIT WORK;
 
968
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
969
        
 
970
# check special-1 success:      1
 
971
UPDATE t1 SET f_charbig = '';
 
972
        
 
973
# check special-2 success:      1
 
974
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
975
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
976
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
977
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
978
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
979
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
980
'just inserted' FROM t0_template
 
981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
982
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
983
BEGIN
 
984
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
985
f_charbig = 'updated by trigger'
 
986
      WHERE f_int1 = new.f_int1;
 
987
END|
 
988
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
989
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
991
        
 
992
# check trigger-1 success:      1
 
993
DROP TRIGGER trg_1;
 
994
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
995
f_int2 = CAST(f_char1 AS SIGNED INT),
 
996
f_charbig = 'just inserted'
 
997
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
998
DELETE FROM t0_aux
 
999
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1001
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1002
'just inserted' FROM t0_template
 
1003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1004
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1005
BEGIN
 
1006
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1007
f_charbig = 'updated by trigger'
 
1008
      WHERE f_int1 = new.f_int1;
 
1009
END|
 
1010
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1011
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1013
        
 
1014
# check trigger-2 success:      1
 
1015
DROP TRIGGER trg_1;
 
1016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1018
f_charbig = 'just inserted'
 
1019
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1020
DELETE FROM t0_aux
 
1021
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1022
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1023
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1024
'just inserted' FROM t0_template
 
1025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1026
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1027
BEGIN
 
1028
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1029
f_charbig = 'updated by trigger'
 
1030
      WHERE f_int1 = new.f_int1;
 
1031
END|
 
1032
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1033
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1034
        
 
1035
# check trigger-3 success:      1
 
1036
DROP TRIGGER trg_1;
 
1037
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1038
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1039
f_charbig = 'just inserted'
 
1040
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1041
DELETE FROM t0_aux
 
1042
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1043
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1044
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1045
'just inserted' FROM t0_template
 
1046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1047
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1048
BEGIN
 
1049
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1050
f_charbig = 'updated by trigger'
 
1051
      WHERE f_int1 = - old.f_int1;
 
1052
END|
 
1053
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1054
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1055
        
 
1056
# check trigger-4 success:      1
 
1057
DROP TRIGGER trg_1;
 
1058
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1059
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1060
f_charbig = 'just inserted'
 
1061
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1062
DELETE FROM t0_aux
 
1063
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1064
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1065
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1066
'just inserted' FROM t0_template
 
1067
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1068
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1069
BEGIN
 
1070
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1071
f_charbig = 'updated by trigger'
 
1072
      WHERE f_int1 = new.f_int1;
 
1073
END|
 
1074
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1075
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1076
        
 
1077
# check trigger-5 success:      1
 
1078
DROP TRIGGER trg_1;
 
1079
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1080
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1081
f_charbig = 'just inserted'
 
1082
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1083
DELETE FROM t0_aux
 
1084
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1085
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1086
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1087
'just inserted' FROM t0_template
 
1088
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1089
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1090
BEGIN
 
1091
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1092
f_charbig = 'updated by trigger'
 
1093
      WHERE f_int1 = - old.f_int1;
 
1094
END|
 
1095
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1096
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1097
        
 
1098
# check trigger-6 success:      1
 
1099
DROP TRIGGER trg_1;
 
1100
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1101
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1102
f_charbig = 'just inserted'
 
1103
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1104
DELETE FROM t0_aux
 
1105
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1106
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1107
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1108
'just inserted' FROM t0_template
 
1109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1110
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1111
BEGIN
 
1112
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1113
f_charbig = 'updated by trigger'
 
1114
      WHERE f_int1 = - old.f_int1;
 
1115
END|
 
1116
DELETE FROM t0_aux
 
1117
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1118
        
 
1119
# check trigger-7 success:      1
 
1120
DROP TRIGGER trg_1;
 
1121
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1122
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1123
f_charbig = 'just inserted'
 
1124
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1125
DELETE FROM t0_aux
 
1126
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1128
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1129
'just inserted' FROM t0_template
 
1130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1131
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1132
BEGIN
 
1133
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1134
f_charbig = 'updated by trigger'
 
1135
      WHERE f_int1 = - old.f_int1;
 
1136
END|
 
1137
DELETE FROM t0_aux
 
1138
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1139
        
 
1140
# check trigger-8 success:      1
 
1141
DROP TRIGGER trg_1;
 
1142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1144
f_charbig = 'just inserted'
 
1145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1146
DELETE FROM t0_aux
 
1147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1148
DELETE FROM t1
 
1149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1150
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1151
BEGIN
 
1152
SET new.f_int1 = old.f_int1 + @max_row,
 
1153
new.f_int2 = old.f_int2 - @max_row,
 
1154
new.f_charbig = '####updated per update trigger####';
 
1155
END|
 
1156
UPDATE t1
 
1157
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1158
f_charbig = '####updated per update statement itself####';
 
1159
        
 
1160
# check trigger-9 success:      1
 
1161
DROP TRIGGER trg_2;
 
1162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1164
f_charbig = CONCAT('===',f_char1,'===');
 
1165
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1166
BEGIN
 
1167
SET new.f_int1 = new.f_int1 + @max_row,
 
1168
new.f_int2 = new.f_int2 - @max_row,
 
1169
new.f_charbig = '####updated per update trigger####';
 
1170
END|
 
1171
UPDATE t1
 
1172
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1173
f_charbig = '####updated per update statement itself####';
 
1174
        
 
1175
# check trigger-10 success:     1
 
1176
DROP TRIGGER trg_2;
 
1177
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1178
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1179
f_charbig = CONCAT('===',f_char1,'===');
 
1180
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1181
BEGIN
 
1182
SET new.f_int1 = @my_max1 + @counter,
 
1183
new.f_int2 = @my_min2 - @counter,
 
1184
new.f_charbig = '####updated per insert trigger####';
 
1185
SET @counter = @counter + 1;
 
1186
END|
 
1187
SET @counter = 1;
 
1188
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1189
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1190
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1191
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1193
ORDER BY f_int1;
 
1194
DROP TRIGGER trg_3;
 
1195
        
 
1196
# check trigger-11 success:     1
 
1197
DELETE FROM t1
 
1198
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1199
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1200
AND f_charbig = '####updated per insert trigger####';
 
1201
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1202
BEGIN
 
1203
SET new.f_int1 = @my_max1 + @counter,
 
1204
new.f_int2 = @my_min2 - @counter,
 
1205
new.f_charbig = '####updated per insert trigger####';
 
1206
SET @counter = @counter + 1;
 
1207
END|
 
1208
SET @counter = 1;
 
1209
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1210
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1211
SELECT CAST(f_int1 AS CHAR),
 
1212
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1214
ORDER BY f_int1;
 
1215
DROP TRIGGER trg_3;
 
1216
        
 
1217
# check trigger-12 success:     1
 
1218
DELETE FROM t1
 
1219
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1220
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1221
AND f_charbig = '####updated per insert trigger####';
 
1222
ANALYZE  TABLE t1;
 
1223
Table   Op      Msg_type        Msg_text
 
1224
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1225
CHECK    TABLE t1 EXTENDED;
 
1226
Table   Op      Msg_type        Msg_text
 
1227
test.t1 check   note    The storage engine for the table doesn't support check
 
1228
CHECKSUM TABLE t1 EXTENDED;
 
1229
Table   Checksum
 
1230
test.t1 <some_value>
 
1231
OPTIMIZE TABLE t1;
 
1232
Table   Op      Msg_type        Msg_text
 
1233
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1234
# check layout success:    1
 
1235
REPAIR   TABLE t1 EXTENDED;
 
1236
Table   Op      Msg_type        Msg_text
 
1237
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1238
# check layout success:    1
 
1239
TRUNCATE t1;
 
1240
        
 
1241
# check TRUNCATE success:       1
 
1242
# check layout success:    1
 
1243
# End usability test (inc/partition_check.inc)
 
1244
DROP TABLE t1;
 
1245
CREATE TABLE t1 (
 
1246
f_int1 INTEGER,
 
1247
f_int2 INTEGER,
 
1248
f_char1 CHAR(20),
 
1249
f_char2 CHAR(20),
 
1250
f_charbig VARCHAR(1000)
 
1251
 
 
1252
)
 
1253
PARTITION BY LIST(MOD(f_int1,4))
 
1254
(PARTITION part_3 VALUES IN (-3),
 
1255
PARTITION part_2 VALUES IN (-2),
 
1256
PARTITION part_1 VALUES IN (-1),
 
1257
PARTITION part_N VALUES IN (NULL),
 
1258
PARTITION part0 VALUES IN (0),
 
1259
PARTITION part1 VALUES IN (1),
 
1260
PARTITION part2 VALUES IN (2),
 
1261
PARTITION part3 VALUES IN (3));
 
1262
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1263
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1264
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1265
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
1266
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1267
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1268
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1269
# Start usability test (inc/partition_check.inc)
 
1270
create_command
 
1271
SHOW CREATE TABLE t1;
 
1272
Table   Create Table
 
1273
t1      CREATE TABLE `t1` (
 
1274
  `f_int1` int(11) DEFAULT NULL,
 
1275
  `f_int2` int(11) DEFAULT NULL,
 
1276
  `f_char1` char(20) DEFAULT NULL,
 
1277
  `f_char2` char(20) DEFAULT NULL,
 
1278
  `f_charbig` varchar(1000) DEFAULT NULL,
 
1279
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
1280
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
1281
 
 
1282
unified filelist
 
1283
t1#P#part0.MYD
 
1284
t1#P#part0.MYI
 
1285
t1#P#part1.MYD
 
1286
t1#P#part1.MYI
 
1287
t1#P#part2.MYD
 
1288
t1#P#part2.MYI
 
1289
t1#P#part3.MYD
 
1290
t1#P#part3.MYI
 
1291
t1#P#part_1.MYD
 
1292
t1#P#part_1.MYI
 
1293
t1#P#part_2.MYD
 
1294
t1#P#part_2.MYI
 
1295
t1#P#part_3.MYD
 
1296
t1#P#part_3.MYI
 
1297
t1#P#part_N.MYD
 
1298
t1#P#part_N.MYI
 
1299
t1.frm
 
1300
t1.par
 
1301
 
 
1302
# check prerequisites-1 success:    1
 
1303
# check COUNT(*) success:    1
 
1304
# check MIN/MAX(f_int1) success:    1
 
1305
# check MIN/MAX(f_int2) success:    1
 
1306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1307
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1308
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1309
WHERE f_int1 IN (2,3);
 
1310
ERROR 23000: Can't write; duplicate key in table 't1'
 
1311
# check prerequisites-3 success:    1
 
1312
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
1313
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1314
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1315
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1316
WHERE f_int1 IN (2,3);
 
1317
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1318
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1319
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1320
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1321
WHERE f_int1 IN (2,3);
 
1322
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1323
# check read via f_int1 success: 1
 
1324
# check read via f_int2 success: 1
 
1325
        
 
1326
# check multiple-1 success:     1
 
1327
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1328
        
 
1329
# check multiple-2 success:     1
 
1330
INSERT INTO t1 SELECT * FROM t0_template
 
1331
WHERE MOD(f_int1,3) = 0;
 
1332
        
 
1333
# check multiple-3 success:     1
 
1334
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1335
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1336
AND @max_row_div2 + @max_row_div4;
 
1337
        
 
1338
# check multiple-4 success:     1
 
1339
DELETE FROM t1
 
1340
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1341
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1342
        
 
1343
# check multiple-5 success:     1
 
1344
SELECT COUNT(*) INTO @try_count FROM t0_template
 
1345
WHERE MOD(f_int1,3) = 0
 
1346
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1347
SELECT COUNT(*) INTO @clash_count
 
1348
FROM t1 INNER JOIN t0_template USING(f_int1)
 
1349
WHERE MOD(f_int1,3) = 0
 
1350
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1351
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1352
INSERT INTO t1
 
1353
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1354
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1355
f_charbig = '#SINGLE#';
 
1356
        
 
1357
# check single-1 success:       1
 
1358
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1359
INSERT INTO t1
 
1360
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1361
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1362
f_charbig = '#SINGLE#';
 
1363
        
 
1364
# check single-2 success:       1
 
1365
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1366
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1367
UPDATE t1 SET f_int1 = @cur_value2
 
1368
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1369
        
 
1370
# check single-3 success:       1
 
1371
SET @cur_value1= -1;
 
1372
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1373
UPDATE t1 SET f_int1 = @cur_value1
 
1374
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1375
        
 
1376
# check single-4 success:       1
 
1377
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1378
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1379
        
 
1380
# check single-5 success:       1
 
1381
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1382
        
 
1383
# check single-6 success:       1
 
1384
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1385
        
 
1386
# check single-7 success:       1
 
1387
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1388
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1389
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1390
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1391
f_charbig = '#NULL#';
 
1392
INSERT INTO t1
 
1393
SET f_int1 = NULL , f_int2 = -@max_row,
 
1394
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1395
f_charbig = '#NULL#';
 
1396
# check null success:    1
 
1397
        
 
1398
# check null-1 success:         1
 
1399
UPDATE t1 SET f_int1 = -@max_row
 
1400
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1401
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1402
        
 
1403
# check null-2 success:         1
 
1404
UPDATE t1 SET f_int1 = NULL
 
1405
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1406
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1407
        
 
1408
# check null-3 success:         1
 
1409
DELETE FROM t1
 
1410
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1411
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1412
        
 
1413
# check null-4 success:         1
 
1414
DELETE FROM t1
 
1415
WHERE f_int1 = 0 AND f_int2 = 0
 
1416
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1417
AND f_charbig = '#NULL#';
 
1418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1419
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1420
   FROM t0_template source_tab
 
1421
WHERE MOD(f_int1,3) = 0
 
1422
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
1423
ON DUPLICATE KEY
 
1424
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
1425
f_int2 = 2 * @max_row + source_tab.f_int1,
 
1426
f_charbig = 'was updated';
 
1427
        
 
1428
# check unique-1-a success:     1
 
1429
        
 
1430
# check unique-1-b success:     1
 
1431
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1434
f_charbig = CONCAT('===',f_char1,'===')
 
1435
WHERE f_charbig = 'was updated';
 
1436
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1437
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
1438
   FROM t0_template source_tab
 
1439
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1440
        
 
1441
# check replace success:        1
 
1442
DELETE FROM t1
 
1443
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
1444
DELETE FROM t1
 
1445
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
1446
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
1447
UPDATE t1 SET f_int2 = f_int1,
 
1448
f_char1 = CAST(f_int1 AS CHAR),
 
1449
f_char2 = CAST(f_int1 AS CHAR),
 
1450
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
1451
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
1452
SET AUTOCOMMIT= 0;
 
1453
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1454
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1455
FROM t0_template source_tab
 
1456
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1457
        
 
1458
# check transactions-1 success:         1
 
1459
COMMIT WORK;
 
1460
        
 
1461
# check transactions-2 success:         1
 
1462
ROLLBACK WORK;
 
1463
        
 
1464
# check transactions-3 success:         1
 
1465
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1466
COMMIT WORK;
 
1467
ROLLBACK WORK;
 
1468
        
 
1469
# check transactions-4 success:         1
 
1470
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1471
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1472
FROM t0_template source_tab
 
1473
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1474
        
 
1475
# check transactions-5 success:         1
 
1476
ROLLBACK WORK;
 
1477
Warnings:
 
1478
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1479
        
 
1480
# check transactions-6 success:         1
 
1481
# INFO: Storage engine used for t1 seems to be not transactional.
 
1482
COMMIT;
 
1483
        
 
1484
# check transactions-7 success:         1
 
1485
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1486
COMMIT WORK;
 
1487
SET @@session.sql_mode = 'traditional';
 
1488
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1489
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1490
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1491
'', '', 'was inserted' FROM t0_template
 
1492
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1493
ERROR 22012: Division by 0
 
1494
COMMIT;
 
1495
        
 
1496
# check transactions-8 success:         1
 
1497
# INFO: Storage engine used for t1 seems to be unable to revert
 
1498
#       changes made by the failing statement.
 
1499
SET @@session.sql_mode = '';
 
1500
SET AUTOCOMMIT= 1;
 
1501
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1502
COMMIT WORK;
 
1503
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1504
        
 
1505
# check special-1 success:      1
 
1506
UPDATE t1 SET f_charbig = '';
 
1507
        
 
1508
# check special-2 success:      1
 
1509
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1510
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1511
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1513
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1514
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1515
'just inserted' FROM t0_template
 
1516
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1517
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1518
BEGIN
 
1519
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1520
f_charbig = 'updated by trigger'
 
1521
      WHERE f_int1 = new.f_int1;
 
1522
END|
 
1523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1524
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1526
        
 
1527
# check trigger-1 success:      1
 
1528
DROP TRIGGER trg_1;
 
1529
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1530
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1531
f_charbig = 'just inserted'
 
1532
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1533
DELETE FROM t0_aux
 
1534
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1535
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1536
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1537
'just inserted' FROM t0_template
 
1538
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1539
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1540
BEGIN
 
1541
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1542
f_charbig = 'updated by trigger'
 
1543
      WHERE f_int1 = new.f_int1;
 
1544
END|
 
1545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1546
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1548
        
 
1549
# check trigger-2 success:      1
 
1550
DROP TRIGGER trg_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 = 'just inserted'
 
1554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1555
DELETE FROM t0_aux
 
1556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1559
'just inserted' FROM t0_template
 
1560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1561
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1562
BEGIN
 
1563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1564
f_charbig = 'updated by trigger'
 
1565
      WHERE f_int1 = new.f_int1;
 
1566
END|
 
1567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1569
        
 
1570
# check trigger-3 success:      1
 
1571
DROP TRIGGER trg_1;
 
1572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1574
f_charbig = 'just inserted'
 
1575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1576
DELETE FROM t0_aux
 
1577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1580
'just inserted' FROM t0_template
 
1581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1582
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1583
BEGIN
 
1584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1585
f_charbig = 'updated by trigger'
 
1586
      WHERE f_int1 = - old.f_int1;
 
1587
END|
 
1588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1590
        
 
1591
# check trigger-4 success:      1
 
1592
DROP TRIGGER trg_1;
 
1593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1595
f_charbig = 'just inserted'
 
1596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1597
DELETE FROM t0_aux
 
1598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1601
'just inserted' FROM t0_template
 
1602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1603
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1604
BEGIN
 
1605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1606
f_charbig = 'updated by trigger'
 
1607
      WHERE f_int1 = new.f_int1;
 
1608
END|
 
1609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1611
        
 
1612
# check trigger-5 success:      1
 
1613
DROP TRIGGER trg_1;
 
1614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1616
f_charbig = 'just inserted'
 
1617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1618
DELETE FROM t0_aux
 
1619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1622
'just inserted' FROM t0_template
 
1623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1624
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1625
BEGIN
 
1626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1627
f_charbig = 'updated by trigger'
 
1628
      WHERE f_int1 = - old.f_int1;
 
1629
END|
 
1630
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1632
        
 
1633
# check trigger-6 success:      1
 
1634
DROP TRIGGER trg_1;
 
1635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1637
f_charbig = 'just inserted'
 
1638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1639
DELETE FROM t0_aux
 
1640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1643
'just inserted' FROM t0_template
 
1644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1645
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1646
BEGIN
 
1647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1648
f_charbig = 'updated by trigger'
 
1649
      WHERE f_int1 = - old.f_int1;
 
1650
END|
 
1651
DELETE FROM t0_aux
 
1652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1653
        
 
1654
# check trigger-7 success:      1
 
1655
DROP TRIGGER trg_1;
 
1656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1658
f_charbig = 'just inserted'
 
1659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1660
DELETE FROM t0_aux
 
1661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1664
'just inserted' FROM t0_template
 
1665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1666
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1667
BEGIN
 
1668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1669
f_charbig = 'updated by trigger'
 
1670
      WHERE f_int1 = - old.f_int1;
 
1671
END|
 
1672
DELETE FROM t0_aux
 
1673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1674
        
 
1675
# check trigger-8 success:      1
 
1676
DROP TRIGGER trg_1;
 
1677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1679
f_charbig = 'just inserted'
 
1680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1681
DELETE FROM t0_aux
 
1682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1683
DELETE FROM t1
 
1684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1685
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1686
BEGIN
 
1687
SET new.f_int1 = old.f_int1 + @max_row,
 
1688
new.f_int2 = old.f_int2 - @max_row,
 
1689
new.f_charbig = '####updated per update trigger####';
 
1690
END|
 
1691
UPDATE t1
 
1692
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1693
f_charbig = '####updated per update statement itself####';
 
1694
        
 
1695
# check trigger-9 success:      1
 
1696
DROP TRIGGER trg_2;
 
1697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1699
f_charbig = CONCAT('===',f_char1,'===');
 
1700
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1701
BEGIN
 
1702
SET new.f_int1 = new.f_int1 + @max_row,
 
1703
new.f_int2 = new.f_int2 - @max_row,
 
1704
new.f_charbig = '####updated per update trigger####';
 
1705
END|
 
1706
UPDATE t1
 
1707
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1708
f_charbig = '####updated per update statement itself####';
 
1709
        
 
1710
# check trigger-10 success:     1
 
1711
DROP TRIGGER trg_2;
 
1712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1714
f_charbig = CONCAT('===',f_char1,'===');
 
1715
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1716
BEGIN
 
1717
SET new.f_int1 = @my_max1 + @counter,
 
1718
new.f_int2 = @my_min2 - @counter,
 
1719
new.f_charbig = '####updated per insert trigger####';
 
1720
SET @counter = @counter + 1;
 
1721
END|
 
1722
SET @counter = 1;
 
1723
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1724
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1725
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1726
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1728
ORDER BY f_int1;
 
1729
DROP TRIGGER trg_3;
 
1730
        
 
1731
# check trigger-11 success:     1
 
1732
DELETE FROM t1
 
1733
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1734
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1735
AND f_charbig = '####updated per insert trigger####';
 
1736
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1737
BEGIN
 
1738
SET new.f_int1 = @my_max1 + @counter,
 
1739
new.f_int2 = @my_min2 - @counter,
 
1740
new.f_charbig = '####updated per insert trigger####';
 
1741
SET @counter = @counter + 1;
 
1742
END|
 
1743
SET @counter = 1;
 
1744
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1745
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1746
SELECT CAST(f_int1 AS CHAR),
 
1747
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1749
ORDER BY f_int1;
 
1750
DROP TRIGGER trg_3;
 
1751
        
 
1752
# check trigger-12 success:     1
 
1753
DELETE FROM t1
 
1754
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1755
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1756
AND f_charbig = '####updated per insert trigger####';
 
1757
ANALYZE  TABLE t1;
 
1758
Table   Op      Msg_type        Msg_text
 
1759
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1760
CHECK    TABLE t1 EXTENDED;
 
1761
Table   Op      Msg_type        Msg_text
 
1762
test.t1 check   note    The storage engine for the table doesn't support check
 
1763
CHECKSUM TABLE t1 EXTENDED;
 
1764
Table   Checksum
 
1765
test.t1 <some_value>
 
1766
OPTIMIZE TABLE t1;
 
1767
Table   Op      Msg_type        Msg_text
 
1768
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1769
# check layout success:    1
 
1770
REPAIR   TABLE t1 EXTENDED;
 
1771
Table   Op      Msg_type        Msg_text
 
1772
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1773
# check layout success:    1
 
1774
TRUNCATE t1;
 
1775
        
 
1776
# check TRUNCATE success:       1
 
1777
# check layout success:    1
 
1778
# End usability test (inc/partition_check.inc)
 
1779
DROP TABLE t1;
 
1780
CREATE TABLE t1 (
 
1781
f_int1 INTEGER,
 
1782
f_int2 INTEGER,
 
1783
f_char1 CHAR(20),
 
1784
f_char2 CHAR(20),
 
1785
f_charbig VARCHAR(1000)
 
1786
 
 
1787
)
 
1788
PARTITION BY RANGE(f_int1)
 
1789
(PARTITION parta VALUES LESS THAN (0),
 
1790
PARTITION partb VALUES LESS THAN (5),
 
1791
PARTITION partc VALUES LESS THAN (10),
 
1792
PARTITION partd VALUES LESS THAN (10 + 5),
 
1793
PARTITION parte VALUES LESS THAN (20),
 
1794
PARTITION partf VALUES LESS THAN (2147483646));
 
1795
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1796
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1797
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1798
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
1799
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1800
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1801
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1802
# Start usability test (inc/partition_check.inc)
 
1803
create_command
 
1804
SHOW CREATE TABLE t1;
 
1805
Table   Create Table
 
1806
t1      CREATE TABLE `t1` (
 
1807
  `f_int1` int(11) DEFAULT NULL,
 
1808
  `f_int2` int(11) DEFAULT NULL,
 
1809
  `f_char1` char(20) DEFAULT NULL,
 
1810
  `f_char2` char(20) DEFAULT NULL,
 
1811
  `f_charbig` varchar(1000) DEFAULT NULL,
 
1812
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
1813
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1814
 
 
1815
unified filelist
 
1816
t1#P#parta.MYD
 
1817
t1#P#parta.MYI
 
1818
t1#P#partb.MYD
 
1819
t1#P#partb.MYI
 
1820
t1#P#partc.MYD
 
1821
t1#P#partc.MYI
 
1822
t1#P#partd.MYD
 
1823
t1#P#partd.MYI
 
1824
t1#P#parte.MYD
 
1825
t1#P#parte.MYI
 
1826
t1#P#partf.MYD
 
1827
t1#P#partf.MYI
 
1828
t1.frm
 
1829
t1.par
 
1830
 
 
1831
# check prerequisites-1 success:    1
 
1832
# check COUNT(*) success:    1
 
1833
# check MIN/MAX(f_int1) success:    1
 
1834
# check MIN/MAX(f_int2) success:    1
 
1835
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1836
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1837
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1838
WHERE f_int1 IN (2,3);
 
1839
ERROR 23000: Can't write; duplicate key in table 't1'
 
1840
# check prerequisites-3 success:    1
 
1841
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
1842
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1843
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1844
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1845
WHERE f_int1 IN (2,3);
 
1846
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1847
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1848
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1849
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1850
WHERE f_int1 IN (2,3);
 
1851
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1852
# check read via f_int1 success: 1
 
1853
# check read via f_int2 success: 1
 
1854
        
 
1855
# check multiple-1 success:     1
 
1856
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1857
        
 
1858
# check multiple-2 success:     1
 
1859
INSERT INTO t1 SELECT * FROM t0_template
 
1860
WHERE MOD(f_int1,3) = 0;
 
1861
        
 
1862
# check multiple-3 success:     1
 
1863
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1864
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1865
AND @max_row_div2 + @max_row_div4;
 
1866
        
 
1867
# check multiple-4 success:     1
 
1868
DELETE FROM t1
 
1869
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1870
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1871
        
 
1872
# check multiple-5 success:     1
 
1873
SELECT COUNT(*) INTO @try_count FROM t0_template
 
1874
WHERE MOD(f_int1,3) = 0
 
1875
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1876
SELECT COUNT(*) INTO @clash_count
 
1877
FROM t1 INNER JOIN t0_template USING(f_int1)
 
1878
WHERE MOD(f_int1,3) = 0
 
1879
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1880
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1881
INSERT INTO t1
 
1882
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1883
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1884
f_charbig = '#SINGLE#';
 
1885
        
 
1886
# check single-1 success:       1
 
1887
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1888
INSERT INTO t1
 
1889
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1890
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1891
f_charbig = '#SINGLE#';
 
1892
        
 
1893
# check single-2 success:       1
 
1894
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1895
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1896
UPDATE t1 SET f_int1 = @cur_value2
 
1897
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1898
        
 
1899
# check single-3 success:       1
 
1900
SET @cur_value1= -1;
 
1901
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1902
UPDATE t1 SET f_int1 = @cur_value1
 
1903
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1904
        
 
1905
# check single-4 success:       1
 
1906
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1907
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1908
        
 
1909
# check single-5 success:       1
 
1910
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1911
        
 
1912
# check single-6 success:       1
 
1913
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1914
ERROR HY000: Table has no partition for value 2147483647
 
1915
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1916
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1917
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1918
f_charbig = '#NULL#';
 
1919
INSERT INTO t1
 
1920
SET f_int1 = NULL , f_int2 = -@max_row,
 
1921
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1922
f_charbig = '#NULL#';
 
1923
# check null success:    1
 
1924
        
 
1925
# check null-1 success:         1
 
1926
UPDATE t1 SET f_int1 = -@max_row
 
1927
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1928
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1929
        
 
1930
# check null-2 success:         1
 
1931
UPDATE t1 SET f_int1 = NULL
 
1932
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1933
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1934
        
 
1935
# check null-3 success:         1
 
1936
DELETE FROM t1
 
1937
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1938
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1939
        
 
1940
# check null-4 success:         1
 
1941
DELETE FROM t1
 
1942
WHERE f_int1 = 0 AND f_int2 = 0
 
1943
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1944
AND f_charbig = '#NULL#';
 
1945
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1946
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1947
   FROM t0_template source_tab
 
1948
WHERE MOD(f_int1,3) = 0
 
1949
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
1950
ON DUPLICATE KEY
 
1951
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
1952
f_int2 = 2 * @max_row + source_tab.f_int1,
 
1953
f_charbig = 'was updated';
 
1954
        
 
1955
# check unique-1-a success:     1
 
1956
        
 
1957
# check unique-1-b success:     1
 
1958
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1961
f_charbig = CONCAT('===',f_char1,'===')
 
1962
WHERE f_charbig = 'was updated';
 
1963
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1964
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
1965
   FROM t0_template source_tab
 
1966
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1967
        
 
1968
# check replace success:        1
 
1969
DELETE FROM t1
 
1970
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
1971
DELETE FROM t1
 
1972
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
1973
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
1974
UPDATE t1 SET f_int2 = f_int1,
 
1975
f_char1 = CAST(f_int1 AS CHAR),
 
1976
f_char2 = CAST(f_int1 AS CHAR),
 
1977
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
1978
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
1979
SET AUTOCOMMIT= 0;
 
1980
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1981
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1982
FROM t0_template source_tab
 
1983
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1984
        
 
1985
# check transactions-1 success:         1
 
1986
COMMIT WORK;
 
1987
        
 
1988
# check transactions-2 success:         1
 
1989
ROLLBACK WORK;
 
1990
        
 
1991
# check transactions-3 success:         1
 
1992
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1993
COMMIT WORK;
 
1994
ROLLBACK WORK;
 
1995
        
 
1996
# check transactions-4 success:         1
 
1997
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1998
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1999
FROM t0_template source_tab
 
2000
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2001
        
 
2002
# check transactions-5 success:         1
 
2003
ROLLBACK WORK;
 
2004
Warnings:
 
2005
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2006
        
 
2007
# check transactions-6 success:         1
 
2008
# INFO: Storage engine used for t1 seems to be not transactional.
 
2009
COMMIT;
 
2010
        
 
2011
# check transactions-7 success:         1
 
2012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2013
COMMIT WORK;
 
2014
SET @@session.sql_mode = 'traditional';
 
2015
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2016
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2017
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2018
'', '', 'was inserted' FROM t0_template
 
2019
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2020
ERROR 22012: Division by 0
 
2021
COMMIT;
 
2022
        
 
2023
# check transactions-8 success:         1
 
2024
# INFO: Storage engine used for t1 seems to be unable to revert
 
2025
#       changes made by the failing statement.
 
2026
SET @@session.sql_mode = '';
 
2027
SET AUTOCOMMIT= 1;
 
2028
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2029
COMMIT WORK;
 
2030
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2031
        
 
2032
# check special-1 success:      1
 
2033
UPDATE t1 SET f_charbig = '';
 
2034
        
 
2035
# check special-2 success:      1
 
2036
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2037
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2038
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2040
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2041
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2042
'just inserted' FROM t0_template
 
2043
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2044
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2045
BEGIN
 
2046
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2047
f_charbig = 'updated by trigger'
 
2048
      WHERE f_int1 = new.f_int1;
 
2049
END|
 
2050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2051
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2053
        
 
2054
# check trigger-1 success:      1
 
2055
DROP TRIGGER trg_1;
 
2056
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2057
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2058
f_charbig = 'just inserted'
 
2059
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2060
DELETE FROM t0_aux
 
2061
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2063
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2064
'just inserted' FROM t0_template
 
2065
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2066
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2067
BEGIN
 
2068
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2069
f_charbig = 'updated by trigger'
 
2070
      WHERE f_int1 = new.f_int1;
 
2071
END|
 
2072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2073
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2075
        
 
2076
# check trigger-2 success:      1
 
2077
DROP TRIGGER trg_1;
 
2078
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2079
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2080
f_charbig = 'just inserted'
 
2081
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2082
DELETE FROM t0_aux
 
2083
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2085
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2086
'just inserted' FROM t0_template
 
2087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2088
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2089
BEGIN
 
2090
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2091
f_charbig = 'updated by trigger'
 
2092
      WHERE f_int1 = new.f_int1;
 
2093
END|
 
2094
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2095
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2096
        
 
2097
# check trigger-3 success:      1
 
2098
DROP TRIGGER trg_1;
 
2099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2101
f_charbig = 'just inserted'
 
2102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2103
DELETE FROM t0_aux
 
2104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2107
'just inserted' FROM t0_template
 
2108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2109
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2110
BEGIN
 
2111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2112
f_charbig = 'updated by trigger'
 
2113
      WHERE f_int1 = - old.f_int1;
 
2114
END|
 
2115
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2116
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2117
        
 
2118
# check trigger-4 success:      1
 
2119
DROP TRIGGER trg_1;
 
2120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2122
f_charbig = 'just inserted'
 
2123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2124
DELETE FROM t0_aux
 
2125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2128
'just inserted' FROM t0_template
 
2129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2130
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2131
BEGIN
 
2132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2133
f_charbig = 'updated by trigger'
 
2134
      WHERE f_int1 = new.f_int1;
 
2135
END|
 
2136
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2137
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2138
        
 
2139
# check trigger-5 success:      1
 
2140
DROP TRIGGER trg_1;
 
2141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2143
f_charbig = 'just inserted'
 
2144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2145
DELETE FROM t0_aux
 
2146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2149
'just inserted' FROM t0_template
 
2150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2151
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2152
BEGIN
 
2153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2154
f_charbig = 'updated by trigger'
 
2155
      WHERE f_int1 = - old.f_int1;
 
2156
END|
 
2157
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2159
        
 
2160
# check trigger-6 success:      1
 
2161
DROP TRIGGER trg_1;
 
2162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2164
f_charbig = 'just inserted'
 
2165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2166
DELETE FROM t0_aux
 
2167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2170
'just inserted' FROM t0_template
 
2171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2172
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2173
BEGIN
 
2174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2175
f_charbig = 'updated by trigger'
 
2176
      WHERE f_int1 = - old.f_int1;
 
2177
END|
 
2178
DELETE FROM t0_aux
 
2179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2180
        
 
2181
# check trigger-7 success:      1
 
2182
DROP TRIGGER trg_1;
 
2183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2185
f_charbig = 'just inserted'
 
2186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2187
DELETE FROM t0_aux
 
2188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2191
'just inserted' FROM t0_template
 
2192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2193
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2194
BEGIN
 
2195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2196
f_charbig = 'updated by trigger'
 
2197
      WHERE f_int1 = - old.f_int1;
 
2198
END|
 
2199
DELETE FROM t0_aux
 
2200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2201
        
 
2202
# check trigger-8 success:      1
 
2203
DROP TRIGGER trg_1;
 
2204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2206
f_charbig = 'just inserted'
 
2207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2208
DELETE FROM t0_aux
 
2209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2210
DELETE FROM t1
 
2211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2212
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2213
BEGIN
 
2214
SET new.f_int1 = old.f_int1 + @max_row,
 
2215
new.f_int2 = old.f_int2 - @max_row,
 
2216
new.f_charbig = '####updated per update trigger####';
 
2217
END|
 
2218
UPDATE t1
 
2219
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2220
f_charbig = '####updated per update statement itself####';
 
2221
        
 
2222
# check trigger-9 success:      1
 
2223
DROP TRIGGER trg_2;
 
2224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2226
f_charbig = CONCAT('===',f_char1,'===');
 
2227
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2228
BEGIN
 
2229
SET new.f_int1 = new.f_int1 + @max_row,
 
2230
new.f_int2 = new.f_int2 - @max_row,
 
2231
new.f_charbig = '####updated per update trigger####';
 
2232
END|
 
2233
UPDATE t1
 
2234
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2235
f_charbig = '####updated per update statement itself####';
 
2236
        
 
2237
# check trigger-10 success:     1
 
2238
DROP TRIGGER trg_2;
 
2239
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2240
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2241
f_charbig = CONCAT('===',f_char1,'===');
 
2242
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2243
BEGIN
 
2244
SET new.f_int1 = @my_max1 + @counter,
 
2245
new.f_int2 = @my_min2 - @counter,
 
2246
new.f_charbig = '####updated per insert trigger####';
 
2247
SET @counter = @counter + 1;
 
2248
END|
 
2249
SET @counter = 1;
 
2250
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2251
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2252
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2253
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2255
ORDER BY f_int1;
 
2256
DROP TRIGGER trg_3;
 
2257
        
 
2258
# check trigger-11 success:     1
 
2259
DELETE FROM t1
 
2260
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2261
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2262
AND f_charbig = '####updated per insert trigger####';
 
2263
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2264
BEGIN
 
2265
SET new.f_int1 = @my_max1 + @counter,
 
2266
new.f_int2 = @my_min2 - @counter,
 
2267
new.f_charbig = '####updated per insert trigger####';
 
2268
SET @counter = @counter + 1;
 
2269
END|
 
2270
SET @counter = 1;
 
2271
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2272
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2273
SELECT CAST(f_int1 AS CHAR),
 
2274
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2276
ORDER BY f_int1;
 
2277
DROP TRIGGER trg_3;
 
2278
        
 
2279
# check trigger-12 success:     1
 
2280
DELETE FROM t1
 
2281
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2282
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2283
AND f_charbig = '####updated per insert trigger####';
 
2284
ANALYZE  TABLE t1;
 
2285
Table   Op      Msg_type        Msg_text
 
2286
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2287
CHECK    TABLE t1 EXTENDED;
 
2288
Table   Op      Msg_type        Msg_text
 
2289
test.t1 check   note    The storage engine for the table doesn't support check
 
2290
CHECKSUM TABLE t1 EXTENDED;
 
2291
Table   Checksum
 
2292
test.t1 <some_value>
 
2293
OPTIMIZE TABLE t1;
 
2294
Table   Op      Msg_type        Msg_text
 
2295
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2296
# check layout success:    1
 
2297
REPAIR   TABLE t1 EXTENDED;
 
2298
Table   Op      Msg_type        Msg_text
 
2299
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2300
# check layout success:    1
 
2301
TRUNCATE t1;
 
2302
        
 
2303
# check TRUNCATE success:       1
 
2304
# check layout success:    1
 
2305
# End usability test (inc/partition_check.inc)
 
2306
DROP TABLE t1;
 
2307
CREATE TABLE t1 (
 
2308
f_int1 INTEGER,
 
2309
f_int2 INTEGER,
 
2310
f_char1 CHAR(20),
 
2311
f_char2 CHAR(20),
 
2312
f_charbig VARCHAR(1000)
 
2313
 
 
2314
)
 
2315
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
2316
(PARTITION parta VALUES LESS THAN (0),
 
2317
PARTITION partb VALUES LESS THAN (5),
 
2318
PARTITION partc VALUES LESS THAN (10),
 
2319
PARTITION partd VALUES LESS THAN (2147483646));
 
2320
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2321
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2322
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2323
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
2324
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2325
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2326
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2327
# Start usability test (inc/partition_check.inc)
 
2328
create_command
 
2329
SHOW CREATE TABLE t1;
 
2330
Table   Create Table
 
2331
t1      CREATE TABLE `t1` (
 
2332
  `f_int1` int(11) DEFAULT NULL,
 
2333
  `f_int2` int(11) DEFAULT NULL,
 
2334
  `f_char1` char(20) DEFAULT NULL,
 
2335
  `f_char2` char(20) DEFAULT NULL,
 
2336
  `f_charbig` varchar(1000) DEFAULT NULL,
 
2337
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
2338
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
2339
 
 
2340
unified filelist
 
2341
t1#P#parta#SP#partasp0.MYD
 
2342
t1#P#parta#SP#partasp0.MYI
 
2343
t1#P#parta#SP#partasp1.MYD
 
2344
t1#P#parta#SP#partasp1.MYI
 
2345
t1#P#partb#SP#partbsp0.MYD
 
2346
t1#P#partb#SP#partbsp0.MYI
 
2347
t1#P#partb#SP#partbsp1.MYD
 
2348
t1#P#partb#SP#partbsp1.MYI
 
2349
t1#P#partc#SP#partcsp0.MYD
 
2350
t1#P#partc#SP#partcsp0.MYI
 
2351
t1#P#partc#SP#partcsp1.MYD
 
2352
t1#P#partc#SP#partcsp1.MYI
 
2353
t1#P#partd#SP#partdsp0.MYD
 
2354
t1#P#partd#SP#partdsp0.MYI
 
2355
t1#P#partd#SP#partdsp1.MYD
 
2356
t1#P#partd#SP#partdsp1.MYI
 
2357
t1.frm
 
2358
t1.par
 
2359
 
 
2360
# check prerequisites-1 success:    1
 
2361
# check COUNT(*) success:    1
 
2362
# check MIN/MAX(f_int1) success:    1
 
2363
# check MIN/MAX(f_int2) success:    1
 
2364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2366
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2367
WHERE f_int1 IN (2,3);
 
2368
ERROR 23000: Can't write; duplicate key in table 't1'
 
2369
# check prerequisites-3 success:    1
 
2370
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
2371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2372
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2373
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2374
WHERE f_int1 IN (2,3);
 
2375
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2377
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2378
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2379
WHERE f_int1 IN (2,3);
 
2380
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2381
# check read via f_int1 success: 1
 
2382
# check read via f_int2 success: 1
 
2383
        
 
2384
# check multiple-1 success:     1
 
2385
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2386
        
 
2387
# check multiple-2 success:     1
 
2388
INSERT INTO t1 SELECT * FROM t0_template
 
2389
WHERE MOD(f_int1,3) = 0;
 
2390
        
 
2391
# check multiple-3 success:     1
 
2392
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2393
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2394
AND @max_row_div2 + @max_row_div4;
 
2395
        
 
2396
# check multiple-4 success:     1
 
2397
DELETE FROM t1
 
2398
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2399
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2400
        
 
2401
# check multiple-5 success:     1
 
2402
SELECT COUNT(*) INTO @try_count FROM t0_template
 
2403
WHERE MOD(f_int1,3) = 0
 
2404
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2405
SELECT COUNT(*) INTO @clash_count
 
2406
FROM t1 INNER JOIN t0_template USING(f_int1)
 
2407
WHERE MOD(f_int1,3) = 0
 
2408
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2409
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2410
INSERT INTO t1
 
2411
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2412
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2413
f_charbig = '#SINGLE#';
 
2414
        
 
2415
# check single-1 success:       1
 
2416
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2417
INSERT INTO t1
 
2418
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2419
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2420
f_charbig = '#SINGLE#';
 
2421
        
 
2422
# check single-2 success:       1
 
2423
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2424
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2425
UPDATE t1 SET f_int1 = @cur_value2
 
2426
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2427
        
 
2428
# check single-3 success:       1
 
2429
SET @cur_value1= -1;
 
2430
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2431
UPDATE t1 SET f_int1 = @cur_value1
 
2432
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2433
        
 
2434
# check single-4 success:       1
 
2435
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2436
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2437
        
 
2438
# check single-5 success:       1
 
2439
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2440
        
 
2441
# check single-6 success:       1
 
2442
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2443
        
 
2444
# check single-7 success:       1
 
2445
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
2446
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2447
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2448
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2449
f_charbig = '#NULL#';
 
2450
INSERT INTO t1
 
2451
SET f_int1 = NULL , f_int2 = -@max_row,
 
2452
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2453
f_charbig = '#NULL#';
 
2454
# check null success:    1
 
2455
        
 
2456
# check null-1 success:         1
 
2457
UPDATE t1 SET f_int1 = -@max_row
 
2458
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2459
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2460
        
 
2461
# check null-2 success:         1
 
2462
UPDATE t1 SET f_int1 = NULL
 
2463
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2464
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2465
        
 
2466
# check null-3 success:         1
 
2467
DELETE FROM t1
 
2468
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2469
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2470
        
 
2471
# check null-4 success:         1
 
2472
DELETE FROM t1
 
2473
WHERE f_int1 = 0 AND f_int2 = 0
 
2474
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2475
AND f_charbig = '#NULL#';
 
2476
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2477
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2478
   FROM t0_template source_tab
 
2479
WHERE MOD(f_int1,3) = 0
 
2480
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
2481
ON DUPLICATE KEY
 
2482
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
2483
f_int2 = 2 * @max_row + source_tab.f_int1,
 
2484
f_charbig = 'was updated';
 
2485
        
 
2486
# check unique-1-a success:     1
 
2487
        
 
2488
# check unique-1-b success:     1
 
2489
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2490
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2491
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2492
f_charbig = CONCAT('===',f_char1,'===')
 
2493
WHERE f_charbig = 'was updated';
 
2494
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2495
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
2496
   FROM t0_template source_tab
 
2497
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2498
        
 
2499
# check replace success:        1
 
2500
DELETE FROM t1
 
2501
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
2502
DELETE FROM t1
 
2503
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
2504
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
2505
UPDATE t1 SET f_int2 = f_int1,
 
2506
f_char1 = CAST(f_int1 AS CHAR),
 
2507
f_char2 = CAST(f_int1 AS CHAR),
 
2508
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
2509
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
2510
SET AUTOCOMMIT= 0;
 
2511
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2512
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2513
FROM t0_template source_tab
 
2514
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2515
        
 
2516
# check transactions-1 success:         1
 
2517
COMMIT WORK;
 
2518
        
 
2519
# check transactions-2 success:         1
 
2520
ROLLBACK WORK;
 
2521
        
 
2522
# check transactions-3 success:         1
 
2523
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2524
COMMIT WORK;
 
2525
ROLLBACK WORK;
 
2526
        
 
2527
# check transactions-4 success:         1
 
2528
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2529
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2530
FROM t0_template source_tab
 
2531
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2532
        
 
2533
# check transactions-5 success:         1
 
2534
ROLLBACK WORK;
 
2535
Warnings:
 
2536
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2537
        
 
2538
# check transactions-6 success:         1
 
2539
# INFO: Storage engine used for t1 seems to be not transactional.
 
2540
COMMIT;
 
2541
        
 
2542
# check transactions-7 success:         1
 
2543
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2544
COMMIT WORK;
 
2545
SET @@session.sql_mode = 'traditional';
 
2546
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2548
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2549
'', '', 'was inserted' FROM t0_template
 
2550
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2551
ERROR 22012: Division by 0
 
2552
COMMIT;
 
2553
        
 
2554
# check transactions-8 success:         1
 
2555
# INFO: Storage engine used for t1 seems to be unable to revert
 
2556
#       changes made by the failing statement.
 
2557
SET @@session.sql_mode = '';
 
2558
SET AUTOCOMMIT= 1;
 
2559
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2560
COMMIT WORK;
 
2561
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2562
        
 
2563
# check special-1 success:      1
 
2564
UPDATE t1 SET f_charbig = '';
 
2565
        
 
2566
# check special-2 success:      1
 
2567
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2568
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2569
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2573
'just inserted' FROM t0_template
 
2574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2575
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2576
BEGIN
 
2577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2578
f_charbig = 'updated by trigger'
 
2579
      WHERE f_int1 = new.f_int1;
 
2580
END|
 
2581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2582
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2584
        
 
2585
# check trigger-1 success:      1
 
2586
DROP TRIGGER trg_1;
 
2587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2589
f_charbig = 'just inserted'
 
2590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2591
DELETE FROM t0_aux
 
2592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2595
'just inserted' FROM t0_template
 
2596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2597
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2598
BEGIN
 
2599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2600
f_charbig = 'updated by trigger'
 
2601
      WHERE f_int1 = new.f_int1;
 
2602
END|
 
2603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2604
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2606
        
 
2607
# check trigger-2 success:      1
 
2608
DROP TRIGGER trg_1;
 
2609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2611
f_charbig = 'just inserted'
 
2612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2613
DELETE FROM t0_aux
 
2614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2616
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2617
'just inserted' FROM t0_template
 
2618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2619
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2620
BEGIN
 
2621
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2622
f_charbig = 'updated by trigger'
 
2623
      WHERE f_int1 = new.f_int1;
 
2624
END|
 
2625
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2626
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2627
        
 
2628
# check trigger-3 success:      1
 
2629
DROP TRIGGER trg_1;
 
2630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2632
f_charbig = 'just inserted'
 
2633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2634
DELETE FROM t0_aux
 
2635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2638
'just inserted' FROM t0_template
 
2639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2640
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2641
BEGIN
 
2642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2643
f_charbig = 'updated by trigger'
 
2644
      WHERE f_int1 = - old.f_int1;
 
2645
END|
 
2646
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2648
        
 
2649
# check trigger-4 success:      1
 
2650
DROP TRIGGER trg_1;
 
2651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2653
f_charbig = 'just inserted'
 
2654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2655
DELETE FROM t0_aux
 
2656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2659
'just inserted' FROM t0_template
 
2660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2661
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2662
BEGIN
 
2663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2664
f_charbig = 'updated by trigger'
 
2665
      WHERE f_int1 = new.f_int1;
 
2666
END|
 
2667
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2668
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2669
        
 
2670
# check trigger-5 success:      1
 
2671
DROP TRIGGER trg_1;
 
2672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2674
f_charbig = 'just inserted'
 
2675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2676
DELETE FROM t0_aux
 
2677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2680
'just inserted' FROM t0_template
 
2681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2682
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2683
BEGIN
 
2684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2685
f_charbig = 'updated by trigger'
 
2686
      WHERE f_int1 = - old.f_int1;
 
2687
END|
 
2688
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2689
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2690
        
 
2691
# check trigger-6 success:      1
 
2692
DROP TRIGGER trg_1;
 
2693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2695
f_charbig = 'just inserted'
 
2696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2697
DELETE FROM t0_aux
 
2698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2701
'just inserted' FROM t0_template
 
2702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2703
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2704
BEGIN
 
2705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2706
f_charbig = 'updated by trigger'
 
2707
      WHERE f_int1 = - old.f_int1;
 
2708
END|
 
2709
DELETE FROM t0_aux
 
2710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2711
        
 
2712
# check trigger-7 success:      1
 
2713
DROP TRIGGER trg_1;
 
2714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2716
f_charbig = 'just inserted'
 
2717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2718
DELETE FROM t0_aux
 
2719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2722
'just inserted' FROM t0_template
 
2723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2724
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2725
BEGIN
 
2726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2727
f_charbig = 'updated by trigger'
 
2728
      WHERE f_int1 = - old.f_int1;
 
2729
END|
 
2730
DELETE FROM t0_aux
 
2731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2732
        
 
2733
# check trigger-8 success:      1
 
2734
DROP TRIGGER trg_1;
 
2735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2737
f_charbig = 'just inserted'
 
2738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2739
DELETE FROM t0_aux
 
2740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2741
DELETE FROM t1
 
2742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2743
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2744
BEGIN
 
2745
SET new.f_int1 = old.f_int1 + @max_row,
 
2746
new.f_int2 = old.f_int2 - @max_row,
 
2747
new.f_charbig = '####updated per update trigger####';
 
2748
END|
 
2749
UPDATE t1
 
2750
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2751
f_charbig = '####updated per update statement itself####';
 
2752
        
 
2753
# check trigger-9 success:      1
 
2754
DROP TRIGGER trg_2;
 
2755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2757
f_charbig = CONCAT('===',f_char1,'===');
 
2758
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2759
BEGIN
 
2760
SET new.f_int1 = new.f_int1 + @max_row,
 
2761
new.f_int2 = new.f_int2 - @max_row,
 
2762
new.f_charbig = '####updated per update trigger####';
 
2763
END|
 
2764
UPDATE t1
 
2765
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2766
f_charbig = '####updated per update statement itself####';
 
2767
        
 
2768
# check trigger-10 success:     1
 
2769
DROP TRIGGER trg_2;
 
2770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2772
f_charbig = CONCAT('===',f_char1,'===');
 
2773
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2774
BEGIN
 
2775
SET new.f_int1 = @my_max1 + @counter,
 
2776
new.f_int2 = @my_min2 - @counter,
 
2777
new.f_charbig = '####updated per insert trigger####';
 
2778
SET @counter = @counter + 1;
 
2779
END|
 
2780
SET @counter = 1;
 
2781
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2782
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2783
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2784
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2786
ORDER BY f_int1;
 
2787
DROP TRIGGER trg_3;
 
2788
        
 
2789
# check trigger-11 success:     1
 
2790
DELETE FROM t1
 
2791
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2792
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2793
AND f_charbig = '####updated per insert trigger####';
 
2794
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2795
BEGIN
 
2796
SET new.f_int1 = @my_max1 + @counter,
 
2797
new.f_int2 = @my_min2 - @counter,
 
2798
new.f_charbig = '####updated per insert trigger####';
 
2799
SET @counter = @counter + 1;
 
2800
END|
 
2801
SET @counter = 1;
 
2802
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2803
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2804
SELECT CAST(f_int1 AS CHAR),
 
2805
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2807
ORDER BY f_int1;
 
2808
DROP TRIGGER trg_3;
 
2809
        
 
2810
# check trigger-12 success:     1
 
2811
DELETE FROM t1
 
2812
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2813
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2814
AND f_charbig = '####updated per insert trigger####';
 
2815
ANALYZE  TABLE t1;
 
2816
Table   Op      Msg_type        Msg_text
 
2817
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2818
CHECK    TABLE t1 EXTENDED;
 
2819
Table   Op      Msg_type        Msg_text
 
2820
test.t1 check   note    The storage engine for the table doesn't support check
 
2821
CHECKSUM TABLE t1 EXTENDED;
 
2822
Table   Checksum
 
2823
test.t1 <some_value>
 
2824
OPTIMIZE TABLE t1;
 
2825
Table   Op      Msg_type        Msg_text
 
2826
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2827
# check layout success:    1
 
2828
REPAIR   TABLE t1 EXTENDED;
 
2829
Table   Op      Msg_type        Msg_text
 
2830
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2831
# check layout success:    1
 
2832
TRUNCATE t1;
 
2833
        
 
2834
# check TRUNCATE success:       1
 
2835
# check layout success:    1
 
2836
# End usability test (inc/partition_check.inc)
 
2837
DROP TABLE t1;
 
2838
CREATE TABLE t1 (
 
2839
f_int1 INTEGER,
 
2840
f_int2 INTEGER,
 
2841
f_char1 CHAR(20),
 
2842
f_char2 CHAR(20),
 
2843
f_charbig VARCHAR(1000)
 
2844
 
 
2845
)
 
2846
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2847
(PARTITION part1 VALUES LESS THAN (0)
 
2848
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2849
PARTITION part2 VALUES LESS THAN (5)
 
2850
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2851
PARTITION part3 VALUES LESS THAN (10)
 
2852
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2853
PARTITION part4 VALUES LESS THAN (2147483646)
 
2854
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2855
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2856
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2857
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2858
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
2859
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2860
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2861
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2862
# Start usability test (inc/partition_check.inc)
 
2863
create_command
 
2864
SHOW CREATE TABLE t1;
 
2865
Table   Create Table
 
2866
t1      CREATE TABLE `t1` (
 
2867
  `f_int1` int(11) DEFAULT NULL,
 
2868
  `f_int2` int(11) DEFAULT NULL,
 
2869
  `f_char1` char(20) DEFAULT NULL,
 
2870
  `f_char2` char(20) DEFAULT NULL,
 
2871
  `f_charbig` varchar(1000) DEFAULT NULL,
 
2872
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
2873
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
2874
 
 
2875
unified filelist
 
2876
t1#P#part1#SP#subpart11.MYD
 
2877
t1#P#part1#SP#subpart11.MYI
 
2878
t1#P#part1#SP#subpart12.MYD
 
2879
t1#P#part1#SP#subpart12.MYI
 
2880
t1#P#part2#SP#subpart21.MYD
 
2881
t1#P#part2#SP#subpart21.MYI
 
2882
t1#P#part2#SP#subpart22.MYD
 
2883
t1#P#part2#SP#subpart22.MYI
 
2884
t1#P#part3#SP#subpart31.MYD
 
2885
t1#P#part3#SP#subpart31.MYI
 
2886
t1#P#part3#SP#subpart32.MYD
 
2887
t1#P#part3#SP#subpart32.MYI
 
2888
t1#P#part4#SP#subpart41.MYD
 
2889
t1#P#part4#SP#subpart41.MYI
 
2890
t1#P#part4#SP#subpart42.MYD
 
2891
t1#P#part4#SP#subpart42.MYI
 
2892
t1.frm
 
2893
t1.par
 
2894
 
 
2895
# check prerequisites-1 success:    1
 
2896
# check COUNT(*) success:    1
 
2897
# check MIN/MAX(f_int1) success:    1
 
2898
# check MIN/MAX(f_int2) success:    1
 
2899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2900
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2901
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2902
WHERE f_int1 IN (2,3);
 
2903
ERROR 23000: Can't write; duplicate key in table 't1'
 
2904
# check prerequisites-3 success:    1
 
2905
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
2906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2907
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2908
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2909
WHERE f_int1 IN (2,3);
 
2910
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2912
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2913
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2914
WHERE f_int1 IN (2,3);
 
2915
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2916
# check read via f_int1 success: 1
 
2917
# check read via f_int2 success: 1
 
2918
        
 
2919
# check multiple-1 success:     1
 
2920
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2921
        
 
2922
# check multiple-2 success:     1
 
2923
INSERT INTO t1 SELECT * FROM t0_template
 
2924
WHERE MOD(f_int1,3) = 0;
 
2925
        
 
2926
# check multiple-3 success:     1
 
2927
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2928
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2929
AND @max_row_div2 + @max_row_div4;
 
2930
        
 
2931
# check multiple-4 success:     1
 
2932
DELETE FROM t1
 
2933
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2934
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2935
        
 
2936
# check multiple-5 success:     1
 
2937
SELECT COUNT(*) INTO @try_count FROM t0_template
 
2938
WHERE MOD(f_int1,3) = 0
 
2939
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2940
SELECT COUNT(*) INTO @clash_count
 
2941
FROM t1 INNER JOIN t0_template USING(f_int1)
 
2942
WHERE MOD(f_int1,3) = 0
 
2943
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2944
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2945
INSERT INTO t1
 
2946
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2947
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2948
f_charbig = '#SINGLE#';
 
2949
        
 
2950
# check single-1 success:       1
 
2951
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2952
INSERT INTO t1
 
2953
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2954
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2955
f_charbig = '#SINGLE#';
 
2956
        
 
2957
# check single-2 success:       1
 
2958
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2959
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2960
UPDATE t1 SET f_int1 = @cur_value2
 
2961
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2962
        
 
2963
# check single-3 success:       1
 
2964
SET @cur_value1= -1;
 
2965
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2966
UPDATE t1 SET f_int1 = @cur_value1
 
2967
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2968
        
 
2969
# check single-4 success:       1
 
2970
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2971
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2972
        
 
2973
# check single-5 success:       1
 
2974
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2975
        
 
2976
# check single-6 success:       1
 
2977
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2978
ERROR HY000: Table has no partition for value 2147483647
 
2979
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2980
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2981
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2982
f_charbig = '#NULL#';
 
2983
INSERT INTO t1
 
2984
SET f_int1 = NULL , f_int2 = -@max_row,
 
2985
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2986
f_charbig = '#NULL#';
 
2987
# check null success:    1
 
2988
        
 
2989
# check null-1 success:         1
 
2990
UPDATE t1 SET f_int1 = -@max_row
 
2991
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2993
        
 
2994
# check null-2 success:         1
 
2995
UPDATE t1 SET f_int1 = NULL
 
2996
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2997
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2998
        
 
2999
# check null-3 success:         1
 
3000
DELETE FROM t1
 
3001
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3002
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3003
        
 
3004
# check null-4 success:         1
 
3005
DELETE FROM t1
 
3006
WHERE f_int1 = 0 AND f_int2 = 0
 
3007
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3008
AND f_charbig = '#NULL#';
 
3009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3010
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3011
   FROM t0_template source_tab
 
3012
WHERE MOD(f_int1,3) = 0
 
3013
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
3014
ON DUPLICATE KEY
 
3015
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
3016
f_int2 = 2 * @max_row + source_tab.f_int1,
 
3017
f_charbig = 'was updated';
 
3018
        
 
3019
# check unique-1-a success:     1
 
3020
        
 
3021
# check unique-1-b success:     1
 
3022
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3023
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3024
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3025
f_charbig = CONCAT('===',f_char1,'===')
 
3026
WHERE f_charbig = 'was updated';
 
3027
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3028
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
3029
   FROM t0_template source_tab
 
3030
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3031
        
 
3032
# check replace success:        1
 
3033
DELETE FROM t1
 
3034
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
3035
DELETE FROM t1
 
3036
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
3037
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
3038
UPDATE t1 SET f_int2 = f_int1,
 
3039
f_char1 = CAST(f_int1 AS CHAR),
 
3040
f_char2 = CAST(f_int1 AS CHAR),
 
3041
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
3042
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
3043
SET AUTOCOMMIT= 0;
 
3044
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3045
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3046
FROM t0_template source_tab
 
3047
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3048
        
 
3049
# check transactions-1 success:         1
 
3050
COMMIT WORK;
 
3051
        
 
3052
# check transactions-2 success:         1
 
3053
ROLLBACK WORK;
 
3054
        
 
3055
# check transactions-3 success:         1
 
3056
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3057
COMMIT WORK;
 
3058
ROLLBACK WORK;
 
3059
        
 
3060
# check transactions-4 success:         1
 
3061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3062
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3063
FROM t0_template source_tab
 
3064
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3065
        
 
3066
# check transactions-5 success:         1
 
3067
ROLLBACK WORK;
 
3068
Warnings:
 
3069
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3070
        
 
3071
# check transactions-6 success:         1
 
3072
# INFO: Storage engine used for t1 seems to be not transactional.
 
3073
COMMIT;
 
3074
        
 
3075
# check transactions-7 success:         1
 
3076
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3077
COMMIT WORK;
 
3078
SET @@session.sql_mode = 'traditional';
 
3079
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3080
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3081
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3082
'', '', 'was inserted' FROM t0_template
 
3083
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3084
ERROR 22012: Division by 0
 
3085
COMMIT;
 
3086
        
 
3087
# check transactions-8 success:         1
 
3088
# INFO: Storage engine used for t1 seems to be unable to revert
 
3089
#       changes made by the failing statement.
 
3090
SET @@session.sql_mode = '';
 
3091
SET AUTOCOMMIT= 1;
 
3092
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3093
COMMIT WORK;
 
3094
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3095
        
 
3096
# check special-1 success:      1
 
3097
UPDATE t1 SET f_charbig = '';
 
3098
        
 
3099
# check special-2 success:      1
 
3100
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3101
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3102
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3105
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3106
'just inserted' FROM t0_template
 
3107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3108
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3109
BEGIN
 
3110
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3111
f_charbig = 'updated by trigger'
 
3112
      WHERE f_int1 = new.f_int1;
 
3113
END|
 
3114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3115
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3117
        
 
3118
# check trigger-1 success:      1
 
3119
DROP TRIGGER trg_1;
 
3120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3122
f_charbig = 'just inserted'
 
3123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3124
DELETE FROM t0_aux
 
3125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3128
'just inserted' FROM t0_template
 
3129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3130
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3131
BEGIN
 
3132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3133
f_charbig = 'updated by trigger'
 
3134
      WHERE f_int1 = new.f_int1;
 
3135
END|
 
3136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3137
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3139
        
 
3140
# check trigger-2 success:      1
 
3141
DROP TRIGGER trg_1;
 
3142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3144
f_charbig = 'just inserted'
 
3145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3146
DELETE FROM t0_aux
 
3147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3149
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3150
'just inserted' FROM t0_template
 
3151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3152
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3153
BEGIN
 
3154
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3155
f_charbig = 'updated by trigger'
 
3156
      WHERE f_int1 = new.f_int1;
 
3157
END|
 
3158
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3159
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3160
        
 
3161
# check trigger-3 success:      1
 
3162
DROP TRIGGER trg_1;
 
3163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3165
f_charbig = 'just inserted'
 
3166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3167
DELETE FROM t0_aux
 
3168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3171
'just inserted' FROM t0_template
 
3172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3173
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3174
BEGIN
 
3175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3176
f_charbig = 'updated by trigger'
 
3177
      WHERE f_int1 = - old.f_int1;
 
3178
END|
 
3179
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3180
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3181
        
 
3182
# check trigger-4 success:      1
 
3183
DROP TRIGGER trg_1;
 
3184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3186
f_charbig = 'just inserted'
 
3187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3188
DELETE FROM t0_aux
 
3189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3192
'just inserted' FROM t0_template
 
3193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3194
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3195
BEGIN
 
3196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3197
f_charbig = 'updated by trigger'
 
3198
      WHERE f_int1 = new.f_int1;
 
3199
END|
 
3200
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3202
        
 
3203
# check trigger-5 success:      1
 
3204
DROP TRIGGER trg_1;
 
3205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3207
f_charbig = 'just inserted'
 
3208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3209
DELETE FROM t0_aux
 
3210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3213
'just inserted' FROM t0_template
 
3214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3215
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3216
BEGIN
 
3217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3218
f_charbig = 'updated by trigger'
 
3219
      WHERE f_int1 = - old.f_int1;
 
3220
END|
 
3221
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3223
        
 
3224
# check trigger-6 success:      1
 
3225
DROP TRIGGER trg_1;
 
3226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3228
f_charbig = 'just inserted'
 
3229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3230
DELETE FROM t0_aux
 
3231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3234
'just inserted' FROM t0_template
 
3235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3236
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3237
BEGIN
 
3238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3239
f_charbig = 'updated by trigger'
 
3240
      WHERE f_int1 = - old.f_int1;
 
3241
END|
 
3242
DELETE FROM t0_aux
 
3243
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3244
        
 
3245
# check trigger-7 success:      1
 
3246
DROP TRIGGER trg_1;
 
3247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3249
f_charbig = 'just inserted'
 
3250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3251
DELETE FROM t0_aux
 
3252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3255
'just inserted' FROM t0_template
 
3256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3257
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3258
BEGIN
 
3259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3260
f_charbig = 'updated by trigger'
 
3261
      WHERE f_int1 = - old.f_int1;
 
3262
END|
 
3263
DELETE FROM t0_aux
 
3264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3265
        
 
3266
# check trigger-8 success:      1
 
3267
DROP TRIGGER trg_1;
 
3268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3270
f_charbig = 'just inserted'
 
3271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3272
DELETE FROM t0_aux
 
3273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3274
DELETE FROM t1
 
3275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3276
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3277
BEGIN
 
3278
SET new.f_int1 = old.f_int1 + @max_row,
 
3279
new.f_int2 = old.f_int2 - @max_row,
 
3280
new.f_charbig = '####updated per update trigger####';
 
3281
END|
 
3282
UPDATE t1
 
3283
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3284
f_charbig = '####updated per update statement itself####';
 
3285
        
 
3286
# check trigger-9 success:      1
 
3287
DROP TRIGGER trg_2;
 
3288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3290
f_charbig = CONCAT('===',f_char1,'===');
 
3291
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3292
BEGIN
 
3293
SET new.f_int1 = new.f_int1 + @max_row,
 
3294
new.f_int2 = new.f_int2 - @max_row,
 
3295
new.f_charbig = '####updated per update trigger####';
 
3296
END|
 
3297
UPDATE t1
 
3298
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3299
f_charbig = '####updated per update statement itself####';
 
3300
        
 
3301
# check trigger-10 success:     1
 
3302
DROP TRIGGER trg_2;
 
3303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3305
f_charbig = CONCAT('===',f_char1,'===');
 
3306
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3307
BEGIN
 
3308
SET new.f_int1 = @my_max1 + @counter,
 
3309
new.f_int2 = @my_min2 - @counter,
 
3310
new.f_charbig = '####updated per insert trigger####';
 
3311
SET @counter = @counter + 1;
 
3312
END|
 
3313
SET @counter = 1;
 
3314
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3315
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3316
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3317
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3319
ORDER BY f_int1;
 
3320
DROP TRIGGER trg_3;
 
3321
        
 
3322
# check trigger-11 success:     1
 
3323
DELETE FROM t1
 
3324
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3325
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3326
AND f_charbig = '####updated per insert trigger####';
 
3327
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3328
BEGIN
 
3329
SET new.f_int1 = @my_max1 + @counter,
 
3330
new.f_int2 = @my_min2 - @counter,
 
3331
new.f_charbig = '####updated per insert trigger####';
 
3332
SET @counter = @counter + 1;
 
3333
END|
 
3334
SET @counter = 1;
 
3335
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3336
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3337
SELECT CAST(f_int1 AS CHAR),
 
3338
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3340
ORDER BY f_int1;
 
3341
DROP TRIGGER trg_3;
 
3342
        
 
3343
# check trigger-12 success:     1
 
3344
DELETE FROM t1
 
3345
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3346
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3347
AND f_charbig = '####updated per insert trigger####';
 
3348
ANALYZE  TABLE t1;
 
3349
Table   Op      Msg_type        Msg_text
 
3350
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3351
CHECK    TABLE t1 EXTENDED;
 
3352
Table   Op      Msg_type        Msg_text
 
3353
test.t1 check   note    The storage engine for the table doesn't support check
 
3354
CHECKSUM TABLE t1 EXTENDED;
 
3355
Table   Checksum
 
3356
test.t1 <some_value>
 
3357
OPTIMIZE TABLE t1;
 
3358
Table   Op      Msg_type        Msg_text
 
3359
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3360
# check layout success:    1
 
3361
REPAIR   TABLE t1 EXTENDED;
 
3362
Table   Op      Msg_type        Msg_text
 
3363
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3364
# check layout success:    1
 
3365
TRUNCATE t1;
 
3366
        
 
3367
# check TRUNCATE success:       1
 
3368
# check layout success:    1
 
3369
# End usability test (inc/partition_check.inc)
 
3370
DROP TABLE t1;
 
3371
CREATE TABLE t1 (
 
3372
f_int1 INTEGER,
 
3373
f_int2 INTEGER,
 
3374
f_char1 CHAR(20),
 
3375
f_char2 CHAR(20),
 
3376
f_charbig VARCHAR(1000)
 
3377
 
 
3378
)
 
3379
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
3380
(PARTITION part1 VALUES IN (0)
 
3381
(SUBPARTITION sp11, SUBPARTITION sp12),
 
3382
PARTITION part2 VALUES IN (1)
 
3383
(SUBPARTITION sp21, SUBPARTITION sp22),
 
3384
PARTITION part3 VALUES IN (2)
 
3385
(SUBPARTITION sp31, SUBPARTITION sp32),
 
3386
PARTITION part4 VALUES IN (NULL)
 
3387
(SUBPARTITION sp41, SUBPARTITION sp42));
 
3388
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3389
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3390
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3391
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
3392
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3393
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3394
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3395
# Start usability test (inc/partition_check.inc)
 
3396
create_command
 
3397
SHOW CREATE TABLE t1;
 
3398
Table   Create Table
 
3399
t1      CREATE TABLE `t1` (
 
3400
  `f_int1` int(11) DEFAULT NULL,
 
3401
  `f_int2` int(11) DEFAULT NULL,
 
3402
  `f_char1` char(20) DEFAULT NULL,
 
3403
  `f_char2` char(20) DEFAULT NULL,
 
3404
  `f_charbig` varchar(1000) DEFAULT NULL,
 
3405
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
3406
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
3407
 
 
3408
unified filelist
 
3409
t1#P#part1#SP#sp11.MYD
 
3410
t1#P#part1#SP#sp11.MYI
 
3411
t1#P#part1#SP#sp12.MYD
 
3412
t1#P#part1#SP#sp12.MYI
 
3413
t1#P#part2#SP#sp21.MYD
 
3414
t1#P#part2#SP#sp21.MYI
 
3415
t1#P#part2#SP#sp22.MYD
 
3416
t1#P#part2#SP#sp22.MYI
 
3417
t1#P#part3#SP#sp31.MYD
 
3418
t1#P#part3#SP#sp31.MYI
 
3419
t1#P#part3#SP#sp32.MYD
 
3420
t1#P#part3#SP#sp32.MYI
 
3421
t1#P#part4#SP#sp41.MYD
 
3422
t1#P#part4#SP#sp41.MYI
 
3423
t1#P#part4#SP#sp42.MYD
 
3424
t1#P#part4#SP#sp42.MYI
 
3425
t1.frm
 
3426
t1.par
 
3427
 
 
3428
# check prerequisites-1 success:    1
 
3429
# check COUNT(*) success:    1
 
3430
# check MIN/MAX(f_int1) success:    1
 
3431
# check MIN/MAX(f_int2) success:    1
 
3432
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3433
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3434
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3435
WHERE f_int1 IN (2,3);
 
3436
ERROR 23000: Can't write; duplicate key in table 't1'
 
3437
# check prerequisites-3 success:    1
 
3438
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
3439
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3440
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3441
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3442
WHERE f_int1 IN (2,3);
 
3443
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3444
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3445
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3446
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3447
WHERE f_int1 IN (2,3);
 
3448
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3449
# check read via f_int1 success: 1
 
3450
# check read via f_int2 success: 1
 
3451
        
 
3452
# check multiple-1 success:     1
 
3453
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3454
        
 
3455
# check multiple-2 success:     1
 
3456
INSERT INTO t1 SELECT * FROM t0_template
 
3457
WHERE MOD(f_int1,3) = 0;
 
3458
        
 
3459
# check multiple-3 success:     1
 
3460
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3461
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3462
AND @max_row_div2 + @max_row_div4;
 
3463
        
 
3464
# check multiple-4 success:     1
 
3465
DELETE FROM t1
 
3466
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3467
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3468
        
 
3469
# check multiple-5 success:     1
 
3470
SELECT COUNT(*) INTO @try_count FROM t0_template
 
3471
WHERE MOD(f_int1,3) = 0
 
3472
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3473
SELECT COUNT(*) INTO @clash_count
 
3474
FROM t1 INNER JOIN t0_template USING(f_int1)
 
3475
WHERE MOD(f_int1,3) = 0
 
3476
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3477
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3478
INSERT INTO t1
 
3479
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3480
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3481
f_charbig = '#SINGLE#';
 
3482
        
 
3483
# check single-1 success:       1
 
3484
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3485
INSERT INTO t1
 
3486
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3487
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3488
f_charbig = '#SINGLE#';
 
3489
        
 
3490
# check single-2 success:       1
 
3491
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3492
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3493
UPDATE t1 SET f_int1 = @cur_value2
 
3494
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3495
        
 
3496
# check single-3 success:       1
 
3497
SET @cur_value1= -1;
 
3498
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3499
UPDATE t1 SET f_int1 = @cur_value1
 
3500
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3501
        
 
3502
# check single-4 success:       1
 
3503
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3504
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3505
        
 
3506
# check single-5 success:       1
 
3507
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3508
        
 
3509
# check single-6 success:       1
 
3510
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3511
        
 
3512
# check single-7 success:       1
 
3513
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3514
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3515
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3516
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3517
f_charbig = '#NULL#';
 
3518
INSERT INTO t1
 
3519
SET f_int1 = NULL , f_int2 = -@max_row,
 
3520
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3521
f_charbig = '#NULL#';
 
3522
# check null success:    1
 
3523
        
 
3524
# check null-1 success:         1
 
3525
UPDATE t1 SET f_int1 = -@max_row
 
3526
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3527
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3528
        
 
3529
# check null-2 success:         1
 
3530
UPDATE t1 SET f_int1 = NULL
 
3531
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3532
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3533
        
 
3534
# check null-3 success:         1
 
3535
DELETE FROM t1
 
3536
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3537
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3538
        
 
3539
# check null-4 success:         1
 
3540
DELETE FROM t1
 
3541
WHERE f_int1 = 0 AND f_int2 = 0
 
3542
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3543
AND f_charbig = '#NULL#';
 
3544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3545
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3546
   FROM t0_template source_tab
 
3547
WHERE MOD(f_int1,3) = 0
 
3548
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
3549
ON DUPLICATE KEY
 
3550
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
3551
f_int2 = 2 * @max_row + source_tab.f_int1,
 
3552
f_charbig = 'was updated';
 
3553
        
 
3554
# check unique-1-a success:     1
 
3555
        
 
3556
# check unique-1-b success:     1
 
3557
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3558
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3559
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3560
f_charbig = CONCAT('===',f_char1,'===')
 
3561
WHERE f_charbig = 'was updated';
 
3562
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3563
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
3564
   FROM t0_template source_tab
 
3565
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3566
        
 
3567
# check replace success:        1
 
3568
DELETE FROM t1
 
3569
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
3570
DELETE FROM t1
 
3571
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
3572
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
3573
UPDATE t1 SET f_int2 = f_int1,
 
3574
f_char1 = CAST(f_int1 AS CHAR),
 
3575
f_char2 = CAST(f_int1 AS CHAR),
 
3576
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
3577
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
3578
SET AUTOCOMMIT= 0;
 
3579
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3580
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3581
FROM t0_template source_tab
 
3582
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3583
        
 
3584
# check transactions-1 success:         1
 
3585
COMMIT WORK;
 
3586
        
 
3587
# check transactions-2 success:         1
 
3588
ROLLBACK WORK;
 
3589
        
 
3590
# check transactions-3 success:         1
 
3591
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3592
COMMIT WORK;
 
3593
ROLLBACK WORK;
 
3594
        
 
3595
# check transactions-4 success:         1
 
3596
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3597
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3598
FROM t0_template source_tab
 
3599
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3600
        
 
3601
# check transactions-5 success:         1
 
3602
ROLLBACK WORK;
 
3603
Warnings:
 
3604
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3605
        
 
3606
# check transactions-6 success:         1
 
3607
# INFO: Storage engine used for t1 seems to be not transactional.
 
3608
COMMIT;
 
3609
        
 
3610
# check transactions-7 success:         1
 
3611
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3612
COMMIT WORK;
 
3613
SET @@session.sql_mode = 'traditional';
 
3614
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3615
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3616
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3617
'', '', 'was inserted' FROM t0_template
 
3618
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3619
ERROR 22012: Division by 0
 
3620
COMMIT;
 
3621
        
 
3622
# check transactions-8 success:         1
 
3623
# INFO: Storage engine used for t1 seems to be unable to revert
 
3624
#       changes made by the failing statement.
 
3625
SET @@session.sql_mode = '';
 
3626
SET AUTOCOMMIT= 1;
 
3627
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3628
COMMIT WORK;
 
3629
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3630
        
 
3631
# check special-1 success:      1
 
3632
UPDATE t1 SET f_charbig = '';
 
3633
        
 
3634
# check special-2 success:      1
 
3635
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3636
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3637
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3639
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3640
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3641
'just inserted' FROM t0_template
 
3642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3643
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3644
BEGIN
 
3645
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3646
f_charbig = 'updated by trigger'
 
3647
      WHERE f_int1 = new.f_int1;
 
3648
END|
 
3649
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3650
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3652
        
 
3653
# check trigger-1 success:      1
 
3654
DROP TRIGGER trg_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);
 
3659
DELETE FROM t0_aux
 
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 AFTER INSERT ON t0_aux FOR EACH ROW
 
3666
BEGIN
 
3667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3668
f_charbig = 'updated by trigger'
 
3669
      WHERE f_int1 = new.f_int1;
 
3670
END|
 
3671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3672
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3674
        
 
3675
# check trigger-2 success:      1
 
3676
DROP TRIGGER trg_1;
 
3677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3679
f_charbig = 'just inserted'
 
3680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3681
DELETE FROM t0_aux
 
3682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3685
'just inserted' FROM t0_template
 
3686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3687
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3688
BEGIN
 
3689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3690
f_charbig = 'updated by trigger'
 
3691
      WHERE f_int1 = new.f_int1;
 
3692
END|
 
3693
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3695
        
 
3696
# check trigger-3 success:      1
 
3697
DROP TRIGGER trg_1;
 
3698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3700
f_charbig = 'just inserted'
 
3701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3702
DELETE FROM t0_aux
 
3703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3706
'just inserted' FROM t0_template
 
3707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3708
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3709
BEGIN
 
3710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3711
f_charbig = 'updated by trigger'
 
3712
      WHERE f_int1 = - old.f_int1;
 
3713
END|
 
3714
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3715
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3716
        
 
3717
# check trigger-4 success:      1
 
3718
DROP TRIGGER trg_1;
 
3719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3721
f_charbig = 'just inserted'
 
3722
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3723
DELETE FROM t0_aux
 
3724
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3725
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3726
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3727
'just inserted' FROM t0_template
 
3728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3729
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3730
BEGIN
 
3731
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3732
f_charbig = 'updated by trigger'
 
3733
      WHERE f_int1 = new.f_int1;
 
3734
END|
 
3735
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3736
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3737
        
 
3738
# check trigger-5 success:      1
 
3739
DROP TRIGGER trg_1;
 
3740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3742
f_charbig = 'just inserted'
 
3743
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3744
DELETE FROM t0_aux
 
3745
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3747
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3748
'just inserted' FROM t0_template
 
3749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3750
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3751
BEGIN
 
3752
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3753
f_charbig = 'updated by trigger'
 
3754
      WHERE f_int1 = - old.f_int1;
 
3755
END|
 
3756
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3757
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3758
        
 
3759
# check trigger-6 success:      1
 
3760
DROP TRIGGER trg_1;
 
3761
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3762
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3763
f_charbig = 'just inserted'
 
3764
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3765
DELETE FROM t0_aux
 
3766
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3767
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3768
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3769
'just inserted' FROM t0_template
 
3770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3771
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3772
BEGIN
 
3773
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3774
f_charbig = 'updated by trigger'
 
3775
      WHERE f_int1 = - old.f_int1;
 
3776
END|
 
3777
DELETE FROM t0_aux
 
3778
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3779
        
 
3780
# check trigger-7 success:      1
 
3781
DROP TRIGGER trg_1;
 
3782
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3783
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3784
f_charbig = 'just inserted'
 
3785
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3786
DELETE FROM t0_aux
 
3787
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3788
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3789
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3790
'just inserted' FROM t0_template
 
3791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3792
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3793
BEGIN
 
3794
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3795
f_charbig = 'updated by trigger'
 
3796
      WHERE f_int1 = - old.f_int1;
 
3797
END|
 
3798
DELETE FROM t0_aux
 
3799
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3800
        
 
3801
# check trigger-8 success:      1
 
3802
DROP TRIGGER trg_1;
 
3803
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3804
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3805
f_charbig = 'just inserted'
 
3806
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3807
DELETE FROM t0_aux
 
3808
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3809
DELETE FROM t1
 
3810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3811
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3812
BEGIN
 
3813
SET new.f_int1 = old.f_int1 + @max_row,
 
3814
new.f_int2 = old.f_int2 - @max_row,
 
3815
new.f_charbig = '####updated per update trigger####';
 
3816
END|
 
3817
UPDATE t1
 
3818
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3819
f_charbig = '####updated per update statement itself####';
 
3820
        
 
3821
# check trigger-9 success:      1
 
3822
DROP TRIGGER trg_2;
 
3823
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3824
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3825
f_charbig = CONCAT('===',f_char1,'===');
 
3826
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3827
BEGIN
 
3828
SET new.f_int1 = new.f_int1 + @max_row,
 
3829
new.f_int2 = new.f_int2 - @max_row,
 
3830
new.f_charbig = '####updated per update trigger####';
 
3831
END|
 
3832
UPDATE t1
 
3833
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3834
f_charbig = '####updated per update statement itself####';
 
3835
        
 
3836
# check trigger-10 success:     1
 
3837
DROP TRIGGER trg_2;
 
3838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3840
f_charbig = CONCAT('===',f_char1,'===');
 
3841
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3842
BEGIN
 
3843
SET new.f_int1 = @my_max1 + @counter,
 
3844
new.f_int2 = @my_min2 - @counter,
 
3845
new.f_charbig = '####updated per insert trigger####';
 
3846
SET @counter = @counter + 1;
 
3847
END|
 
3848
SET @counter = 1;
 
3849
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3850
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3851
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3852
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3854
ORDER BY f_int1;
 
3855
DROP TRIGGER trg_3;
 
3856
        
 
3857
# check trigger-11 success:     1
 
3858
DELETE FROM t1
 
3859
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3860
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3861
AND f_charbig = '####updated per insert trigger####';
 
3862
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3863
BEGIN
 
3864
SET new.f_int1 = @my_max1 + @counter,
 
3865
new.f_int2 = @my_min2 - @counter,
 
3866
new.f_charbig = '####updated per insert trigger####';
 
3867
SET @counter = @counter + 1;
 
3868
END|
 
3869
SET @counter = 1;
 
3870
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3871
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3872
SELECT CAST(f_int1 AS CHAR),
 
3873
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3874
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3875
ORDER BY f_int1;
 
3876
DROP TRIGGER trg_3;
 
3877
        
 
3878
# check trigger-12 success:     1
 
3879
DELETE FROM t1
 
3880
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3881
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3882
AND f_charbig = '####updated per insert trigger####';
 
3883
ANALYZE  TABLE t1;
 
3884
Table   Op      Msg_type        Msg_text
 
3885
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3886
CHECK    TABLE t1 EXTENDED;
 
3887
Table   Op      Msg_type        Msg_text
 
3888
test.t1 check   note    The storage engine for the table doesn't support check
 
3889
CHECKSUM TABLE t1 EXTENDED;
 
3890
Table   Checksum
 
3891
test.t1 <some_value>
 
3892
OPTIMIZE TABLE t1;
 
3893
Table   Op      Msg_type        Msg_text
 
3894
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3895
# check layout success:    1
 
3896
REPAIR   TABLE t1 EXTENDED;
 
3897
Table   Op      Msg_type        Msg_text
 
3898
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3899
# check layout success:    1
 
3900
TRUNCATE t1;
 
3901
        
 
3902
# check TRUNCATE success:       1
 
3903
# check layout success:    1
 
3904
# End usability test (inc/partition_check.inc)
 
3905
DROP TABLE t1;
 
3906
CREATE TABLE t1 (
 
3907
f_int1 INTEGER,
 
3908
f_int2 INTEGER,
 
3909
f_char1 CHAR(20),
 
3910
f_char2 CHAR(20),
 
3911
f_charbig VARCHAR(1000)
 
3912
 
 
3913
)
 
3914
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3915
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3916
(PARTITION part1 VALUES IN (0),
 
3917
PARTITION part2 VALUES IN (1),
 
3918
PARTITION part3 VALUES IN (NULL));
 
3919
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3920
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3921
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3922
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
3923
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3924
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3925
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3926
# Start usability test (inc/partition_check.inc)
 
3927
create_command
 
3928
SHOW CREATE TABLE t1;
 
3929
Table   Create Table
 
3930
t1      CREATE TABLE `t1` (
 
3931
  `f_int1` int(11) DEFAULT NULL,
 
3932
  `f_int2` int(11) DEFAULT NULL,
 
3933
  `f_char1` char(20) DEFAULT NULL,
 
3934
  `f_char2` char(20) DEFAULT NULL,
 
3935
  `f_charbig` varchar(1000) DEFAULT NULL,
 
3936
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
3937
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
3938
 
 
3939
unified filelist
 
3940
t1#P#part1#SP#part1sp0.MYD
 
3941
t1#P#part1#SP#part1sp0.MYI
 
3942
t1#P#part1#SP#part1sp1.MYD
 
3943
t1#P#part1#SP#part1sp1.MYI
 
3944
t1#P#part1#SP#part1sp2.MYD
 
3945
t1#P#part1#SP#part1sp2.MYI
 
3946
t1#P#part2#SP#part2sp0.MYD
 
3947
t1#P#part2#SP#part2sp0.MYI
 
3948
t1#P#part2#SP#part2sp1.MYD
 
3949
t1#P#part2#SP#part2sp1.MYI
 
3950
t1#P#part2#SP#part2sp2.MYD
 
3951
t1#P#part2#SP#part2sp2.MYI
 
3952
t1#P#part3#SP#part3sp0.MYD
 
3953
t1#P#part3#SP#part3sp0.MYI
 
3954
t1#P#part3#SP#part3sp1.MYD
 
3955
t1#P#part3#SP#part3sp1.MYI
 
3956
t1#P#part3#SP#part3sp2.MYD
 
3957
t1#P#part3#SP#part3sp2.MYI
 
3958
t1.frm
 
3959
t1.par
 
3960
 
 
3961
# check prerequisites-1 success:    1
 
3962
# check COUNT(*) success:    1
 
3963
# check MIN/MAX(f_int1) success:    1
 
3964
# check MIN/MAX(f_int2) success:    1
 
3965
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3966
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3967
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3968
WHERE f_int1 IN (2,3);
 
3969
ERROR 23000: Can't write; duplicate key in table 't1'
 
3970
# check prerequisites-3 success:    1
 
3971
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
3972
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3973
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3974
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3975
WHERE f_int1 IN (2,3);
 
3976
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3977
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3978
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3979
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3980
WHERE f_int1 IN (2,3);
 
3981
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3982
# check read via f_int1 success: 1
 
3983
# check read via f_int2 success: 1
 
3984
        
 
3985
# check multiple-1 success:     1
 
3986
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3987
        
 
3988
# check multiple-2 success:     1
 
3989
INSERT INTO t1 SELECT * FROM t0_template
 
3990
WHERE MOD(f_int1,3) = 0;
 
3991
        
 
3992
# check multiple-3 success:     1
 
3993
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3994
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3995
AND @max_row_div2 + @max_row_div4;
 
3996
        
 
3997
# check multiple-4 success:     1
 
3998
DELETE FROM t1
 
3999
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4000
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4001
        
 
4002
# check multiple-5 success:     1
 
4003
SELECT COUNT(*) INTO @try_count FROM t0_template
 
4004
WHERE MOD(f_int1,3) = 0
 
4005
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4006
SELECT COUNT(*) INTO @clash_count
 
4007
FROM t1 INNER JOIN t0_template USING(f_int1)
 
4008
WHERE MOD(f_int1,3) = 0
 
4009
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4010
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4011
INSERT INTO t1
 
4012
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4013
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4014
f_charbig = '#SINGLE#';
 
4015
        
 
4016
# check single-1 success:       1
 
4017
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4018
INSERT INTO t1
 
4019
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4020
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4021
f_charbig = '#SINGLE#';
 
4022
        
 
4023
# check single-2 success:       1
 
4024
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4025
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4026
UPDATE t1 SET f_int1 = @cur_value2
 
4027
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4028
        
 
4029
# check single-3 success:       1
 
4030
SET @cur_value1= -1;
 
4031
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4032
UPDATE t1 SET f_int1 = @cur_value1
 
4033
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4034
        
 
4035
# check single-4 success:       1
 
4036
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4037
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4038
        
 
4039
# check single-5 success:       1
 
4040
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4041
        
 
4042
# check single-6 success:       1
 
4043
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4044
        
 
4045
# check single-7 success:       1
 
4046
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4047
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4048
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4049
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4050
f_charbig = '#NULL#';
 
4051
INSERT INTO t1
 
4052
SET f_int1 = NULL , f_int2 = -@max_row,
 
4053
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4054
f_charbig = '#NULL#';
 
4055
# check null success:    1
 
4056
        
 
4057
# check null-1 success:         1
 
4058
UPDATE t1 SET f_int1 = -@max_row
 
4059
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4060
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4061
        
 
4062
# check null-2 success:         1
 
4063
UPDATE t1 SET f_int1 = NULL
 
4064
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4065
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4066
        
 
4067
# check null-3 success:         1
 
4068
DELETE FROM t1
 
4069
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4070
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4071
        
 
4072
# check null-4 success:         1
 
4073
DELETE FROM t1
 
4074
WHERE f_int1 = 0 AND f_int2 = 0
 
4075
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4076
AND f_charbig = '#NULL#';
 
4077
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4078
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4079
   FROM t0_template source_tab
 
4080
WHERE MOD(f_int1,3) = 0
 
4081
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
4082
ON DUPLICATE KEY
 
4083
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
4084
f_int2 = 2 * @max_row + source_tab.f_int1,
 
4085
f_charbig = 'was updated';
 
4086
        
 
4087
# check unique-1-a success:     1
 
4088
        
 
4089
# check unique-1-b success:     1
 
4090
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4091
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4092
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4093
f_charbig = CONCAT('===',f_char1,'===')
 
4094
WHERE f_charbig = 'was updated';
 
4095
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4096
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
4097
   FROM t0_template source_tab
 
4098
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4099
        
 
4100
# check replace success:        1
 
4101
DELETE FROM t1
 
4102
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
4103
DELETE FROM t1
 
4104
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
4105
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
4106
UPDATE t1 SET f_int2 = f_int1,
 
4107
f_char1 = CAST(f_int1 AS CHAR),
 
4108
f_char2 = CAST(f_int1 AS CHAR),
 
4109
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
4110
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
4111
SET AUTOCOMMIT= 0;
 
4112
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4113
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4114
FROM t0_template source_tab
 
4115
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4116
        
 
4117
# check transactions-1 success:         1
 
4118
COMMIT WORK;
 
4119
        
 
4120
# check transactions-2 success:         1
 
4121
ROLLBACK WORK;
 
4122
        
 
4123
# check transactions-3 success:         1
 
4124
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4125
COMMIT WORK;
 
4126
ROLLBACK WORK;
 
4127
        
 
4128
# check transactions-4 success:         1
 
4129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4130
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4131
FROM t0_template source_tab
 
4132
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4133
        
 
4134
# check transactions-5 success:         1
 
4135
ROLLBACK WORK;
 
4136
Warnings:
 
4137
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4138
        
 
4139
# check transactions-6 success:         1
 
4140
# INFO: Storage engine used for t1 seems to be not transactional.
 
4141
COMMIT;
 
4142
        
 
4143
# check transactions-7 success:         1
 
4144
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4145
COMMIT WORK;
 
4146
SET @@session.sql_mode = 'traditional';
 
4147
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4148
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4149
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4150
'', '', 'was inserted' FROM t0_template
 
4151
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4152
ERROR 22012: Division by 0
 
4153
COMMIT;
 
4154
        
 
4155
# check transactions-8 success:         1
 
4156
# INFO: Storage engine used for t1 seems to be unable to revert
 
4157
#       changes made by the failing statement.
 
4158
SET @@session.sql_mode = '';
 
4159
SET AUTOCOMMIT= 1;
 
4160
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4161
COMMIT WORK;
 
4162
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4163
        
 
4164
# check special-1 success:      1
 
4165
UPDATE t1 SET f_charbig = '';
 
4166
        
 
4167
# check special-2 success:      1
 
4168
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4169
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4170
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4172
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4173
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4174
'just inserted' FROM t0_template
 
4175
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4176
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4177
BEGIN
 
4178
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4179
f_charbig = 'updated by trigger'
 
4180
      WHERE f_int1 = new.f_int1;
 
4181
END|
 
4182
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4183
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4185
        
 
4186
# check trigger-1 success:      1
 
4187
DROP TRIGGER trg_1;
 
4188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4190
f_charbig = 'just inserted'
 
4191
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4192
DELETE FROM t0_aux
 
4193
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4194
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4195
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4196
'just inserted' FROM t0_template
 
4197
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4198
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4199
BEGIN
 
4200
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4201
f_charbig = 'updated by trigger'
 
4202
      WHERE f_int1 = new.f_int1;
 
4203
END|
 
4204
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4205
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4207
        
 
4208
# check trigger-2 success:      1
 
4209
DROP TRIGGER trg_1;
 
4210
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4211
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4212
f_charbig = 'just inserted'
 
4213
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4214
DELETE FROM t0_aux
 
4215
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4216
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4217
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4218
'just inserted' FROM t0_template
 
4219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4220
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4221
BEGIN
 
4222
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4223
f_charbig = 'updated by trigger'
 
4224
      WHERE f_int1 = new.f_int1;
 
4225
END|
 
4226
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4227
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4228
        
 
4229
# check trigger-3 success:      1
 
4230
DROP TRIGGER trg_1;
 
4231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4233
f_charbig = 'just inserted'
 
4234
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4235
DELETE FROM t0_aux
 
4236
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4237
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4238
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4239
'just inserted' FROM t0_template
 
4240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4241
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4242
BEGIN
 
4243
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4244
f_charbig = 'updated by trigger'
 
4245
      WHERE f_int1 = - old.f_int1;
 
4246
END|
 
4247
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4248
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4249
        
 
4250
# check trigger-4 success:      1
 
4251
DROP TRIGGER trg_1;
 
4252
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4253
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4254
f_charbig = 'just inserted'
 
4255
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4256
DELETE FROM t0_aux
 
4257
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4258
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4259
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4260
'just inserted' FROM t0_template
 
4261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4262
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4263
BEGIN
 
4264
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4265
f_charbig = 'updated by trigger'
 
4266
      WHERE f_int1 = new.f_int1;
 
4267
END|
 
4268
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4269
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4270
        
 
4271
# check trigger-5 success:      1
 
4272
DROP TRIGGER trg_1;
 
4273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4275
f_charbig = 'just inserted'
 
4276
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4277
DELETE FROM t0_aux
 
4278
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4280
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4281
'just inserted' FROM t0_template
 
4282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4283
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4284
BEGIN
 
4285
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4286
f_charbig = 'updated by trigger'
 
4287
      WHERE f_int1 = - old.f_int1;
 
4288
END|
 
4289
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4290
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4291
        
 
4292
# check trigger-6 success:      1
 
4293
DROP TRIGGER trg_1;
 
4294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4296
f_charbig = 'just inserted'
 
4297
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4298
DELETE FROM t0_aux
 
4299
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4301
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4302
'just inserted' FROM t0_template
 
4303
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4304
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4305
BEGIN
 
4306
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4307
f_charbig = 'updated by trigger'
 
4308
      WHERE f_int1 = - old.f_int1;
 
4309
END|
 
4310
DELETE FROM t0_aux
 
4311
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4312
        
 
4313
# check trigger-7 success:      1
 
4314
DROP TRIGGER trg_1;
 
4315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4317
f_charbig = 'just inserted'
 
4318
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4319
DELETE FROM t0_aux
 
4320
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4323
'just inserted' FROM t0_template
 
4324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4325
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4326
BEGIN
 
4327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4328
f_charbig = 'updated by trigger'
 
4329
      WHERE f_int1 = - old.f_int1;
 
4330
END|
 
4331
DELETE FROM t0_aux
 
4332
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4333
        
 
4334
# check trigger-8 success:      1
 
4335
DROP TRIGGER trg_1;
 
4336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4338
f_charbig = 'just inserted'
 
4339
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4340
DELETE FROM t0_aux
 
4341
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4342
DELETE FROM t1
 
4343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4344
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4345
BEGIN
 
4346
SET new.f_int1 = old.f_int1 + @max_row,
 
4347
new.f_int2 = old.f_int2 - @max_row,
 
4348
new.f_charbig = '####updated per update trigger####';
 
4349
END|
 
4350
UPDATE t1
 
4351
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4352
f_charbig = '####updated per update statement itself####';
 
4353
        
 
4354
# check trigger-9 success:      1
 
4355
DROP TRIGGER trg_2;
 
4356
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4357
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4358
f_charbig = CONCAT('===',f_char1,'===');
 
4359
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4360
BEGIN
 
4361
SET new.f_int1 = new.f_int1 + @max_row,
 
4362
new.f_int2 = new.f_int2 - @max_row,
 
4363
new.f_charbig = '####updated per update trigger####';
 
4364
END|
 
4365
UPDATE t1
 
4366
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4367
f_charbig = '####updated per update statement itself####';
 
4368
        
 
4369
# check trigger-10 success:     1
 
4370
DROP TRIGGER trg_2;
 
4371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4373
f_charbig = CONCAT('===',f_char1,'===');
 
4374
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4375
BEGIN
 
4376
SET new.f_int1 = @my_max1 + @counter,
 
4377
new.f_int2 = @my_min2 - @counter,
 
4378
new.f_charbig = '####updated per insert trigger####';
 
4379
SET @counter = @counter + 1;
 
4380
END|
 
4381
SET @counter = 1;
 
4382
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
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), 'just inserted' FROM t0_template
 
4386
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4387
ORDER BY f_int1;
 
4388
DROP TRIGGER trg_3;
 
4389
        
 
4390
# check trigger-11 success:     1
 
4391
DELETE FROM t1
 
4392
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4393
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4394
AND f_charbig = '####updated per insert trigger####';
 
4395
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4396
BEGIN
 
4397
SET new.f_int1 = @my_max1 + @counter,
 
4398
new.f_int2 = @my_min2 - @counter,
 
4399
new.f_charbig = '####updated per insert trigger####';
 
4400
SET @counter = @counter + 1;
 
4401
END|
 
4402
SET @counter = 1;
 
4403
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4404
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4405
SELECT CAST(f_int1 AS CHAR),
 
4406
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4407
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4408
ORDER BY f_int1;
 
4409
DROP TRIGGER trg_3;
 
4410
        
 
4411
# check trigger-12 success:     1
 
4412
DELETE FROM t1
 
4413
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4414
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4415
AND f_charbig = '####updated per insert trigger####';
 
4416
ANALYZE  TABLE t1;
 
4417
Table   Op      Msg_type        Msg_text
 
4418
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4419
CHECK    TABLE t1 EXTENDED;
 
4420
Table   Op      Msg_type        Msg_text
 
4421
test.t1 check   note    The storage engine for the table doesn't support check
 
4422
CHECKSUM TABLE t1 EXTENDED;
 
4423
Table   Checksum
 
4424
test.t1 <some_value>
 
4425
OPTIMIZE TABLE t1;
 
4426
Table   Op      Msg_type        Msg_text
 
4427
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4428
# check layout success:    1
 
4429
REPAIR   TABLE t1 EXTENDED;
 
4430
Table   Op      Msg_type        Msg_text
 
4431
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4432
# check layout success:    1
 
4433
TRUNCATE t1;
 
4434
        
 
4435
# check TRUNCATE success:       1
 
4436
# check layout success:    1
 
4437
# End usability test (inc/partition_check.inc)
 
4438
DROP TABLE t1;
 
4439
DROP TABLE IF EXISTS t1;
 
4440
CREATE TABLE t1 (
 
4441
f_int1 INTEGER,
 
4442
f_int2 INTEGER,
 
4443
f_char1 CHAR(20),
 
4444
f_char2 CHAR(20),
 
4445
f_charbig VARCHAR(1000)
 
4446
 
 
4447
)
 
4448
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
4449
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4450
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4451
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4452
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
4453
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4454
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4455
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4456
# Start usability test (inc/partition_check.inc)
 
4457
create_command
 
4458
SHOW CREATE TABLE t1;
 
4459
Table   Create Table
 
4460
t1      CREATE TABLE `t1` (
 
4461
  `f_int1` int(11) DEFAULT NULL,
 
4462
  `f_int2` int(11) DEFAULT NULL,
 
4463
  `f_char1` char(20) DEFAULT NULL,
 
4464
  `f_char2` char(20) DEFAULT NULL,
 
4465
  `f_charbig` varchar(1000) DEFAULT NULL,
 
4466
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
4467
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
4468
 
 
4469
unified filelist
 
4470
t1#P#p0.MYD
 
4471
t1#P#p0.MYI
 
4472
t1#P#p1.MYD
 
4473
t1#P#p1.MYI
 
4474
t1.frm
 
4475
t1.par
 
4476
 
 
4477
# check prerequisites-1 success:    1
 
4478
# check COUNT(*) success:    1
 
4479
# check MIN/MAX(f_int1) success:    1
 
4480
# check MIN/MAX(f_int2) success:    1
 
4481
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4482
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4483
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4484
WHERE f_int1 IN (2,3);
 
4485
ERROR 23000: Can't write; duplicate key in table 't1'
 
4486
# check prerequisites-3 success:    1
 
4487
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
4488
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4489
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4490
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4491
WHERE f_int1 IN (2,3);
 
4492
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4493
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4494
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4495
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4496
WHERE f_int1 IN (2,3);
 
4497
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4498
# check read via f_int1 success: 1
 
4499
# check read via f_int2 success: 1
 
4500
        
 
4501
# check multiple-1 success:     1
 
4502
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4503
        
 
4504
# check multiple-2 success:     1
 
4505
INSERT INTO t1 SELECT * FROM t0_template
 
4506
WHERE MOD(f_int1,3) = 0;
 
4507
        
 
4508
# check multiple-3 success:     1
 
4509
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4510
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4511
AND @max_row_div2 + @max_row_div4;
 
4512
        
 
4513
# check multiple-4 success:     1
 
4514
DELETE FROM t1
 
4515
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4516
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4517
        
 
4518
# check multiple-5 success:     1
 
4519
SELECT COUNT(*) INTO @try_count FROM t0_template
 
4520
WHERE MOD(f_int1,3) = 0
 
4521
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4522
SELECT COUNT(*) INTO @clash_count
 
4523
FROM t1 INNER JOIN t0_template USING(f_int1)
 
4524
WHERE MOD(f_int1,3) = 0
 
4525
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4526
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4527
INSERT INTO t1
 
4528
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4529
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4530
f_charbig = '#SINGLE#';
 
4531
        
 
4532
# check single-1 success:       1
 
4533
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4534
INSERT INTO t1
 
4535
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4536
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4537
f_charbig = '#SINGLE#';
 
4538
        
 
4539
# check single-2 success:       1
 
4540
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4541
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4542
UPDATE t1 SET f_int1 = @cur_value2
 
4543
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4544
        
 
4545
# check single-3 success:       1
 
4546
SET @cur_value1= -1;
 
4547
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4548
UPDATE t1 SET f_int1 = @cur_value1
 
4549
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4550
        
 
4551
# check single-4 success:       1
 
4552
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4553
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4554
        
 
4555
# check single-5 success:       1
 
4556
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4557
        
 
4558
# check single-6 success:       1
 
4559
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4560
        
 
4561
# check single-7 success:       1
 
4562
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4563
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4564
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4565
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4566
f_charbig = '#NULL#';
 
4567
INSERT INTO t1
 
4568
SET f_int1 = NULL , f_int2 = -@max_row,
 
4569
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4570
f_charbig = '#NULL#';
 
4571
# check null success:    1
 
4572
        
 
4573
# check null-1 success:         1
 
4574
UPDATE t1 SET f_int1 = -@max_row
 
4575
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4576
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4577
        
 
4578
# check null-2 success:         1
 
4579
UPDATE t1 SET f_int1 = NULL
 
4580
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4581
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4582
        
 
4583
# check null-3 success:         1
 
4584
DELETE FROM t1
 
4585
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4586
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4587
        
 
4588
# check null-4 success:         1
 
4589
DELETE FROM t1
 
4590
WHERE f_int1 = 0 AND f_int2 = 0
 
4591
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4592
AND f_charbig = '#NULL#';
 
4593
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4594
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4595
   FROM t0_template source_tab
 
4596
WHERE MOD(f_int1,3) = 0
 
4597
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
4598
ON DUPLICATE KEY
 
4599
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
4600
f_int2 = 2 * @max_row + source_tab.f_int1,
 
4601
f_charbig = 'was updated';
 
4602
        
 
4603
# check unique-1-a success:     1
 
4604
        
 
4605
# check unique-1-b success:     1
 
4606
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4609
f_charbig = CONCAT('===',f_char1,'===')
 
4610
WHERE f_charbig = 'was updated';
 
4611
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4612
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
4613
   FROM t0_template source_tab
 
4614
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4615
        
 
4616
# check replace success:        1
 
4617
DELETE FROM t1
 
4618
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
4619
DELETE FROM t1
 
4620
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
4621
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
4622
UPDATE t1 SET f_int2 = f_int1,
 
4623
f_char1 = CAST(f_int1 AS CHAR),
 
4624
f_char2 = CAST(f_int1 AS CHAR),
 
4625
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
4626
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
4627
SET AUTOCOMMIT= 0;
 
4628
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4629
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4630
FROM t0_template source_tab
 
4631
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4632
        
 
4633
# check transactions-1 success:         1
 
4634
COMMIT WORK;
 
4635
        
 
4636
# check transactions-2 success:         1
 
4637
ROLLBACK WORK;
 
4638
        
 
4639
# check transactions-3 success:         1
 
4640
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4641
COMMIT WORK;
 
4642
ROLLBACK WORK;
 
4643
        
 
4644
# check transactions-4 success:         1
 
4645
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4646
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4647
FROM t0_template source_tab
 
4648
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4649
        
 
4650
# check transactions-5 success:         1
 
4651
ROLLBACK WORK;
 
4652
Warnings:
 
4653
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4654
        
 
4655
# check transactions-6 success:         1
 
4656
# INFO: Storage engine used for t1 seems to be not transactional.
 
4657
COMMIT;
 
4658
        
 
4659
# check transactions-7 success:         1
 
4660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4661
COMMIT WORK;
 
4662
SET @@session.sql_mode = 'traditional';
 
4663
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4664
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4665
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4666
'', '', 'was inserted' FROM t0_template
 
4667
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4668
ERROR 22012: Division by 0
 
4669
COMMIT;
 
4670
        
 
4671
# check transactions-8 success:         1
 
4672
# INFO: Storage engine used for t1 seems to be unable to revert
 
4673
#       changes made by the failing statement.
 
4674
SET @@session.sql_mode = '';
 
4675
SET AUTOCOMMIT= 1;
 
4676
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4677
COMMIT WORK;
 
4678
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4679
        
 
4680
# check special-1 success:      1
 
4681
UPDATE t1 SET f_charbig = '';
 
4682
        
 
4683
# check special-2 success:      1
 
4684
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4685
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4686
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4689
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4690
'just inserted' FROM t0_template
 
4691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4692
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4693
BEGIN
 
4694
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4695
f_charbig = 'updated by trigger'
 
4696
      WHERE f_int1 = new.f_int1;
 
4697
END|
 
4698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4699
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4701
        
 
4702
# check trigger-1 success:      1
 
4703
DROP TRIGGER trg_1;
 
4704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4706
f_charbig = 'just inserted'
 
4707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4708
DELETE FROM t0_aux
 
4709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4712
'just inserted' FROM t0_template
 
4713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4714
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4715
BEGIN
 
4716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4717
f_charbig = 'updated by trigger'
 
4718
      WHERE f_int1 = new.f_int1;
 
4719
END|
 
4720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4721
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4723
        
 
4724
# check trigger-2 success:      1
 
4725
DROP TRIGGER trg_1;
 
4726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4728
f_charbig = 'just inserted'
 
4729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4730
DELETE FROM t0_aux
 
4731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4734
'just inserted' FROM t0_template
 
4735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4736
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4737
BEGIN
 
4738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4739
f_charbig = 'updated by trigger'
 
4740
      WHERE f_int1 = new.f_int1;
 
4741
END|
 
4742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4744
        
 
4745
# check trigger-3 success:      1
 
4746
DROP TRIGGER trg_1;
 
4747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4749
f_charbig = 'just inserted'
 
4750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4751
DELETE FROM t0_aux
 
4752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4755
'just inserted' FROM t0_template
 
4756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4757
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4758
BEGIN
 
4759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4760
f_charbig = 'updated by trigger'
 
4761
      WHERE f_int1 = - old.f_int1;
 
4762
END|
 
4763
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4765
        
 
4766
# check trigger-4 success:      1
 
4767
DROP TRIGGER trg_1;
 
4768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4770
f_charbig = 'just inserted'
 
4771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4772
DELETE FROM t0_aux
 
4773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4776
'just inserted' FROM t0_template
 
4777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4778
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4779
BEGIN
 
4780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4781
f_charbig = 'updated by trigger'
 
4782
      WHERE f_int1 = new.f_int1;
 
4783
END|
 
4784
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4786
        
 
4787
# check trigger-5 success:      1
 
4788
DROP TRIGGER trg_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 = 'just inserted'
 
4792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4793
DELETE FROM t0_aux
 
4794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4797
'just inserted' FROM t0_template
 
4798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4799
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4800
BEGIN
 
4801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4802
f_charbig = 'updated by trigger'
 
4803
      WHERE f_int1 = - old.f_int1;
 
4804
END|
 
4805
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4807
        
 
4808
# check trigger-6 success:      1
 
4809
DROP TRIGGER trg_1;
 
4810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4812
f_charbig = 'just inserted'
 
4813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4814
DELETE FROM t0_aux
 
4815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4818
'just inserted' FROM t0_template
 
4819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4820
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4821
BEGIN
 
4822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4823
f_charbig = 'updated by trigger'
 
4824
      WHERE f_int1 = - old.f_int1;
 
4825
END|
 
4826
DELETE FROM t0_aux
 
4827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4828
        
 
4829
# check trigger-7 success:      1
 
4830
DROP TRIGGER trg_1;
 
4831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4833
f_charbig = 'just inserted'
 
4834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4835
DELETE FROM t0_aux
 
4836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4839
'just inserted' FROM t0_template
 
4840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4841
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4842
BEGIN
 
4843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4844
f_charbig = 'updated by trigger'
 
4845
      WHERE f_int1 = - old.f_int1;
 
4846
END|
 
4847
DELETE FROM t0_aux
 
4848
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4849
        
 
4850
# check trigger-8 success:      1
 
4851
DROP TRIGGER trg_1;
 
4852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4854
f_charbig = 'just inserted'
 
4855
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4856
DELETE FROM t0_aux
 
4857
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4858
DELETE FROM t1
 
4859
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4860
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4861
BEGIN
 
4862
SET new.f_int1 = old.f_int1 + @max_row,
 
4863
new.f_int2 = old.f_int2 - @max_row,
 
4864
new.f_charbig = '####updated per update trigger####';
 
4865
END|
 
4866
UPDATE t1
 
4867
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4868
f_charbig = '####updated per update statement itself####';
 
4869
        
 
4870
# check trigger-9 success:      1
 
4871
DROP TRIGGER trg_2;
 
4872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4874
f_charbig = CONCAT('===',f_char1,'===');
 
4875
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4876
BEGIN
 
4877
SET new.f_int1 = new.f_int1 + @max_row,
 
4878
new.f_int2 = new.f_int2 - @max_row,
 
4879
new.f_charbig = '####updated per update trigger####';
 
4880
END|
 
4881
UPDATE t1
 
4882
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4883
f_charbig = '####updated per update statement itself####';
 
4884
        
 
4885
# check trigger-10 success:     1
 
4886
DROP TRIGGER trg_2;
 
4887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4889
f_charbig = CONCAT('===',f_char1,'===');
 
4890
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4891
BEGIN
 
4892
SET new.f_int1 = @my_max1 + @counter,
 
4893
new.f_int2 = @my_min2 - @counter,
 
4894
new.f_charbig = '####updated per insert trigger####';
 
4895
SET @counter = @counter + 1;
 
4896
END|
 
4897
SET @counter = 1;
 
4898
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4900
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4901
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4903
ORDER BY f_int1;
 
4904
DROP TRIGGER trg_3;
 
4905
        
 
4906
# check trigger-11 success:     1
 
4907
DELETE FROM t1
 
4908
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4909
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4910
AND f_charbig = '####updated per insert trigger####';
 
4911
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4912
BEGIN
 
4913
SET new.f_int1 = @my_max1 + @counter,
 
4914
new.f_int2 = @my_min2 - @counter,
 
4915
new.f_charbig = '####updated per insert trigger####';
 
4916
SET @counter = @counter + 1;
 
4917
END|
 
4918
SET @counter = 1;
 
4919
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4920
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4921
SELECT CAST(f_int1 AS CHAR),
 
4922
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4924
ORDER BY f_int1;
 
4925
DROP TRIGGER trg_3;
 
4926
        
 
4927
# check trigger-12 success:     1
 
4928
DELETE FROM t1
 
4929
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4930
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4931
AND f_charbig = '####updated per insert trigger####';
 
4932
ANALYZE  TABLE t1;
 
4933
Table   Op      Msg_type        Msg_text
 
4934
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4935
CHECK    TABLE t1 EXTENDED;
 
4936
Table   Op      Msg_type        Msg_text
 
4937
test.t1 check   note    The storage engine for the table doesn't support check
 
4938
CHECKSUM TABLE t1 EXTENDED;
 
4939
Table   Checksum
 
4940
test.t1 <some_value>
 
4941
OPTIMIZE TABLE t1;
 
4942
Table   Op      Msg_type        Msg_text
 
4943
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4944
# check layout success:    1
 
4945
REPAIR   TABLE t1 EXTENDED;
 
4946
Table   Op      Msg_type        Msg_text
 
4947
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4948
# check layout success:    1
 
4949
TRUNCATE t1;
 
4950
        
 
4951
# check TRUNCATE success:       1
 
4952
# check layout success:    1
 
4953
# End usability test (inc/partition_check.inc)
 
4954
DROP TABLE t1;
 
4955
CREATE TABLE t1 (
 
4956
f_int1 INTEGER,
 
4957
f_int2 INTEGER,
 
4958
f_char1 CHAR(20),
 
4959
f_char2 CHAR(20),
 
4960
f_charbig VARCHAR(1000)
 
4961
 
 
4962
)
 
4963
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
4964
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4965
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4966
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4967
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
4968
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4969
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4970
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4971
# Start usability test (inc/partition_check.inc)
 
4972
create_command
 
4973
SHOW CREATE TABLE t1;
 
4974
Table   Create Table
 
4975
t1      CREATE TABLE `t1` (
 
4976
  `f_int1` int(11) DEFAULT NULL,
 
4977
  `f_int2` int(11) DEFAULT NULL,
 
4978
  `f_char1` char(20) DEFAULT NULL,
 
4979
  `f_char2` char(20) DEFAULT NULL,
 
4980
  `f_charbig` varchar(1000) DEFAULT NULL,
 
4981
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
4982
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
4983
 
 
4984
unified filelist
 
4985
t1#P#p0.MYD
 
4986
t1#P#p0.MYI
 
4987
t1#P#p1.MYD
 
4988
t1#P#p1.MYI
 
4989
t1#P#p2.MYD
 
4990
t1#P#p2.MYI
 
4991
t1#P#p3.MYD
 
4992
t1#P#p3.MYI
 
4993
t1#P#p4.MYD
 
4994
t1#P#p4.MYI
 
4995
t1.frm
 
4996
t1.par
 
4997
 
 
4998
# check prerequisites-1 success:    1
 
4999
# check COUNT(*) success:    1
 
5000
# check MIN/MAX(f_int1) success:    1
 
5001
# check MIN/MAX(f_int2) success:    1
 
5002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5003
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5004
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5005
WHERE f_int1 IN (2,3);
 
5006
ERROR 23000: Can't write; duplicate key in table 't1'
 
5007
# check prerequisites-3 success:    1
 
5008
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
5009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5010
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5011
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5012
WHERE f_int1 IN (2,3);
 
5013
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5014
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5015
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5016
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5017
WHERE f_int1 IN (2,3);
 
5018
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5019
# check read via f_int1 success: 1
 
5020
# check read via f_int2 success: 1
 
5021
        
 
5022
# check multiple-1 success:     1
 
5023
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5024
        
 
5025
# check multiple-2 success:     1
 
5026
INSERT INTO t1 SELECT * FROM t0_template
 
5027
WHERE MOD(f_int1,3) = 0;
 
5028
        
 
5029
# check multiple-3 success:     1
 
5030
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5031
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5032
AND @max_row_div2 + @max_row_div4;
 
5033
        
 
5034
# check multiple-4 success:     1
 
5035
DELETE FROM t1
 
5036
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5037
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5038
        
 
5039
# check multiple-5 success:     1
 
5040
SELECT COUNT(*) INTO @try_count FROM t0_template
 
5041
WHERE MOD(f_int1,3) = 0
 
5042
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5043
SELECT COUNT(*) INTO @clash_count
 
5044
FROM t1 INNER JOIN t0_template USING(f_int1)
 
5045
WHERE MOD(f_int1,3) = 0
 
5046
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5047
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5048
INSERT INTO t1
 
5049
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5050
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5051
f_charbig = '#SINGLE#';
 
5052
        
 
5053
# check single-1 success:       1
 
5054
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5055
INSERT INTO t1
 
5056
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5057
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5058
f_charbig = '#SINGLE#';
 
5059
        
 
5060
# check single-2 success:       1
 
5061
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5062
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5063
UPDATE t1 SET f_int1 = @cur_value2
 
5064
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5065
        
 
5066
# check single-3 success:       1
 
5067
SET @cur_value1= -1;
 
5068
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5069
UPDATE t1 SET f_int1 = @cur_value1
 
5070
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5071
        
 
5072
# check single-4 success:       1
 
5073
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5074
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5075
        
 
5076
# check single-5 success:       1
 
5077
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5078
        
 
5079
# check single-6 success:       1
 
5080
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5081
        
 
5082
# check single-7 success:       1
 
5083
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5084
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5085
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5086
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5087
f_charbig = '#NULL#';
 
5088
INSERT INTO t1
 
5089
SET f_int1 = NULL , f_int2 = -@max_row,
 
5090
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5091
f_charbig = '#NULL#';
 
5092
# check null success:    1
 
5093
        
 
5094
# check null-1 success:         1
 
5095
UPDATE t1 SET f_int1 = -@max_row
 
5096
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5097
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5098
        
 
5099
# check null-2 success:         1
 
5100
UPDATE t1 SET f_int1 = NULL
 
5101
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5102
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5103
        
 
5104
# check null-3 success:         1
 
5105
DELETE FROM t1
 
5106
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5107
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5108
        
 
5109
# check null-4 success:         1
 
5110
DELETE FROM t1
 
5111
WHERE f_int1 = 0 AND f_int2 = 0
 
5112
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5113
AND f_charbig = '#NULL#';
 
5114
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5115
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5116
   FROM t0_template source_tab
 
5117
WHERE MOD(f_int1,3) = 0
 
5118
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
5119
ON DUPLICATE KEY
 
5120
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
5121
f_int2 = 2 * @max_row + source_tab.f_int1,
 
5122
f_charbig = 'was updated';
 
5123
        
 
5124
# check unique-1-a success:     1
 
5125
        
 
5126
# check unique-1-b success:     1
 
5127
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5130
f_charbig = CONCAT('===',f_char1,'===')
 
5131
WHERE f_charbig = 'was updated';
 
5132
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5133
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
5134
   FROM t0_template source_tab
 
5135
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5136
        
 
5137
# check replace success:        1
 
5138
DELETE FROM t1
 
5139
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
5140
DELETE FROM t1
 
5141
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
5142
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
5143
UPDATE t1 SET f_int2 = f_int1,
 
5144
f_char1 = CAST(f_int1 AS CHAR),
 
5145
f_char2 = CAST(f_int1 AS CHAR),
 
5146
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
5147
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
5148
SET AUTOCOMMIT= 0;
 
5149
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5150
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5151
FROM t0_template source_tab
 
5152
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5153
        
 
5154
# check transactions-1 success:         1
 
5155
COMMIT WORK;
 
5156
        
 
5157
# check transactions-2 success:         1
 
5158
ROLLBACK WORK;
 
5159
        
 
5160
# check transactions-3 success:         1
 
5161
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5162
COMMIT WORK;
 
5163
ROLLBACK WORK;
 
5164
        
 
5165
# check transactions-4 success:         1
 
5166
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5167
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5168
FROM t0_template source_tab
 
5169
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5170
        
 
5171
# check transactions-5 success:         1
 
5172
ROLLBACK WORK;
 
5173
Warnings:
 
5174
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5175
        
 
5176
# check transactions-6 success:         1
 
5177
# INFO: Storage engine used for t1 seems to be not transactional.
 
5178
COMMIT;
 
5179
        
 
5180
# check transactions-7 success:         1
 
5181
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5182
COMMIT WORK;
 
5183
SET @@session.sql_mode = 'traditional';
 
5184
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5186
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5187
'', '', 'was inserted' FROM t0_template
 
5188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5189
ERROR 22012: Division by 0
 
5190
COMMIT;
 
5191
        
 
5192
# check transactions-8 success:         1
 
5193
# INFO: Storage engine used for t1 seems to be unable to revert
 
5194
#       changes made by the failing statement.
 
5195
SET @@session.sql_mode = '';
 
5196
SET AUTOCOMMIT= 1;
 
5197
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5198
COMMIT WORK;
 
5199
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5200
        
 
5201
# check special-1 success:      1
 
5202
UPDATE t1 SET f_charbig = '';
 
5203
        
 
5204
# check special-2 success:      1
 
5205
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5206
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5207
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5211
'just inserted' FROM t0_template
 
5212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5213
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5214
BEGIN
 
5215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5216
f_charbig = 'updated by trigger'
 
5217
      WHERE f_int1 = new.f_int1;
 
5218
END|
 
5219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5220
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5222
        
 
5223
# check trigger-1 success:      1
 
5224
DROP TRIGGER trg_1;
 
5225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5227
f_charbig = 'just inserted'
 
5228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5229
DELETE FROM t0_aux
 
5230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5233
'just inserted' FROM t0_template
 
5234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5235
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5236
BEGIN
 
5237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5238
f_charbig = 'updated by trigger'
 
5239
      WHERE f_int1 = new.f_int1;
 
5240
END|
 
5241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5242
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5244
        
 
5245
# check trigger-2 success:      1
 
5246
DROP TRIGGER trg_1;
 
5247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5249
f_charbig = 'just inserted'
 
5250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5251
DELETE FROM t0_aux
 
5252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5255
'just inserted' FROM t0_template
 
5256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5257
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5258
BEGIN
 
5259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5260
f_charbig = 'updated by trigger'
 
5261
      WHERE f_int1 = new.f_int1;
 
5262
END|
 
5263
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5265
        
 
5266
# check trigger-3 success:      1
 
5267
DROP TRIGGER trg_1;
 
5268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5270
f_charbig = 'just inserted'
 
5271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5272
DELETE FROM t0_aux
 
5273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5276
'just inserted' FROM t0_template
 
5277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5278
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5279
BEGIN
 
5280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5281
f_charbig = 'updated by trigger'
 
5282
      WHERE f_int1 = - old.f_int1;
 
5283
END|
 
5284
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5286
        
 
5287
# check trigger-4 success:      1
 
5288
DROP TRIGGER trg_1;
 
5289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5291
f_charbig = 'just inserted'
 
5292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5293
DELETE FROM t0_aux
 
5294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5297
'just inserted' FROM t0_template
 
5298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5299
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5300
BEGIN
 
5301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5302
f_charbig = 'updated by trigger'
 
5303
      WHERE f_int1 = new.f_int1;
 
5304
END|
 
5305
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5307
        
 
5308
# check trigger-5 success:      1
 
5309
DROP TRIGGER trg_1;
 
5310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5312
f_charbig = 'just inserted'
 
5313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5314
DELETE FROM t0_aux
 
5315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5318
'just inserted' FROM t0_template
 
5319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5320
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5321
BEGIN
 
5322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5323
f_charbig = 'updated by trigger'
 
5324
      WHERE f_int1 = - old.f_int1;
 
5325
END|
 
5326
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5327
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5328
        
 
5329
# check trigger-6 success:      1
 
5330
DROP TRIGGER trg_1;
 
5331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5333
f_charbig = 'just inserted'
 
5334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5335
DELETE FROM t0_aux
 
5336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5339
'just inserted' FROM t0_template
 
5340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5341
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5342
BEGIN
 
5343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5344
f_charbig = 'updated by trigger'
 
5345
      WHERE f_int1 = - old.f_int1;
 
5346
END|
 
5347
DELETE FROM t0_aux
 
5348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5349
        
 
5350
# check trigger-7 success:      1
 
5351
DROP TRIGGER trg_1;
 
5352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5354
f_charbig = 'just inserted'
 
5355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5356
DELETE FROM t0_aux
 
5357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5360
'just inserted' FROM t0_template
 
5361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5362
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5363
BEGIN
 
5364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5365
f_charbig = 'updated by trigger'
 
5366
      WHERE f_int1 = - old.f_int1;
 
5367
END|
 
5368
DELETE FROM t0_aux
 
5369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5370
        
 
5371
# check trigger-8 success:      1
 
5372
DROP TRIGGER trg_1;
 
5373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5375
f_charbig = 'just inserted'
 
5376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5377
DELETE FROM t0_aux
 
5378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5379
DELETE FROM t1
 
5380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5381
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5382
BEGIN
 
5383
SET new.f_int1 = old.f_int1 + @max_row,
 
5384
new.f_int2 = old.f_int2 - @max_row,
 
5385
new.f_charbig = '####updated per update trigger####';
 
5386
END|
 
5387
UPDATE t1
 
5388
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5389
f_charbig = '####updated per update statement itself####';
 
5390
        
 
5391
# check trigger-9 success:      1
 
5392
DROP TRIGGER trg_2;
 
5393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5395
f_charbig = CONCAT('===',f_char1,'===');
 
5396
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5397
BEGIN
 
5398
SET new.f_int1 = new.f_int1 + @max_row,
 
5399
new.f_int2 = new.f_int2 - @max_row,
 
5400
new.f_charbig = '####updated per update trigger####';
 
5401
END|
 
5402
UPDATE t1
 
5403
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5404
f_charbig = '####updated per update statement itself####';
 
5405
        
 
5406
# check trigger-10 success:     1
 
5407
DROP TRIGGER trg_2;
 
5408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5410
f_charbig = CONCAT('===',f_char1,'===');
 
5411
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5412
BEGIN
 
5413
SET new.f_int1 = @my_max1 + @counter,
 
5414
new.f_int2 = @my_min2 - @counter,
 
5415
new.f_charbig = '####updated per insert trigger####';
 
5416
SET @counter = @counter + 1;
 
5417
END|
 
5418
SET @counter = 1;
 
5419
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5421
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5422
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5424
ORDER BY f_int1;
 
5425
DROP TRIGGER trg_3;
 
5426
        
 
5427
# check trigger-11 success:     1
 
5428
DELETE FROM t1
 
5429
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5430
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5431
AND f_charbig = '####updated per insert trigger####';
 
5432
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5433
BEGIN
 
5434
SET new.f_int1 = @my_max1 + @counter,
 
5435
new.f_int2 = @my_min2 - @counter,
 
5436
new.f_charbig = '####updated per insert trigger####';
 
5437
SET @counter = @counter + 1;
 
5438
END|
 
5439
SET @counter = 1;
 
5440
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5441
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5442
SELECT CAST(f_int1 AS CHAR),
 
5443
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5445
ORDER BY f_int1;
 
5446
DROP TRIGGER trg_3;
 
5447
        
 
5448
# check trigger-12 success:     1
 
5449
DELETE FROM t1
 
5450
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5451
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5452
AND f_charbig = '####updated per insert trigger####';
 
5453
ANALYZE  TABLE t1;
 
5454
Table   Op      Msg_type        Msg_text
 
5455
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5456
CHECK    TABLE t1 EXTENDED;
 
5457
Table   Op      Msg_type        Msg_text
 
5458
test.t1 check   note    The storage engine for the table doesn't support check
 
5459
CHECKSUM TABLE t1 EXTENDED;
 
5460
Table   Checksum
 
5461
test.t1 <some_value>
 
5462
OPTIMIZE TABLE t1;
 
5463
Table   Op      Msg_type        Msg_text
 
5464
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
5465
# check layout success:    1
 
5466
REPAIR   TABLE t1 EXTENDED;
 
5467
Table   Op      Msg_type        Msg_text
 
5468
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5469
# check layout success:    1
 
5470
TRUNCATE t1;
 
5471
        
 
5472
# check TRUNCATE success:       1
 
5473
# check layout success:    1
 
5474
# End usability test (inc/partition_check.inc)
 
5475
DROP TABLE t1;
 
5476
CREATE TABLE t1 (
 
5477
f_int1 INTEGER,
 
5478
f_int2 INTEGER,
 
5479
f_char1 CHAR(20),
 
5480
f_char2 CHAR(20),
 
5481
f_charbig VARCHAR(1000)
 
5482
 
 
5483
)
 
5484
PARTITION BY LIST(MOD(f_int1,4))
 
5485
(PARTITION part_3 VALUES IN (-3),
 
5486
PARTITION part_2 VALUES IN (-2),
 
5487
PARTITION part_1 VALUES IN (-1),
 
5488
PARTITION part_N VALUES IN (NULL),
 
5489
PARTITION part0 VALUES IN (0),
 
5490
PARTITION part1 VALUES IN (1),
 
5491
PARTITION part2 VALUES IN (2),
 
5492
PARTITION part3 VALUES IN (3));
 
5493
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5494
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5495
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5496
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
5497
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5498
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5499
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5500
# Start usability test (inc/partition_check.inc)
 
5501
create_command
 
5502
SHOW CREATE TABLE t1;
 
5503
Table   Create Table
 
5504
t1      CREATE TABLE `t1` (
 
5505
  `f_int1` int(11) DEFAULT NULL,
 
5506
  `f_int2` int(11) DEFAULT NULL,
 
5507
  `f_char1` char(20) DEFAULT NULL,
 
5508
  `f_char2` char(20) DEFAULT NULL,
 
5509
  `f_charbig` varchar(1000) DEFAULT NULL,
 
5510
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
5511
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
5512
 
 
5513
unified filelist
 
5514
t1#P#part0.MYD
 
5515
t1#P#part0.MYI
 
5516
t1#P#part1.MYD
 
5517
t1#P#part1.MYI
 
5518
t1#P#part2.MYD
 
5519
t1#P#part2.MYI
 
5520
t1#P#part3.MYD
 
5521
t1#P#part3.MYI
 
5522
t1#P#part_1.MYD
 
5523
t1#P#part_1.MYI
 
5524
t1#P#part_2.MYD
 
5525
t1#P#part_2.MYI
 
5526
t1#P#part_3.MYD
 
5527
t1#P#part_3.MYI
 
5528
t1#P#part_N.MYD
 
5529
t1#P#part_N.MYI
 
5530
t1.frm
 
5531
t1.par
 
5532
 
 
5533
# check prerequisites-1 success:    1
 
5534
# check COUNT(*) success:    1
 
5535
# check MIN/MAX(f_int1) success:    1
 
5536
# check MIN/MAX(f_int2) success:    1
 
5537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5538
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5539
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5540
WHERE f_int1 IN (2,3);
 
5541
ERROR 23000: Can't write; duplicate key in table 't1'
 
5542
# check prerequisites-3 success:    1
 
5543
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
5544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5545
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5546
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5547
WHERE f_int1 IN (2,3);
 
5548
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5549
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5550
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5551
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5552
WHERE f_int1 IN (2,3);
 
5553
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5554
# check read via f_int1 success: 1
 
5555
# check read via f_int2 success: 1
 
5556
        
 
5557
# check multiple-1 success:     1
 
5558
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5559
        
 
5560
# check multiple-2 success:     1
 
5561
INSERT INTO t1 SELECT * FROM t0_template
 
5562
WHERE MOD(f_int1,3) = 0;
 
5563
        
 
5564
# check multiple-3 success:     1
 
5565
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5566
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5567
AND @max_row_div2 + @max_row_div4;
 
5568
        
 
5569
# check multiple-4 success:     1
 
5570
DELETE FROM t1
 
5571
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5572
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5573
        
 
5574
# check multiple-5 success:     1
 
5575
SELECT COUNT(*) INTO @try_count FROM t0_template
 
5576
WHERE MOD(f_int1,3) = 0
 
5577
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5578
SELECT COUNT(*) INTO @clash_count
 
5579
FROM t1 INNER JOIN t0_template USING(f_int1)
 
5580
WHERE MOD(f_int1,3) = 0
 
5581
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5582
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5583
INSERT INTO t1
 
5584
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5585
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5586
f_charbig = '#SINGLE#';
 
5587
        
 
5588
# check single-1 success:       1
 
5589
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5590
INSERT INTO t1
 
5591
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5592
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5593
f_charbig = '#SINGLE#';
 
5594
        
 
5595
# check single-2 success:       1
 
5596
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5597
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5598
UPDATE t1 SET f_int1 = @cur_value2
 
5599
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5600
        
 
5601
# check single-3 success:       1
 
5602
SET @cur_value1= -1;
 
5603
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5604
UPDATE t1 SET f_int1 = @cur_value1
 
5605
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5606
        
 
5607
# check single-4 success:       1
 
5608
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5609
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5610
        
 
5611
# check single-5 success:       1
 
5612
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5613
        
 
5614
# check single-6 success:       1
 
5615
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5616
        
 
5617
# check single-7 success:       1
 
5618
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5619
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5620
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5621
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5622
f_charbig = '#NULL#';
 
5623
INSERT INTO t1
 
5624
SET f_int1 = NULL , f_int2 = -@max_row,
 
5625
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5626
f_charbig = '#NULL#';
 
5627
# check null success:    1
 
5628
        
 
5629
# check null-1 success:         1
 
5630
UPDATE t1 SET f_int1 = -@max_row
 
5631
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5632
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5633
        
 
5634
# check null-2 success:         1
 
5635
UPDATE t1 SET f_int1 = NULL
 
5636
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5637
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5638
        
 
5639
# check null-3 success:         1
 
5640
DELETE FROM t1
 
5641
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5642
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5643
        
 
5644
# check null-4 success:         1
 
5645
DELETE FROM t1
 
5646
WHERE f_int1 = 0 AND f_int2 = 0
 
5647
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5648
AND f_charbig = '#NULL#';
 
5649
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5650
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5651
   FROM t0_template source_tab
 
5652
WHERE MOD(f_int1,3) = 0
 
5653
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
5654
ON DUPLICATE KEY
 
5655
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
5656
f_int2 = 2 * @max_row + source_tab.f_int1,
 
5657
f_charbig = 'was updated';
 
5658
        
 
5659
# check unique-1-a success:     1
 
5660
        
 
5661
# check unique-1-b success:     1
 
5662
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5665
f_charbig = CONCAT('===',f_char1,'===')
 
5666
WHERE f_charbig = 'was updated';
 
5667
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5668
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
5669
   FROM t0_template source_tab
 
5670
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5671
        
 
5672
# check replace success:        1
 
5673
DELETE FROM t1
 
5674
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
5675
DELETE FROM t1
 
5676
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
5677
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
5678
UPDATE t1 SET f_int2 = f_int1,
 
5679
f_char1 = CAST(f_int1 AS CHAR),
 
5680
f_char2 = CAST(f_int1 AS CHAR),
 
5681
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
5682
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
5683
SET AUTOCOMMIT= 0;
 
5684
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5685
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5686
FROM t0_template source_tab
 
5687
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5688
        
 
5689
# check transactions-1 success:         1
 
5690
COMMIT WORK;
 
5691
        
 
5692
# check transactions-2 success:         1
 
5693
ROLLBACK WORK;
 
5694
        
 
5695
# check transactions-3 success:         1
 
5696
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5697
COMMIT WORK;
 
5698
ROLLBACK WORK;
 
5699
        
 
5700
# check transactions-4 success:         1
 
5701
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5702
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5703
FROM t0_template source_tab
 
5704
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5705
        
 
5706
# check transactions-5 success:         1
 
5707
ROLLBACK WORK;
 
5708
Warnings:
 
5709
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5710
        
 
5711
# check transactions-6 success:         1
 
5712
# INFO: Storage engine used for t1 seems to be not transactional.
 
5713
COMMIT;
 
5714
        
 
5715
# check transactions-7 success:         1
 
5716
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5717
COMMIT WORK;
 
5718
SET @@session.sql_mode = 'traditional';
 
5719
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5720
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5721
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5722
'', '', 'was inserted' FROM t0_template
 
5723
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5724
ERROR 22012: Division by 0
 
5725
COMMIT;
 
5726
        
 
5727
# check transactions-8 success:         1
 
5728
# INFO: Storage engine used for t1 seems to be unable to revert
 
5729
#       changes made by the failing statement.
 
5730
SET @@session.sql_mode = '';
 
5731
SET AUTOCOMMIT= 1;
 
5732
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5733
COMMIT WORK;
 
5734
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5735
        
 
5736
# check special-1 success:      1
 
5737
UPDATE t1 SET f_charbig = '';
 
5738
        
 
5739
# check special-2 success:      1
 
5740
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5741
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5742
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5743
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5744
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5745
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5746
'just inserted' FROM t0_template
 
5747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5748
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5749
BEGIN
 
5750
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5751
f_charbig = 'updated by trigger'
 
5752
      WHERE f_int1 = new.f_int1;
 
5753
END|
 
5754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5755
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5757
        
 
5758
# check trigger-1 success:      1
 
5759
DROP TRIGGER trg_1;
 
5760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5762
f_charbig = 'just inserted'
 
5763
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5764
DELETE FROM t0_aux
 
5765
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5766
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5767
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5768
'just inserted' FROM t0_template
 
5769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5770
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5771
BEGIN
 
5772
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5773
f_charbig = 'updated by trigger'
 
5774
      WHERE f_int1 = new.f_int1;
 
5775
END|
 
5776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5777
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5778
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5779
        
 
5780
# check trigger-2 success:      1
 
5781
DROP TRIGGER trg_1;
 
5782
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5783
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5784
f_charbig = 'just inserted'
 
5785
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5786
DELETE FROM t0_aux
 
5787
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5788
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5789
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5790
'just inserted' FROM t0_template
 
5791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5792
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5793
BEGIN
 
5794
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5795
f_charbig = 'updated by trigger'
 
5796
      WHERE f_int1 = new.f_int1;
 
5797
END|
 
5798
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5799
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5800
        
 
5801
# check trigger-3 success:      1
 
5802
DROP TRIGGER trg_1;
 
5803
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5804
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5805
f_charbig = 'just inserted'
 
5806
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5807
DELETE FROM t0_aux
 
5808
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5809
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5810
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5811
'just inserted' FROM t0_template
 
5812
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5813
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5814
BEGIN
 
5815
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5816
f_charbig = 'updated by trigger'
 
5817
      WHERE f_int1 = - old.f_int1;
 
5818
END|
 
5819
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5820
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5821
        
 
5822
# check trigger-4 success:      1
 
5823
DROP TRIGGER trg_1;
 
5824
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5825
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5826
f_charbig = 'just inserted'
 
5827
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5828
DELETE FROM t0_aux
 
5829
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5830
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5831
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5832
'just inserted' FROM t0_template
 
5833
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5834
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5835
BEGIN
 
5836
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5837
f_charbig = 'updated by trigger'
 
5838
      WHERE f_int1 = new.f_int1;
 
5839
END|
 
5840
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5841
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5842
        
 
5843
# check trigger-5 success:      1
 
5844
DROP TRIGGER trg_1;
 
5845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5847
f_charbig = 'just inserted'
 
5848
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5849
DELETE FROM t0_aux
 
5850
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5851
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5852
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5853
'just inserted' FROM t0_template
 
5854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5855
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5856
BEGIN
 
5857
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5858
f_charbig = 'updated by trigger'
 
5859
      WHERE f_int1 = - old.f_int1;
 
5860
END|
 
5861
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5862
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5863
        
 
5864
# check trigger-6 success:      1
 
5865
DROP TRIGGER trg_1;
 
5866
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5867
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5868
f_charbig = 'just inserted'
 
5869
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5870
DELETE FROM t0_aux
 
5871
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5872
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5873
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5874
'just inserted' FROM t0_template
 
5875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5876
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5877
BEGIN
 
5878
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5879
f_charbig = 'updated by trigger'
 
5880
      WHERE f_int1 = - old.f_int1;
 
5881
END|
 
5882
DELETE FROM t0_aux
 
5883
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5884
        
 
5885
# check trigger-7 success:      1
 
5886
DROP TRIGGER trg_1;
 
5887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5889
f_charbig = 'just inserted'
 
5890
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5891
DELETE FROM t0_aux
 
5892
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5893
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5894
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5895
'just inserted' FROM t0_template
 
5896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5897
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5898
BEGIN
 
5899
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5900
f_charbig = 'updated by trigger'
 
5901
      WHERE f_int1 = - old.f_int1;
 
5902
END|
 
5903
DELETE FROM t0_aux
 
5904
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5905
        
 
5906
# check trigger-8 success:      1
 
5907
DROP TRIGGER trg_1;
 
5908
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5909
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5910
f_charbig = 'just inserted'
 
5911
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5912
DELETE FROM t0_aux
 
5913
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5914
DELETE FROM t1
 
5915
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5916
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5917
BEGIN
 
5918
SET new.f_int1 = old.f_int1 + @max_row,
 
5919
new.f_int2 = old.f_int2 - @max_row,
 
5920
new.f_charbig = '####updated per update trigger####';
 
5921
END|
 
5922
UPDATE t1
 
5923
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5924
f_charbig = '####updated per update statement itself####';
 
5925
        
 
5926
# check trigger-9 success:      1
 
5927
DROP TRIGGER trg_2;
 
5928
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5929
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5930
f_charbig = CONCAT('===',f_char1,'===');
 
5931
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5932
BEGIN
 
5933
SET new.f_int1 = new.f_int1 + @max_row,
 
5934
new.f_int2 = new.f_int2 - @max_row,
 
5935
new.f_charbig = '####updated per update trigger####';
 
5936
END|
 
5937
UPDATE t1
 
5938
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5939
f_charbig = '####updated per update statement itself####';
 
5940
        
 
5941
# check trigger-10 success:     1
 
5942
DROP TRIGGER trg_2;
 
5943
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5944
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5945
f_charbig = CONCAT('===',f_char1,'===');
 
5946
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5947
BEGIN
 
5948
SET new.f_int1 = @my_max1 + @counter,
 
5949
new.f_int2 = @my_min2 - @counter,
 
5950
new.f_charbig = '####updated per insert trigger####';
 
5951
SET @counter = @counter + 1;
 
5952
END|
 
5953
SET @counter = 1;
 
5954
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5955
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5956
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5957
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5959
ORDER BY f_int1;
 
5960
DROP TRIGGER trg_3;
 
5961
        
 
5962
# check trigger-11 success:     1
 
5963
DELETE FROM t1
 
5964
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5965
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5966
AND f_charbig = '####updated per insert trigger####';
 
5967
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5968
BEGIN
 
5969
SET new.f_int1 = @my_max1 + @counter,
 
5970
new.f_int2 = @my_min2 - @counter,
 
5971
new.f_charbig = '####updated per insert trigger####';
 
5972
SET @counter = @counter + 1;
 
5973
END|
 
5974
SET @counter = 1;
 
5975
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5976
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5977
SELECT CAST(f_int1 AS CHAR),
 
5978
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5980
ORDER BY f_int1;
 
5981
DROP TRIGGER trg_3;
 
5982
        
 
5983
# check trigger-12 success:     1
 
5984
DELETE FROM t1
 
5985
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5986
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5987
AND f_charbig = '####updated per insert trigger####';
 
5988
ANALYZE  TABLE t1;
 
5989
Table   Op      Msg_type        Msg_text
 
5990
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5991
CHECK    TABLE t1 EXTENDED;
 
5992
Table   Op      Msg_type        Msg_text
 
5993
test.t1 check   note    The storage engine for the table doesn't support check
 
5994
CHECKSUM TABLE t1 EXTENDED;
 
5995
Table   Checksum
 
5996
test.t1 <some_value>
 
5997
OPTIMIZE TABLE t1;
 
5998
Table   Op      Msg_type        Msg_text
 
5999
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
6000
# check layout success:    1
 
6001
REPAIR   TABLE t1 EXTENDED;
 
6002
Table   Op      Msg_type        Msg_text
 
6003
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6004
# check layout success:    1
 
6005
TRUNCATE t1;
 
6006
        
 
6007
# check TRUNCATE success:       1
 
6008
# check layout success:    1
 
6009
# End usability test (inc/partition_check.inc)
 
6010
DROP TABLE t1;
 
6011
CREATE TABLE t1 (
 
6012
f_int1 INTEGER,
 
6013
f_int2 INTEGER,
 
6014
f_char1 CHAR(20),
 
6015
f_char2 CHAR(20),
 
6016
f_charbig VARCHAR(1000)
 
6017
 
 
6018
)
 
6019
PARTITION BY RANGE(f_int1)
 
6020
(PARTITION parta VALUES LESS THAN (0),
 
6021
PARTITION partb VALUES LESS THAN (5),
 
6022
PARTITION partc VALUES LESS THAN (10),
 
6023
PARTITION partd VALUES LESS THAN (10 + 5),
 
6024
PARTITION parte VALUES LESS THAN (20),
 
6025
PARTITION partf VALUES LESS THAN (2147483646));
 
6026
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6027
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6028
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6029
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
6030
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6031
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6032
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6033
# Start usability test (inc/partition_check.inc)
 
6034
create_command
 
6035
SHOW CREATE TABLE t1;
 
6036
Table   Create Table
 
6037
t1      CREATE TABLE `t1` (
 
6038
  `f_int1` int(11) DEFAULT NULL,
 
6039
  `f_int2` int(11) DEFAULT NULL,
 
6040
  `f_char1` char(20) DEFAULT NULL,
 
6041
  `f_char2` char(20) DEFAULT NULL,
 
6042
  `f_charbig` varchar(1000) DEFAULT NULL,
 
6043
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
6044
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
6045
 
 
6046
unified filelist
 
6047
t1#P#parta.MYD
 
6048
t1#P#parta.MYI
 
6049
t1#P#partb.MYD
 
6050
t1#P#partb.MYI
 
6051
t1#P#partc.MYD
 
6052
t1#P#partc.MYI
 
6053
t1#P#partd.MYD
 
6054
t1#P#partd.MYI
 
6055
t1#P#parte.MYD
 
6056
t1#P#parte.MYI
 
6057
t1#P#partf.MYD
 
6058
t1#P#partf.MYI
 
6059
t1.frm
 
6060
t1.par
 
6061
 
 
6062
# check prerequisites-1 success:    1
 
6063
# check COUNT(*) success:    1
 
6064
# check MIN/MAX(f_int1) success:    1
 
6065
# check MIN/MAX(f_int2) success:    1
 
6066
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6067
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6068
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6069
WHERE f_int1 IN (2,3);
 
6070
ERROR 23000: Can't write; duplicate key in table 't1'
 
6071
# check prerequisites-3 success:    1
 
6072
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
6073
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6074
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6075
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6076
WHERE f_int1 IN (2,3);
 
6077
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6078
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6079
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6080
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6081
WHERE f_int1 IN (2,3);
 
6082
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6083
# check read via f_int1 success: 1
 
6084
# check read via f_int2 success: 1
 
6085
        
 
6086
# check multiple-1 success:     1
 
6087
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6088
        
 
6089
# check multiple-2 success:     1
 
6090
INSERT INTO t1 SELECT * FROM t0_template
 
6091
WHERE MOD(f_int1,3) = 0;
 
6092
        
 
6093
# check multiple-3 success:     1
 
6094
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6095
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6096
AND @max_row_div2 + @max_row_div4;
 
6097
        
 
6098
# check multiple-4 success:     1
 
6099
DELETE FROM t1
 
6100
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6101
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6102
        
 
6103
# check multiple-5 success:     1
 
6104
SELECT COUNT(*) INTO @try_count FROM t0_template
 
6105
WHERE MOD(f_int1,3) = 0
 
6106
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6107
SELECT COUNT(*) INTO @clash_count
 
6108
FROM t1 INNER JOIN t0_template USING(f_int1)
 
6109
WHERE MOD(f_int1,3) = 0
 
6110
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6111
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6112
INSERT INTO t1
 
6113
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6114
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6115
f_charbig = '#SINGLE#';
 
6116
        
 
6117
# check single-1 success:       1
 
6118
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6119
INSERT INTO t1
 
6120
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6121
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6122
f_charbig = '#SINGLE#';
 
6123
        
 
6124
# check single-2 success:       1
 
6125
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6126
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6127
UPDATE t1 SET f_int1 = @cur_value2
 
6128
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6129
        
 
6130
# check single-3 success:       1
 
6131
SET @cur_value1= -1;
 
6132
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6133
UPDATE t1 SET f_int1 = @cur_value1
 
6134
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6135
        
 
6136
# check single-4 success:       1
 
6137
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6138
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6139
        
 
6140
# check single-5 success:       1
 
6141
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6142
        
 
6143
# check single-6 success:       1
 
6144
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6145
ERROR HY000: Table has no partition for value 2147483647
 
6146
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6147
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6148
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6149
f_charbig = '#NULL#';
 
6150
INSERT INTO t1
 
6151
SET f_int1 = NULL , f_int2 = -@max_row,
 
6152
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6153
f_charbig = '#NULL#';
 
6154
# check null success:    1
 
6155
        
 
6156
# check null-1 success:         1
 
6157
UPDATE t1 SET f_int1 = -@max_row
 
6158
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6159
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6160
        
 
6161
# check null-2 success:         1
 
6162
UPDATE t1 SET f_int1 = NULL
 
6163
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6164
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6165
        
 
6166
# check null-3 success:         1
 
6167
DELETE FROM t1
 
6168
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6169
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6170
        
 
6171
# check null-4 success:         1
 
6172
DELETE FROM t1
 
6173
WHERE f_int1 = 0 AND f_int2 = 0
 
6174
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6175
AND f_charbig = '#NULL#';
 
6176
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6177
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6178
   FROM t0_template source_tab
 
6179
WHERE MOD(f_int1,3) = 0
 
6180
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
6181
ON DUPLICATE KEY
 
6182
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
6183
f_int2 = 2 * @max_row + source_tab.f_int1,
 
6184
f_charbig = 'was updated';
 
6185
        
 
6186
# check unique-1-a success:     1
 
6187
        
 
6188
# check unique-1-b success:     1
 
6189
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6192
f_charbig = CONCAT('===',f_char1,'===')
 
6193
WHERE f_charbig = 'was updated';
 
6194
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6195
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
6196
   FROM t0_template source_tab
 
6197
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6198
        
 
6199
# check replace success:        1
 
6200
DELETE FROM t1
 
6201
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
6202
DELETE FROM t1
 
6203
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
6204
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
6205
UPDATE t1 SET f_int2 = f_int1,
 
6206
f_char1 = CAST(f_int1 AS CHAR),
 
6207
f_char2 = CAST(f_int1 AS CHAR),
 
6208
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
6209
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
6210
SET AUTOCOMMIT= 0;
 
6211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6212
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6213
FROM t0_template source_tab
 
6214
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6215
        
 
6216
# check transactions-1 success:         1
 
6217
COMMIT WORK;
 
6218
        
 
6219
# check transactions-2 success:         1
 
6220
ROLLBACK WORK;
 
6221
        
 
6222
# check transactions-3 success:         1
 
6223
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6224
COMMIT WORK;
 
6225
ROLLBACK WORK;
 
6226
        
 
6227
# check transactions-4 success:         1
 
6228
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6229
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6230
FROM t0_template source_tab
 
6231
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6232
        
 
6233
# check transactions-5 success:         1
 
6234
ROLLBACK WORK;
 
6235
Warnings:
 
6236
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6237
        
 
6238
# check transactions-6 success:         1
 
6239
# INFO: Storage engine used for t1 seems to be not transactional.
 
6240
COMMIT;
 
6241
        
 
6242
# check transactions-7 success:         1
 
6243
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6244
COMMIT WORK;
 
6245
SET @@session.sql_mode = 'traditional';
 
6246
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6247
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6248
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6249
'', '', 'was inserted' FROM t0_template
 
6250
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6251
ERROR 22012: Division by 0
 
6252
COMMIT;
 
6253
        
 
6254
# check transactions-8 success:         1
 
6255
# INFO: Storage engine used for t1 seems to be unable to revert
 
6256
#       changes made by the failing statement.
 
6257
SET @@session.sql_mode = '';
 
6258
SET AUTOCOMMIT= 1;
 
6259
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6260
COMMIT WORK;
 
6261
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6262
        
 
6263
# check special-1 success:      1
 
6264
UPDATE t1 SET f_charbig = '';
 
6265
        
 
6266
# check special-2 success:      1
 
6267
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6268
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6269
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6270
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6272
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6273
'just inserted' FROM t0_template
 
6274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6275
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6276
BEGIN
 
6277
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6278
f_charbig = 'updated by trigger'
 
6279
      WHERE f_int1 = new.f_int1;
 
6280
END|
 
6281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6282
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6284
        
 
6285
# check trigger-1 success:      1
 
6286
DROP TRIGGER trg_1;
 
6287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6289
f_charbig = 'just inserted'
 
6290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6291
DELETE FROM t0_aux
 
6292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6295
'just inserted' FROM t0_template
 
6296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6297
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6298
BEGIN
 
6299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6300
f_charbig = 'updated by trigger'
 
6301
      WHERE f_int1 = new.f_int1;
 
6302
END|
 
6303
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6304
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6306
        
 
6307
# check trigger-2 success:      1
 
6308
DROP TRIGGER trg_1;
 
6309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6311
f_charbig = 'just inserted'
 
6312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6313
DELETE FROM t0_aux
 
6314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6315
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6316
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6317
'just inserted' FROM t0_template
 
6318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6319
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6320
BEGIN
 
6321
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6322
f_charbig = 'updated by trigger'
 
6323
      WHERE f_int1 = new.f_int1;
 
6324
END|
 
6325
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6326
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6327
        
 
6328
# check trigger-3 success:      1
 
6329
DROP TRIGGER trg_1;
 
6330
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6331
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6332
f_charbig = 'just inserted'
 
6333
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6334
DELETE FROM t0_aux
 
6335
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6336
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6337
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6338
'just inserted' FROM t0_template
 
6339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6340
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6341
BEGIN
 
6342
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6343
f_charbig = 'updated by trigger'
 
6344
      WHERE f_int1 = - old.f_int1;
 
6345
END|
 
6346
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6347
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6348
        
 
6349
# check trigger-4 success:      1
 
6350
DROP TRIGGER trg_1;
 
6351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6353
f_charbig = 'just inserted'
 
6354
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6355
DELETE FROM t0_aux
 
6356
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6357
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6358
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6359
'just inserted' FROM t0_template
 
6360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6361
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6362
BEGIN
 
6363
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6364
f_charbig = 'updated by trigger'
 
6365
      WHERE f_int1 = new.f_int1;
 
6366
END|
 
6367
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6368
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6369
        
 
6370
# check trigger-5 success:      1
 
6371
DROP TRIGGER trg_1;
 
6372
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6373
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6374
f_charbig = 'just inserted'
 
6375
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6376
DELETE FROM t0_aux
 
6377
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6378
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6379
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6380
'just inserted' FROM t0_template
 
6381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6382
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6383
BEGIN
 
6384
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6385
f_charbig = 'updated by trigger'
 
6386
      WHERE f_int1 = - old.f_int1;
 
6387
END|
 
6388
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6389
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6390
        
 
6391
# check trigger-6 success:      1
 
6392
DROP TRIGGER trg_1;
 
6393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6395
f_charbig = 'just inserted'
 
6396
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6397
DELETE FROM t0_aux
 
6398
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6399
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6400
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6401
'just inserted' FROM t0_template
 
6402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6403
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6404
BEGIN
 
6405
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6406
f_charbig = 'updated by trigger'
 
6407
      WHERE f_int1 = - old.f_int1;
 
6408
END|
 
6409
DELETE FROM t0_aux
 
6410
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6411
        
 
6412
# check trigger-7 success:      1
 
6413
DROP TRIGGER trg_1;
 
6414
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6415
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6416
f_charbig = 'just inserted'
 
6417
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6418
DELETE FROM t0_aux
 
6419
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6420
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6421
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6422
'just inserted' FROM t0_template
 
6423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6424
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6425
BEGIN
 
6426
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6427
f_charbig = 'updated by trigger'
 
6428
      WHERE f_int1 = - old.f_int1;
 
6429
END|
 
6430
DELETE FROM t0_aux
 
6431
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6432
        
 
6433
# check trigger-8 success:      1
 
6434
DROP TRIGGER trg_1;
 
6435
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6436
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6437
f_charbig = 'just inserted'
 
6438
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6439
DELETE FROM t0_aux
 
6440
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6441
DELETE FROM t1
 
6442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6443
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6444
BEGIN
 
6445
SET new.f_int1 = old.f_int1 + @max_row,
 
6446
new.f_int2 = old.f_int2 - @max_row,
 
6447
new.f_charbig = '####updated per update trigger####';
 
6448
END|
 
6449
UPDATE t1
 
6450
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6451
f_charbig = '####updated per update statement itself####';
 
6452
        
 
6453
# check trigger-9 success:      1
 
6454
DROP TRIGGER trg_2;
 
6455
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6456
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6457
f_charbig = CONCAT('===',f_char1,'===');
 
6458
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6459
BEGIN
 
6460
SET new.f_int1 = new.f_int1 + @max_row,
 
6461
new.f_int2 = new.f_int2 - @max_row,
 
6462
new.f_charbig = '####updated per update trigger####';
 
6463
END|
 
6464
UPDATE t1
 
6465
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6466
f_charbig = '####updated per update statement itself####';
 
6467
        
 
6468
# check trigger-10 success:     1
 
6469
DROP TRIGGER trg_2;
 
6470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6472
f_charbig = CONCAT('===',f_char1,'===');
 
6473
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6474
BEGIN
 
6475
SET new.f_int1 = @my_max1 + @counter,
 
6476
new.f_int2 = @my_min2 - @counter,
 
6477
new.f_charbig = '####updated per insert trigger####';
 
6478
SET @counter = @counter + 1;
 
6479
END|
 
6480
SET @counter = 1;
 
6481
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6482
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6483
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6484
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6486
ORDER BY f_int1;
 
6487
DROP TRIGGER trg_3;
 
6488
        
 
6489
# check trigger-11 success:     1
 
6490
DELETE FROM t1
 
6491
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6492
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6493
AND f_charbig = '####updated per insert trigger####';
 
6494
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6495
BEGIN
 
6496
SET new.f_int1 = @my_max1 + @counter,
 
6497
new.f_int2 = @my_min2 - @counter,
 
6498
new.f_charbig = '####updated per insert trigger####';
 
6499
SET @counter = @counter + 1;
 
6500
END|
 
6501
SET @counter = 1;
 
6502
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6503
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6504
SELECT CAST(f_int1 AS CHAR),
 
6505
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6507
ORDER BY f_int1;
 
6508
DROP TRIGGER trg_3;
 
6509
        
 
6510
# check trigger-12 success:     1
 
6511
DELETE FROM t1
 
6512
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6513
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6514
AND f_charbig = '####updated per insert trigger####';
 
6515
ANALYZE  TABLE t1;
 
6516
Table   Op      Msg_type        Msg_text
 
6517
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
6518
CHECK    TABLE t1 EXTENDED;
 
6519
Table   Op      Msg_type        Msg_text
 
6520
test.t1 check   note    The storage engine for the table doesn't support check
 
6521
CHECKSUM TABLE t1 EXTENDED;
 
6522
Table   Checksum
 
6523
test.t1 <some_value>
 
6524
OPTIMIZE TABLE t1;
 
6525
Table   Op      Msg_type        Msg_text
 
6526
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
6527
# check layout success:    1
 
6528
REPAIR   TABLE t1 EXTENDED;
 
6529
Table   Op      Msg_type        Msg_text
 
6530
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6531
# check layout success:    1
 
6532
TRUNCATE t1;
 
6533
        
 
6534
# check TRUNCATE success:       1
 
6535
# check layout success:    1
 
6536
# End usability test (inc/partition_check.inc)
 
6537
DROP TABLE t1;
 
6538
CREATE TABLE t1 (
 
6539
f_int1 INTEGER,
 
6540
f_int2 INTEGER,
 
6541
f_char1 CHAR(20),
 
6542
f_char2 CHAR(20),
 
6543
f_charbig VARCHAR(1000)
 
6544
 
 
6545
)
 
6546
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
6547
(PARTITION parta VALUES LESS THAN (0),
 
6548
PARTITION partb VALUES LESS THAN (5),
 
6549
PARTITION partc VALUES LESS THAN (10),
 
6550
PARTITION partd VALUES LESS THAN (2147483646));
 
6551
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6552
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6553
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6554
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
6555
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6556
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6557
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6558
# Start usability test (inc/partition_check.inc)
 
6559
create_command
 
6560
SHOW CREATE TABLE t1;
 
6561
Table   Create Table
 
6562
t1      CREATE TABLE `t1` (
 
6563
  `f_int1` int(11) DEFAULT NULL,
 
6564
  `f_int2` int(11) DEFAULT NULL,
 
6565
  `f_char1` char(20) DEFAULT NULL,
 
6566
  `f_char2` char(20) DEFAULT NULL,
 
6567
  `f_charbig` varchar(1000) DEFAULT NULL,
 
6568
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
6569
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
6570
 
 
6571
unified filelist
 
6572
t1#P#parta#SP#partasp0.MYD
 
6573
t1#P#parta#SP#partasp0.MYI
 
6574
t1#P#parta#SP#partasp1.MYD
 
6575
t1#P#parta#SP#partasp1.MYI
 
6576
t1#P#partb#SP#partbsp0.MYD
 
6577
t1#P#partb#SP#partbsp0.MYI
 
6578
t1#P#partb#SP#partbsp1.MYD
 
6579
t1#P#partb#SP#partbsp1.MYI
 
6580
t1#P#partc#SP#partcsp0.MYD
 
6581
t1#P#partc#SP#partcsp0.MYI
 
6582
t1#P#partc#SP#partcsp1.MYD
 
6583
t1#P#partc#SP#partcsp1.MYI
 
6584
t1#P#partd#SP#partdsp0.MYD
 
6585
t1#P#partd#SP#partdsp0.MYI
 
6586
t1#P#partd#SP#partdsp1.MYD
 
6587
t1#P#partd#SP#partdsp1.MYI
 
6588
t1.frm
 
6589
t1.par
 
6590
 
 
6591
# check prerequisites-1 success:    1
 
6592
# check COUNT(*) success:    1
 
6593
# check MIN/MAX(f_int1) success:    1
 
6594
# check MIN/MAX(f_int2) success:    1
 
6595
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6596
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6597
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6598
WHERE f_int1 IN (2,3);
 
6599
ERROR 23000: Can't write; duplicate key in table 't1'
 
6600
# check prerequisites-3 success:    1
 
6601
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
6602
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6603
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6604
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6605
WHERE f_int1 IN (2,3);
 
6606
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6607
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6608
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6609
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6610
WHERE f_int1 IN (2,3);
 
6611
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6612
# check read via f_int1 success: 1
 
6613
# check read via f_int2 success: 1
 
6614
        
 
6615
# check multiple-1 success:     1
 
6616
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6617
        
 
6618
# check multiple-2 success:     1
 
6619
INSERT INTO t1 SELECT * FROM t0_template
 
6620
WHERE MOD(f_int1,3) = 0;
 
6621
        
 
6622
# check multiple-3 success:     1
 
6623
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6624
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6625
AND @max_row_div2 + @max_row_div4;
 
6626
        
 
6627
# check multiple-4 success:     1
 
6628
DELETE FROM t1
 
6629
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6630
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6631
        
 
6632
# check multiple-5 success:     1
 
6633
SELECT COUNT(*) INTO @try_count FROM t0_template
 
6634
WHERE MOD(f_int1,3) = 0
 
6635
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6636
SELECT COUNT(*) INTO @clash_count
 
6637
FROM t1 INNER JOIN t0_template USING(f_int1)
 
6638
WHERE MOD(f_int1,3) = 0
 
6639
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6640
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6641
INSERT INTO t1
 
6642
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6643
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6644
f_charbig = '#SINGLE#';
 
6645
        
 
6646
# check single-1 success:       1
 
6647
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6648
INSERT INTO t1
 
6649
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6650
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6651
f_charbig = '#SINGLE#';
 
6652
        
 
6653
# check single-2 success:       1
 
6654
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6655
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6656
UPDATE t1 SET f_int1 = @cur_value2
 
6657
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6658
        
 
6659
# check single-3 success:       1
 
6660
SET @cur_value1= -1;
 
6661
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6662
UPDATE t1 SET f_int1 = @cur_value1
 
6663
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6664
        
 
6665
# check single-4 success:       1
 
6666
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6667
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6668
        
 
6669
# check single-5 success:       1
 
6670
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6671
        
 
6672
# check single-6 success:       1
 
6673
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6674
        
 
6675
# check single-7 success:       1
 
6676
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6677
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6678
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6679
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6680
f_charbig = '#NULL#';
 
6681
INSERT INTO t1
 
6682
SET f_int1 = NULL , f_int2 = -@max_row,
 
6683
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6684
f_charbig = '#NULL#';
 
6685
# check null success:    1
 
6686
        
 
6687
# check null-1 success:         1
 
6688
UPDATE t1 SET f_int1 = -@max_row
 
6689
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6690
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6691
        
 
6692
# check null-2 success:         1
 
6693
UPDATE t1 SET f_int1 = NULL
 
6694
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6695
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6696
        
 
6697
# check null-3 success:         1
 
6698
DELETE FROM t1
 
6699
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6700
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6701
        
 
6702
# check null-4 success:         1
 
6703
DELETE FROM t1
 
6704
WHERE f_int1 = 0 AND f_int2 = 0
 
6705
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6706
AND f_charbig = '#NULL#';
 
6707
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6708
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6709
   FROM t0_template source_tab
 
6710
WHERE MOD(f_int1,3) = 0
 
6711
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
6712
ON DUPLICATE KEY
 
6713
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
6714
f_int2 = 2 * @max_row + source_tab.f_int1,
 
6715
f_charbig = 'was updated';
 
6716
        
 
6717
# check unique-1-a success:     1
 
6718
        
 
6719
# check unique-1-b success:     1
 
6720
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6723
f_charbig = CONCAT('===',f_char1,'===')
 
6724
WHERE f_charbig = 'was updated';
 
6725
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6726
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
6727
   FROM t0_template source_tab
 
6728
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6729
        
 
6730
# check replace success:        1
 
6731
DELETE FROM t1
 
6732
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
6733
DELETE FROM t1
 
6734
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
6735
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
6736
UPDATE t1 SET f_int2 = f_int1,
 
6737
f_char1 = CAST(f_int1 AS CHAR),
 
6738
f_char2 = CAST(f_int1 AS CHAR),
 
6739
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
6740
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
6741
SET AUTOCOMMIT= 0;
 
6742
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6743
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6744
FROM t0_template source_tab
 
6745
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6746
        
 
6747
# check transactions-1 success:         1
 
6748
COMMIT WORK;
 
6749
        
 
6750
# check transactions-2 success:         1
 
6751
ROLLBACK WORK;
 
6752
        
 
6753
# check transactions-3 success:         1
 
6754
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6755
COMMIT WORK;
 
6756
ROLLBACK WORK;
 
6757
        
 
6758
# check transactions-4 success:         1
 
6759
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6760
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6761
FROM t0_template source_tab
 
6762
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6763
        
 
6764
# check transactions-5 success:         1
 
6765
ROLLBACK WORK;
 
6766
Warnings:
 
6767
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6768
        
 
6769
# check transactions-6 success:         1
 
6770
# INFO: Storage engine used for t1 seems to be not transactional.
 
6771
COMMIT;
 
6772
        
 
6773
# check transactions-7 success:         1
 
6774
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6775
COMMIT WORK;
 
6776
SET @@session.sql_mode = 'traditional';
 
6777
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6778
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6779
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6780
'', '', 'was inserted' FROM t0_template
 
6781
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6782
ERROR 22012: Division by 0
 
6783
COMMIT;
 
6784
        
 
6785
# check transactions-8 success:         1
 
6786
# INFO: Storage engine used for t1 seems to be unable to revert
 
6787
#       changes made by the failing statement.
 
6788
SET @@session.sql_mode = '';
 
6789
SET AUTOCOMMIT= 1;
 
6790
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6791
COMMIT WORK;
 
6792
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6793
        
 
6794
# check special-1 success:      1
 
6795
UPDATE t1 SET f_charbig = '';
 
6796
        
 
6797
# check special-2 success:      1
 
6798
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6799
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6800
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6803
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6804
'just inserted' FROM t0_template
 
6805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6806
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6807
BEGIN
 
6808
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6809
f_charbig = 'updated by trigger'
 
6810
      WHERE f_int1 = new.f_int1;
 
6811
END|
 
6812
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6813
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6815
        
 
6816
# check trigger-1 success:      1
 
6817
DROP TRIGGER trg_1;
 
6818
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6819
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6820
f_charbig = 'just inserted'
 
6821
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6822
DELETE FROM t0_aux
 
6823
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6824
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6825
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6826
'just inserted' FROM t0_template
 
6827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6828
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6829
BEGIN
 
6830
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6831
f_charbig = 'updated by trigger'
 
6832
      WHERE f_int1 = new.f_int1;
 
6833
END|
 
6834
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6835
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6837
        
 
6838
# check trigger-2 success:      1
 
6839
DROP TRIGGER trg_1;
 
6840
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6841
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6842
f_charbig = 'just inserted'
 
6843
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6844
DELETE FROM t0_aux
 
6845
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6846
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6847
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6848
'just inserted' FROM t0_template
 
6849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6850
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6851
BEGIN
 
6852
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6853
f_charbig = 'updated by trigger'
 
6854
      WHERE f_int1 = new.f_int1;
 
6855
END|
 
6856
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6857
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6858
        
 
6859
# check trigger-3 success:      1
 
6860
DROP TRIGGER trg_1;
 
6861
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6862
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6863
f_charbig = 'just inserted'
 
6864
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6865
DELETE FROM t0_aux
 
6866
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6867
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6868
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6869
'just inserted' FROM t0_template
 
6870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6871
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6872
BEGIN
 
6873
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6874
f_charbig = 'updated by trigger'
 
6875
      WHERE f_int1 = - old.f_int1;
 
6876
END|
 
6877
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6878
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6879
        
 
6880
# check trigger-4 success:      1
 
6881
DROP TRIGGER trg_1;
 
6882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6883
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6884
f_charbig = 'just inserted'
 
6885
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6886
DELETE FROM t0_aux
 
6887
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6889
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6890
'just inserted' FROM t0_template
 
6891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6892
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6893
BEGIN
 
6894
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6895
f_charbig = 'updated by trigger'
 
6896
      WHERE f_int1 = new.f_int1;
 
6897
END|
 
6898
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6899
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6900
        
 
6901
# check trigger-5 success:      1
 
6902
DROP TRIGGER trg_1;
 
6903
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6904
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6905
f_charbig = 'just inserted'
 
6906
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6907
DELETE FROM t0_aux
 
6908
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6909
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6910
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6911
'just inserted' FROM t0_template
 
6912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6913
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6914
BEGIN
 
6915
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6916
f_charbig = 'updated by trigger'
 
6917
      WHERE f_int1 = - old.f_int1;
 
6918
END|
 
6919
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6920
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6921
        
 
6922
# check trigger-6 success:      1
 
6923
DROP TRIGGER trg_1;
 
6924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6925
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6926
f_charbig = 'just inserted'
 
6927
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6928
DELETE FROM t0_aux
 
6929
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6932
'just inserted' FROM t0_template
 
6933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6934
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6935
BEGIN
 
6936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6937
f_charbig = 'updated by trigger'
 
6938
      WHERE f_int1 = - old.f_int1;
 
6939
END|
 
6940
DELETE FROM t0_aux
 
6941
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6942
        
 
6943
# check trigger-7 success:      1
 
6944
DROP TRIGGER trg_1;
 
6945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6946
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6947
f_charbig = 'just inserted'
 
6948
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6949
DELETE FROM t0_aux
 
6950
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6953
'just inserted' FROM t0_template
 
6954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6955
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6956
BEGIN
 
6957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6958
f_charbig = 'updated by trigger'
 
6959
      WHERE f_int1 = - old.f_int1;
 
6960
END|
 
6961
DELETE FROM t0_aux
 
6962
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6963
        
 
6964
# check trigger-8 success:      1
 
6965
DROP TRIGGER trg_1;
 
6966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6967
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6968
f_charbig = 'just inserted'
 
6969
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6970
DELETE FROM t0_aux
 
6971
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6972
DELETE FROM t1
 
6973
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6974
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6975
BEGIN
 
6976
SET new.f_int1 = old.f_int1 + @max_row,
 
6977
new.f_int2 = old.f_int2 - @max_row,
 
6978
new.f_charbig = '####updated per update trigger####';
 
6979
END|
 
6980
UPDATE t1
 
6981
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6982
f_charbig = '####updated per update statement itself####';
 
6983
        
 
6984
# check trigger-9 success:      1
 
6985
DROP TRIGGER trg_2;
 
6986
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6987
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6988
f_charbig = CONCAT('===',f_char1,'===');
 
6989
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6990
BEGIN
 
6991
SET new.f_int1 = new.f_int1 + @max_row,
 
6992
new.f_int2 = new.f_int2 - @max_row,
 
6993
new.f_charbig = '####updated per update trigger####';
 
6994
END|
 
6995
UPDATE t1
 
6996
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6997
f_charbig = '####updated per update statement itself####';
 
6998
        
 
6999
# check trigger-10 success:     1
 
7000
DROP TRIGGER trg_2;
 
7001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7003
f_charbig = CONCAT('===',f_char1,'===');
 
7004
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7005
BEGIN
 
7006
SET new.f_int1 = @my_max1 + @counter,
 
7007
new.f_int2 = @my_min2 - @counter,
 
7008
new.f_charbig = '####updated per insert trigger####';
 
7009
SET @counter = @counter + 1;
 
7010
END|
 
7011
SET @counter = 1;
 
7012
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7013
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7014
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7015
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7017
ORDER BY f_int1;
 
7018
DROP TRIGGER trg_3;
 
7019
        
 
7020
# check trigger-11 success:     1
 
7021
DELETE FROM t1
 
7022
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7023
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7024
AND f_charbig = '####updated per insert trigger####';
 
7025
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7026
BEGIN
 
7027
SET new.f_int1 = @my_max1 + @counter,
 
7028
new.f_int2 = @my_min2 - @counter,
 
7029
new.f_charbig = '####updated per insert trigger####';
 
7030
SET @counter = @counter + 1;
 
7031
END|
 
7032
SET @counter = 1;
 
7033
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7034
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7035
SELECT CAST(f_int1 AS CHAR),
 
7036
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7038
ORDER BY f_int1;
 
7039
DROP TRIGGER trg_3;
 
7040
        
 
7041
# check trigger-12 success:     1
 
7042
DELETE FROM t1
 
7043
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7044
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7045
AND f_charbig = '####updated per insert trigger####';
 
7046
ANALYZE  TABLE t1;
 
7047
Table   Op      Msg_type        Msg_text
 
7048
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
7049
CHECK    TABLE t1 EXTENDED;
 
7050
Table   Op      Msg_type        Msg_text
 
7051
test.t1 check   note    The storage engine for the table doesn't support check
 
7052
CHECKSUM TABLE t1 EXTENDED;
 
7053
Table   Checksum
 
7054
test.t1 <some_value>
 
7055
OPTIMIZE TABLE t1;
 
7056
Table   Op      Msg_type        Msg_text
 
7057
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
7058
# check layout success:    1
 
7059
REPAIR   TABLE t1 EXTENDED;
 
7060
Table   Op      Msg_type        Msg_text
 
7061
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7062
# check layout success:    1
 
7063
TRUNCATE t1;
 
7064
        
 
7065
# check TRUNCATE success:       1
 
7066
# check layout success:    1
 
7067
# End usability test (inc/partition_check.inc)
 
7068
DROP TABLE t1;
 
7069
CREATE TABLE t1 (
 
7070
f_int1 INTEGER,
 
7071
f_int2 INTEGER,
 
7072
f_char1 CHAR(20),
 
7073
f_char2 CHAR(20),
 
7074
f_charbig VARCHAR(1000)
 
7075
 
 
7076
)
 
7077
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
7078
(PARTITION part1 VALUES LESS THAN (0)
 
7079
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
7080
PARTITION part2 VALUES LESS THAN (5)
 
7081
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
7082
PARTITION part3 VALUES LESS THAN (10)
 
7083
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
7084
PARTITION part4 VALUES LESS THAN (2147483646)
 
7085
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
7086
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7087
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7088
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7089
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
7090
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7091
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7092
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7093
# Start usability test (inc/partition_check.inc)
 
7094
create_command
 
7095
SHOW CREATE TABLE t1;
 
7096
Table   Create Table
 
7097
t1      CREATE TABLE `t1` (
 
7098
  `f_int1` int(11) DEFAULT NULL,
 
7099
  `f_int2` int(11) DEFAULT NULL,
 
7100
  `f_char1` char(20) DEFAULT NULL,
 
7101
  `f_char2` char(20) DEFAULT NULL,
 
7102
  `f_charbig` varchar(1000) DEFAULT NULL,
 
7103
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
7104
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
7105
 
 
7106
unified filelist
 
7107
t1#P#part1#SP#subpart11.MYD
 
7108
t1#P#part1#SP#subpart11.MYI
 
7109
t1#P#part1#SP#subpart12.MYD
 
7110
t1#P#part1#SP#subpart12.MYI
 
7111
t1#P#part2#SP#subpart21.MYD
 
7112
t1#P#part2#SP#subpart21.MYI
 
7113
t1#P#part2#SP#subpart22.MYD
 
7114
t1#P#part2#SP#subpart22.MYI
 
7115
t1#P#part3#SP#subpart31.MYD
 
7116
t1#P#part3#SP#subpart31.MYI
 
7117
t1#P#part3#SP#subpart32.MYD
 
7118
t1#P#part3#SP#subpart32.MYI
 
7119
t1#P#part4#SP#subpart41.MYD
 
7120
t1#P#part4#SP#subpart41.MYI
 
7121
t1#P#part4#SP#subpart42.MYD
 
7122
t1#P#part4#SP#subpart42.MYI
 
7123
t1.frm
 
7124
t1.par
 
7125
 
 
7126
# check prerequisites-1 success:    1
 
7127
# check COUNT(*) success:    1
 
7128
# check MIN/MAX(f_int1) success:    1
 
7129
# check MIN/MAX(f_int2) success:    1
 
7130
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7131
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7132
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7133
WHERE f_int1 IN (2,3);
 
7134
ERROR 23000: Can't write; duplicate key in table 't1'
 
7135
# check prerequisites-3 success:    1
 
7136
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7137
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7138
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7139
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7140
WHERE f_int1 IN (2,3);
 
7141
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7142
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7143
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7144
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7145
WHERE f_int1 IN (2,3);
 
7146
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7147
# check read via f_int1 success: 1
 
7148
# check read via f_int2 success: 1
 
7149
        
 
7150
# check multiple-1 success:     1
 
7151
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7152
        
 
7153
# check multiple-2 success:     1
 
7154
INSERT INTO t1 SELECT * FROM t0_template
 
7155
WHERE MOD(f_int1,3) = 0;
 
7156
        
 
7157
# check multiple-3 success:     1
 
7158
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7159
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7160
AND @max_row_div2 + @max_row_div4;
 
7161
        
 
7162
# check multiple-4 success:     1
 
7163
DELETE FROM t1
 
7164
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7165
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7166
        
 
7167
# check multiple-5 success:     1
 
7168
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7169
WHERE MOD(f_int1,3) = 0
 
7170
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7171
SELECT COUNT(*) INTO @clash_count
 
7172
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7173
WHERE MOD(f_int1,3) = 0
 
7174
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7175
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7176
INSERT INTO t1
 
7177
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7178
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7179
f_charbig = '#SINGLE#';
 
7180
        
 
7181
# check single-1 success:       1
 
7182
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7183
INSERT INTO t1
 
7184
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7185
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7186
f_charbig = '#SINGLE#';
 
7187
        
 
7188
# check single-2 success:       1
 
7189
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7190
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7191
UPDATE t1 SET f_int1 = @cur_value2
 
7192
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7193
        
 
7194
# check single-3 success:       1
 
7195
SET @cur_value1= -1;
 
7196
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7197
UPDATE t1 SET f_int1 = @cur_value1
 
7198
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7199
        
 
7200
# check single-4 success:       1
 
7201
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7202
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7203
        
 
7204
# check single-5 success:       1
 
7205
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7206
        
 
7207
# check single-6 success:       1
 
7208
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7209
ERROR HY000: Table has no partition for value 2147483647
 
7210
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7211
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7212
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7213
f_charbig = '#NULL#';
 
7214
INSERT INTO t1
 
7215
SET f_int1 = NULL , f_int2 = -@max_row,
 
7216
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7217
f_charbig = '#NULL#';
 
7218
# check null success:    1
 
7219
        
 
7220
# check null-1 success:         1
 
7221
UPDATE t1 SET f_int1 = -@max_row
 
7222
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7223
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7224
        
 
7225
# check null-2 success:         1
 
7226
UPDATE t1 SET f_int1 = NULL
 
7227
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7228
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7229
        
 
7230
# check null-3 success:         1
 
7231
DELETE FROM t1
 
7232
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7233
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7234
        
 
7235
# check null-4 success:         1
 
7236
DELETE FROM t1
 
7237
WHERE f_int1 = 0 AND f_int2 = 0
 
7238
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7239
AND f_charbig = '#NULL#';
 
7240
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7241
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7242
   FROM t0_template source_tab
 
7243
WHERE MOD(f_int1,3) = 0
 
7244
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7245
ON DUPLICATE KEY
 
7246
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7247
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7248
f_charbig = 'was updated';
 
7249
        
 
7250
# check unique-1-a success:     1
 
7251
        
 
7252
# check unique-1-b success:     1
 
7253
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7256
f_charbig = CONCAT('===',f_char1,'===')
 
7257
WHERE f_charbig = 'was updated';
 
7258
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7259
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7260
   FROM t0_template source_tab
 
7261
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7262
        
 
7263
# check replace success:        1
 
7264
DELETE FROM t1
 
7265
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7266
DELETE FROM t1
 
7267
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7268
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7269
UPDATE t1 SET f_int2 = f_int1,
 
7270
f_char1 = CAST(f_int1 AS CHAR),
 
7271
f_char2 = CAST(f_int1 AS CHAR),
 
7272
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7273
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7274
SET AUTOCOMMIT= 0;
 
7275
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7276
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7277
FROM t0_template source_tab
 
7278
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7279
        
 
7280
# check transactions-1 success:         1
 
7281
COMMIT WORK;
 
7282
        
 
7283
# check transactions-2 success:         1
 
7284
ROLLBACK WORK;
 
7285
        
 
7286
# check transactions-3 success:         1
 
7287
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7288
COMMIT WORK;
 
7289
ROLLBACK WORK;
 
7290
        
 
7291
# check transactions-4 success:         1
 
7292
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7293
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7294
FROM t0_template source_tab
 
7295
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7296
        
 
7297
# check transactions-5 success:         1
 
7298
ROLLBACK WORK;
 
7299
Warnings:
 
7300
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7301
        
 
7302
# check transactions-6 success:         1
 
7303
# INFO: Storage engine used for t1 seems to be not transactional.
 
7304
COMMIT;
 
7305
        
 
7306
# check transactions-7 success:         1
 
7307
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7308
COMMIT WORK;
 
7309
SET @@session.sql_mode = 'traditional';
 
7310
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7311
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7312
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7313
'', '', 'was inserted' FROM t0_template
 
7314
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7315
ERROR 22012: Division by 0
 
7316
COMMIT;
 
7317
        
 
7318
# check transactions-8 success:         1
 
7319
# INFO: Storage engine used for t1 seems to be unable to revert
 
7320
#       changes made by the failing statement.
 
7321
SET @@session.sql_mode = '';
 
7322
SET AUTOCOMMIT= 1;
 
7323
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7324
COMMIT WORK;
 
7325
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7326
        
 
7327
# check special-1 success:      1
 
7328
UPDATE t1 SET f_charbig = '';
 
7329
        
 
7330
# check special-2 success:      1
 
7331
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7332
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7333
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7335
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7336
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7337
'just inserted' FROM t0_template
 
7338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7339
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7340
BEGIN
 
7341
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7342
f_charbig = 'updated by trigger'
 
7343
      WHERE f_int1 = new.f_int1;
 
7344
END|
 
7345
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7346
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7348
        
 
7349
# check trigger-1 success:      1
 
7350
DROP TRIGGER trg_1;
 
7351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7353
f_charbig = 'just inserted'
 
7354
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7355
DELETE FROM t0_aux
 
7356
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7357
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7358
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7359
'just inserted' FROM t0_template
 
7360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7361
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7362
BEGIN
 
7363
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7364
f_charbig = 'updated by trigger'
 
7365
      WHERE f_int1 = new.f_int1;
 
7366
END|
 
7367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7368
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7370
        
 
7371
# check trigger-2 success:      1
 
7372
DROP TRIGGER trg_1;
 
7373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7375
f_charbig = 'just inserted'
 
7376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7377
DELETE FROM t0_aux
 
7378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7379
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7380
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7381
'just inserted' FROM t0_template
 
7382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7383
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7384
BEGIN
 
7385
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7386
f_charbig = 'updated by trigger'
 
7387
      WHERE f_int1 = new.f_int1;
 
7388
END|
 
7389
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7390
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7391
        
 
7392
# check trigger-3 success:      1
 
7393
DROP TRIGGER trg_1;
 
7394
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7395
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7396
f_charbig = 'just inserted'
 
7397
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7398
DELETE FROM t0_aux
 
7399
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7400
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7401
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7402
'just inserted' FROM t0_template
 
7403
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7404
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7405
BEGIN
 
7406
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7407
f_charbig = 'updated by trigger'
 
7408
      WHERE f_int1 = - old.f_int1;
 
7409
END|
 
7410
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7411
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7412
        
 
7413
# check trigger-4 success:      1
 
7414
DROP TRIGGER trg_1;
 
7415
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7416
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7417
f_charbig = 'just inserted'
 
7418
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7419
DELETE FROM t0_aux
 
7420
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7422
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7423
'just inserted' FROM t0_template
 
7424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7425
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7426
BEGIN
 
7427
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7428
f_charbig = 'updated by trigger'
 
7429
      WHERE f_int1 = new.f_int1;
 
7430
END|
 
7431
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7432
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7433
        
 
7434
# check trigger-5 success:      1
 
7435
DROP TRIGGER trg_1;
 
7436
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7437
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7438
f_charbig = 'just inserted'
 
7439
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7440
DELETE FROM t0_aux
 
7441
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7442
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7443
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7444
'just inserted' FROM t0_template
 
7445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7446
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7447
BEGIN
 
7448
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7449
f_charbig = 'updated by trigger'
 
7450
      WHERE f_int1 = - old.f_int1;
 
7451
END|
 
7452
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7453
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7454
        
 
7455
# check trigger-6 success:      1
 
7456
DROP TRIGGER trg_1;
 
7457
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7458
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7459
f_charbig = 'just inserted'
 
7460
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7461
DELETE FROM t0_aux
 
7462
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7463
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7464
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7465
'just inserted' FROM t0_template
 
7466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7467
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7468
BEGIN
 
7469
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7470
f_charbig = 'updated by trigger'
 
7471
      WHERE f_int1 = - old.f_int1;
 
7472
END|
 
7473
DELETE FROM t0_aux
 
7474
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7475
        
 
7476
# check trigger-7 success:      1
 
7477
DROP TRIGGER trg_1;
 
7478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7480
f_charbig = 'just inserted'
 
7481
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7482
DELETE FROM t0_aux
 
7483
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7486
'just inserted' FROM t0_template
 
7487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7488
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7489
BEGIN
 
7490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7491
f_charbig = 'updated by trigger'
 
7492
      WHERE f_int1 = - old.f_int1;
 
7493
END|
 
7494
DELETE FROM t0_aux
 
7495
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7496
        
 
7497
# check trigger-8 success:      1
 
7498
DROP TRIGGER trg_1;
 
7499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7501
f_charbig = 'just inserted'
 
7502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7503
DELETE FROM t0_aux
 
7504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7505
DELETE FROM t1
 
7506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7507
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7508
BEGIN
 
7509
SET new.f_int1 = old.f_int1 + @max_row,
 
7510
new.f_int2 = old.f_int2 - @max_row,
 
7511
new.f_charbig = '####updated per update trigger####';
 
7512
END|
 
7513
UPDATE t1
 
7514
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7515
f_charbig = '####updated per update statement itself####';
 
7516
        
 
7517
# check trigger-9 success:      1
 
7518
DROP TRIGGER trg_2;
 
7519
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7520
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7521
f_charbig = CONCAT('===',f_char1,'===');
 
7522
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7523
BEGIN
 
7524
SET new.f_int1 = new.f_int1 + @max_row,
 
7525
new.f_int2 = new.f_int2 - @max_row,
 
7526
new.f_charbig = '####updated per update trigger####';
 
7527
END|
 
7528
UPDATE t1
 
7529
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7530
f_charbig = '####updated per update statement itself####';
 
7531
        
 
7532
# check trigger-10 success:     1
 
7533
DROP TRIGGER trg_2;
 
7534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7536
f_charbig = CONCAT('===',f_char1,'===');
 
7537
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7538
BEGIN
 
7539
SET new.f_int1 = @my_max1 + @counter,
 
7540
new.f_int2 = @my_min2 - @counter,
 
7541
new.f_charbig = '####updated per insert trigger####';
 
7542
SET @counter = @counter + 1;
 
7543
END|
 
7544
SET @counter = 1;
 
7545
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7546
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7547
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7548
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7550
ORDER BY f_int1;
 
7551
DROP TRIGGER trg_3;
 
7552
        
 
7553
# check trigger-11 success:     1
 
7554
DELETE FROM t1
 
7555
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7556
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7557
AND f_charbig = '####updated per insert trigger####';
 
7558
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7559
BEGIN
 
7560
SET new.f_int1 = @my_max1 + @counter,
 
7561
new.f_int2 = @my_min2 - @counter,
 
7562
new.f_charbig = '####updated per insert trigger####';
 
7563
SET @counter = @counter + 1;
 
7564
END|
 
7565
SET @counter = 1;
 
7566
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7567
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7568
SELECT CAST(f_int1 AS CHAR),
 
7569
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7571
ORDER BY f_int1;
 
7572
DROP TRIGGER trg_3;
 
7573
        
 
7574
# check trigger-12 success:     1
 
7575
DELETE FROM t1
 
7576
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7577
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7578
AND f_charbig = '####updated per insert trigger####';
 
7579
ANALYZE  TABLE t1;
 
7580
Table   Op      Msg_type        Msg_text
 
7581
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
7582
CHECK    TABLE t1 EXTENDED;
 
7583
Table   Op      Msg_type        Msg_text
 
7584
test.t1 check   note    The storage engine for the table doesn't support check
 
7585
CHECKSUM TABLE t1 EXTENDED;
 
7586
Table   Checksum
 
7587
test.t1 <some_value>
 
7588
OPTIMIZE TABLE t1;
 
7589
Table   Op      Msg_type        Msg_text
 
7590
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
7591
# check layout success:    1
 
7592
REPAIR   TABLE t1 EXTENDED;
 
7593
Table   Op      Msg_type        Msg_text
 
7594
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7595
# check layout success:    1
 
7596
TRUNCATE t1;
 
7597
        
 
7598
# check TRUNCATE success:       1
 
7599
# check layout success:    1
 
7600
# End usability test (inc/partition_check.inc)
 
7601
DROP TABLE t1;
 
7602
CREATE TABLE t1 (
 
7603
f_int1 INTEGER,
 
7604
f_int2 INTEGER,
 
7605
f_char1 CHAR(20),
 
7606
f_char2 CHAR(20),
 
7607
f_charbig VARCHAR(1000)
 
7608
 
 
7609
)
 
7610
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
7611
(PARTITION part1 VALUES IN (0)
 
7612
(SUBPARTITION sp11, SUBPARTITION sp12),
 
7613
PARTITION part2 VALUES IN (1)
 
7614
(SUBPARTITION sp21, SUBPARTITION sp22),
 
7615
PARTITION part3 VALUES IN (2)
 
7616
(SUBPARTITION sp31, SUBPARTITION sp32),
 
7617
PARTITION part4 VALUES IN (NULL)
 
7618
(SUBPARTITION sp41, SUBPARTITION sp42));
 
7619
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7620
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7621
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7622
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
7623
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7624
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7625
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7626
# Start usability test (inc/partition_check.inc)
 
7627
create_command
 
7628
SHOW CREATE TABLE t1;
 
7629
Table   Create Table
 
7630
t1      CREATE TABLE `t1` (
 
7631
  `f_int1` int(11) DEFAULT NULL,
 
7632
  `f_int2` int(11) DEFAULT NULL,
 
7633
  `f_char1` char(20) DEFAULT NULL,
 
7634
  `f_char2` char(20) DEFAULT NULL,
 
7635
  `f_charbig` varchar(1000) DEFAULT NULL,
 
7636
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
7637
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
7638
 
 
7639
unified filelist
 
7640
t1#P#part1#SP#sp11.MYD
 
7641
t1#P#part1#SP#sp11.MYI
 
7642
t1#P#part1#SP#sp12.MYD
 
7643
t1#P#part1#SP#sp12.MYI
 
7644
t1#P#part2#SP#sp21.MYD
 
7645
t1#P#part2#SP#sp21.MYI
 
7646
t1#P#part2#SP#sp22.MYD
 
7647
t1#P#part2#SP#sp22.MYI
 
7648
t1#P#part3#SP#sp31.MYD
 
7649
t1#P#part3#SP#sp31.MYI
 
7650
t1#P#part3#SP#sp32.MYD
 
7651
t1#P#part3#SP#sp32.MYI
 
7652
t1#P#part4#SP#sp41.MYD
 
7653
t1#P#part4#SP#sp41.MYI
 
7654
t1#P#part4#SP#sp42.MYD
 
7655
t1#P#part4#SP#sp42.MYI
 
7656
t1.frm
 
7657
t1.par
 
7658
 
 
7659
# check prerequisites-1 success:    1
 
7660
# check COUNT(*) success:    1
 
7661
# check MIN/MAX(f_int1) success:    1
 
7662
# check MIN/MAX(f_int2) success:    1
 
7663
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7664
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7665
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7666
WHERE f_int1 IN (2,3);
 
7667
ERROR 23000: Can't write; duplicate key in table 't1'
 
7668
# check prerequisites-3 success:    1
 
7669
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7670
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7671
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7672
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7673
WHERE f_int1 IN (2,3);
 
7674
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7675
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7676
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7677
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7678
WHERE f_int1 IN (2,3);
 
7679
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7680
# check read via f_int1 success: 1
 
7681
# check read via f_int2 success: 1
 
7682
        
 
7683
# check multiple-1 success:     1
 
7684
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7685
        
 
7686
# check multiple-2 success:     1
 
7687
INSERT INTO t1 SELECT * FROM t0_template
 
7688
WHERE MOD(f_int1,3) = 0;
 
7689
        
 
7690
# check multiple-3 success:     1
 
7691
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7692
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7693
AND @max_row_div2 + @max_row_div4;
 
7694
        
 
7695
# check multiple-4 success:     1
 
7696
DELETE FROM t1
 
7697
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7698
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7699
        
 
7700
# check multiple-5 success:     1
 
7701
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7702
WHERE MOD(f_int1,3) = 0
 
7703
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7704
SELECT COUNT(*) INTO @clash_count
 
7705
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7706
WHERE MOD(f_int1,3) = 0
 
7707
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7708
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7709
INSERT INTO t1
 
7710
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7711
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7712
f_charbig = '#SINGLE#';
 
7713
        
 
7714
# check single-1 success:       1
 
7715
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7716
INSERT INTO t1
 
7717
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7718
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7719
f_charbig = '#SINGLE#';
 
7720
        
 
7721
# check single-2 success:       1
 
7722
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7723
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7724
UPDATE t1 SET f_int1 = @cur_value2
 
7725
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7726
        
 
7727
# check single-3 success:       1
 
7728
SET @cur_value1= -1;
 
7729
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7730
UPDATE t1 SET f_int1 = @cur_value1
 
7731
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7732
        
 
7733
# check single-4 success:       1
 
7734
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7735
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7736
        
 
7737
# check single-5 success:       1
 
7738
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7739
        
 
7740
# check single-6 success:       1
 
7741
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7742
        
 
7743
# check single-7 success:       1
 
7744
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7745
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7746
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7747
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7748
f_charbig = '#NULL#';
 
7749
INSERT INTO t1
 
7750
SET f_int1 = NULL , f_int2 = -@max_row,
 
7751
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7752
f_charbig = '#NULL#';
 
7753
# check null success:    1
 
7754
        
 
7755
# check null-1 success:         1
 
7756
UPDATE t1 SET f_int1 = -@max_row
 
7757
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7758
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7759
        
 
7760
# check null-2 success:         1
 
7761
UPDATE t1 SET f_int1 = NULL
 
7762
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7763
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7764
        
 
7765
# check null-3 success:         1
 
7766
DELETE FROM t1
 
7767
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7768
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7769
        
 
7770
# check null-4 success:         1
 
7771
DELETE FROM t1
 
7772
WHERE f_int1 = 0 AND f_int2 = 0
 
7773
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7774
AND f_charbig = '#NULL#';
 
7775
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7776
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7777
   FROM t0_template source_tab
 
7778
WHERE MOD(f_int1,3) = 0
 
7779
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7780
ON DUPLICATE KEY
 
7781
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7782
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7783
f_charbig = 'was updated';
 
7784
        
 
7785
# check unique-1-a success:     1
 
7786
        
 
7787
# check unique-1-b success:     1
 
7788
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7791
f_charbig = CONCAT('===',f_char1,'===')
 
7792
WHERE f_charbig = 'was updated';
 
7793
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7794
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7795
   FROM t0_template source_tab
 
7796
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7797
        
 
7798
# check replace success:        1
 
7799
DELETE FROM t1
 
7800
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7801
DELETE FROM t1
 
7802
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7803
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7804
UPDATE t1 SET f_int2 = f_int1,
 
7805
f_char1 = CAST(f_int1 AS CHAR),
 
7806
f_char2 = CAST(f_int1 AS CHAR),
 
7807
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7808
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7809
SET AUTOCOMMIT= 0;
 
7810
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7811
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7812
FROM t0_template source_tab
 
7813
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7814
        
 
7815
# check transactions-1 success:         1
 
7816
COMMIT WORK;
 
7817
        
 
7818
# check transactions-2 success:         1
 
7819
ROLLBACK WORK;
 
7820
        
 
7821
# check transactions-3 success:         1
 
7822
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7823
COMMIT WORK;
 
7824
ROLLBACK WORK;
 
7825
        
 
7826
# check transactions-4 success:         1
 
7827
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7828
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7829
FROM t0_template source_tab
 
7830
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7831
        
 
7832
# check transactions-5 success:         1
 
7833
ROLLBACK WORK;
 
7834
Warnings:
 
7835
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7836
        
 
7837
# check transactions-6 success:         1
 
7838
# INFO: Storage engine used for t1 seems to be not transactional.
 
7839
COMMIT;
 
7840
        
 
7841
# check transactions-7 success:         1
 
7842
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7843
COMMIT WORK;
 
7844
SET @@session.sql_mode = 'traditional';
 
7845
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7846
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7847
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7848
'', '', 'was inserted' FROM t0_template
 
7849
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7850
ERROR 22012: Division by 0
 
7851
COMMIT;
 
7852
        
 
7853
# check transactions-8 success:         1
 
7854
# INFO: Storage engine used for t1 seems to be unable to revert
 
7855
#       changes made by the failing statement.
 
7856
SET @@session.sql_mode = '';
 
7857
SET AUTOCOMMIT= 1;
 
7858
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7859
COMMIT WORK;
 
7860
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7861
        
 
7862
# check special-1 success:      1
 
7863
UPDATE t1 SET f_charbig = '';
 
7864
        
 
7865
# check special-2 success:      1
 
7866
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7867
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7868
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7870
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7871
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7872
'just inserted' FROM t0_template
 
7873
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7874
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7875
BEGIN
 
7876
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7877
f_charbig = 'updated by trigger'
 
7878
      WHERE f_int1 = new.f_int1;
 
7879
END|
 
7880
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7881
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7883
        
 
7884
# check trigger-1 success:      1
 
7885
DROP TRIGGER trg_1;
 
7886
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7887
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7888
f_charbig = 'just inserted'
 
7889
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7890
DELETE FROM t0_aux
 
7891
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7892
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7893
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7894
'just inserted' FROM t0_template
 
7895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7896
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7897
BEGIN
 
7898
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7899
f_charbig = 'updated by trigger'
 
7900
      WHERE f_int1 = new.f_int1;
 
7901
END|
 
7902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7903
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7904
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7905
        
 
7906
# check trigger-2 success:      1
 
7907
DROP TRIGGER trg_1;
 
7908
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7909
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7910
f_charbig = 'just inserted'
 
7911
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7912
DELETE FROM t0_aux
 
7913
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7914
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7915
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7916
'just inserted' FROM t0_template
 
7917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7918
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7919
BEGIN
 
7920
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7921
f_charbig = 'updated by trigger'
 
7922
      WHERE f_int1 = new.f_int1;
 
7923
END|
 
7924
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7925
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7926
        
 
7927
# check trigger-3 success:      1
 
7928
DROP TRIGGER trg_1;
 
7929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7931
f_charbig = 'just inserted'
 
7932
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7933
DELETE FROM t0_aux
 
7934
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7935
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7936
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7937
'just inserted' FROM t0_template
 
7938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7939
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7940
BEGIN
 
7941
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7942
f_charbig = 'updated by trigger'
 
7943
      WHERE f_int1 = - old.f_int1;
 
7944
END|
 
7945
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7946
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7947
        
 
7948
# check trigger-4 success:      1
 
7949
DROP TRIGGER trg_1;
 
7950
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7951
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7952
f_charbig = 'just inserted'
 
7953
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7954
DELETE FROM t0_aux
 
7955
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7956
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7957
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7958
'just inserted' FROM t0_template
 
7959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7960
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7961
BEGIN
 
7962
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7963
f_charbig = 'updated by trigger'
 
7964
      WHERE f_int1 = new.f_int1;
 
7965
END|
 
7966
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7967
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7968
        
 
7969
# check trigger-5 success:      1
 
7970
DROP TRIGGER trg_1;
 
7971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7973
f_charbig = 'just inserted'
 
7974
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7975
DELETE FROM t0_aux
 
7976
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7977
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7978
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7979
'just inserted' FROM t0_template
 
7980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7981
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7982
BEGIN
 
7983
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7984
f_charbig = 'updated by trigger'
 
7985
      WHERE f_int1 = - old.f_int1;
 
7986
END|
 
7987
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7988
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7989
        
 
7990
# check trigger-6 success:      1
 
7991
DROP TRIGGER trg_1;
 
7992
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7993
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7994
f_charbig = 'just inserted'
 
7995
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7996
DELETE FROM t0_aux
 
7997
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7998
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7999
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8000
'just inserted' FROM t0_template
 
8001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8002
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8003
BEGIN
 
8004
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8005
f_charbig = 'updated by trigger'
 
8006
      WHERE f_int1 = - old.f_int1;
 
8007
END|
 
8008
DELETE FROM t0_aux
 
8009
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8010
        
 
8011
# check trigger-7 success:      1
 
8012
DROP TRIGGER trg_1;
 
8013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8015
f_charbig = 'just inserted'
 
8016
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8017
DELETE FROM t0_aux
 
8018
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8021
'just inserted' FROM t0_template
 
8022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8023
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8024
BEGIN
 
8025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8026
f_charbig = 'updated by trigger'
 
8027
      WHERE f_int1 = - old.f_int1;
 
8028
END|
 
8029
DELETE FROM t0_aux
 
8030
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8031
        
 
8032
# check trigger-8 success:      1
 
8033
DROP TRIGGER trg_1;
 
8034
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8035
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8036
f_charbig = 'just inserted'
 
8037
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8038
DELETE FROM t0_aux
 
8039
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8040
DELETE FROM t1
 
8041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8042
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8043
BEGIN
 
8044
SET new.f_int1 = old.f_int1 + @max_row,
 
8045
new.f_int2 = old.f_int2 - @max_row,
 
8046
new.f_charbig = '####updated per update trigger####';
 
8047
END|
 
8048
UPDATE t1
 
8049
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8050
f_charbig = '####updated per update statement itself####';
 
8051
        
 
8052
# check trigger-9 success:      1
 
8053
DROP TRIGGER trg_2;
 
8054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8056
f_charbig = CONCAT('===',f_char1,'===');
 
8057
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8058
BEGIN
 
8059
SET new.f_int1 = new.f_int1 + @max_row,
 
8060
new.f_int2 = new.f_int2 - @max_row,
 
8061
new.f_charbig = '####updated per update trigger####';
 
8062
END|
 
8063
UPDATE t1
 
8064
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8065
f_charbig = '####updated per update statement itself####';
 
8066
        
 
8067
# check trigger-10 success:     1
 
8068
DROP TRIGGER trg_2;
 
8069
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8070
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8071
f_charbig = CONCAT('===',f_char1,'===');
 
8072
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8073
BEGIN
 
8074
SET new.f_int1 = @my_max1 + @counter,
 
8075
new.f_int2 = @my_min2 - @counter,
 
8076
new.f_charbig = '####updated per insert trigger####';
 
8077
SET @counter = @counter + 1;
 
8078
END|
 
8079
SET @counter = 1;
 
8080
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8081
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8082
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8083
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8085
ORDER BY f_int1;
 
8086
DROP TRIGGER trg_3;
 
8087
        
 
8088
# check trigger-11 success:     1
 
8089
DELETE FROM t1
 
8090
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8091
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8092
AND f_charbig = '####updated per insert trigger####';
 
8093
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8094
BEGIN
 
8095
SET new.f_int1 = @my_max1 + @counter,
 
8096
new.f_int2 = @my_min2 - @counter,
 
8097
new.f_charbig = '####updated per insert trigger####';
 
8098
SET @counter = @counter + 1;
 
8099
END|
 
8100
SET @counter = 1;
 
8101
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8102
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8103
SELECT CAST(f_int1 AS CHAR),
 
8104
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8106
ORDER BY f_int1;
 
8107
DROP TRIGGER trg_3;
 
8108
        
 
8109
# check trigger-12 success:     1
 
8110
DELETE FROM t1
 
8111
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8112
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8113
AND f_charbig = '####updated per insert trigger####';
 
8114
ANALYZE  TABLE t1;
 
8115
Table   Op      Msg_type        Msg_text
 
8116
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
8117
CHECK    TABLE t1 EXTENDED;
 
8118
Table   Op      Msg_type        Msg_text
 
8119
test.t1 check   note    The storage engine for the table doesn't support check
 
8120
CHECKSUM TABLE t1 EXTENDED;
 
8121
Table   Checksum
 
8122
test.t1 <some_value>
 
8123
OPTIMIZE TABLE t1;
 
8124
Table   Op      Msg_type        Msg_text
 
8125
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
8126
# check layout success:    1
 
8127
REPAIR   TABLE t1 EXTENDED;
 
8128
Table   Op      Msg_type        Msg_text
 
8129
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8130
# check layout success:    1
 
8131
TRUNCATE t1;
 
8132
        
 
8133
# check TRUNCATE success:       1
 
8134
# check layout success:    1
 
8135
# End usability test (inc/partition_check.inc)
 
8136
DROP TABLE t1;
 
8137
CREATE TABLE t1 (
 
8138
f_int1 INTEGER,
 
8139
f_int2 INTEGER,
 
8140
f_char1 CHAR(20),
 
8141
f_char2 CHAR(20),
 
8142
f_charbig VARCHAR(1000)
 
8143
 
 
8144
)
 
8145
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
8146
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
8147
(PARTITION part1 VALUES IN (0),
 
8148
PARTITION part2 VALUES IN (1),
 
8149
PARTITION part3 VALUES IN (NULL));
 
8150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8151
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8152
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8153
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
8154
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8155
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8156
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8157
# Start usability test (inc/partition_check.inc)
 
8158
create_command
 
8159
SHOW CREATE TABLE t1;
 
8160
Table   Create Table
 
8161
t1      CREATE TABLE `t1` (
 
8162
  `f_int1` int(11) DEFAULT NULL,
 
8163
  `f_int2` int(11) DEFAULT NULL,
 
8164
  `f_char1` char(20) DEFAULT NULL,
 
8165
  `f_char2` char(20) DEFAULT NULL,
 
8166
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8167
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
8168
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
8169
 
 
8170
unified filelist
 
8171
t1#P#part1#SP#part1sp0.MYD
 
8172
t1#P#part1#SP#part1sp0.MYI
 
8173
t1#P#part1#SP#part1sp1.MYD
 
8174
t1#P#part1#SP#part1sp1.MYI
 
8175
t1#P#part1#SP#part1sp2.MYD
 
8176
t1#P#part1#SP#part1sp2.MYI
 
8177
t1#P#part2#SP#part2sp0.MYD
 
8178
t1#P#part2#SP#part2sp0.MYI
 
8179
t1#P#part2#SP#part2sp1.MYD
 
8180
t1#P#part2#SP#part2sp1.MYI
 
8181
t1#P#part2#SP#part2sp2.MYD
 
8182
t1#P#part2#SP#part2sp2.MYI
 
8183
t1#P#part3#SP#part3sp0.MYD
 
8184
t1#P#part3#SP#part3sp0.MYI
 
8185
t1#P#part3#SP#part3sp1.MYD
 
8186
t1#P#part3#SP#part3sp1.MYI
 
8187
t1#P#part3#SP#part3sp2.MYD
 
8188
t1#P#part3#SP#part3sp2.MYI
 
8189
t1.frm
 
8190
t1.par
 
8191
 
 
8192
# check prerequisites-1 success:    1
 
8193
# check COUNT(*) success:    1
 
8194
# check MIN/MAX(f_int1) success:    1
 
8195
# check MIN/MAX(f_int2) success:    1
 
8196
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8197
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8198
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8199
WHERE f_int1 IN (2,3);
 
8200
ERROR 23000: Can't write; duplicate key in table 't1'
 
8201
# check prerequisites-3 success:    1
 
8202
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8203
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8204
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8205
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8206
WHERE f_int1 IN (2,3);
 
8207
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8209
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8210
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8211
WHERE f_int1 IN (2,3);
 
8212
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8213
# check read via f_int1 success: 1
 
8214
# check read via f_int2 success: 1
 
8215
        
 
8216
# check multiple-1 success:     1
 
8217
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8218
        
 
8219
# check multiple-2 success:     1
 
8220
INSERT INTO t1 SELECT * FROM t0_template
 
8221
WHERE MOD(f_int1,3) = 0;
 
8222
        
 
8223
# check multiple-3 success:     1
 
8224
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8225
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8226
AND @max_row_div2 + @max_row_div4;
 
8227
        
 
8228
# check multiple-4 success:     1
 
8229
DELETE FROM t1
 
8230
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8231
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8232
        
 
8233
# check multiple-5 success:     1
 
8234
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8235
WHERE MOD(f_int1,3) = 0
 
8236
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8237
SELECT COUNT(*) INTO @clash_count
 
8238
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8239
WHERE MOD(f_int1,3) = 0
 
8240
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8241
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8242
INSERT INTO t1
 
8243
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8244
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8245
f_charbig = '#SINGLE#';
 
8246
        
 
8247
# check single-1 success:       1
 
8248
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8249
INSERT INTO t1
 
8250
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8251
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8252
f_charbig = '#SINGLE#';
 
8253
        
 
8254
# check single-2 success:       1
 
8255
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8256
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8257
UPDATE t1 SET f_int1 = @cur_value2
 
8258
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8259
        
 
8260
# check single-3 success:       1
 
8261
SET @cur_value1= -1;
 
8262
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8263
UPDATE t1 SET f_int1 = @cur_value1
 
8264
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8265
        
 
8266
# check single-4 success:       1
 
8267
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8268
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8269
        
 
8270
# check single-5 success:       1
 
8271
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8272
        
 
8273
# check single-6 success:       1
 
8274
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8275
        
 
8276
# check single-7 success:       1
 
8277
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8278
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8279
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8280
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8281
f_charbig = '#NULL#';
 
8282
INSERT INTO t1
 
8283
SET f_int1 = NULL , f_int2 = -@max_row,
 
8284
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8285
f_charbig = '#NULL#';
 
8286
# check null success:    1
 
8287
        
 
8288
# check null-1 success:         1
 
8289
UPDATE t1 SET f_int1 = -@max_row
 
8290
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8291
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8292
        
 
8293
# check null-2 success:         1
 
8294
UPDATE t1 SET f_int1 = NULL
 
8295
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8296
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8297
        
 
8298
# check null-3 success:         1
 
8299
DELETE FROM t1
 
8300
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8301
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8302
        
 
8303
# check null-4 success:         1
 
8304
DELETE FROM t1
 
8305
WHERE f_int1 = 0 AND f_int2 = 0
 
8306
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8307
AND f_charbig = '#NULL#';
 
8308
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8309
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8310
   FROM t0_template source_tab
 
8311
WHERE MOD(f_int1,3) = 0
 
8312
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8313
ON DUPLICATE KEY
 
8314
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8315
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8316
f_charbig = 'was updated';
 
8317
        
 
8318
# check unique-1-a success:     1
 
8319
        
 
8320
# check unique-1-b success:     1
 
8321
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8324
f_charbig = CONCAT('===',f_char1,'===')
 
8325
WHERE f_charbig = 'was updated';
 
8326
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8327
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8328
   FROM t0_template source_tab
 
8329
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8330
        
 
8331
# check replace success:        1
 
8332
DELETE FROM t1
 
8333
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8334
DELETE FROM t1
 
8335
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8336
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8337
UPDATE t1 SET f_int2 = f_int1,
 
8338
f_char1 = CAST(f_int1 AS CHAR),
 
8339
f_char2 = CAST(f_int1 AS CHAR),
 
8340
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8341
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8342
SET AUTOCOMMIT= 0;
 
8343
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8344
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8345
FROM t0_template source_tab
 
8346
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8347
        
 
8348
# check transactions-1 success:         1
 
8349
COMMIT WORK;
 
8350
        
 
8351
# check transactions-2 success:         1
 
8352
ROLLBACK WORK;
 
8353
        
 
8354
# check transactions-3 success:         1
 
8355
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8356
COMMIT WORK;
 
8357
ROLLBACK WORK;
 
8358
        
 
8359
# check transactions-4 success:         1
 
8360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8361
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8362
FROM t0_template source_tab
 
8363
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8364
        
 
8365
# check transactions-5 success:         1
 
8366
ROLLBACK WORK;
 
8367
Warnings:
 
8368
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8369
        
 
8370
# check transactions-6 success:         1
 
8371
# INFO: Storage engine used for t1 seems to be not transactional.
 
8372
COMMIT;
 
8373
        
 
8374
# check transactions-7 success:         1
 
8375
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8376
COMMIT WORK;
 
8377
SET @@session.sql_mode = 'traditional';
 
8378
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8379
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8380
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8381
'', '', 'was inserted' FROM t0_template
 
8382
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8383
ERROR 22012: Division by 0
 
8384
COMMIT;
 
8385
        
 
8386
# check transactions-8 success:         1
 
8387
# INFO: Storage engine used for t1 seems to be unable to revert
 
8388
#       changes made by the failing statement.
 
8389
SET @@session.sql_mode = '';
 
8390
SET AUTOCOMMIT= 1;
 
8391
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8392
COMMIT WORK;
 
8393
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8394
        
 
8395
# check special-1 success:      1
 
8396
UPDATE t1 SET f_charbig = '';
 
8397
        
 
8398
# check special-2 success:      1
 
8399
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8400
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8401
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8403
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8404
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8405
'just inserted' FROM t0_template
 
8406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8407
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8408
BEGIN
 
8409
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8410
f_charbig = 'updated by trigger'
 
8411
      WHERE f_int1 = new.f_int1;
 
8412
END|
 
8413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8414
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8416
        
 
8417
# check trigger-1 success:      1
 
8418
DROP TRIGGER trg_1;
 
8419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8421
f_charbig = 'just inserted'
 
8422
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8423
DELETE FROM t0_aux
 
8424
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8425
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8426
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8427
'just inserted' FROM t0_template
 
8428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8429
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8430
BEGIN
 
8431
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8432
f_charbig = 'updated by trigger'
 
8433
      WHERE f_int1 = new.f_int1;
 
8434
END|
 
8435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8436
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8438
        
 
8439
# check trigger-2 success:      1
 
8440
DROP TRIGGER trg_1;
 
8441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8443
f_charbig = 'just inserted'
 
8444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8445
DELETE FROM t0_aux
 
8446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8449
'just inserted' FROM t0_template
 
8450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8451
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8452
BEGIN
 
8453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8454
f_charbig = 'updated by trigger'
 
8455
      WHERE f_int1 = new.f_int1;
 
8456
END|
 
8457
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8459
        
 
8460
# check trigger-3 success:      1
 
8461
DROP TRIGGER trg_1;
 
8462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8464
f_charbig = 'just inserted'
 
8465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8466
DELETE FROM t0_aux
 
8467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8470
'just inserted' FROM t0_template
 
8471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8472
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8473
BEGIN
 
8474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8475
f_charbig = 'updated by trigger'
 
8476
      WHERE f_int1 = - old.f_int1;
 
8477
END|
 
8478
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8480
        
 
8481
# check trigger-4 success:      1
 
8482
DROP TRIGGER trg_1;
 
8483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8485
f_charbig = 'just inserted'
 
8486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8487
DELETE FROM t0_aux
 
8488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8491
'just inserted' FROM t0_template
 
8492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8493
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8494
BEGIN
 
8495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8496
f_charbig = 'updated by trigger'
 
8497
      WHERE f_int1 = new.f_int1;
 
8498
END|
 
8499
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8500
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8501
        
 
8502
# check trigger-5 success:      1
 
8503
DROP TRIGGER trg_1;
 
8504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8506
f_charbig = 'just inserted'
 
8507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8508
DELETE FROM t0_aux
 
8509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8512
'just inserted' FROM t0_template
 
8513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8514
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8515
BEGIN
 
8516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8517
f_charbig = 'updated by trigger'
 
8518
      WHERE f_int1 = - old.f_int1;
 
8519
END|
 
8520
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8521
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8522
        
 
8523
# check trigger-6 success:      1
 
8524
DROP TRIGGER trg_1;
 
8525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8527
f_charbig = 'just inserted'
 
8528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8529
DELETE FROM t0_aux
 
8530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8533
'just inserted' FROM t0_template
 
8534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8535
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8536
BEGIN
 
8537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8538
f_charbig = 'updated by trigger'
 
8539
      WHERE f_int1 = - old.f_int1;
 
8540
END|
 
8541
DELETE FROM t0_aux
 
8542
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8543
        
 
8544
# check trigger-7 success:      1
 
8545
DROP TRIGGER trg_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 = 'just inserted'
 
8549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8550
DELETE FROM t0_aux
 
8551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8554
'just inserted' FROM t0_template
 
8555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8556
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8557
BEGIN
 
8558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8559
f_charbig = 'updated by trigger'
 
8560
      WHERE f_int1 = - old.f_int1;
 
8561
END|
 
8562
DELETE FROM t0_aux
 
8563
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8564
        
 
8565
# check trigger-8 success:      1
 
8566
DROP TRIGGER trg_1;
 
8567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8569
f_charbig = 'just inserted'
 
8570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8571
DELETE FROM t0_aux
 
8572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8573
DELETE FROM t1
 
8574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8575
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8576
BEGIN
 
8577
SET new.f_int1 = old.f_int1 + @max_row,
 
8578
new.f_int2 = old.f_int2 - @max_row,
 
8579
new.f_charbig = '####updated per update trigger####';
 
8580
END|
 
8581
UPDATE t1
 
8582
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8583
f_charbig = '####updated per update statement itself####';
 
8584
        
 
8585
# check trigger-9 success:      1
 
8586
DROP TRIGGER trg_2;
 
8587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8589
f_charbig = CONCAT('===',f_char1,'===');
 
8590
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8591
BEGIN
 
8592
SET new.f_int1 = new.f_int1 + @max_row,
 
8593
new.f_int2 = new.f_int2 - @max_row,
 
8594
new.f_charbig = '####updated per update trigger####';
 
8595
END|
 
8596
UPDATE t1
 
8597
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8598
f_charbig = '####updated per update statement itself####';
 
8599
        
 
8600
# check trigger-10 success:     1
 
8601
DROP TRIGGER trg_2;
 
8602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8604
f_charbig = CONCAT('===',f_char1,'===');
 
8605
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8606
BEGIN
 
8607
SET new.f_int1 = @my_max1 + @counter,
 
8608
new.f_int2 = @my_min2 - @counter,
 
8609
new.f_charbig = '####updated per insert trigger####';
 
8610
SET @counter = @counter + 1;
 
8611
END|
 
8612
SET @counter = 1;
 
8613
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8615
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8616
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8618
ORDER BY f_int1;
 
8619
DROP TRIGGER trg_3;
 
8620
        
 
8621
# check trigger-11 success:     1
 
8622
DELETE FROM t1
 
8623
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8624
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8625
AND f_charbig = '####updated per insert trigger####';
 
8626
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8627
BEGIN
 
8628
SET new.f_int1 = @my_max1 + @counter,
 
8629
new.f_int2 = @my_min2 - @counter,
 
8630
new.f_charbig = '####updated per insert trigger####';
 
8631
SET @counter = @counter + 1;
 
8632
END|
 
8633
SET @counter = 1;
 
8634
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8635
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8636
SELECT CAST(f_int1 AS CHAR),
 
8637
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8639
ORDER BY f_int1;
 
8640
DROP TRIGGER trg_3;
 
8641
        
 
8642
# check trigger-12 success:     1
 
8643
DELETE FROM t1
 
8644
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8645
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8646
AND f_charbig = '####updated per insert trigger####';
 
8647
ANALYZE  TABLE t1;
 
8648
Table   Op      Msg_type        Msg_text
 
8649
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
8650
CHECK    TABLE t1 EXTENDED;
 
8651
Table   Op      Msg_type        Msg_text
 
8652
test.t1 check   note    The storage engine for the table doesn't support check
 
8653
CHECKSUM TABLE t1 EXTENDED;
 
8654
Table   Checksum
 
8655
test.t1 <some_value>
 
8656
OPTIMIZE TABLE t1;
 
8657
Table   Op      Msg_type        Msg_text
 
8658
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
8659
# check layout success:    1
 
8660
REPAIR   TABLE t1 EXTENDED;
 
8661
Table   Op      Msg_type        Msg_text
 
8662
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8663
# check layout success:    1
 
8664
TRUNCATE t1;
 
8665
        
 
8666
# check TRUNCATE success:       1
 
8667
# check layout success:    1
 
8668
# End usability test (inc/partition_check.inc)
 
8669
DROP TABLE t1;
 
8670
DROP VIEW  IF EXISTS v1;
 
8671
DROP TABLE IF EXISTS t1;
 
8672
DROP TABLE IF EXISTS t0_aux;
 
8673
DROP TABLE IF EXISTS t0_definition;
 
8674
DROP TABLE IF EXISTS t0_template;