~capttofu/drizzle/federated_schema

« back to all changes in this revision

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

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
SET @max_row = 20;
 
2
SET @@session.storage_engine = 'InnoDB';
 
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 PRIMARY KEY(f_int2);
 
62
ERROR HY000: A PRIMARY KEY 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 PRIMARY KEY(f_int2);
 
77
ERROR HY000: A PRIMARY KEY 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 PRIMARY KEY(f_int2);
 
100
ERROR HY000: A PRIMARY KEY 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 PRIMARY KEY(f_int2);
 
121
ERROR HY000: A PRIMARY KEY 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 PRIMARY KEY(f_int2);
 
140
ERROR HY000: A PRIMARY KEY 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 PRIMARY KEY(f_int2);
 
163
ERROR HY000: A PRIMARY KEY 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 PRIMARY KEY(f_int2);
 
186
ERROR HY000: A PRIMARY KEY 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 PRIMARY KEY(f_int2);
 
205
ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
 
206
DROP TABLE t1;
 
207
DROP TABLE IF EXISTS t1;
 
208
CREATE TABLE t1 (
 
209
f_int1 INTEGER,
 
210
f_int2 INTEGER,
 
211
f_char1 CHAR(20),
 
212
f_char2 CHAR(20),
 
213
f_charbig VARCHAR(1000)
 
214
 
 
215
)
 
216
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
217
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
218
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
219
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
220
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
221
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
222
DROP TABLE t1;
 
223
CREATE TABLE t1 (
 
224
f_int1 INTEGER,
 
225
f_int2 INTEGER,
 
226
f_char1 CHAR(20),
 
227
f_char2 CHAR(20),
 
228
f_charbig VARCHAR(1000)
 
229
 
 
230
)
 
231
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
232
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
233
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
234
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
235
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
236
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
237
DROP TABLE t1;
 
238
CREATE TABLE t1 (
 
239
f_int1 INTEGER,
 
240
f_int2 INTEGER,
 
241
f_char1 CHAR(20),
 
242
f_char2 CHAR(20),
 
243
f_charbig VARCHAR(1000)
 
244
 
 
245
)
 
246
PARTITION BY LIST(MOD(f_int1,4))
 
247
(PARTITION part_3 VALUES IN (-3),
 
248
PARTITION part_2 VALUES IN (-2),
 
249
PARTITION part_1 VALUES IN (-1),
 
250
PARTITION part_N VALUES IN (NULL),
 
251
PARTITION part0 VALUES IN (0),
 
252
PARTITION part1 VALUES IN (1),
 
253
PARTITION part2 VALUES IN (2),
 
254
PARTITION part3 VALUES IN (3));
 
255
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
256
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
257
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
258
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
259
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
260
DROP TABLE t1;
 
261
CREATE TABLE t1 (
 
262
f_int1 INTEGER,
 
263
f_int2 INTEGER,
 
264
f_char1 CHAR(20),
 
265
f_char2 CHAR(20),
 
266
f_charbig VARCHAR(1000)
 
267
 
 
268
)
 
269
PARTITION BY RANGE(f_int1)
 
270
(PARTITION parta VALUES LESS THAN (0),
 
271
PARTITION partb VALUES LESS THAN (5),
 
272
PARTITION partc VALUES LESS THAN (10),
 
273
PARTITION partd VALUES LESS THAN (10 + 5),
 
274
PARTITION parte VALUES LESS THAN (20),
 
275
PARTITION partf VALUES LESS THAN (2147483646));
 
276
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
277
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
278
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
279
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
280
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
281
DROP TABLE t1;
 
282
CREATE TABLE t1 (
 
283
f_int1 INTEGER,
 
284
f_int2 INTEGER,
 
285
f_char1 CHAR(20),
 
286
f_char2 CHAR(20),
 
287
f_charbig VARCHAR(1000)
 
288
 
 
289
)
 
290
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
291
(PARTITION parta VALUES LESS THAN (0),
 
292
PARTITION partb VALUES LESS THAN (5),
 
293
PARTITION partc VALUES LESS THAN (10),
 
294
PARTITION partd VALUES LESS THAN (2147483646));
 
295
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
296
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
297
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
298
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
299
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
300
DROP TABLE t1;
 
301
CREATE TABLE t1 (
 
302
f_int1 INTEGER,
 
303
f_int2 INTEGER,
 
304
f_char1 CHAR(20),
 
305
f_char2 CHAR(20),
 
306
f_charbig VARCHAR(1000)
 
307
 
 
308
)
 
309
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
310
(PARTITION part1 VALUES LESS THAN (0)
 
311
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
312
PARTITION part2 VALUES LESS THAN (5)
 
313
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
314
PARTITION part3 VALUES LESS THAN (10)
 
315
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
316
PARTITION part4 VALUES LESS THAN (2147483646)
 
317
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
318
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
319
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
320
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
321
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
322
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
323
DROP TABLE t1;
 
324
CREATE TABLE t1 (
 
325
f_int1 INTEGER,
 
326
f_int2 INTEGER,
 
327
f_char1 CHAR(20),
 
328
f_char2 CHAR(20),
 
329
f_charbig VARCHAR(1000)
 
330
 
 
331
)
 
332
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
333
(PARTITION part1 VALUES IN (0)
 
334
(SUBPARTITION sp11, SUBPARTITION sp12),
 
335
PARTITION part2 VALUES IN (1)
 
336
(SUBPARTITION sp21, SUBPARTITION sp22),
 
337
PARTITION part3 VALUES IN (2)
 
338
(SUBPARTITION sp31, SUBPARTITION sp32),
 
339
PARTITION part4 VALUES IN (NULL)
 
340
(SUBPARTITION sp41, SUBPARTITION sp42));
 
341
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
342
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
343
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
344
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
345
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
346
DROP TABLE t1;
 
347
CREATE TABLE t1 (
 
348
f_int1 INTEGER,
 
349
f_int2 INTEGER,
 
350
f_char1 CHAR(20),
 
351
f_char2 CHAR(20),
 
352
f_charbig VARCHAR(1000)
 
353
 
 
354
)
 
355
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
356
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
357
(PARTITION part1 VALUES IN (0),
 
358
 PARTITION part2 VALUES IN (1),
 
359
 PARTITION part3 VALUES IN (NULL));
 
360
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
361
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
362
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
363
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
364
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
365
DROP TABLE t1;
 
366
#  1.1.3 PRIMARY KEY consisting of two columns
 
367
DROP TABLE IF EXISTS t1;
 
368
CREATE TABLE t1 (
 
369
f_int1 INTEGER,
 
370
f_int2 INTEGER,
 
371
f_char1 CHAR(20),
 
372
f_char2 CHAR(20),
 
373
f_charbig VARCHAR(1000)
 
374
 
 
375
)
 
376
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
377
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
378
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
379
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
380
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
381
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
382
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
383
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
384
# Start usability test (inc/partition_check.inc)
 
385
create_command
 
386
SHOW CREATE TABLE t1;
 
387
Table   Create Table
 
388
t1      CREATE TABLE `t1` (
 
389
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
390
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
391
  `f_char1` char(20) DEFAULT NULL,
 
392
  `f_char2` char(20) DEFAULT NULL,
 
393
  `f_charbig` varchar(1000) DEFAULT NULL,
 
394
  PRIMARY KEY (`f_int1`,`f_int2`)
 
395
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
396
 
 
397
# check prerequisites-1 success:    1
 
398
# check COUNT(*) success:    1
 
399
# check MIN/MAX(f_int1) success:    1
 
400
# check MIN/MAX(f_int2) success:    1
 
401
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
402
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
403
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
404
WHERE f_int1 IN (2,3);
 
405
ERROR 23000: Can't write; duplicate key in table 't1'
 
406
# check prerequisites-3 success:    1
 
407
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
408
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
409
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
410
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
411
WHERE f_int1 IN (2,3);
 
412
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
414
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
415
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
416
WHERE f_int1 IN (2,3);
 
417
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
418
# check read via f_int1 success: 1
 
419
# check read via f_int2 success: 1
 
420
        
 
421
# check multiple-1 success:     1
 
422
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
423
        
 
424
# check multiple-2 success:     1
 
425
INSERT INTO t1 SELECT * FROM t0_template
 
426
WHERE MOD(f_int1,3) = 0;
 
427
        
 
428
# check multiple-3 success:     1
 
429
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
430
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
431
AND @max_row_div2 + @max_row_div4;
 
432
        
 
433
# check multiple-4 success:     1
 
434
DELETE FROM t1
 
435
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
436
AND @max_row_div2 + @max_row_div4 + @max_row;
 
437
        
 
438
# check multiple-5 success:     1
 
439
SELECT COUNT(*) INTO @try_count FROM t0_template
 
440
WHERE MOD(f_int1,3) = 0
 
441
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
442
SELECT COUNT(*) INTO @clash_count
 
443
FROM t1 INNER JOIN t0_template USING(f_int1)
 
444
WHERE MOD(f_int1,3) = 0
 
445
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
446
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
447
INSERT INTO t1
 
448
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
449
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
450
f_charbig = '#SINGLE#';
 
451
        
 
452
# check single-1 success:       1
 
453
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
454
INSERT INTO t1
 
455
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
456
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
457
f_charbig = '#SINGLE#';
 
458
        
 
459
# check single-2 success:       1
 
460
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
461
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
462
UPDATE t1 SET f_int1 = @cur_value2
 
463
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
464
        
 
465
# check single-3 success:       1
 
466
SET @cur_value1= -1;
 
467
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
468
UPDATE t1 SET f_int1 = @cur_value1
 
469
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
470
        
 
471
# check single-4 success:       1
 
472
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
473
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
474
        
 
475
# check single-5 success:       1
 
476
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
477
        
 
478
# check single-6 success:       1
 
479
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
480
        
 
481
# check single-7 success:       1
 
482
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
483
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
484
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
485
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
486
f_charbig = '#NULL#';
 
487
INSERT INTO t1
 
488
SET f_int1 = NULL , f_int2 = -@max_row,
 
489
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
490
f_charbig = '#NULL#';
 
491
ERROR 23000: Column 'f_int1' cannot be null
 
492
# check null success:    1
 
493
DELETE FROM t1
 
494
WHERE f_int1 = 0 AND f_int2 = 0
 
495
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
496
AND f_charbig = '#NULL#';
 
497
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
498
SELECT f_int1, f_int1, '', '', 'was inserted'
 
499
   FROM t0_template source_tab
 
500
WHERE MOD(f_int1,3) = 0
 
501
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
502
ON DUPLICATE KEY
 
503
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
504
f_int2 = 2 * @max_row + source_tab.f_int1,
 
505
f_charbig = 'was updated';
 
506
        
 
507
# check unique-1-a success:     1
 
508
        
 
509
# check unique-1-b success:     1
 
510
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
511
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
512
f_int2 = CAST(f_char1 AS SIGNED INT),
 
513
f_charbig = CONCAT('===',f_char1,'===')
 
514
WHERE f_charbig = 'was updated';
 
515
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
516
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
517
   FROM t0_template source_tab
 
518
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
519
        
 
520
# check replace success:        1
 
521
DELETE FROM t1
 
522
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
523
DELETE FROM t1
 
524
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
525
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
526
UPDATE t1 SET f_int2 = f_int1,
 
527
f_char1 = CAST(f_int1 AS CHAR),
 
528
f_char2 = CAST(f_int1 AS CHAR),
 
529
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
530
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
531
SET AUTOCOMMIT= 0;
 
532
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
533
SELECT f_int1, f_int1, '', '', 'was inserted'
 
534
FROM t0_template source_tab
 
535
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
536
        
 
537
# check transactions-1 success:         1
 
538
COMMIT WORK;
 
539
        
 
540
# check transactions-2 success:         1
 
541
ROLLBACK WORK;
 
542
        
 
543
# check transactions-3 success:         1
 
544
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
545
COMMIT WORK;
 
546
ROLLBACK WORK;
 
547
        
 
548
# check transactions-4 success:         1
 
549
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
550
SELECT f_int1, f_int1, '', '', 'was inserted'
 
551
FROM t0_template source_tab
 
552
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
553
        
 
554
# check transactions-5 success:         1
 
555
ROLLBACK WORK;
 
556
        
 
557
# check transactions-6 success:         1
 
558
# INFO: Storage engine used for t1 seems to be transactional.
 
559
COMMIT;
 
560
        
 
561
# check transactions-7 success:         1
 
562
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
563
COMMIT WORK;
 
564
SET @@session.sql_mode = 'traditional';
 
565
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
566
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
567
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
568
'', '', 'was inserted' FROM t0_template
 
569
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
570
ERROR 22012: Division by 0
 
571
COMMIT;
 
572
        
 
573
# check transactions-8 success:         1
 
574
# INFO: Storage engine used for t1 seems to be able to revert
 
575
#       changes made by the failing statement.
 
576
SET @@session.sql_mode = '';
 
577
SET AUTOCOMMIT= 1;
 
578
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
579
COMMIT WORK;
 
580
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
581
        
 
582
# check special-1 success:      1
 
583
UPDATE t1 SET f_charbig = '';
 
584
        
 
585
# check special-2 success:      1
 
586
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
587
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
588
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
590
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
591
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
592
'just inserted' FROM t0_template
 
593
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
594
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
595
BEGIN
 
596
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
597
f_charbig = 'updated by trigger'
 
598
      WHERE f_int1 = new.f_int1;
 
599
END|
 
600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
601
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
603
        
 
604
# check trigger-1 success:      1
 
605
DROP TRIGGER trg_1;
 
606
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
607
f_int2 = CAST(f_char1 AS SIGNED INT),
 
608
f_charbig = 'just inserted'
 
609
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
610
DELETE FROM t0_aux
 
611
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
613
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
614
'just inserted' FROM t0_template
 
615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
616
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
617
BEGIN
 
618
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
619
f_charbig = 'updated by trigger'
 
620
      WHERE f_int1 = new.f_int1;
 
621
END|
 
622
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
623
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
624
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
625
        
 
626
# check trigger-2 success:      1
 
627
DROP TRIGGER trg_1;
 
628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
630
f_charbig = 'just inserted'
 
631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
632
DELETE FROM t0_aux
 
633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
636
'just inserted' FROM t0_template
 
637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
638
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
639
BEGIN
 
640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
641
f_charbig = 'updated by trigger'
 
642
      WHERE f_int1 = new.f_int1;
 
643
END|
 
644
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
646
        
 
647
# check trigger-3 success:      1
 
648
DROP TRIGGER trg_1;
 
649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
651
f_charbig = 'just inserted'
 
652
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
653
DELETE FROM t0_aux
 
654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
655
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
656
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
657
'just inserted' FROM t0_template
 
658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
659
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
660
BEGIN
 
661
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
662
f_charbig = 'updated by trigger'
 
663
      WHERE f_int1 = - old.f_int1;
 
664
END|
 
665
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
666
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
667
        
 
668
# check trigger-4 success:      1
 
669
DROP TRIGGER trg_1;
 
670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
672
f_charbig = 'just inserted'
 
673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
674
DELETE FROM t0_aux
 
675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
678
'just inserted' FROM t0_template
 
679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
680
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
681
BEGIN
 
682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
683
f_charbig = 'updated by trigger'
 
684
      WHERE f_int1 = new.f_int1;
 
685
END|
 
686
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
687
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
688
        
 
689
# check trigger-5 success:      1
 
690
DROP TRIGGER trg_1;
 
691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
693
f_charbig = 'just inserted'
 
694
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
695
DELETE FROM t0_aux
 
696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
699
'just inserted' FROM t0_template
 
700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
701
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
702
BEGIN
 
703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
704
f_charbig = 'updated by trigger'
 
705
      WHERE f_int1 = - old.f_int1;
 
706
END|
 
707
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
709
        
 
710
# check trigger-6 success:      1
 
711
DROP TRIGGER trg_1;
 
712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
714
f_charbig = 'just inserted'
 
715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
716
DELETE FROM t0_aux
 
717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
720
'just inserted' FROM t0_template
 
721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
722
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
723
BEGIN
 
724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
725
f_charbig = 'updated by trigger'
 
726
      WHERE f_int1 = - old.f_int1;
 
727
END|
 
728
DELETE FROM t0_aux
 
729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
730
        
 
731
# check trigger-7 success:      1
 
732
DROP TRIGGER trg_1;
 
733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
735
f_charbig = 'just inserted'
 
736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
737
DELETE FROM t0_aux
 
738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
741
'just inserted' FROM t0_template
 
742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
743
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
744
BEGIN
 
745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
746
f_charbig = 'updated by trigger'
 
747
      WHERE f_int1 = - old.f_int1;
 
748
END|
 
749
DELETE FROM t0_aux
 
750
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
751
        
 
752
# check trigger-8 success:      1
 
753
DROP TRIGGER trg_1;
 
754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
756
f_charbig = 'just inserted'
 
757
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
758
DELETE FROM t0_aux
 
759
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
760
DELETE FROM t1
 
761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
762
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
763
BEGIN
 
764
SET new.f_int1 = old.f_int1 + @max_row,
 
765
new.f_int2 = old.f_int2 - @max_row,
 
766
new.f_charbig = '####updated per update trigger####';
 
767
END|
 
768
UPDATE t1
 
769
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
770
f_charbig = '####updated per update statement itself####';
 
771
        
 
772
# check trigger-9 success:      1
 
773
DROP TRIGGER trg_2;
 
774
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
775
f_int2 = CAST(f_char1 AS SIGNED INT),
 
776
f_charbig = CONCAT('===',f_char1,'===');
 
777
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
778
BEGIN
 
779
SET new.f_int1 = new.f_int1 + @max_row,
 
780
new.f_int2 = new.f_int2 - @max_row,
 
781
new.f_charbig = '####updated per update trigger####';
 
782
END|
 
783
UPDATE t1
 
784
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
785
f_charbig = '####updated per update statement itself####';
 
786
        
 
787
# check trigger-10 success:     1
 
788
DROP TRIGGER trg_2;
 
789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
791
f_charbig = CONCAT('===',f_char1,'===');
 
792
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
793
BEGIN
 
794
SET new.f_int1 = @my_max1 + @counter,
 
795
new.f_int2 = @my_min2 - @counter,
 
796
new.f_charbig = '####updated per insert trigger####';
 
797
SET @counter = @counter + 1;
 
798
END|
 
799
SET @counter = 1;
 
800
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
801
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
802
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
803
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
804
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
805
ORDER BY f_int1;
 
806
DROP TRIGGER trg_3;
 
807
        
 
808
# check trigger-11 success:     1
 
809
DELETE FROM t1
 
810
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
811
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
812
AND f_charbig = '####updated per insert trigger####';
 
813
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
814
BEGIN
 
815
SET new.f_int1 = @my_max1 + @counter,
 
816
new.f_int2 = @my_min2 - @counter,
 
817
new.f_charbig = '####updated per insert trigger####';
 
818
SET @counter = @counter + 1;
 
819
END|
 
820
SET @counter = 1;
 
821
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
822
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
823
SELECT CAST(f_int1 AS CHAR),
 
824
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
825
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
826
ORDER BY f_int1;
 
827
DROP TRIGGER trg_3;
 
828
        
 
829
# check trigger-12 success:     1
 
830
DELETE FROM t1
 
831
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
832
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
833
AND f_charbig = '####updated per insert trigger####';
 
834
ANALYZE  TABLE t1;
 
835
Table   Op      Msg_type        Msg_text
 
836
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
837
CHECK    TABLE t1 EXTENDED;
 
838
Table   Op      Msg_type        Msg_text
 
839
test.t1 check   note    The storage engine for the table doesn't support check
 
840
CHECKSUM TABLE t1 EXTENDED;
 
841
Table   Checksum
 
842
test.t1 <some_value>
 
843
OPTIMIZE TABLE t1;
 
844
Table   Op      Msg_type        Msg_text
 
845
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
846
# check layout success:    1
 
847
REPAIR   TABLE t1 EXTENDED;
 
848
Table   Op      Msg_type        Msg_text
 
849
test.t1 repair  note    The storage engine for the table doesn't support repair
 
850
# check layout success:    1
 
851
TRUNCATE t1;
 
852
        
 
853
# check TRUNCATE success:       1
 
854
# check layout success:    1
 
855
# End usability test (inc/partition_check.inc)
 
856
DROP TABLE t1;
 
857
CREATE TABLE t1 (
 
858
f_int1 INTEGER,
 
859
f_int2 INTEGER,
 
860
f_char1 CHAR(20),
 
861
f_char2 CHAR(20),
 
862
f_charbig VARCHAR(1000)
 
863
 
 
864
)
 
865
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
866
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
867
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
868
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
869
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
870
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
871
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
872
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
873
# Start usability test (inc/partition_check.inc)
 
874
create_command
 
875
SHOW CREATE TABLE t1;
 
876
Table   Create Table
 
877
t1      CREATE TABLE `t1` (
 
878
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
879
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
880
  `f_char1` char(20) DEFAULT NULL,
 
881
  `f_char2` char(20) DEFAULT NULL,
 
882
  `f_charbig` varchar(1000) DEFAULT NULL,
 
883
  PRIMARY KEY (`f_int1`,`f_int2`)
 
884
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
885
 
 
886
# check prerequisites-1 success:    1
 
887
# check COUNT(*) success:    1
 
888
# check MIN/MAX(f_int1) success:    1
 
889
# check MIN/MAX(f_int2) success:    1
 
890
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
891
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
892
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
893
WHERE f_int1 IN (2,3);
 
894
ERROR 23000: Can't write; duplicate key in table 't1'
 
895
# check prerequisites-3 success:    1
 
896
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
897
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
898
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
899
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
900
WHERE f_int1 IN (2,3);
 
901
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
902
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
903
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
904
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
905
WHERE f_int1 IN (2,3);
 
906
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
907
# check read via f_int1 success: 1
 
908
# check read via f_int2 success: 1
 
909
        
 
910
# check multiple-1 success:     1
 
911
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
912
        
 
913
# check multiple-2 success:     1
 
914
INSERT INTO t1 SELECT * FROM t0_template
 
915
WHERE MOD(f_int1,3) = 0;
 
916
        
 
917
# check multiple-3 success:     1
 
918
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
919
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
920
AND @max_row_div2 + @max_row_div4;
 
921
        
 
922
# check multiple-4 success:     1
 
923
DELETE FROM t1
 
924
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
925
AND @max_row_div2 + @max_row_div4 + @max_row;
 
926
        
 
927
# check multiple-5 success:     1
 
928
SELECT COUNT(*) INTO @try_count FROM t0_template
 
929
WHERE MOD(f_int1,3) = 0
 
930
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
931
SELECT COUNT(*) INTO @clash_count
 
932
FROM t1 INNER JOIN t0_template USING(f_int1)
 
933
WHERE MOD(f_int1,3) = 0
 
934
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
935
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
936
INSERT INTO t1
 
937
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
938
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
939
f_charbig = '#SINGLE#';
 
940
        
 
941
# check single-1 success:       1
 
942
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
943
INSERT INTO t1
 
944
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
945
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
946
f_charbig = '#SINGLE#';
 
947
        
 
948
# check single-2 success:       1
 
949
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
950
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
951
UPDATE t1 SET f_int1 = @cur_value2
 
952
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
953
        
 
954
# check single-3 success:       1
 
955
SET @cur_value1= -1;
 
956
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
957
UPDATE t1 SET f_int1 = @cur_value1
 
958
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
959
        
 
960
# check single-4 success:       1
 
961
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
962
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
963
        
 
964
# check single-5 success:       1
 
965
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
966
        
 
967
# check single-6 success:       1
 
968
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
969
        
 
970
# check single-7 success:       1
 
971
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
972
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
973
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
974
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
975
f_charbig = '#NULL#';
 
976
INSERT INTO t1
 
977
SET f_int1 = NULL , f_int2 = -@max_row,
 
978
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
979
f_charbig = '#NULL#';
 
980
ERROR 23000: Column 'f_int1' cannot be null
 
981
# check null success:    1
 
982
DELETE FROM t1
 
983
WHERE f_int1 = 0 AND f_int2 = 0
 
984
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
985
AND f_charbig = '#NULL#';
 
986
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
987
SELECT f_int1, f_int1, '', '', 'was inserted'
 
988
   FROM t0_template source_tab
 
989
WHERE MOD(f_int1,3) = 0
 
990
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
991
ON DUPLICATE KEY
 
992
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
993
f_int2 = 2 * @max_row + source_tab.f_int1,
 
994
f_charbig = 'was updated';
 
995
        
 
996
# check unique-1-a success:     1
 
997
        
 
998
# check unique-1-b success:     1
 
999
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1000
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1001
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1002
f_charbig = CONCAT('===',f_char1,'===')
 
1003
WHERE f_charbig = 'was updated';
 
1004
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1005
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
1006
   FROM t0_template source_tab
 
1007
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1008
        
 
1009
# check replace success:        1
 
1010
DELETE FROM t1
 
1011
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
1012
DELETE FROM t1
 
1013
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
1014
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
1015
UPDATE t1 SET f_int2 = f_int1,
 
1016
f_char1 = CAST(f_int1 AS CHAR),
 
1017
f_char2 = CAST(f_int1 AS CHAR),
 
1018
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
1019
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
1020
SET AUTOCOMMIT= 0;
 
1021
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1022
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1023
FROM t0_template source_tab
 
1024
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1025
        
 
1026
# check transactions-1 success:         1
 
1027
COMMIT WORK;
 
1028
        
 
1029
# check transactions-2 success:         1
 
1030
ROLLBACK WORK;
 
1031
        
 
1032
# check transactions-3 success:         1
 
1033
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1034
COMMIT WORK;
 
1035
ROLLBACK WORK;
 
1036
        
 
1037
# check transactions-4 success:         1
 
1038
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1039
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1040
FROM t0_template source_tab
 
1041
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1042
        
 
1043
# check transactions-5 success:         1
 
1044
ROLLBACK WORK;
 
1045
        
 
1046
# check transactions-6 success:         1
 
1047
# INFO: Storage engine used for t1 seems to be transactional.
 
1048
COMMIT;
 
1049
        
 
1050
# check transactions-7 success:         1
 
1051
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1052
COMMIT WORK;
 
1053
SET @@session.sql_mode = 'traditional';
 
1054
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1055
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1056
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1057
'', '', 'was inserted' FROM t0_template
 
1058
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1059
ERROR 22012: Division by 0
 
1060
COMMIT;
 
1061
        
 
1062
# check transactions-8 success:         1
 
1063
# INFO: Storage engine used for t1 seems to be able to revert
 
1064
#       changes made by the failing statement.
 
1065
SET @@session.sql_mode = '';
 
1066
SET AUTOCOMMIT= 1;
 
1067
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1068
COMMIT WORK;
 
1069
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1070
        
 
1071
# check special-1 success:      1
 
1072
UPDATE t1 SET f_charbig = '';
 
1073
        
 
1074
# check special-2 success:      1
 
1075
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1076
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1077
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1078
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1080
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1081
'just inserted' FROM t0_template
 
1082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1083
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1084
BEGIN
 
1085
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1086
f_charbig = 'updated by trigger'
 
1087
      WHERE f_int1 = new.f_int1;
 
1088
END|
 
1089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1090
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1092
        
 
1093
# check trigger-1 success:      1
 
1094
DROP TRIGGER trg_1;
 
1095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1097
f_charbig = 'just inserted'
 
1098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1099
DELETE FROM t0_aux
 
1100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1102
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1103
'just inserted' FROM t0_template
 
1104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1105
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1106
BEGIN
 
1107
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1108
f_charbig = 'updated by trigger'
 
1109
      WHERE f_int1 = new.f_int1;
 
1110
END|
 
1111
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1112
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1114
        
 
1115
# check trigger-2 success:      1
 
1116
DROP TRIGGER trg_1;
 
1117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1119
f_charbig = 'just inserted'
 
1120
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1121
DELETE FROM t0_aux
 
1122
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1123
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1124
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1125
'just inserted' FROM t0_template
 
1126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1127
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1128
BEGIN
 
1129
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1130
f_charbig = 'updated by trigger'
 
1131
      WHERE f_int1 = new.f_int1;
 
1132
END|
 
1133
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1134
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1135
        
 
1136
# check trigger-3 success:      1
 
1137
DROP TRIGGER trg_1;
 
1138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1140
f_charbig = 'just inserted'
 
1141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1142
DELETE FROM t0_aux
 
1143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1146
'just inserted' FROM t0_template
 
1147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1148
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1149
BEGIN
 
1150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1151
f_charbig = 'updated by trigger'
 
1152
      WHERE f_int1 = - old.f_int1;
 
1153
END|
 
1154
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1155
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1156
        
 
1157
# check trigger-4 success:      1
 
1158
DROP TRIGGER trg_1;
 
1159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1161
f_charbig = 'just inserted'
 
1162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1163
DELETE FROM t0_aux
 
1164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1167
'just inserted' FROM t0_template
 
1168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1169
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1170
BEGIN
 
1171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1172
f_charbig = 'updated by trigger'
 
1173
      WHERE f_int1 = new.f_int1;
 
1174
END|
 
1175
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1177
        
 
1178
# check trigger-5 success:      1
 
1179
DROP TRIGGER trg_1;
 
1180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1182
f_charbig = 'just inserted'
 
1183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1184
DELETE FROM t0_aux
 
1185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1186
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1187
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1188
'just inserted' FROM t0_template
 
1189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1190
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1191
BEGIN
 
1192
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1193
f_charbig = 'updated by trigger'
 
1194
      WHERE f_int1 = - old.f_int1;
 
1195
END|
 
1196
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1197
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1198
        
 
1199
# check trigger-6 success:      1
 
1200
DROP TRIGGER trg_1;
 
1201
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1202
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1203
f_charbig = 'just inserted'
 
1204
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1205
DELETE FROM t0_aux
 
1206
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1207
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1208
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1209
'just inserted' FROM t0_template
 
1210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1211
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1212
BEGIN
 
1213
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1214
f_charbig = 'updated by trigger'
 
1215
      WHERE f_int1 = - old.f_int1;
 
1216
END|
 
1217
DELETE FROM t0_aux
 
1218
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1219
        
 
1220
# check trigger-7 success:      1
 
1221
DROP TRIGGER trg_1;
 
1222
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1223
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1224
f_charbig = 'just inserted'
 
1225
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1226
DELETE FROM t0_aux
 
1227
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1228
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1229
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1230
'just inserted' FROM t0_template
 
1231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1232
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1233
BEGIN
 
1234
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1235
f_charbig = 'updated by trigger'
 
1236
      WHERE f_int1 = - old.f_int1;
 
1237
END|
 
1238
DELETE FROM t0_aux
 
1239
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1240
        
 
1241
# check trigger-8 success:      1
 
1242
DROP TRIGGER trg_1;
 
1243
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1244
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1245
f_charbig = 'just inserted'
 
1246
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1247
DELETE FROM t0_aux
 
1248
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1249
DELETE FROM t1
 
1250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1251
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1252
BEGIN
 
1253
SET new.f_int1 = old.f_int1 + @max_row,
 
1254
new.f_int2 = old.f_int2 - @max_row,
 
1255
new.f_charbig = '####updated per update trigger####';
 
1256
END|
 
1257
UPDATE t1
 
1258
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1259
f_charbig = '####updated per update statement itself####';
 
1260
        
 
1261
# check trigger-9 success:      1
 
1262
DROP TRIGGER trg_2;
 
1263
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1264
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1265
f_charbig = CONCAT('===',f_char1,'===');
 
1266
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1267
BEGIN
 
1268
SET new.f_int1 = new.f_int1 + @max_row,
 
1269
new.f_int2 = new.f_int2 - @max_row,
 
1270
new.f_charbig = '####updated per update trigger####';
 
1271
END|
 
1272
UPDATE t1
 
1273
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1274
f_charbig = '####updated per update statement itself####';
 
1275
        
 
1276
# check trigger-10 success:     1
 
1277
DROP TRIGGER trg_2;
 
1278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1280
f_charbig = CONCAT('===',f_char1,'===');
 
1281
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1282
BEGIN
 
1283
SET new.f_int1 = @my_max1 + @counter,
 
1284
new.f_int2 = @my_min2 - @counter,
 
1285
new.f_charbig = '####updated per insert trigger####';
 
1286
SET @counter = @counter + 1;
 
1287
END|
 
1288
SET @counter = 1;
 
1289
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1290
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1291
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1292
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1294
ORDER BY f_int1;
 
1295
DROP TRIGGER trg_3;
 
1296
        
 
1297
# check trigger-11 success:     1
 
1298
DELETE FROM t1
 
1299
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1300
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1301
AND f_charbig = '####updated per insert trigger####';
 
1302
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1303
BEGIN
 
1304
SET new.f_int1 = @my_max1 + @counter,
 
1305
new.f_int2 = @my_min2 - @counter,
 
1306
new.f_charbig = '####updated per insert trigger####';
 
1307
SET @counter = @counter + 1;
 
1308
END|
 
1309
SET @counter = 1;
 
1310
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1311
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1312
SELECT CAST(f_int1 AS CHAR),
 
1313
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1314
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1315
ORDER BY f_int1;
 
1316
DROP TRIGGER trg_3;
 
1317
        
 
1318
# check trigger-12 success:     1
 
1319
DELETE FROM t1
 
1320
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1321
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1322
AND f_charbig = '####updated per insert trigger####';
 
1323
ANALYZE  TABLE t1;
 
1324
Table   Op      Msg_type        Msg_text
 
1325
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1326
CHECK    TABLE t1 EXTENDED;
 
1327
Table   Op      Msg_type        Msg_text
 
1328
test.t1 check   note    The storage engine for the table doesn't support check
 
1329
CHECKSUM TABLE t1 EXTENDED;
 
1330
Table   Checksum
 
1331
test.t1 <some_value>
 
1332
OPTIMIZE TABLE t1;
 
1333
Table   Op      Msg_type        Msg_text
 
1334
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1335
# check layout success:    1
 
1336
REPAIR   TABLE t1 EXTENDED;
 
1337
Table   Op      Msg_type        Msg_text
 
1338
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1339
# check layout success:    1
 
1340
TRUNCATE t1;
 
1341
        
 
1342
# check TRUNCATE success:       1
 
1343
# check layout success:    1
 
1344
# End usability test (inc/partition_check.inc)
 
1345
DROP TABLE t1;
 
1346
CREATE TABLE t1 (
 
1347
f_int1 INTEGER,
 
1348
f_int2 INTEGER,
 
1349
f_char1 CHAR(20),
 
1350
f_char2 CHAR(20),
 
1351
f_charbig VARCHAR(1000)
 
1352
 
 
1353
)
 
1354
PARTITION BY LIST(MOD(f_int1,4))
 
1355
(PARTITION part_3 VALUES IN (-3),
 
1356
PARTITION part_2 VALUES IN (-2),
 
1357
PARTITION part_1 VALUES IN (-1),
 
1358
PARTITION part_N VALUES IN (NULL),
 
1359
PARTITION part0 VALUES IN (0),
 
1360
PARTITION part1 VALUES IN (1),
 
1361
PARTITION part2 VALUES IN (2),
 
1362
PARTITION part3 VALUES IN (3));
 
1363
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1364
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1365
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1366
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
1367
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1368
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1369
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1370
# Start usability test (inc/partition_check.inc)
 
1371
create_command
 
1372
SHOW CREATE TABLE t1;
 
1373
Table   Create Table
 
1374
t1      CREATE TABLE `t1` (
 
1375
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
1376
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
1377
  `f_char1` char(20) DEFAULT NULL,
 
1378
  `f_char2` char(20) DEFAULT NULL,
 
1379
  `f_charbig` varchar(1000) DEFAULT NULL,
 
1380
  PRIMARY KEY (`f_int1`,`f_int2`)
 
1381
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
1382
 
 
1383
# check prerequisites-1 success:    1
 
1384
# check COUNT(*) success:    1
 
1385
# check MIN/MAX(f_int1) success:    1
 
1386
# check MIN/MAX(f_int2) success:    1
 
1387
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1388
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1389
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1390
WHERE f_int1 IN (2,3);
 
1391
ERROR 23000: Can't write; duplicate key in table 't1'
 
1392
# check prerequisites-3 success:    1
 
1393
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
1394
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1395
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1396
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1397
WHERE f_int1 IN (2,3);
 
1398
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1399
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1400
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1401
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1402
WHERE f_int1 IN (2,3);
 
1403
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1404
# check read via f_int1 success: 1
 
1405
# check read via f_int2 success: 1
 
1406
        
 
1407
# check multiple-1 success:     1
 
1408
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1409
        
 
1410
# check multiple-2 success:     1
 
1411
INSERT INTO t1 SELECT * FROM t0_template
 
1412
WHERE MOD(f_int1,3) = 0;
 
1413
        
 
1414
# check multiple-3 success:     1
 
1415
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1416
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1417
AND @max_row_div2 + @max_row_div4;
 
1418
        
 
1419
# check multiple-4 success:     1
 
1420
DELETE FROM t1
 
1421
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1422
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1423
        
 
1424
# check multiple-5 success:     1
 
1425
SELECT COUNT(*) INTO @try_count FROM t0_template
 
1426
WHERE MOD(f_int1,3) = 0
 
1427
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1428
SELECT COUNT(*) INTO @clash_count
 
1429
FROM t1 INNER JOIN t0_template USING(f_int1)
 
1430
WHERE MOD(f_int1,3) = 0
 
1431
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1432
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1433
INSERT INTO t1
 
1434
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1435
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1436
f_charbig = '#SINGLE#';
 
1437
        
 
1438
# check single-1 success:       1
 
1439
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1440
INSERT INTO t1
 
1441
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1442
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1443
f_charbig = '#SINGLE#';
 
1444
        
 
1445
# check single-2 success:       1
 
1446
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1447
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1448
UPDATE t1 SET f_int1 = @cur_value2
 
1449
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1450
        
 
1451
# check single-3 success:       1
 
1452
SET @cur_value1= -1;
 
1453
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1454
UPDATE t1 SET f_int1 = @cur_value1
 
1455
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1456
        
 
1457
# check single-4 success:       1
 
1458
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1459
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1460
        
 
1461
# check single-5 success:       1
 
1462
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1463
        
 
1464
# check single-6 success:       1
 
1465
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1466
        
 
1467
# check single-7 success:       1
 
1468
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1469
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1470
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1471
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1472
f_charbig = '#NULL#';
 
1473
INSERT INTO t1
 
1474
SET f_int1 = NULL , f_int2 = -@max_row,
 
1475
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1476
f_charbig = '#NULL#';
 
1477
ERROR 23000: Column 'f_int1' cannot be null
 
1478
# check null success:    1
 
1479
DELETE FROM t1
 
1480
WHERE f_int1 = 0 AND f_int2 = 0
 
1481
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1482
AND f_charbig = '#NULL#';
 
1483
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1484
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1485
   FROM t0_template source_tab
 
1486
WHERE MOD(f_int1,3) = 0
 
1487
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
1488
ON DUPLICATE KEY
 
1489
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
1490
f_int2 = 2 * @max_row + source_tab.f_int1,
 
1491
f_charbig = 'was updated';
 
1492
        
 
1493
# check unique-1-a success:     1
 
1494
        
 
1495
# check unique-1-b success:     1
 
1496
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1499
f_charbig = CONCAT('===',f_char1,'===')
 
1500
WHERE f_charbig = 'was updated';
 
1501
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1502
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
1503
   FROM t0_template source_tab
 
1504
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1505
        
 
1506
# check replace success:        1
 
1507
DELETE FROM t1
 
1508
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
1509
DELETE FROM t1
 
1510
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
1511
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
1512
UPDATE t1 SET f_int2 = f_int1,
 
1513
f_char1 = CAST(f_int1 AS CHAR),
 
1514
f_char2 = CAST(f_int1 AS CHAR),
 
1515
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
1516
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
1517
SET AUTOCOMMIT= 0;
 
1518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1519
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1520
FROM t0_template source_tab
 
1521
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1522
        
 
1523
# check transactions-1 success:         1
 
1524
COMMIT WORK;
 
1525
        
 
1526
# check transactions-2 success:         1
 
1527
ROLLBACK WORK;
 
1528
        
 
1529
# check transactions-3 success:         1
 
1530
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1531
COMMIT WORK;
 
1532
ROLLBACK WORK;
 
1533
        
 
1534
# check transactions-4 success:         1
 
1535
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1536
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1537
FROM t0_template source_tab
 
1538
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1539
        
 
1540
# check transactions-5 success:         1
 
1541
ROLLBACK WORK;
 
1542
        
 
1543
# check transactions-6 success:         1
 
1544
# INFO: Storage engine used for t1 seems to be transactional.
 
1545
COMMIT;
 
1546
        
 
1547
# check transactions-7 success:         1
 
1548
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1549
COMMIT WORK;
 
1550
SET @@session.sql_mode = 'traditional';
 
1551
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1552
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1553
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1554
'', '', 'was inserted' FROM t0_template
 
1555
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1556
ERROR 22012: Division by 0
 
1557
COMMIT;
 
1558
        
 
1559
# check transactions-8 success:         1
 
1560
# INFO: Storage engine used for t1 seems to be able to revert
 
1561
#       changes made by the failing statement.
 
1562
SET @@session.sql_mode = '';
 
1563
SET AUTOCOMMIT= 1;
 
1564
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1565
COMMIT WORK;
 
1566
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1567
        
 
1568
# check special-1 success:      1
 
1569
UPDATE t1 SET f_charbig = '';
 
1570
        
 
1571
# check special-2 success:      1
 
1572
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1573
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1574
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1576
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1577
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1578
'just inserted' FROM t0_template
 
1579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1580
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1581
BEGIN
 
1582
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1583
f_charbig = 'updated by trigger'
 
1584
      WHERE f_int1 = new.f_int1;
 
1585
END|
 
1586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1587
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1589
        
 
1590
# check trigger-1 success:      1
 
1591
DROP TRIGGER trg_1;
 
1592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1593
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1594
f_charbig = 'just inserted'
 
1595
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1596
DELETE FROM t0_aux
 
1597
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1598
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1599
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1600
'just inserted' FROM t0_template
 
1601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1602
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1603
BEGIN
 
1604
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1605
f_charbig = 'updated by trigger'
 
1606
      WHERE f_int1 = new.f_int1;
 
1607
END|
 
1608
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1609
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1611
        
 
1612
# check trigger-2 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 BEFORE 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 = new.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-3 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 UPDATE 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
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1653
        
 
1654
# check trigger-4 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 UPDATE 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 = new.f_int1;
 
1671
END|
 
1672
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1674
        
 
1675
# check trigger-5 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
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1685
'just inserted' FROM t0_template
 
1686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1687
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1688
BEGIN
 
1689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1690
f_charbig = 'updated by trigger'
 
1691
      WHERE f_int1 = - old.f_int1;
 
1692
END|
 
1693
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1695
        
 
1696
# check trigger-6 success:      1
 
1697
DROP TRIGGER trg_1;
 
1698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1700
f_charbig = 'just inserted'
 
1701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1702
DELETE FROM t0_aux
 
1703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1706
'just inserted' FROM t0_template
 
1707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1708
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1709
BEGIN
 
1710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1711
f_charbig = 'updated by trigger'
 
1712
      WHERE f_int1 = - old.f_int1;
 
1713
END|
 
1714
DELETE FROM t0_aux
 
1715
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1716
        
 
1717
# check trigger-7 success:      1
 
1718
DROP TRIGGER trg_1;
 
1719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1721
f_charbig = 'just inserted'
 
1722
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1723
DELETE FROM t0_aux
 
1724
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1725
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1726
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1727
'just inserted' FROM t0_template
 
1728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1729
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1730
BEGIN
 
1731
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1732
f_charbig = 'updated by trigger'
 
1733
      WHERE f_int1 = - old.f_int1;
 
1734
END|
 
1735
DELETE FROM t0_aux
 
1736
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1737
        
 
1738
# check trigger-8 success:      1
 
1739
DROP TRIGGER trg_1;
 
1740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1742
f_charbig = 'just inserted'
 
1743
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1744
DELETE FROM t0_aux
 
1745
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1746
DELETE FROM t1
 
1747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1748
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1749
BEGIN
 
1750
SET new.f_int1 = old.f_int1 + @max_row,
 
1751
new.f_int2 = old.f_int2 - @max_row,
 
1752
new.f_charbig = '####updated per update trigger####';
 
1753
END|
 
1754
UPDATE t1
 
1755
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1756
f_charbig = '####updated per update statement itself####';
 
1757
        
 
1758
# check trigger-9 success:      1
 
1759
DROP TRIGGER trg_2;
 
1760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1762
f_charbig = CONCAT('===',f_char1,'===');
 
1763
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1764
BEGIN
 
1765
SET new.f_int1 = new.f_int1 + @max_row,
 
1766
new.f_int2 = new.f_int2 - @max_row,
 
1767
new.f_charbig = '####updated per update trigger####';
 
1768
END|
 
1769
UPDATE t1
 
1770
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1771
f_charbig = '####updated per update statement itself####';
 
1772
        
 
1773
# check trigger-10 success:     1
 
1774
DROP TRIGGER trg_2;
 
1775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1777
f_charbig = CONCAT('===',f_char1,'===');
 
1778
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1779
BEGIN
 
1780
SET new.f_int1 = @my_max1 + @counter,
 
1781
new.f_int2 = @my_min2 - @counter,
 
1782
new.f_charbig = '####updated per insert trigger####';
 
1783
SET @counter = @counter + 1;
 
1784
END|
 
1785
SET @counter = 1;
 
1786
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1787
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1788
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1789
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1791
ORDER BY f_int1;
 
1792
DROP TRIGGER trg_3;
 
1793
        
 
1794
# check trigger-11 success:     1
 
1795
DELETE FROM t1
 
1796
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1797
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1798
AND f_charbig = '####updated per insert trigger####';
 
1799
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1800
BEGIN
 
1801
SET new.f_int1 = @my_max1 + @counter,
 
1802
new.f_int2 = @my_min2 - @counter,
 
1803
new.f_charbig = '####updated per insert trigger####';
 
1804
SET @counter = @counter + 1;
 
1805
END|
 
1806
SET @counter = 1;
 
1807
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1808
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1809
SELECT CAST(f_int1 AS CHAR),
 
1810
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1811
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1812
ORDER BY f_int1;
 
1813
DROP TRIGGER trg_3;
 
1814
        
 
1815
# check trigger-12 success:     1
 
1816
DELETE FROM t1
 
1817
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1818
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1819
AND f_charbig = '####updated per insert trigger####';
 
1820
ANALYZE  TABLE t1;
 
1821
Table   Op      Msg_type        Msg_text
 
1822
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1823
CHECK    TABLE t1 EXTENDED;
 
1824
Table   Op      Msg_type        Msg_text
 
1825
test.t1 check   note    The storage engine for the table doesn't support check
 
1826
CHECKSUM TABLE t1 EXTENDED;
 
1827
Table   Checksum
 
1828
test.t1 <some_value>
 
1829
OPTIMIZE TABLE t1;
 
1830
Table   Op      Msg_type        Msg_text
 
1831
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1832
# check layout success:    1
 
1833
REPAIR   TABLE t1 EXTENDED;
 
1834
Table   Op      Msg_type        Msg_text
 
1835
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1836
# check layout success:    1
 
1837
TRUNCATE t1;
 
1838
        
 
1839
# check TRUNCATE success:       1
 
1840
# check layout success:    1
 
1841
# End usability test (inc/partition_check.inc)
 
1842
DROP TABLE t1;
 
1843
CREATE TABLE t1 (
 
1844
f_int1 INTEGER,
 
1845
f_int2 INTEGER,
 
1846
f_char1 CHAR(20),
 
1847
f_char2 CHAR(20),
 
1848
f_charbig VARCHAR(1000)
 
1849
 
 
1850
)
 
1851
PARTITION BY RANGE(f_int1)
 
1852
(PARTITION parta VALUES LESS THAN (0),
 
1853
PARTITION partb VALUES LESS THAN (5),
 
1854
PARTITION partc VALUES LESS THAN (10),
 
1855
PARTITION partd VALUES LESS THAN (10 + 5),
 
1856
PARTITION parte VALUES LESS THAN (20),
 
1857
PARTITION partf VALUES LESS THAN (2147483646));
 
1858
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1859
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1860
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1861
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
1862
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1863
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1864
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1865
# Start usability test (inc/partition_check.inc)
 
1866
create_command
 
1867
SHOW CREATE TABLE t1;
 
1868
Table   Create Table
 
1869
t1      CREATE TABLE `t1` (
 
1870
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
1871
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
1872
  `f_char1` char(20) DEFAULT NULL,
 
1873
  `f_char2` char(20) DEFAULT NULL,
 
1874
  `f_charbig` varchar(1000) DEFAULT NULL,
 
1875
  PRIMARY KEY (`f_int1`,`f_int2`)
 
1876
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
1877
 
 
1878
# check prerequisites-1 success:    1
 
1879
# check COUNT(*) success:    1
 
1880
# check MIN/MAX(f_int1) success:    1
 
1881
# check MIN/MAX(f_int2) success:    1
 
1882
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1883
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1884
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1885
WHERE f_int1 IN (2,3);
 
1886
ERROR 23000: Can't write; duplicate key in table 't1'
 
1887
# check prerequisites-3 success:    1
 
1888
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
1889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1890
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1891
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1892
WHERE f_int1 IN (2,3);
 
1893
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1894
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1895
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1896
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1897
WHERE f_int1 IN (2,3);
 
1898
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1899
# check read via f_int1 success: 1
 
1900
# check read via f_int2 success: 1
 
1901
        
 
1902
# check multiple-1 success:     1
 
1903
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1904
        
 
1905
# check multiple-2 success:     1
 
1906
INSERT INTO t1 SELECT * FROM t0_template
 
1907
WHERE MOD(f_int1,3) = 0;
 
1908
        
 
1909
# check multiple-3 success:     1
 
1910
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1911
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1912
AND @max_row_div2 + @max_row_div4;
 
1913
        
 
1914
# check multiple-4 success:     1
 
1915
DELETE FROM t1
 
1916
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1917
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1918
        
 
1919
# check multiple-5 success:     1
 
1920
SELECT COUNT(*) INTO @try_count FROM t0_template
 
1921
WHERE MOD(f_int1,3) = 0
 
1922
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1923
SELECT COUNT(*) INTO @clash_count
 
1924
FROM t1 INNER JOIN t0_template USING(f_int1)
 
1925
WHERE MOD(f_int1,3) = 0
 
1926
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1927
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1928
INSERT INTO t1
 
1929
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1930
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1931
f_charbig = '#SINGLE#';
 
1932
        
 
1933
# check single-1 success:       1
 
1934
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1935
INSERT INTO t1
 
1936
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1937
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1938
f_charbig = '#SINGLE#';
 
1939
        
 
1940
# check single-2 success:       1
 
1941
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1942
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1943
UPDATE t1 SET f_int1 = @cur_value2
 
1944
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1945
        
 
1946
# check single-3 success:       1
 
1947
SET @cur_value1= -1;
 
1948
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1949
UPDATE t1 SET f_int1 = @cur_value1
 
1950
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1951
        
 
1952
# check single-4 success:       1
 
1953
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1954
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1955
        
 
1956
# check single-5 success:       1
 
1957
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1958
        
 
1959
# check single-6 success:       1
 
1960
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1961
ERROR HY000: Table has no partition for value 2147483647
 
1962
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1963
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1964
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1965
f_charbig = '#NULL#';
 
1966
INSERT INTO t1
 
1967
SET f_int1 = NULL , f_int2 = -@max_row,
 
1968
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1969
f_charbig = '#NULL#';
 
1970
ERROR 23000: Column 'f_int1' cannot be null
 
1971
# check null success:    1
 
1972
DELETE FROM t1
 
1973
WHERE f_int1 = 0 AND f_int2 = 0
 
1974
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1975
AND f_charbig = '#NULL#';
 
1976
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1977
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1978
   FROM t0_template source_tab
 
1979
WHERE MOD(f_int1,3) = 0
 
1980
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
1981
ON DUPLICATE KEY
 
1982
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
1983
f_int2 = 2 * @max_row + source_tab.f_int1,
 
1984
f_charbig = 'was updated';
 
1985
        
 
1986
# check unique-1-a success:     1
 
1987
        
 
1988
# check unique-1-b success:     1
 
1989
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1990
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1991
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1992
f_charbig = CONCAT('===',f_char1,'===')
 
1993
WHERE f_charbig = 'was updated';
 
1994
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1995
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
1996
   FROM t0_template source_tab
 
1997
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1998
        
 
1999
# check replace success:        1
 
2000
DELETE FROM t1
 
2001
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
2002
DELETE FROM t1
 
2003
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
2004
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
2005
UPDATE t1 SET f_int2 = f_int1,
 
2006
f_char1 = CAST(f_int1 AS CHAR),
 
2007
f_char2 = CAST(f_int1 AS CHAR),
 
2008
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
2009
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
2010
SET AUTOCOMMIT= 0;
 
2011
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2012
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2013
FROM t0_template source_tab
 
2014
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2015
        
 
2016
# check transactions-1 success:         1
 
2017
COMMIT WORK;
 
2018
        
 
2019
# check transactions-2 success:         1
 
2020
ROLLBACK WORK;
 
2021
        
 
2022
# check transactions-3 success:         1
 
2023
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2024
COMMIT WORK;
 
2025
ROLLBACK WORK;
 
2026
        
 
2027
# check transactions-4 success:         1
 
2028
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2029
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2030
FROM t0_template source_tab
 
2031
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2032
        
 
2033
# check transactions-5 success:         1
 
2034
ROLLBACK WORK;
 
2035
        
 
2036
# check transactions-6 success:         1
 
2037
# INFO: Storage engine used for t1 seems to be transactional.
 
2038
COMMIT;
 
2039
        
 
2040
# check transactions-7 success:         1
 
2041
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2042
COMMIT WORK;
 
2043
SET @@session.sql_mode = 'traditional';
 
2044
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2045
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2046
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2047
'', '', 'was inserted' FROM t0_template
 
2048
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2049
ERROR 22012: Division by 0
 
2050
COMMIT;
 
2051
        
 
2052
# check transactions-8 success:         1
 
2053
# INFO: Storage engine used for t1 seems to be able to revert
 
2054
#       changes made by the failing statement.
 
2055
SET @@session.sql_mode = '';
 
2056
SET AUTOCOMMIT= 1;
 
2057
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2058
COMMIT WORK;
 
2059
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2060
        
 
2061
# check special-1 success:      1
 
2062
UPDATE t1 SET f_charbig = '';
 
2063
        
 
2064
# check special-2 success:      1
 
2065
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2066
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2067
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2068
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2071
'just inserted' FROM t0_template
 
2072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2073
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2074
BEGIN
 
2075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2076
f_charbig = 'updated by trigger'
 
2077
      WHERE f_int1 = new.f_int1;
 
2078
END|
 
2079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2080
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2082
        
 
2083
# check trigger-1 success:      1
 
2084
DROP TRIGGER trg_1;
 
2085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2087
f_charbig = 'just inserted'
 
2088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2089
DELETE FROM t0_aux
 
2090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2093
'just inserted' FROM t0_template
 
2094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2095
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2096
BEGIN
 
2097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2098
f_charbig = 'updated by trigger'
 
2099
      WHERE f_int1 = new.f_int1;
 
2100
END|
 
2101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2102
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2104
        
 
2105
# check trigger-2 success:      1
 
2106
DROP TRIGGER trg_1;
 
2107
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2108
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2109
f_charbig = 'just inserted'
 
2110
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2111
DELETE FROM t0_aux
 
2112
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2114
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2115
'just inserted' FROM t0_template
 
2116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2117
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2118
BEGIN
 
2119
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2120
f_charbig = 'updated by trigger'
 
2121
      WHERE f_int1 = new.f_int1;
 
2122
END|
 
2123
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2124
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2125
        
 
2126
# check trigger-3 success:      1
 
2127
DROP TRIGGER trg_1;
 
2128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2130
f_charbig = 'just inserted'
 
2131
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2132
DELETE FROM t0_aux
 
2133
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2134
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2135
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2136
'just inserted' FROM t0_template
 
2137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2138
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2139
BEGIN
 
2140
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2141
f_charbig = 'updated by trigger'
 
2142
      WHERE f_int1 = - old.f_int1;
 
2143
END|
 
2144
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2145
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2146
        
 
2147
# check trigger-4 success:      1
 
2148
DROP TRIGGER trg_1;
 
2149
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2150
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2151
f_charbig = 'just inserted'
 
2152
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2153
DELETE FROM t0_aux
 
2154
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2156
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2157
'just inserted' FROM t0_template
 
2158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2159
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2160
BEGIN
 
2161
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2162
f_charbig = 'updated by trigger'
 
2163
      WHERE f_int1 = new.f_int1;
 
2164
END|
 
2165
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2166
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2167
        
 
2168
# check trigger-5 success:      1
 
2169
DROP TRIGGER trg_1;
 
2170
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2171
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2172
f_charbig = 'just inserted'
 
2173
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2174
DELETE FROM t0_aux
 
2175
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2176
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2177
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2178
'just inserted' FROM t0_template
 
2179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2180
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2181
BEGIN
 
2182
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2183
f_charbig = 'updated by trigger'
 
2184
      WHERE f_int1 = - old.f_int1;
 
2185
END|
 
2186
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2187
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2188
        
 
2189
# check trigger-6 success:      1
 
2190
DROP TRIGGER trg_1;
 
2191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2193
f_charbig = 'just inserted'
 
2194
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2195
DELETE FROM t0_aux
 
2196
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2199
'just inserted' FROM t0_template
 
2200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2201
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2202
BEGIN
 
2203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2204
f_charbig = 'updated by trigger'
 
2205
      WHERE f_int1 = - old.f_int1;
 
2206
END|
 
2207
DELETE FROM t0_aux
 
2208
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2209
        
 
2210
# check trigger-7 success:      1
 
2211
DROP TRIGGER trg_1;
 
2212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2214
f_charbig = 'just inserted'
 
2215
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2216
DELETE FROM t0_aux
 
2217
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2218
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2219
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2220
'just inserted' FROM t0_template
 
2221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2222
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2223
BEGIN
 
2224
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2225
f_charbig = 'updated by trigger'
 
2226
      WHERE f_int1 = - old.f_int1;
 
2227
END|
 
2228
DELETE FROM t0_aux
 
2229
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2230
        
 
2231
# check trigger-8 success:      1
 
2232
DROP TRIGGER trg_1;
 
2233
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2234
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2235
f_charbig = 'just inserted'
 
2236
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2237
DELETE FROM t0_aux
 
2238
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2239
DELETE FROM t1
 
2240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2241
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2242
BEGIN
 
2243
SET new.f_int1 = old.f_int1 + @max_row,
 
2244
new.f_int2 = old.f_int2 - @max_row,
 
2245
new.f_charbig = '####updated per update trigger####';
 
2246
END|
 
2247
UPDATE t1
 
2248
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2249
f_charbig = '####updated per update statement itself####';
 
2250
        
 
2251
# check trigger-9 success:      1
 
2252
DROP TRIGGER trg_2;
 
2253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2255
f_charbig = CONCAT('===',f_char1,'===');
 
2256
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2257
BEGIN
 
2258
SET new.f_int1 = new.f_int1 + @max_row,
 
2259
new.f_int2 = new.f_int2 - @max_row,
 
2260
new.f_charbig = '####updated per update trigger####';
 
2261
END|
 
2262
UPDATE t1
 
2263
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2264
f_charbig = '####updated per update statement itself####';
 
2265
        
 
2266
# check trigger-10 success:     1
 
2267
DROP TRIGGER trg_2;
 
2268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2270
f_charbig = CONCAT('===',f_char1,'===');
 
2271
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2272
BEGIN
 
2273
SET new.f_int1 = @my_max1 + @counter,
 
2274
new.f_int2 = @my_min2 - @counter,
 
2275
new.f_charbig = '####updated per insert trigger####';
 
2276
SET @counter = @counter + 1;
 
2277
END|
 
2278
SET @counter = 1;
 
2279
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2280
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2281
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2282
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2284
ORDER BY f_int1;
 
2285
DROP TRIGGER trg_3;
 
2286
        
 
2287
# check trigger-11 success:     1
 
2288
DELETE FROM t1
 
2289
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2290
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2291
AND f_charbig = '####updated per insert trigger####';
 
2292
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2293
BEGIN
 
2294
SET new.f_int1 = @my_max1 + @counter,
 
2295
new.f_int2 = @my_min2 - @counter,
 
2296
new.f_charbig = '####updated per insert trigger####';
 
2297
SET @counter = @counter + 1;
 
2298
END|
 
2299
SET @counter = 1;
 
2300
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2301
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2302
SELECT CAST(f_int1 AS CHAR),
 
2303
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2304
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2305
ORDER BY f_int1;
 
2306
DROP TRIGGER trg_3;
 
2307
        
 
2308
# check trigger-12 success:     1
 
2309
DELETE FROM t1
 
2310
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2311
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2312
AND f_charbig = '####updated per insert trigger####';
 
2313
ANALYZE  TABLE t1;
 
2314
Table   Op      Msg_type        Msg_text
 
2315
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2316
CHECK    TABLE t1 EXTENDED;
 
2317
Table   Op      Msg_type        Msg_text
 
2318
test.t1 check   note    The storage engine for the table doesn't support check
 
2319
CHECKSUM TABLE t1 EXTENDED;
 
2320
Table   Checksum
 
2321
test.t1 <some_value>
 
2322
OPTIMIZE TABLE t1;
 
2323
Table   Op      Msg_type        Msg_text
 
2324
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2325
# check layout success:    1
 
2326
REPAIR   TABLE t1 EXTENDED;
 
2327
Table   Op      Msg_type        Msg_text
 
2328
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2329
# check layout success:    1
 
2330
TRUNCATE t1;
 
2331
        
 
2332
# check TRUNCATE success:       1
 
2333
# check layout success:    1
 
2334
# End usability test (inc/partition_check.inc)
 
2335
DROP TABLE t1;
 
2336
CREATE TABLE t1 (
 
2337
f_int1 INTEGER,
 
2338
f_int2 INTEGER,
 
2339
f_char1 CHAR(20),
 
2340
f_char2 CHAR(20),
 
2341
f_charbig VARCHAR(1000)
 
2342
 
 
2343
)
 
2344
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
2345
(PARTITION parta VALUES LESS THAN (0),
 
2346
PARTITION partb VALUES LESS THAN (5),
 
2347
PARTITION partc VALUES LESS THAN (10),
 
2348
PARTITION partd VALUES LESS THAN (2147483646));
 
2349
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2350
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2351
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2352
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
2353
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2354
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2355
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2356
# Start usability test (inc/partition_check.inc)
 
2357
create_command
 
2358
SHOW CREATE TABLE t1;
 
2359
Table   Create Table
 
2360
t1      CREATE TABLE `t1` (
 
2361
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
2362
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
2363
  `f_char1` char(20) DEFAULT NULL,
 
2364
  `f_char2` char(20) DEFAULT NULL,
 
2365
  `f_charbig` varchar(1000) DEFAULT NULL,
 
2366
  PRIMARY KEY (`f_int1`,`f_int2`)
 
2367
) ENGINE=InnoDB 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 = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
2368
 
 
2369
# check prerequisites-1 success:    1
 
2370
# check COUNT(*) success:    1
 
2371
# check MIN/MAX(f_int1) success:    1
 
2372
# check MIN/MAX(f_int2) success:    1
 
2373
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2374
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2375
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2376
WHERE f_int1 IN (2,3);
 
2377
ERROR 23000: Can't write; duplicate key in table 't1'
 
2378
# check prerequisites-3 success:    1
 
2379
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
2380
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2381
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2382
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2383
WHERE f_int1 IN (2,3);
 
2384
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2385
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2386
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2387
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2388
WHERE f_int1 IN (2,3);
 
2389
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2390
# check read via f_int1 success: 1
 
2391
# check read via f_int2 success: 1
 
2392
        
 
2393
# check multiple-1 success:     1
 
2394
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2395
        
 
2396
# check multiple-2 success:     1
 
2397
INSERT INTO t1 SELECT * FROM t0_template
 
2398
WHERE MOD(f_int1,3) = 0;
 
2399
        
 
2400
# check multiple-3 success:     1
 
2401
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2402
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2403
AND @max_row_div2 + @max_row_div4;
 
2404
        
 
2405
# check multiple-4 success:     1
 
2406
DELETE FROM t1
 
2407
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2408
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2409
        
 
2410
# check multiple-5 success:     1
 
2411
SELECT COUNT(*) INTO @try_count FROM t0_template
 
2412
WHERE MOD(f_int1,3) = 0
 
2413
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2414
SELECT COUNT(*) INTO @clash_count
 
2415
FROM t1 INNER JOIN t0_template USING(f_int1)
 
2416
WHERE MOD(f_int1,3) = 0
 
2417
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2418
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2419
INSERT INTO t1
 
2420
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2421
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2422
f_charbig = '#SINGLE#';
 
2423
        
 
2424
# check single-1 success:       1
 
2425
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2426
INSERT INTO t1
 
2427
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2428
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2429
f_charbig = '#SINGLE#';
 
2430
        
 
2431
# check single-2 success:       1
 
2432
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2433
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2434
UPDATE t1 SET f_int1 = @cur_value2
 
2435
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2436
        
 
2437
# check single-3 success:       1
 
2438
SET @cur_value1= -1;
 
2439
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2440
UPDATE t1 SET f_int1 = @cur_value1
 
2441
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2442
        
 
2443
# check single-4 success:       1
 
2444
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2445
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2446
        
 
2447
# check single-5 success:       1
 
2448
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2449
        
 
2450
# check single-6 success:       1
 
2451
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2452
        
 
2453
# check single-7 success:       1
 
2454
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
2455
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2456
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2457
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2458
f_charbig = '#NULL#';
 
2459
INSERT INTO t1
 
2460
SET f_int1 = NULL , f_int2 = -@max_row,
 
2461
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2462
f_charbig = '#NULL#';
 
2463
ERROR 23000: Column 'f_int1' cannot be null
 
2464
# check null success:    1
 
2465
DELETE FROM t1
 
2466
WHERE f_int1 = 0 AND f_int2 = 0
 
2467
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2468
AND f_charbig = '#NULL#';
 
2469
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2470
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2471
   FROM t0_template source_tab
 
2472
WHERE MOD(f_int1,3) = 0
 
2473
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
2474
ON DUPLICATE KEY
 
2475
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
2476
f_int2 = 2 * @max_row + source_tab.f_int1,
 
2477
f_charbig = 'was updated';
 
2478
        
 
2479
# check unique-1-a success:     1
 
2480
        
 
2481
# check unique-1-b success:     1
 
2482
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2485
f_charbig = CONCAT('===',f_char1,'===')
 
2486
WHERE f_charbig = 'was updated';
 
2487
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2488
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
2489
   FROM t0_template source_tab
 
2490
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2491
        
 
2492
# check replace success:        1
 
2493
DELETE FROM t1
 
2494
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
2495
DELETE FROM t1
 
2496
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
2497
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
2498
UPDATE t1 SET f_int2 = f_int1,
 
2499
f_char1 = CAST(f_int1 AS CHAR),
 
2500
f_char2 = CAST(f_int1 AS CHAR),
 
2501
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
2502
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
2503
SET AUTOCOMMIT= 0;
 
2504
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2505
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2506
FROM t0_template source_tab
 
2507
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2508
        
 
2509
# check transactions-1 success:         1
 
2510
COMMIT WORK;
 
2511
        
 
2512
# check transactions-2 success:         1
 
2513
ROLLBACK WORK;
 
2514
        
 
2515
# check transactions-3 success:         1
 
2516
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2517
COMMIT WORK;
 
2518
ROLLBACK WORK;
 
2519
        
 
2520
# check transactions-4 success:         1
 
2521
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2522
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2523
FROM t0_template source_tab
 
2524
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2525
        
 
2526
# check transactions-5 success:         1
 
2527
ROLLBACK WORK;
 
2528
        
 
2529
# check transactions-6 success:         1
 
2530
# INFO: Storage engine used for t1 seems to be transactional.
 
2531
COMMIT;
 
2532
        
 
2533
# check transactions-7 success:         1
 
2534
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2535
COMMIT WORK;
 
2536
SET @@session.sql_mode = 'traditional';
 
2537
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2538
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2539
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2540
'', '', 'was inserted' FROM t0_template
 
2541
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2542
ERROR 22012: Division by 0
 
2543
COMMIT;
 
2544
        
 
2545
# check transactions-8 success:         1
 
2546
# INFO: Storage engine used for t1 seems to be able to revert
 
2547
#       changes made by the failing statement.
 
2548
SET @@session.sql_mode = '';
 
2549
SET AUTOCOMMIT= 1;
 
2550
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2551
COMMIT WORK;
 
2552
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2553
        
 
2554
# check special-1 success:      1
 
2555
UPDATE t1 SET f_charbig = '';
 
2556
        
 
2557
# check special-2 success:      1
 
2558
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2559
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2560
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2562
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2563
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2564
'just inserted' FROM t0_template
 
2565
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2566
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2567
BEGIN
 
2568
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2569
f_charbig = 'updated by trigger'
 
2570
      WHERE f_int1 = new.f_int1;
 
2571
END|
 
2572
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2573
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2575
        
 
2576
# check trigger-1 success:      1
 
2577
DROP TRIGGER trg_1;
 
2578
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2579
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2580
f_charbig = 'just inserted'
 
2581
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2582
DELETE FROM t0_aux
 
2583
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2584
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2585
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2586
'just inserted' FROM t0_template
 
2587
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2588
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2589
BEGIN
 
2590
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2591
f_charbig = 'updated by trigger'
 
2592
      WHERE f_int1 = new.f_int1;
 
2593
END|
 
2594
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2595
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2597
        
 
2598
# check trigger-2 success:      1
 
2599
DROP TRIGGER trg_1;
 
2600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2602
f_charbig = 'just inserted'
 
2603
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2604
DELETE FROM t0_aux
 
2605
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2608
'just inserted' FROM t0_template
 
2609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2610
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2611
BEGIN
 
2612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2613
f_charbig = 'updated by trigger'
 
2614
      WHERE f_int1 = new.f_int1;
 
2615
END|
 
2616
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2617
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2618
        
 
2619
# check trigger-3 success:      1
 
2620
DROP TRIGGER trg_1;
 
2621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2623
f_charbig = 'just inserted'
 
2624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2625
DELETE FROM t0_aux
 
2626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2628
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2629
'just inserted' FROM t0_template
 
2630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2631
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2632
BEGIN
 
2633
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2634
f_charbig = 'updated by trigger'
 
2635
      WHERE f_int1 = - old.f_int1;
 
2636
END|
 
2637
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2638
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2639
        
 
2640
# check trigger-4 success:      1
 
2641
DROP TRIGGER trg_1;
 
2642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2644
f_charbig = 'just inserted'
 
2645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2646
DELETE FROM t0_aux
 
2647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2650
'just inserted' FROM t0_template
 
2651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2652
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2653
BEGIN
 
2654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2655
f_charbig = 'updated by trigger'
 
2656
      WHERE f_int1 = new.f_int1;
 
2657
END|
 
2658
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2659
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2660
        
 
2661
# check trigger-5 success:      1
 
2662
DROP TRIGGER trg_1;
 
2663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2665
f_charbig = 'just inserted'
 
2666
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2667
DELETE FROM t0_aux
 
2668
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2670
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2671
'just inserted' FROM t0_template
 
2672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2673
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2674
BEGIN
 
2675
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2676
f_charbig = 'updated by trigger'
 
2677
      WHERE f_int1 = - old.f_int1;
 
2678
END|
 
2679
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2680
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2681
        
 
2682
# check trigger-6 success:      1
 
2683
DROP TRIGGER trg_1;
 
2684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2686
f_charbig = 'just inserted'
 
2687
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2688
DELETE FROM t0_aux
 
2689
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2690
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2691
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2692
'just inserted' FROM t0_template
 
2693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2694
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2695
BEGIN
 
2696
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2697
f_charbig = 'updated by trigger'
 
2698
      WHERE f_int1 = - old.f_int1;
 
2699
END|
 
2700
DELETE FROM t0_aux
 
2701
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2702
        
 
2703
# check trigger-7 success:      1
 
2704
DROP TRIGGER trg_1;
 
2705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2707
f_charbig = 'just inserted'
 
2708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2709
DELETE FROM t0_aux
 
2710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2711
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2712
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2713
'just inserted' FROM t0_template
 
2714
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2715
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2716
BEGIN
 
2717
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2718
f_charbig = 'updated by trigger'
 
2719
      WHERE f_int1 = - old.f_int1;
 
2720
END|
 
2721
DELETE FROM t0_aux
 
2722
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2723
        
 
2724
# check trigger-8 success:      1
 
2725
DROP TRIGGER trg_1;
 
2726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2728
f_charbig = 'just inserted'
 
2729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2730
DELETE FROM t0_aux
 
2731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2732
DELETE FROM t1
 
2733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2734
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2735
BEGIN
 
2736
SET new.f_int1 = old.f_int1 + @max_row,
 
2737
new.f_int2 = old.f_int2 - @max_row,
 
2738
new.f_charbig = '####updated per update trigger####';
 
2739
END|
 
2740
UPDATE t1
 
2741
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2742
f_charbig = '####updated per update statement itself####';
 
2743
        
 
2744
# check trigger-9 success:      1
 
2745
DROP TRIGGER trg_2;
 
2746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2748
f_charbig = CONCAT('===',f_char1,'===');
 
2749
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2750
BEGIN
 
2751
SET new.f_int1 = new.f_int1 + @max_row,
 
2752
new.f_int2 = new.f_int2 - @max_row,
 
2753
new.f_charbig = '####updated per update trigger####';
 
2754
END|
 
2755
UPDATE t1
 
2756
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2757
f_charbig = '####updated per update statement itself####';
 
2758
        
 
2759
# check trigger-10 success:     1
 
2760
DROP TRIGGER trg_2;
 
2761
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2762
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2763
f_charbig = CONCAT('===',f_char1,'===');
 
2764
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2765
BEGIN
 
2766
SET new.f_int1 = @my_max1 + @counter,
 
2767
new.f_int2 = @my_min2 - @counter,
 
2768
new.f_charbig = '####updated per insert trigger####';
 
2769
SET @counter = @counter + 1;
 
2770
END|
 
2771
SET @counter = 1;
 
2772
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2773
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2774
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2775
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2777
ORDER BY f_int1;
 
2778
DROP TRIGGER trg_3;
 
2779
        
 
2780
# check trigger-11 success:     1
 
2781
DELETE FROM t1
 
2782
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2783
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2784
AND f_charbig = '####updated per insert trigger####';
 
2785
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2786
BEGIN
 
2787
SET new.f_int1 = @my_max1 + @counter,
 
2788
new.f_int2 = @my_min2 - @counter,
 
2789
new.f_charbig = '####updated per insert trigger####';
 
2790
SET @counter = @counter + 1;
 
2791
END|
 
2792
SET @counter = 1;
 
2793
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2794
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2795
SELECT CAST(f_int1 AS CHAR),
 
2796
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2798
ORDER BY f_int1;
 
2799
DROP TRIGGER trg_3;
 
2800
        
 
2801
# check trigger-12 success:     1
 
2802
DELETE FROM t1
 
2803
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2804
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2805
AND f_charbig = '####updated per insert trigger####';
 
2806
ANALYZE  TABLE t1;
 
2807
Table   Op      Msg_type        Msg_text
 
2808
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2809
CHECK    TABLE t1 EXTENDED;
 
2810
Table   Op      Msg_type        Msg_text
 
2811
test.t1 check   note    The storage engine for the table doesn't support check
 
2812
CHECKSUM TABLE t1 EXTENDED;
 
2813
Table   Checksum
 
2814
test.t1 <some_value>
 
2815
OPTIMIZE TABLE t1;
 
2816
Table   Op      Msg_type        Msg_text
 
2817
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2818
# check layout success:    1
 
2819
REPAIR   TABLE t1 EXTENDED;
 
2820
Table   Op      Msg_type        Msg_text
 
2821
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2822
# check layout success:    1
 
2823
TRUNCATE t1;
 
2824
        
 
2825
# check TRUNCATE success:       1
 
2826
# check layout success:    1
 
2827
# End usability test (inc/partition_check.inc)
 
2828
DROP TABLE t1;
 
2829
CREATE TABLE t1 (
 
2830
f_int1 INTEGER,
 
2831
f_int2 INTEGER,
 
2832
f_char1 CHAR(20),
 
2833
f_char2 CHAR(20),
 
2834
f_charbig VARCHAR(1000)
 
2835
 
 
2836
)
 
2837
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2838
(PARTITION part1 VALUES LESS THAN (0)
 
2839
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2840
PARTITION part2 VALUES LESS THAN (5)
 
2841
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2842
PARTITION part3 VALUES LESS THAN (10)
 
2843
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2844
PARTITION part4 VALUES LESS THAN (2147483646)
 
2845
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2846
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2847
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2848
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2849
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
2850
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2851
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2852
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2853
# Start usability test (inc/partition_check.inc)
 
2854
create_command
 
2855
SHOW CREATE TABLE t1;
 
2856
Table   Create Table
 
2857
t1      CREATE TABLE `t1` (
 
2858
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
2859
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
2860
  `f_char1` char(20) DEFAULT NULL,
 
2861
  `f_char2` char(20) DEFAULT NULL,
 
2862
  `f_charbig` varchar(1000) DEFAULT NULL,
 
2863
  PRIMARY KEY (`f_int1`,`f_int2`)
 
2864
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
2865
 
 
2866
# check prerequisites-1 success:    1
 
2867
# check COUNT(*) success:    1
 
2868
# check MIN/MAX(f_int1) success:    1
 
2869
# check MIN/MAX(f_int2) success:    1
 
2870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2871
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2872
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2873
WHERE f_int1 IN (2,3);
 
2874
ERROR 23000: Can't write; duplicate key in table 't1'
 
2875
# check prerequisites-3 success:    1
 
2876
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
2877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2878
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2879
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2880
WHERE f_int1 IN (2,3);
 
2881
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2882
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2883
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2884
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2885
WHERE f_int1 IN (2,3);
 
2886
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2887
# check read via f_int1 success: 1
 
2888
# check read via f_int2 success: 1
 
2889
        
 
2890
# check multiple-1 success:     1
 
2891
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2892
        
 
2893
# check multiple-2 success:     1
 
2894
INSERT INTO t1 SELECT * FROM t0_template
 
2895
WHERE MOD(f_int1,3) = 0;
 
2896
        
 
2897
# check multiple-3 success:     1
 
2898
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2899
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2900
AND @max_row_div2 + @max_row_div4;
 
2901
        
 
2902
# check multiple-4 success:     1
 
2903
DELETE FROM t1
 
2904
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2905
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2906
        
 
2907
# check multiple-5 success:     1
 
2908
SELECT COUNT(*) INTO @try_count FROM t0_template
 
2909
WHERE MOD(f_int1,3) = 0
 
2910
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2911
SELECT COUNT(*) INTO @clash_count
 
2912
FROM t1 INNER JOIN t0_template USING(f_int1)
 
2913
WHERE MOD(f_int1,3) = 0
 
2914
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2915
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2916
INSERT INTO t1
 
2917
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2918
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2919
f_charbig = '#SINGLE#';
 
2920
        
 
2921
# check single-1 success:       1
 
2922
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2923
INSERT INTO t1
 
2924
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2925
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2926
f_charbig = '#SINGLE#';
 
2927
        
 
2928
# check single-2 success:       1
 
2929
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2930
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2931
UPDATE t1 SET f_int1 = @cur_value2
 
2932
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2933
        
 
2934
# check single-3 success:       1
 
2935
SET @cur_value1= -1;
 
2936
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2937
UPDATE t1 SET f_int1 = @cur_value1
 
2938
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2939
        
 
2940
# check single-4 success:       1
 
2941
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2942
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2943
        
 
2944
# check single-5 success:       1
 
2945
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2946
        
 
2947
# check single-6 success:       1
 
2948
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2949
ERROR HY000: Table has no partition for value 2147483647
 
2950
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2951
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2952
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2953
f_charbig = '#NULL#';
 
2954
INSERT INTO t1
 
2955
SET f_int1 = NULL , f_int2 = -@max_row,
 
2956
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2957
f_charbig = '#NULL#';
 
2958
ERROR 23000: Column 'f_int1' cannot be null
 
2959
# check null success:    1
 
2960
DELETE FROM t1
 
2961
WHERE f_int1 = 0 AND f_int2 = 0
 
2962
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2963
AND f_charbig = '#NULL#';
 
2964
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2965
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2966
   FROM t0_template source_tab
 
2967
WHERE MOD(f_int1,3) = 0
 
2968
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
2969
ON DUPLICATE KEY
 
2970
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
2971
f_int2 = 2 * @max_row + source_tab.f_int1,
 
2972
f_charbig = 'was updated';
 
2973
        
 
2974
# check unique-1-a success:     1
 
2975
        
 
2976
# check unique-1-b success:     1
 
2977
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2978
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2979
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2980
f_charbig = CONCAT('===',f_char1,'===')
 
2981
WHERE f_charbig = 'was updated';
 
2982
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2983
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
2984
   FROM t0_template source_tab
 
2985
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2986
        
 
2987
# check replace success:        1
 
2988
DELETE FROM t1
 
2989
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
2990
DELETE FROM t1
 
2991
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
2992
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
2993
UPDATE t1 SET f_int2 = f_int1,
 
2994
f_char1 = CAST(f_int1 AS CHAR),
 
2995
f_char2 = CAST(f_int1 AS CHAR),
 
2996
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
2997
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
2998
SET AUTOCOMMIT= 0;
 
2999
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3000
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3001
FROM t0_template source_tab
 
3002
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3003
        
 
3004
# check transactions-1 success:         1
 
3005
COMMIT WORK;
 
3006
        
 
3007
# check transactions-2 success:         1
 
3008
ROLLBACK WORK;
 
3009
        
 
3010
# check transactions-3 success:         1
 
3011
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3012
COMMIT WORK;
 
3013
ROLLBACK WORK;
 
3014
        
 
3015
# check transactions-4 success:         1
 
3016
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3017
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3018
FROM t0_template source_tab
 
3019
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3020
        
 
3021
# check transactions-5 success:         1
 
3022
ROLLBACK WORK;
 
3023
        
 
3024
# check transactions-6 success:         1
 
3025
# INFO: Storage engine used for t1 seems to be transactional.
 
3026
COMMIT;
 
3027
        
 
3028
# check transactions-7 success:         1
 
3029
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3030
COMMIT WORK;
 
3031
SET @@session.sql_mode = 'traditional';
 
3032
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3033
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3034
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3035
'', '', 'was inserted' FROM t0_template
 
3036
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3037
ERROR 22012: Division by 0
 
3038
COMMIT;
 
3039
        
 
3040
# check transactions-8 success:         1
 
3041
# INFO: Storage engine used for t1 seems to be able to revert
 
3042
#       changes made by the failing statement.
 
3043
SET @@session.sql_mode = '';
 
3044
SET AUTOCOMMIT= 1;
 
3045
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3046
COMMIT WORK;
 
3047
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3048
        
 
3049
# check special-1 success:      1
 
3050
UPDATE t1 SET f_charbig = '';
 
3051
        
 
3052
# check special-2 success:      1
 
3053
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3054
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3055
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3056
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3058
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3059
'just inserted' FROM t0_template
 
3060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3061
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3062
BEGIN
 
3063
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3064
f_charbig = 'updated by trigger'
 
3065
      WHERE f_int1 = new.f_int1;
 
3066
END|
 
3067
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3068
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3070
        
 
3071
# check trigger-1 success:      1
 
3072
DROP TRIGGER trg_1;
 
3073
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3074
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3075
f_charbig = 'just inserted'
 
3076
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3077
DELETE FROM t0_aux
 
3078
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3080
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3081
'just inserted' FROM t0_template
 
3082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3083
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3084
BEGIN
 
3085
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3086
f_charbig = 'updated by trigger'
 
3087
      WHERE f_int1 = new.f_int1;
 
3088
END|
 
3089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3090
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3092
        
 
3093
# check trigger-2 success:      1
 
3094
DROP TRIGGER trg_1;
 
3095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3097
f_charbig = 'just inserted'
 
3098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3099
DELETE FROM t0_aux
 
3100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3102
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3103
'just inserted' FROM t0_template
 
3104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3105
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3106
BEGIN
 
3107
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3108
f_charbig = 'updated by trigger'
 
3109
      WHERE f_int1 = new.f_int1;
 
3110
END|
 
3111
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3112
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3113
        
 
3114
# check trigger-3 success:      1
 
3115
DROP TRIGGER trg_1;
 
3116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3118
f_charbig = 'just inserted'
 
3119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3120
DELETE FROM t0_aux
 
3121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3124
'just inserted' FROM t0_template
 
3125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3126
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3127
BEGIN
 
3128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3129
f_charbig = 'updated by trigger'
 
3130
      WHERE f_int1 = - old.f_int1;
 
3131
END|
 
3132
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3133
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3134
        
 
3135
# check trigger-4 success:      1
 
3136
DROP TRIGGER trg_1;
 
3137
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3138
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3139
f_charbig = 'just inserted'
 
3140
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3141
DELETE FROM t0_aux
 
3142
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3144
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3145
'just inserted' FROM t0_template
 
3146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3147
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3148
BEGIN
 
3149
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3150
f_charbig = 'updated by trigger'
 
3151
      WHERE f_int1 = new.f_int1;
 
3152
END|
 
3153
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3154
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3155
        
 
3156
# check trigger-5 success:      1
 
3157
DROP TRIGGER trg_1;
 
3158
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3159
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3160
f_charbig = 'just inserted'
 
3161
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3162
DELETE FROM t0_aux
 
3163
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3164
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3165
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3166
'just inserted' FROM t0_template
 
3167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3168
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3169
BEGIN
 
3170
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3171
f_charbig = 'updated by trigger'
 
3172
      WHERE f_int1 = - old.f_int1;
 
3173
END|
 
3174
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3175
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3176
        
 
3177
# check trigger-6 success:      1
 
3178
DROP TRIGGER trg_1;
 
3179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3181
f_charbig = 'just inserted'
 
3182
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3183
DELETE FROM t0_aux
 
3184
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3185
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3186
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3187
'just inserted' FROM t0_template
 
3188
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3189
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3190
BEGIN
 
3191
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3192
f_charbig = 'updated by trigger'
 
3193
      WHERE f_int1 = - old.f_int1;
 
3194
END|
 
3195
DELETE FROM t0_aux
 
3196
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3197
        
 
3198
# check trigger-7 success:      1
 
3199
DROP TRIGGER trg_1;
 
3200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3202
f_charbig = 'just inserted'
 
3203
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3204
DELETE FROM t0_aux
 
3205
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3206
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3207
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3208
'just inserted' FROM t0_template
 
3209
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3210
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3211
BEGIN
 
3212
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3213
f_charbig = 'updated by trigger'
 
3214
      WHERE f_int1 = - old.f_int1;
 
3215
END|
 
3216
DELETE FROM t0_aux
 
3217
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3218
        
 
3219
# check trigger-8 success:      1
 
3220
DROP TRIGGER trg_1;
 
3221
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3222
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3223
f_charbig = 'just inserted'
 
3224
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3225
DELETE FROM t0_aux
 
3226
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3227
DELETE FROM t1
 
3228
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3229
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3230
BEGIN
 
3231
SET new.f_int1 = old.f_int1 + @max_row,
 
3232
new.f_int2 = old.f_int2 - @max_row,
 
3233
new.f_charbig = '####updated per update trigger####';
 
3234
END|
 
3235
UPDATE t1
 
3236
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3237
f_charbig = '####updated per update statement itself####';
 
3238
        
 
3239
# check trigger-9 success:      1
 
3240
DROP TRIGGER trg_2;
 
3241
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3242
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3243
f_charbig = CONCAT('===',f_char1,'===');
 
3244
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3245
BEGIN
 
3246
SET new.f_int1 = new.f_int1 + @max_row,
 
3247
new.f_int2 = new.f_int2 - @max_row,
 
3248
new.f_charbig = '####updated per update trigger####';
 
3249
END|
 
3250
UPDATE t1
 
3251
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3252
f_charbig = '####updated per update statement itself####';
 
3253
        
 
3254
# check trigger-10 success:     1
 
3255
DROP TRIGGER trg_2;
 
3256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3258
f_charbig = CONCAT('===',f_char1,'===');
 
3259
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3260
BEGIN
 
3261
SET new.f_int1 = @my_max1 + @counter,
 
3262
new.f_int2 = @my_min2 - @counter,
 
3263
new.f_charbig = '####updated per insert trigger####';
 
3264
SET @counter = @counter + 1;
 
3265
END|
 
3266
SET @counter = 1;
 
3267
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3268
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3269
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3270
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3272
ORDER BY f_int1;
 
3273
DROP TRIGGER trg_3;
 
3274
        
 
3275
# check trigger-11 success:     1
 
3276
DELETE FROM t1
 
3277
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3278
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3279
AND f_charbig = '####updated per insert trigger####';
 
3280
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3281
BEGIN
 
3282
SET new.f_int1 = @my_max1 + @counter,
 
3283
new.f_int2 = @my_min2 - @counter,
 
3284
new.f_charbig = '####updated per insert trigger####';
 
3285
SET @counter = @counter + 1;
 
3286
END|
 
3287
SET @counter = 1;
 
3288
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3289
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3290
SELECT CAST(f_int1 AS CHAR),
 
3291
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3293
ORDER BY f_int1;
 
3294
DROP TRIGGER trg_3;
 
3295
        
 
3296
# check trigger-12 success:     1
 
3297
DELETE FROM t1
 
3298
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3299
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3300
AND f_charbig = '####updated per insert trigger####';
 
3301
ANALYZE  TABLE t1;
 
3302
Table   Op      Msg_type        Msg_text
 
3303
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3304
CHECK    TABLE t1 EXTENDED;
 
3305
Table   Op      Msg_type        Msg_text
 
3306
test.t1 check   note    The storage engine for the table doesn't support check
 
3307
CHECKSUM TABLE t1 EXTENDED;
 
3308
Table   Checksum
 
3309
test.t1 <some_value>
 
3310
OPTIMIZE TABLE t1;
 
3311
Table   Op      Msg_type        Msg_text
 
3312
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3313
# check layout success:    1
 
3314
REPAIR   TABLE t1 EXTENDED;
 
3315
Table   Op      Msg_type        Msg_text
 
3316
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3317
# check layout success:    1
 
3318
TRUNCATE t1;
 
3319
        
 
3320
# check TRUNCATE success:       1
 
3321
# check layout success:    1
 
3322
# End usability test (inc/partition_check.inc)
 
3323
DROP TABLE t1;
 
3324
CREATE TABLE t1 (
 
3325
f_int1 INTEGER,
 
3326
f_int2 INTEGER,
 
3327
f_char1 CHAR(20),
 
3328
f_char2 CHAR(20),
 
3329
f_charbig VARCHAR(1000)
 
3330
 
 
3331
)
 
3332
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
3333
(PARTITION part1 VALUES IN (0)
 
3334
(SUBPARTITION sp11, SUBPARTITION sp12),
 
3335
PARTITION part2 VALUES IN (1)
 
3336
(SUBPARTITION sp21, SUBPARTITION sp22),
 
3337
PARTITION part3 VALUES IN (2)
 
3338
(SUBPARTITION sp31, SUBPARTITION sp32),
 
3339
PARTITION part4 VALUES IN (NULL)
 
3340
(SUBPARTITION sp41, SUBPARTITION sp42));
 
3341
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3342
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3343
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3344
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
3345
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3346
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3347
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3348
# Start usability test (inc/partition_check.inc)
 
3349
create_command
 
3350
SHOW CREATE TABLE t1;
 
3351
Table   Create Table
 
3352
t1      CREATE TABLE `t1` (
 
3353
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
3354
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
3355
  `f_char1` char(20) DEFAULT NULL,
 
3356
  `f_char2` char(20) DEFAULT NULL,
 
3357
  `f_charbig` varchar(1000) DEFAULT NULL,
 
3358
  PRIMARY KEY (`f_int1`,`f_int2`)
 
3359
) ENGINE=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
3360
 
 
3361
# check prerequisites-1 success:    1
 
3362
# check COUNT(*) success:    1
 
3363
# check MIN/MAX(f_int1) success:    1
 
3364
# check MIN/MAX(f_int2) success:    1
 
3365
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3366
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3367
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3368
WHERE f_int1 IN (2,3);
 
3369
ERROR 23000: Can't write; duplicate key in table 't1'
 
3370
# check prerequisites-3 success:    1
 
3371
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
3372
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3373
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3374
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3375
WHERE f_int1 IN (2,3);
 
3376
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3377
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3378
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3379
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3380
WHERE f_int1 IN (2,3);
 
3381
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3382
# check read via f_int1 success: 1
 
3383
# check read via f_int2 success: 1
 
3384
        
 
3385
# check multiple-1 success:     1
 
3386
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3387
        
 
3388
# check multiple-2 success:     1
 
3389
INSERT INTO t1 SELECT * FROM t0_template
 
3390
WHERE MOD(f_int1,3) = 0;
 
3391
        
 
3392
# check multiple-3 success:     1
 
3393
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3394
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3395
AND @max_row_div2 + @max_row_div4;
 
3396
        
 
3397
# check multiple-4 success:     1
 
3398
DELETE FROM t1
 
3399
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3400
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3401
        
 
3402
# check multiple-5 success:     1
 
3403
SELECT COUNT(*) INTO @try_count FROM t0_template
 
3404
WHERE MOD(f_int1,3) = 0
 
3405
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3406
SELECT COUNT(*) INTO @clash_count
 
3407
FROM t1 INNER JOIN t0_template USING(f_int1)
 
3408
WHERE MOD(f_int1,3) = 0
 
3409
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3410
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3411
INSERT INTO t1
 
3412
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3413
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3414
f_charbig = '#SINGLE#';
 
3415
        
 
3416
# check single-1 success:       1
 
3417
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3418
INSERT INTO t1
 
3419
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3420
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3421
f_charbig = '#SINGLE#';
 
3422
        
 
3423
# check single-2 success:       1
 
3424
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3425
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3426
UPDATE t1 SET f_int1 = @cur_value2
 
3427
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3428
        
 
3429
# check single-3 success:       1
 
3430
SET @cur_value1= -1;
 
3431
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3432
UPDATE t1 SET f_int1 = @cur_value1
 
3433
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3434
        
 
3435
# check single-4 success:       1
 
3436
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3437
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3438
        
 
3439
# check single-5 success:       1
 
3440
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3441
        
 
3442
# check single-6 success:       1
 
3443
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3444
        
 
3445
# check single-7 success:       1
 
3446
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3447
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3448
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3449
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3450
f_charbig = '#NULL#';
 
3451
INSERT INTO t1
 
3452
SET f_int1 = NULL , f_int2 = -@max_row,
 
3453
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3454
f_charbig = '#NULL#';
 
3455
ERROR 23000: Column 'f_int1' cannot be null
 
3456
# check null success:    1
 
3457
DELETE FROM t1
 
3458
WHERE f_int1 = 0 AND f_int2 = 0
 
3459
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3460
AND f_charbig = '#NULL#';
 
3461
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3462
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3463
   FROM t0_template source_tab
 
3464
WHERE MOD(f_int1,3) = 0
 
3465
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
3466
ON DUPLICATE KEY
 
3467
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
3468
f_int2 = 2 * @max_row + source_tab.f_int1,
 
3469
f_charbig = 'was updated';
 
3470
        
 
3471
# check unique-1-a success:     1
 
3472
        
 
3473
# check unique-1-b success:     1
 
3474
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3475
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3476
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3477
f_charbig = CONCAT('===',f_char1,'===')
 
3478
WHERE f_charbig = 'was updated';
 
3479
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3480
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
3481
   FROM t0_template source_tab
 
3482
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3483
        
 
3484
# check replace success:        1
 
3485
DELETE FROM t1
 
3486
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
3487
DELETE FROM t1
 
3488
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
3489
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
3490
UPDATE t1 SET f_int2 = f_int1,
 
3491
f_char1 = CAST(f_int1 AS CHAR),
 
3492
f_char2 = CAST(f_int1 AS CHAR),
 
3493
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
3494
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
3495
SET AUTOCOMMIT= 0;
 
3496
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3497
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3498
FROM t0_template source_tab
 
3499
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3500
        
 
3501
# check transactions-1 success:         1
 
3502
COMMIT WORK;
 
3503
        
 
3504
# check transactions-2 success:         1
 
3505
ROLLBACK WORK;
 
3506
        
 
3507
# check transactions-3 success:         1
 
3508
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3509
COMMIT WORK;
 
3510
ROLLBACK WORK;
 
3511
        
 
3512
# check transactions-4 success:         1
 
3513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3514
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3515
FROM t0_template source_tab
 
3516
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3517
        
 
3518
# check transactions-5 success:         1
 
3519
ROLLBACK WORK;
 
3520
        
 
3521
# check transactions-6 success:         1
 
3522
# INFO: Storage engine used for t1 seems to be transactional.
 
3523
COMMIT;
 
3524
        
 
3525
# check transactions-7 success:         1
 
3526
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3527
COMMIT WORK;
 
3528
SET @@session.sql_mode = 'traditional';
 
3529
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3531
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3532
'', '', 'was inserted' FROM t0_template
 
3533
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3534
ERROR 22012: Division by 0
 
3535
COMMIT;
 
3536
        
 
3537
# check transactions-8 success:         1
 
3538
# INFO: Storage engine used for t1 seems to be able to revert
 
3539
#       changes made by the failing statement.
 
3540
SET @@session.sql_mode = '';
 
3541
SET AUTOCOMMIT= 1;
 
3542
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3543
COMMIT WORK;
 
3544
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3545
        
 
3546
# check special-1 success:      1
 
3547
UPDATE t1 SET f_charbig = '';
 
3548
        
 
3549
# check special-2 success:      1
 
3550
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3551
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3552
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3554
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3555
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3556
'just inserted' FROM t0_template
 
3557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3558
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3559
BEGIN
 
3560
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3561
f_charbig = 'updated by trigger'
 
3562
      WHERE f_int1 = new.f_int1;
 
3563
END|
 
3564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3565
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3567
        
 
3568
# check trigger-1 success:      1
 
3569
DROP TRIGGER trg_1;
 
3570
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3571
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3572
f_charbig = 'just inserted'
 
3573
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3574
DELETE FROM t0_aux
 
3575
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3576
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3577
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3578
'just inserted' FROM t0_template
 
3579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3580
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3581
BEGIN
 
3582
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3583
f_charbig = 'updated by trigger'
 
3584
      WHERE f_int1 = new.f_int1;
 
3585
END|
 
3586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3587
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3589
        
 
3590
# check trigger-2 success:      1
 
3591
DROP TRIGGER trg_1;
 
3592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3593
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3594
f_charbig = 'just inserted'
 
3595
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3596
DELETE FROM t0_aux
 
3597
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3598
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3599
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3600
'just inserted' FROM t0_template
 
3601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3602
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3603
BEGIN
 
3604
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3605
f_charbig = 'updated by trigger'
 
3606
      WHERE f_int1 = new.f_int1;
 
3607
END|
 
3608
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3609
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3610
        
 
3611
# check trigger-3 success:      1
 
3612
DROP TRIGGER trg_1;
 
3613
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3614
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3615
f_charbig = 'just inserted'
 
3616
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3617
DELETE FROM t0_aux
 
3618
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3619
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3620
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3621
'just inserted' FROM t0_template
 
3622
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3623
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3624
BEGIN
 
3625
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3626
f_charbig = 'updated by trigger'
 
3627
      WHERE f_int1 = - old.f_int1;
 
3628
END|
 
3629
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3630
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3631
        
 
3632
# check trigger-4 success:      1
 
3633
DROP TRIGGER trg_1;
 
3634
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3635
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3636
f_charbig = 'just inserted'
 
3637
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3638
DELETE FROM t0_aux
 
3639
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3640
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3641
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3642
'just inserted' FROM t0_template
 
3643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3644
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3645
BEGIN
 
3646
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3647
f_charbig = 'updated by trigger'
 
3648
      WHERE f_int1 = new.f_int1;
 
3649
END|
 
3650
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3651
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3652
        
 
3653
# check trigger-5 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 UPDATE 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 = - old.f_int1;
 
3670
END|
 
3671
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3672
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3673
        
 
3674
# check trigger-6 success:      1
 
3675
DROP TRIGGER trg_1;
 
3676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3678
f_charbig = 'just inserted'
 
3679
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3680
DELETE FROM t0_aux
 
3681
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3683
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3684
'just inserted' FROM t0_template
 
3685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3686
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3687
BEGIN
 
3688
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3689
f_charbig = 'updated by trigger'
 
3690
      WHERE f_int1 = - old.f_int1;
 
3691
END|
 
3692
DELETE FROM t0_aux
 
3693
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3694
        
 
3695
# check trigger-7 success:      1
 
3696
DROP TRIGGER trg_1;
 
3697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3699
f_charbig = 'just inserted'
 
3700
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3701
DELETE FROM t0_aux
 
3702
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3703
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3704
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3705
'just inserted' FROM t0_template
 
3706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3707
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3708
BEGIN
 
3709
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3710
f_charbig = 'updated by trigger'
 
3711
      WHERE f_int1 = - old.f_int1;
 
3712
END|
 
3713
DELETE FROM t0_aux
 
3714
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3715
        
 
3716
# check trigger-8 success:      1
 
3717
DROP TRIGGER trg_1;
 
3718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3720
f_charbig = 'just inserted'
 
3721
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3722
DELETE FROM t0_aux
 
3723
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3724
DELETE FROM t1
 
3725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3726
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3727
BEGIN
 
3728
SET new.f_int1 = old.f_int1 + @max_row,
 
3729
new.f_int2 = old.f_int2 - @max_row,
 
3730
new.f_charbig = '####updated per update trigger####';
 
3731
END|
 
3732
UPDATE t1
 
3733
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3734
f_charbig = '####updated per update statement itself####';
 
3735
        
 
3736
# check trigger-9 success:      1
 
3737
DROP TRIGGER trg_2;
 
3738
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3739
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3740
f_charbig = CONCAT('===',f_char1,'===');
 
3741
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3742
BEGIN
 
3743
SET new.f_int1 = new.f_int1 + @max_row,
 
3744
new.f_int2 = new.f_int2 - @max_row,
 
3745
new.f_charbig = '####updated per update trigger####';
 
3746
END|
 
3747
UPDATE t1
 
3748
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3749
f_charbig = '####updated per update statement itself####';
 
3750
        
 
3751
# check trigger-10 success:     1
 
3752
DROP TRIGGER trg_2;
 
3753
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3754
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3755
f_charbig = CONCAT('===',f_char1,'===');
 
3756
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3757
BEGIN
 
3758
SET new.f_int1 = @my_max1 + @counter,
 
3759
new.f_int2 = @my_min2 - @counter,
 
3760
new.f_charbig = '####updated per insert trigger####';
 
3761
SET @counter = @counter + 1;
 
3762
END|
 
3763
SET @counter = 1;
 
3764
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3765
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3766
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3767
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3769
ORDER BY f_int1;
 
3770
DROP TRIGGER trg_3;
 
3771
        
 
3772
# check trigger-11 success:     1
 
3773
DELETE FROM t1
 
3774
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3775
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3776
AND f_charbig = '####updated per insert trigger####';
 
3777
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3778
BEGIN
 
3779
SET new.f_int1 = @my_max1 + @counter,
 
3780
new.f_int2 = @my_min2 - @counter,
 
3781
new.f_charbig = '####updated per insert trigger####';
 
3782
SET @counter = @counter + 1;
 
3783
END|
 
3784
SET @counter = 1;
 
3785
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3786
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3787
SELECT CAST(f_int1 AS CHAR),
 
3788
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3789
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3790
ORDER BY f_int1;
 
3791
DROP TRIGGER trg_3;
 
3792
        
 
3793
# check trigger-12 success:     1
 
3794
DELETE FROM t1
 
3795
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3796
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3797
AND f_charbig = '####updated per insert trigger####';
 
3798
ANALYZE  TABLE t1;
 
3799
Table   Op      Msg_type        Msg_text
 
3800
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3801
CHECK    TABLE t1 EXTENDED;
 
3802
Table   Op      Msg_type        Msg_text
 
3803
test.t1 check   note    The storage engine for the table doesn't support check
 
3804
CHECKSUM TABLE t1 EXTENDED;
 
3805
Table   Checksum
 
3806
test.t1 <some_value>
 
3807
OPTIMIZE TABLE t1;
 
3808
Table   Op      Msg_type        Msg_text
 
3809
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3810
# check layout success:    1
 
3811
REPAIR   TABLE t1 EXTENDED;
 
3812
Table   Op      Msg_type        Msg_text
 
3813
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3814
# check layout success:    1
 
3815
TRUNCATE t1;
 
3816
        
 
3817
# check TRUNCATE success:       1
 
3818
# check layout success:    1
 
3819
# End usability test (inc/partition_check.inc)
 
3820
DROP TABLE t1;
 
3821
CREATE TABLE t1 (
 
3822
f_int1 INTEGER,
 
3823
f_int2 INTEGER,
 
3824
f_char1 CHAR(20),
 
3825
f_char2 CHAR(20),
 
3826
f_charbig VARCHAR(1000)
 
3827
 
 
3828
)
 
3829
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3830
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3831
(PARTITION part1 VALUES IN (0),
 
3832
 PARTITION part2 VALUES IN (1),
 
3833
 PARTITION part3 VALUES IN (NULL));
 
3834
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3835
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3836
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3837
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
3838
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3839
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3840
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3841
# Start usability test (inc/partition_check.inc)
 
3842
create_command
 
3843
SHOW CREATE TABLE t1;
 
3844
Table   Create Table
 
3845
t1      CREATE TABLE `t1` (
 
3846
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
3847
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
3848
  `f_char1` char(20) DEFAULT NULL,
 
3849
  `f_char2` char(20) DEFAULT NULL,
 
3850
  `f_charbig` varchar(1000) DEFAULT NULL,
 
3851
  PRIMARY KEY (`f_int1`,`f_int2`)
 
3852
) ENGINE=InnoDB 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 = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
3853
 
 
3854
# check prerequisites-1 success:    1
 
3855
# check COUNT(*) success:    1
 
3856
# check MIN/MAX(f_int1) success:    1
 
3857
# check MIN/MAX(f_int2) success:    1
 
3858
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3859
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3860
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3861
WHERE f_int1 IN (2,3);
 
3862
ERROR 23000: Can't write; duplicate key in table 't1'
 
3863
# check prerequisites-3 success:    1
 
3864
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
3865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3866
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3867
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3868
WHERE f_int1 IN (2,3);
 
3869
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3871
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3872
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3873
WHERE f_int1 IN (2,3);
 
3874
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3875
# check read via f_int1 success: 1
 
3876
# check read via f_int2 success: 1
 
3877
        
 
3878
# check multiple-1 success:     1
 
3879
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3880
        
 
3881
# check multiple-2 success:     1
 
3882
INSERT INTO t1 SELECT * FROM t0_template
 
3883
WHERE MOD(f_int1,3) = 0;
 
3884
        
 
3885
# check multiple-3 success:     1
 
3886
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3887
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3888
AND @max_row_div2 + @max_row_div4;
 
3889
        
 
3890
# check multiple-4 success:     1
 
3891
DELETE FROM t1
 
3892
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3893
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3894
        
 
3895
# check multiple-5 success:     1
 
3896
SELECT COUNT(*) INTO @try_count FROM t0_template
 
3897
WHERE MOD(f_int1,3) = 0
 
3898
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3899
SELECT COUNT(*) INTO @clash_count
 
3900
FROM t1 INNER JOIN t0_template USING(f_int1)
 
3901
WHERE MOD(f_int1,3) = 0
 
3902
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3903
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3904
INSERT INTO t1
 
3905
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3906
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3907
f_charbig = '#SINGLE#';
 
3908
        
 
3909
# check single-1 success:       1
 
3910
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3911
INSERT INTO t1
 
3912
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3913
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3914
f_charbig = '#SINGLE#';
 
3915
        
 
3916
# check single-2 success:       1
 
3917
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3918
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3919
UPDATE t1 SET f_int1 = @cur_value2
 
3920
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3921
        
 
3922
# check single-3 success:       1
 
3923
SET @cur_value1= -1;
 
3924
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3925
UPDATE t1 SET f_int1 = @cur_value1
 
3926
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3927
        
 
3928
# check single-4 success:       1
 
3929
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3930
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3931
        
 
3932
# check single-5 success:       1
 
3933
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3934
        
 
3935
# check single-6 success:       1
 
3936
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3937
        
 
3938
# check single-7 success:       1
 
3939
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3940
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3941
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3942
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3943
f_charbig = '#NULL#';
 
3944
INSERT INTO t1
 
3945
SET f_int1 = NULL , f_int2 = -@max_row,
 
3946
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3947
f_charbig = '#NULL#';
 
3948
ERROR 23000: Column 'f_int1' cannot be null
 
3949
# check null success:    1
 
3950
DELETE FROM t1
 
3951
WHERE f_int1 = 0 AND f_int2 = 0
 
3952
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3953
AND f_charbig = '#NULL#';
 
3954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3955
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3956
   FROM t0_template source_tab
 
3957
WHERE MOD(f_int1,3) = 0
 
3958
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
3959
ON DUPLICATE KEY
 
3960
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
3961
f_int2 = 2 * @max_row + source_tab.f_int1,
 
3962
f_charbig = 'was updated';
 
3963
        
 
3964
# check unique-1-a success:     1
 
3965
        
 
3966
# check unique-1-b success:     1
 
3967
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3968
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3969
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3970
f_charbig = CONCAT('===',f_char1,'===')
 
3971
WHERE f_charbig = 'was updated';
 
3972
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3973
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
3974
   FROM t0_template source_tab
 
3975
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3976
        
 
3977
# check replace success:        1
 
3978
DELETE FROM t1
 
3979
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
3980
DELETE FROM t1
 
3981
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
3982
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
3983
UPDATE t1 SET f_int2 = f_int1,
 
3984
f_char1 = CAST(f_int1 AS CHAR),
 
3985
f_char2 = CAST(f_int1 AS CHAR),
 
3986
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
3987
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
3988
SET AUTOCOMMIT= 0;
 
3989
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3990
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3991
FROM t0_template source_tab
 
3992
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3993
        
 
3994
# check transactions-1 success:         1
 
3995
COMMIT WORK;
 
3996
        
 
3997
# check transactions-2 success:         1
 
3998
ROLLBACK WORK;
 
3999
        
 
4000
# check transactions-3 success:         1
 
4001
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4002
COMMIT WORK;
 
4003
ROLLBACK WORK;
 
4004
        
 
4005
# check transactions-4 success:         1
 
4006
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4007
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4008
FROM t0_template source_tab
 
4009
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4010
        
 
4011
# check transactions-5 success:         1
 
4012
ROLLBACK WORK;
 
4013
        
 
4014
# check transactions-6 success:         1
 
4015
# INFO: Storage engine used for t1 seems to be transactional.
 
4016
COMMIT;
 
4017
        
 
4018
# check transactions-7 success:         1
 
4019
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4020
COMMIT WORK;
 
4021
SET @@session.sql_mode = 'traditional';
 
4022
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4023
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4024
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4025
'', '', 'was inserted' FROM t0_template
 
4026
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4027
ERROR 22012: Division by 0
 
4028
COMMIT;
 
4029
        
 
4030
# check transactions-8 success:         1
 
4031
# INFO: Storage engine used for t1 seems to be able to revert
 
4032
#       changes made by the failing statement.
 
4033
SET @@session.sql_mode = '';
 
4034
SET AUTOCOMMIT= 1;
 
4035
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4036
COMMIT WORK;
 
4037
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4038
        
 
4039
# check special-1 success:      1
 
4040
UPDATE t1 SET f_charbig = '';
 
4041
        
 
4042
# check special-2 success:      1
 
4043
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4044
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4045
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4048
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4049
'just inserted' FROM t0_template
 
4050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4051
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4052
BEGIN
 
4053
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4054
f_charbig = 'updated by trigger'
 
4055
      WHERE f_int1 = new.f_int1;
 
4056
END|
 
4057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4058
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4060
        
 
4061
# check trigger-1 success:      1
 
4062
DROP TRIGGER trg_1;
 
4063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4065
f_charbig = 'just inserted'
 
4066
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4067
DELETE FROM t0_aux
 
4068
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4071
'just inserted' FROM t0_template
 
4072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4073
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4074
BEGIN
 
4075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4076
f_charbig = 'updated by trigger'
 
4077
      WHERE f_int1 = new.f_int1;
 
4078
END|
 
4079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4080
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4082
        
 
4083
# check trigger-2 success:      1
 
4084
DROP TRIGGER trg_1;
 
4085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4087
f_charbig = 'just inserted'
 
4088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4089
DELETE FROM t0_aux
 
4090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4093
'just inserted' FROM t0_template
 
4094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4095
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4096
BEGIN
 
4097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4098
f_charbig = 'updated by trigger'
 
4099
      WHERE f_int1 = new.f_int1;
 
4100
END|
 
4101
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4103
        
 
4104
# check trigger-3 success:      1
 
4105
DROP TRIGGER trg_1;
 
4106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4108
f_charbig = 'just inserted'
 
4109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4110
DELETE FROM t0_aux
 
4111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4114
'just inserted' FROM t0_template
 
4115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4116
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4117
BEGIN
 
4118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4119
f_charbig = 'updated by trigger'
 
4120
      WHERE f_int1 = - old.f_int1;
 
4121
END|
 
4122
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4124
        
 
4125
# check trigger-4 success:      1
 
4126
DROP TRIGGER trg_1;
 
4127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4129
f_charbig = 'just inserted'
 
4130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4131
DELETE FROM t0_aux
 
4132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4135
'just inserted' FROM t0_template
 
4136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4137
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4138
BEGIN
 
4139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4140
f_charbig = 'updated by trigger'
 
4141
      WHERE f_int1 = new.f_int1;
 
4142
END|
 
4143
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4144
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4145
        
 
4146
# check trigger-5 success:      1
 
4147
DROP TRIGGER trg_1;
 
4148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4150
f_charbig = 'just inserted'
 
4151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4152
DELETE FROM t0_aux
 
4153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4156
'just inserted' FROM t0_template
 
4157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4158
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4159
BEGIN
 
4160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4161
f_charbig = 'updated by trigger'
 
4162
      WHERE f_int1 = - old.f_int1;
 
4163
END|
 
4164
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4166
        
 
4167
# check trigger-6 success:      1
 
4168
DROP TRIGGER trg_1;
 
4169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4171
f_charbig = 'just inserted'
 
4172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4173
DELETE FROM t0_aux
 
4174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4177
'just inserted' FROM t0_template
 
4178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4179
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4180
BEGIN
 
4181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4182
f_charbig = 'updated by trigger'
 
4183
      WHERE f_int1 = - old.f_int1;
 
4184
END|
 
4185
DELETE FROM t0_aux
 
4186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4187
        
 
4188
# check trigger-7 success:      1
 
4189
DROP TRIGGER trg_1;
 
4190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4192
f_charbig = 'just inserted'
 
4193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4194
DELETE FROM t0_aux
 
4195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4198
'just inserted' FROM t0_template
 
4199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4200
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4201
BEGIN
 
4202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4203
f_charbig = 'updated by trigger'
 
4204
      WHERE f_int1 = - old.f_int1;
 
4205
END|
 
4206
DELETE FROM t0_aux
 
4207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4208
        
 
4209
# check trigger-8 success:      1
 
4210
DROP TRIGGER trg_1;
 
4211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4213
f_charbig = 'just inserted'
 
4214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4215
DELETE FROM t0_aux
 
4216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4217
DELETE FROM t1
 
4218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4219
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4220
BEGIN
 
4221
SET new.f_int1 = old.f_int1 + @max_row,
 
4222
new.f_int2 = old.f_int2 - @max_row,
 
4223
new.f_charbig = '####updated per update trigger####';
 
4224
END|
 
4225
UPDATE t1
 
4226
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4227
f_charbig = '####updated per update statement itself####';
 
4228
        
 
4229
# check trigger-9 success:      1
 
4230
DROP TRIGGER trg_2;
 
4231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4233
f_charbig = CONCAT('===',f_char1,'===');
 
4234
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4235
BEGIN
 
4236
SET new.f_int1 = new.f_int1 + @max_row,
 
4237
new.f_int2 = new.f_int2 - @max_row,
 
4238
new.f_charbig = '####updated per update trigger####';
 
4239
END|
 
4240
UPDATE t1
 
4241
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4242
f_charbig = '####updated per update statement itself####';
 
4243
        
 
4244
# check trigger-10 success:     1
 
4245
DROP TRIGGER trg_2;
 
4246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4248
f_charbig = CONCAT('===',f_char1,'===');
 
4249
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4250
BEGIN
 
4251
SET new.f_int1 = @my_max1 + @counter,
 
4252
new.f_int2 = @my_min2 - @counter,
 
4253
new.f_charbig = '####updated per insert trigger####';
 
4254
SET @counter = @counter + 1;
 
4255
END|
 
4256
SET @counter = 1;
 
4257
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4259
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4260
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4262
ORDER BY f_int1;
 
4263
DROP TRIGGER trg_3;
 
4264
        
 
4265
# check trigger-11 success:     1
 
4266
DELETE FROM t1
 
4267
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4268
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4269
AND f_charbig = '####updated per insert trigger####';
 
4270
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4271
BEGIN
 
4272
SET new.f_int1 = @my_max1 + @counter,
 
4273
new.f_int2 = @my_min2 - @counter,
 
4274
new.f_charbig = '####updated per insert trigger####';
 
4275
SET @counter = @counter + 1;
 
4276
END|
 
4277
SET @counter = 1;
 
4278
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4279
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4280
SELECT CAST(f_int1 AS CHAR),
 
4281
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4283
ORDER BY f_int1;
 
4284
DROP TRIGGER trg_3;
 
4285
        
 
4286
# check trigger-12 success:     1
 
4287
DELETE FROM t1
 
4288
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4289
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4290
AND f_charbig = '####updated per insert trigger####';
 
4291
ANALYZE  TABLE t1;
 
4292
Table   Op      Msg_type        Msg_text
 
4293
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4294
CHECK    TABLE t1 EXTENDED;
 
4295
Table   Op      Msg_type        Msg_text
 
4296
test.t1 check   note    The storage engine for the table doesn't support check
 
4297
CHECKSUM TABLE t1 EXTENDED;
 
4298
Table   Checksum
 
4299
test.t1 <some_value>
 
4300
OPTIMIZE TABLE t1;
 
4301
Table   Op      Msg_type        Msg_text
 
4302
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4303
# check layout success:    1
 
4304
REPAIR   TABLE t1 EXTENDED;
 
4305
Table   Op      Msg_type        Msg_text
 
4306
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4307
# check layout success:    1
 
4308
TRUNCATE t1;
 
4309
        
 
4310
# check TRUNCATE success:       1
 
4311
# check layout success:    1
 
4312
# End usability test (inc/partition_check.inc)
 
4313
DROP TABLE t1;
 
4314
DROP TABLE IF EXISTS t1;
 
4315
CREATE TABLE t1 (
 
4316
f_int1 INTEGER,
 
4317
f_int2 INTEGER,
 
4318
f_char1 CHAR(20),
 
4319
f_char2 CHAR(20),
 
4320
f_charbig VARCHAR(1000)
 
4321
 
 
4322
)
 
4323
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
4324
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4325
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4326
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4327
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
4328
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4329
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4330
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4331
# Start usability test (inc/partition_check.inc)
 
4332
create_command
 
4333
SHOW CREATE TABLE t1;
 
4334
Table   Create Table
 
4335
t1      CREATE TABLE `t1` (
 
4336
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
4337
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
4338
  `f_char1` char(20) DEFAULT NULL,
 
4339
  `f_char2` char(20) DEFAULT NULL,
 
4340
  `f_charbig` varchar(1000) DEFAULT NULL,
 
4341
  PRIMARY KEY (`f_int2`,`f_int1`)
 
4342
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
4343
 
 
4344
# check prerequisites-1 success:    1
 
4345
# check COUNT(*) success:    1
 
4346
# check MIN/MAX(f_int1) success:    1
 
4347
# check MIN/MAX(f_int2) success:    1
 
4348
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4349
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4350
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4351
WHERE f_int1 IN (2,3);
 
4352
ERROR 23000: Can't write; duplicate key in table 't1'
 
4353
# check prerequisites-3 success:    1
 
4354
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
4355
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4356
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4357
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4358
WHERE f_int1 IN (2,3);
 
4359
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4361
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4362
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4363
WHERE f_int1 IN (2,3);
 
4364
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4365
# check read via f_int1 success: 1
 
4366
# check read via f_int2 success: 1
 
4367
        
 
4368
# check multiple-1 success:     1
 
4369
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4370
        
 
4371
# check multiple-2 success:     1
 
4372
INSERT INTO t1 SELECT * FROM t0_template
 
4373
WHERE MOD(f_int1,3) = 0;
 
4374
        
 
4375
# check multiple-3 success:     1
 
4376
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4377
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4378
AND @max_row_div2 + @max_row_div4;
 
4379
        
 
4380
# check multiple-4 success:     1
 
4381
DELETE FROM t1
 
4382
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4383
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4384
        
 
4385
# check multiple-5 success:     1
 
4386
SELECT COUNT(*) INTO @try_count FROM t0_template
 
4387
WHERE MOD(f_int1,3) = 0
 
4388
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4389
SELECT COUNT(*) INTO @clash_count
 
4390
FROM t1 INNER JOIN t0_template USING(f_int1)
 
4391
WHERE MOD(f_int1,3) = 0
 
4392
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4393
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4394
INSERT INTO t1
 
4395
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4396
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4397
f_charbig = '#SINGLE#';
 
4398
        
 
4399
# check single-1 success:       1
 
4400
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4401
INSERT INTO t1
 
4402
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4403
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4404
f_charbig = '#SINGLE#';
 
4405
        
 
4406
# check single-2 success:       1
 
4407
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4408
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4409
UPDATE t1 SET f_int1 = @cur_value2
 
4410
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4411
        
 
4412
# check single-3 success:       1
 
4413
SET @cur_value1= -1;
 
4414
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4415
UPDATE t1 SET f_int1 = @cur_value1
 
4416
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4417
        
 
4418
# check single-4 success:       1
 
4419
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4420
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4421
        
 
4422
# check single-5 success:       1
 
4423
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4424
        
 
4425
# check single-6 success:       1
 
4426
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4427
        
 
4428
# check single-7 success:       1
 
4429
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4430
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4431
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4432
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4433
f_charbig = '#NULL#';
 
4434
INSERT INTO t1
 
4435
SET f_int1 = NULL , f_int2 = -@max_row,
 
4436
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4437
f_charbig = '#NULL#';
 
4438
ERROR 23000: Column 'f_int1' cannot be null
 
4439
# check null success:    1
 
4440
DELETE FROM t1
 
4441
WHERE f_int1 = 0 AND f_int2 = 0
 
4442
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4443
AND f_charbig = '#NULL#';
 
4444
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4445
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4446
   FROM t0_template source_tab
 
4447
WHERE MOD(f_int1,3) = 0
 
4448
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
4449
ON DUPLICATE KEY
 
4450
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
4451
f_int2 = 2 * @max_row + source_tab.f_int1,
 
4452
f_charbig = 'was updated';
 
4453
        
 
4454
# check unique-1-a success:     1
 
4455
        
 
4456
# check unique-1-b success:     1
 
4457
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4458
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4459
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4460
f_charbig = CONCAT('===',f_char1,'===')
 
4461
WHERE f_charbig = 'was updated';
 
4462
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4463
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
4464
   FROM t0_template source_tab
 
4465
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4466
        
 
4467
# check replace success:        1
 
4468
DELETE FROM t1
 
4469
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
4470
DELETE FROM t1
 
4471
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
4472
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
4473
UPDATE t1 SET f_int2 = f_int1,
 
4474
f_char1 = CAST(f_int1 AS CHAR),
 
4475
f_char2 = CAST(f_int1 AS CHAR),
 
4476
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
4477
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
4478
SET AUTOCOMMIT= 0;
 
4479
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4480
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4481
FROM t0_template source_tab
 
4482
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4483
        
 
4484
# check transactions-1 success:         1
 
4485
COMMIT WORK;
 
4486
        
 
4487
# check transactions-2 success:         1
 
4488
ROLLBACK WORK;
 
4489
        
 
4490
# check transactions-3 success:         1
 
4491
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4492
COMMIT WORK;
 
4493
ROLLBACK WORK;
 
4494
        
 
4495
# check transactions-4 success:         1
 
4496
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4497
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4498
FROM t0_template source_tab
 
4499
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4500
        
 
4501
# check transactions-5 success:         1
 
4502
ROLLBACK WORK;
 
4503
        
 
4504
# check transactions-6 success:         1
 
4505
# INFO: Storage engine used for t1 seems to be transactional.
 
4506
COMMIT;
 
4507
        
 
4508
# check transactions-7 success:         1
 
4509
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4510
COMMIT WORK;
 
4511
SET @@session.sql_mode = 'traditional';
 
4512
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4514
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4515
'', '', 'was inserted' FROM t0_template
 
4516
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4517
ERROR 22012: Division by 0
 
4518
COMMIT;
 
4519
        
 
4520
# check transactions-8 success:         1
 
4521
# INFO: Storage engine used for t1 seems to be able to revert
 
4522
#       changes made by the failing statement.
 
4523
SET @@session.sql_mode = '';
 
4524
SET AUTOCOMMIT= 1;
 
4525
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4526
COMMIT WORK;
 
4527
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4528
        
 
4529
# check special-1 success:      1
 
4530
UPDATE t1 SET f_charbig = '';
 
4531
        
 
4532
# check special-2 success:      1
 
4533
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4534
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4535
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4536
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4537
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4538
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4539
'just inserted' FROM t0_template
 
4540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4541
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4542
BEGIN
 
4543
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4544
f_charbig = 'updated by trigger'
 
4545
      WHERE f_int1 = new.f_int1;
 
4546
END|
 
4547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4548
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4550
        
 
4551
# check trigger-1 success:      1
 
4552
DROP TRIGGER trg_1;
 
4553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4555
f_charbig = 'just inserted'
 
4556
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4557
DELETE FROM t0_aux
 
4558
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4559
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4560
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4561
'just inserted' FROM t0_template
 
4562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4563
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4564
BEGIN
 
4565
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4566
f_charbig = 'updated by trigger'
 
4567
      WHERE f_int1 = new.f_int1;
 
4568
END|
 
4569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4570
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4572
        
 
4573
# check trigger-2 success:      1
 
4574
DROP TRIGGER trg_1;
 
4575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4577
f_charbig = 'just inserted'
 
4578
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4579
DELETE FROM t0_aux
 
4580
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4582
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4583
'just inserted' FROM t0_template
 
4584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4585
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4586
BEGIN
 
4587
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4588
f_charbig = 'updated by trigger'
 
4589
      WHERE f_int1 = new.f_int1;
 
4590
END|
 
4591
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4592
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4593
        
 
4594
# check trigger-3 success:      1
 
4595
DROP TRIGGER trg_1;
 
4596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4598
f_charbig = 'just inserted'
 
4599
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4600
DELETE FROM t0_aux
 
4601
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4604
'just inserted' FROM t0_template
 
4605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4606
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4607
BEGIN
 
4608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4609
f_charbig = 'updated by trigger'
 
4610
      WHERE f_int1 = - old.f_int1;
 
4611
END|
 
4612
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4613
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4614
        
 
4615
# check trigger-4 success:      1
 
4616
DROP TRIGGER trg_1;
 
4617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4619
f_charbig = 'just inserted'
 
4620
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4621
DELETE FROM t0_aux
 
4622
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4623
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4624
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4625
'just inserted' FROM t0_template
 
4626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4627
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4628
BEGIN
 
4629
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4630
f_charbig = 'updated by trigger'
 
4631
      WHERE f_int1 = new.f_int1;
 
4632
END|
 
4633
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4634
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4635
        
 
4636
# check trigger-5 success:      1
 
4637
DROP TRIGGER trg_1;
 
4638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4640
f_charbig = 'just inserted'
 
4641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4642
DELETE FROM t0_aux
 
4643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4646
'just inserted' FROM t0_template
 
4647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4648
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4649
BEGIN
 
4650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4651
f_charbig = 'updated by trigger'
 
4652
      WHERE f_int1 = - old.f_int1;
 
4653
END|
 
4654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4656
        
 
4657
# check trigger-6 success:      1
 
4658
DROP TRIGGER trg_1;
 
4659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4661
f_charbig = 'just inserted'
 
4662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4663
DELETE FROM t0_aux
 
4664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4667
'just inserted' FROM t0_template
 
4668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4669
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4670
BEGIN
 
4671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4672
f_charbig = 'updated by trigger'
 
4673
      WHERE f_int1 = - old.f_int1;
 
4674
END|
 
4675
DELETE FROM t0_aux
 
4676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4677
        
 
4678
# check trigger-7 success:      1
 
4679
DROP TRIGGER trg_1;
 
4680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4682
f_charbig = 'just inserted'
 
4683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4684
DELETE FROM t0_aux
 
4685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4688
'just inserted' FROM t0_template
 
4689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4690
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4691
BEGIN
 
4692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4693
f_charbig = 'updated by trigger'
 
4694
      WHERE f_int1 = - old.f_int1;
 
4695
END|
 
4696
DELETE FROM t0_aux
 
4697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4698
        
 
4699
# check trigger-8 success:      1
 
4700
DROP TRIGGER trg_1;
 
4701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4703
f_charbig = 'just inserted'
 
4704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4705
DELETE FROM t0_aux
 
4706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4707
DELETE FROM t1
 
4708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4709
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4710
BEGIN
 
4711
SET new.f_int1 = old.f_int1 + @max_row,
 
4712
new.f_int2 = old.f_int2 - @max_row,
 
4713
new.f_charbig = '####updated per update trigger####';
 
4714
END|
 
4715
UPDATE t1
 
4716
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4717
f_charbig = '####updated per update statement itself####';
 
4718
        
 
4719
# check trigger-9 success:      1
 
4720
DROP TRIGGER trg_2;
 
4721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4723
f_charbig = CONCAT('===',f_char1,'===');
 
4724
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4725
BEGIN
 
4726
SET new.f_int1 = new.f_int1 + @max_row,
 
4727
new.f_int2 = new.f_int2 - @max_row,
 
4728
new.f_charbig = '####updated per update trigger####';
 
4729
END|
 
4730
UPDATE t1
 
4731
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4732
f_charbig = '####updated per update statement itself####';
 
4733
        
 
4734
# check trigger-10 success:     1
 
4735
DROP TRIGGER trg_2;
 
4736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4738
f_charbig = CONCAT('===',f_char1,'===');
 
4739
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4740
BEGIN
 
4741
SET new.f_int1 = @my_max1 + @counter,
 
4742
new.f_int2 = @my_min2 - @counter,
 
4743
new.f_charbig = '####updated per insert trigger####';
 
4744
SET @counter = @counter + 1;
 
4745
END|
 
4746
SET @counter = 1;
 
4747
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4748
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4749
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4750
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4752
ORDER BY f_int1;
 
4753
DROP TRIGGER trg_3;
 
4754
        
 
4755
# check trigger-11 success:     1
 
4756
DELETE FROM t1
 
4757
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4758
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4759
AND f_charbig = '####updated per insert trigger####';
 
4760
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4761
BEGIN
 
4762
SET new.f_int1 = @my_max1 + @counter,
 
4763
new.f_int2 = @my_min2 - @counter,
 
4764
new.f_charbig = '####updated per insert trigger####';
 
4765
SET @counter = @counter + 1;
 
4766
END|
 
4767
SET @counter = 1;
 
4768
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4769
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4770
SELECT CAST(f_int1 AS CHAR),
 
4771
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4773
ORDER BY f_int1;
 
4774
DROP TRIGGER trg_3;
 
4775
        
 
4776
# check trigger-12 success:     1
 
4777
DELETE FROM t1
 
4778
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4779
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4780
AND f_charbig = '####updated per insert trigger####';
 
4781
ANALYZE  TABLE t1;
 
4782
Table   Op      Msg_type        Msg_text
 
4783
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4784
CHECK    TABLE t1 EXTENDED;
 
4785
Table   Op      Msg_type        Msg_text
 
4786
test.t1 check   note    The storage engine for the table doesn't support check
 
4787
CHECKSUM TABLE t1 EXTENDED;
 
4788
Table   Checksum
 
4789
test.t1 <some_value>
 
4790
OPTIMIZE TABLE t1;
 
4791
Table   Op      Msg_type        Msg_text
 
4792
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4793
# check layout success:    1
 
4794
REPAIR   TABLE t1 EXTENDED;
 
4795
Table   Op      Msg_type        Msg_text
 
4796
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4797
# check layout success:    1
 
4798
TRUNCATE t1;
 
4799
        
 
4800
# check TRUNCATE success:       1
 
4801
# check layout success:    1
 
4802
# End usability test (inc/partition_check.inc)
 
4803
DROP TABLE t1;
 
4804
CREATE TABLE t1 (
 
4805
f_int1 INTEGER,
 
4806
f_int2 INTEGER,
 
4807
f_char1 CHAR(20),
 
4808
f_char2 CHAR(20),
 
4809
f_charbig VARCHAR(1000)
 
4810
 
 
4811
)
 
4812
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
4813
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4814
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4815
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4816
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
4817
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4818
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4819
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4820
# Start usability test (inc/partition_check.inc)
 
4821
create_command
 
4822
SHOW CREATE TABLE t1;
 
4823
Table   Create Table
 
4824
t1      CREATE TABLE `t1` (
 
4825
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
4826
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
4827
  `f_char1` char(20) DEFAULT NULL,
 
4828
  `f_char2` char(20) DEFAULT NULL,
 
4829
  `f_charbig` varchar(1000) DEFAULT NULL,
 
4830
  PRIMARY KEY (`f_int2`,`f_int1`)
 
4831
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
4832
 
 
4833
# check prerequisites-1 success:    1
 
4834
# check COUNT(*) success:    1
 
4835
# check MIN/MAX(f_int1) success:    1
 
4836
# check MIN/MAX(f_int2) success:    1
 
4837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4838
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4839
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4840
WHERE f_int1 IN (2,3);
 
4841
ERROR 23000: Can't write; duplicate key in table 't1'
 
4842
# check prerequisites-3 success:    1
 
4843
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
4844
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4845
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4846
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4847
WHERE f_int1 IN (2,3);
 
4848
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4849
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4850
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4851
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4852
WHERE f_int1 IN (2,3);
 
4853
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4854
# check read via f_int1 success: 1
 
4855
# check read via f_int2 success: 1
 
4856
        
 
4857
# check multiple-1 success:     1
 
4858
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4859
        
 
4860
# check multiple-2 success:     1
 
4861
INSERT INTO t1 SELECT * FROM t0_template
 
4862
WHERE MOD(f_int1,3) = 0;
 
4863
        
 
4864
# check multiple-3 success:     1
 
4865
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4866
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4867
AND @max_row_div2 + @max_row_div4;
 
4868
        
 
4869
# check multiple-4 success:     1
 
4870
DELETE FROM t1
 
4871
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4872
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4873
        
 
4874
# check multiple-5 success:     1
 
4875
SELECT COUNT(*) INTO @try_count FROM t0_template
 
4876
WHERE MOD(f_int1,3) = 0
 
4877
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4878
SELECT COUNT(*) INTO @clash_count
 
4879
FROM t1 INNER JOIN t0_template USING(f_int1)
 
4880
WHERE MOD(f_int1,3) = 0
 
4881
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4882
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4883
INSERT INTO t1
 
4884
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4885
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4886
f_charbig = '#SINGLE#';
 
4887
        
 
4888
# check single-1 success:       1
 
4889
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4890
INSERT INTO t1
 
4891
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4892
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4893
f_charbig = '#SINGLE#';
 
4894
        
 
4895
# check single-2 success:       1
 
4896
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4897
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4898
UPDATE t1 SET f_int1 = @cur_value2
 
4899
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4900
        
 
4901
# check single-3 success:       1
 
4902
SET @cur_value1= -1;
 
4903
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4904
UPDATE t1 SET f_int1 = @cur_value1
 
4905
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4906
        
 
4907
# check single-4 success:       1
 
4908
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4909
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4910
        
 
4911
# check single-5 success:       1
 
4912
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4913
        
 
4914
# check single-6 success:       1
 
4915
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4916
        
 
4917
# check single-7 success:       1
 
4918
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4919
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4920
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4921
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4922
f_charbig = '#NULL#';
 
4923
INSERT INTO t1
 
4924
SET f_int1 = NULL , f_int2 = -@max_row,
 
4925
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4926
f_charbig = '#NULL#';
 
4927
ERROR 23000: Column 'f_int1' cannot be null
 
4928
# check null success:    1
 
4929
DELETE FROM t1
 
4930
WHERE f_int1 = 0 AND f_int2 = 0
 
4931
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4932
AND f_charbig = '#NULL#';
 
4933
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4934
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4935
   FROM t0_template source_tab
 
4936
WHERE MOD(f_int1,3) = 0
 
4937
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
4938
ON DUPLICATE KEY
 
4939
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
4940
f_int2 = 2 * @max_row + source_tab.f_int1,
 
4941
f_charbig = 'was updated';
 
4942
        
 
4943
# check unique-1-a success:     1
 
4944
        
 
4945
# check unique-1-b success:     1
 
4946
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4947
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4948
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4949
f_charbig = CONCAT('===',f_char1,'===')
 
4950
WHERE f_charbig = 'was updated';
 
4951
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4952
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
4953
   FROM t0_template source_tab
 
4954
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4955
        
 
4956
# check replace success:        1
 
4957
DELETE FROM t1
 
4958
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
4959
DELETE FROM t1
 
4960
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
4961
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
4962
UPDATE t1 SET f_int2 = f_int1,
 
4963
f_char1 = CAST(f_int1 AS CHAR),
 
4964
f_char2 = CAST(f_int1 AS CHAR),
 
4965
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
4966
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
4967
SET AUTOCOMMIT= 0;
 
4968
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4969
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4970
FROM t0_template source_tab
 
4971
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4972
        
 
4973
# check transactions-1 success:         1
 
4974
COMMIT WORK;
 
4975
        
 
4976
# check transactions-2 success:         1
 
4977
ROLLBACK WORK;
 
4978
        
 
4979
# check transactions-3 success:         1
 
4980
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4981
COMMIT WORK;
 
4982
ROLLBACK WORK;
 
4983
        
 
4984
# check transactions-4 success:         1
 
4985
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4986
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4987
FROM t0_template source_tab
 
4988
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4989
        
 
4990
# check transactions-5 success:         1
 
4991
ROLLBACK WORK;
 
4992
        
 
4993
# check transactions-6 success:         1
 
4994
# INFO: Storage engine used for t1 seems to be transactional.
 
4995
COMMIT;
 
4996
        
 
4997
# check transactions-7 success:         1
 
4998
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4999
COMMIT WORK;
 
5000
SET @@session.sql_mode = 'traditional';
 
5001
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5003
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5004
'', '', 'was inserted' FROM t0_template
 
5005
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5006
ERROR 22012: Division by 0
 
5007
COMMIT;
 
5008
        
 
5009
# check transactions-8 success:         1
 
5010
# INFO: Storage engine used for t1 seems to be able to revert
 
5011
#       changes made by the failing statement.
 
5012
SET @@session.sql_mode = '';
 
5013
SET AUTOCOMMIT= 1;
 
5014
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5015
COMMIT WORK;
 
5016
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5017
        
 
5018
# check special-1 success:      1
 
5019
UPDATE t1 SET f_charbig = '';
 
5020
        
 
5021
# check special-2 success:      1
 
5022
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5023
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5024
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5027
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5028
'just inserted' FROM t0_template
 
5029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5030
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5031
BEGIN
 
5032
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5033
f_charbig = 'updated by trigger'
 
5034
      WHERE f_int1 = new.f_int1;
 
5035
END|
 
5036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5037
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5039
        
 
5040
# check trigger-1 success:      1
 
5041
DROP TRIGGER trg_1;
 
5042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5044
f_charbig = 'just inserted'
 
5045
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5046
DELETE FROM t0_aux
 
5047
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5049
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5050
'just inserted' FROM t0_template
 
5051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5052
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5053
BEGIN
 
5054
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5055
f_charbig = 'updated by trigger'
 
5056
      WHERE f_int1 = new.f_int1;
 
5057
END|
 
5058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5059
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5061
        
 
5062
# check trigger-2 success:      1
 
5063
DROP TRIGGER trg_1;
 
5064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5066
f_charbig = 'just inserted'
 
5067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5068
DELETE FROM t0_aux
 
5069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5072
'just inserted' FROM t0_template
 
5073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5074
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5075
BEGIN
 
5076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5077
f_charbig = 'updated by trigger'
 
5078
      WHERE f_int1 = new.f_int1;
 
5079
END|
 
5080
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5082
        
 
5083
# check trigger-3 success:      1
 
5084
DROP TRIGGER trg_1;
 
5085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5087
f_charbig = 'just inserted'
 
5088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5089
DELETE FROM t0_aux
 
5090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5093
'just inserted' FROM t0_template
 
5094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5095
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5096
BEGIN
 
5097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5098
f_charbig = 'updated by trigger'
 
5099
      WHERE f_int1 = - old.f_int1;
 
5100
END|
 
5101
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5103
        
 
5104
# check trigger-4 success:      1
 
5105
DROP TRIGGER trg_1;
 
5106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5108
f_charbig = 'just inserted'
 
5109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5110
DELETE FROM t0_aux
 
5111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5114
'just inserted' FROM t0_template
 
5115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5116
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5117
BEGIN
 
5118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5119
f_charbig = 'updated by trigger'
 
5120
      WHERE f_int1 = new.f_int1;
 
5121
END|
 
5122
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5124
        
 
5125
# check trigger-5 success:      1
 
5126
DROP TRIGGER trg_1;
 
5127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5129
f_charbig = 'just inserted'
 
5130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5131
DELETE FROM t0_aux
 
5132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5135
'just inserted' FROM t0_template
 
5136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5137
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5138
BEGIN
 
5139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5140
f_charbig = 'updated by trigger'
 
5141
      WHERE f_int1 = - old.f_int1;
 
5142
END|
 
5143
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5144
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5145
        
 
5146
# check trigger-6 success:      1
 
5147
DROP TRIGGER trg_1;
 
5148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5150
f_charbig = 'just inserted'
 
5151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5152
DELETE FROM t0_aux
 
5153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5156
'just inserted' FROM t0_template
 
5157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5158
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5159
BEGIN
 
5160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5161
f_charbig = 'updated by trigger'
 
5162
      WHERE f_int1 = - old.f_int1;
 
5163
END|
 
5164
DELETE FROM t0_aux
 
5165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5166
        
 
5167
# check trigger-7 success:      1
 
5168
DROP TRIGGER trg_1;
 
5169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5171
f_charbig = 'just inserted'
 
5172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5173
DELETE FROM t0_aux
 
5174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5177
'just inserted' FROM t0_template
 
5178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5179
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5180
BEGIN
 
5181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5182
f_charbig = 'updated by trigger'
 
5183
      WHERE f_int1 = - old.f_int1;
 
5184
END|
 
5185
DELETE FROM t0_aux
 
5186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5187
        
 
5188
# check trigger-8 success:      1
 
5189
DROP TRIGGER trg_1;
 
5190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5192
f_charbig = 'just inserted'
 
5193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5194
DELETE FROM t0_aux
 
5195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5196
DELETE FROM t1
 
5197
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5198
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5199
BEGIN
 
5200
SET new.f_int1 = old.f_int1 + @max_row,
 
5201
new.f_int2 = old.f_int2 - @max_row,
 
5202
new.f_charbig = '####updated per update trigger####';
 
5203
END|
 
5204
UPDATE t1
 
5205
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5206
f_charbig = '####updated per update statement itself####';
 
5207
        
 
5208
# check trigger-9 success:      1
 
5209
DROP TRIGGER trg_2;
 
5210
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5211
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5212
f_charbig = CONCAT('===',f_char1,'===');
 
5213
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5214
BEGIN
 
5215
SET new.f_int1 = new.f_int1 + @max_row,
 
5216
new.f_int2 = new.f_int2 - @max_row,
 
5217
new.f_charbig = '####updated per update trigger####';
 
5218
END|
 
5219
UPDATE t1
 
5220
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5221
f_charbig = '####updated per update statement itself####';
 
5222
        
 
5223
# check trigger-10 success:     1
 
5224
DROP TRIGGER trg_2;
 
5225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5227
f_charbig = CONCAT('===',f_char1,'===');
 
5228
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5229
BEGIN
 
5230
SET new.f_int1 = @my_max1 + @counter,
 
5231
new.f_int2 = @my_min2 - @counter,
 
5232
new.f_charbig = '####updated per insert trigger####';
 
5233
SET @counter = @counter + 1;
 
5234
END|
 
5235
SET @counter = 1;
 
5236
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5237
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5238
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5239
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5241
ORDER BY f_int1;
 
5242
DROP TRIGGER trg_3;
 
5243
        
 
5244
# check trigger-11 success:     1
 
5245
DELETE FROM t1
 
5246
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5247
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5248
AND f_charbig = '####updated per insert trigger####';
 
5249
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5250
BEGIN
 
5251
SET new.f_int1 = @my_max1 + @counter,
 
5252
new.f_int2 = @my_min2 - @counter,
 
5253
new.f_charbig = '####updated per insert trigger####';
 
5254
SET @counter = @counter + 1;
 
5255
END|
 
5256
SET @counter = 1;
 
5257
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5258
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5259
SELECT CAST(f_int1 AS CHAR),
 
5260
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5262
ORDER BY f_int1;
 
5263
DROP TRIGGER trg_3;
 
5264
        
 
5265
# check trigger-12 success:     1
 
5266
DELETE FROM t1
 
5267
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5268
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5269
AND f_charbig = '####updated per insert trigger####';
 
5270
ANALYZE  TABLE t1;
 
5271
Table   Op      Msg_type        Msg_text
 
5272
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5273
CHECK    TABLE t1 EXTENDED;
 
5274
Table   Op      Msg_type        Msg_text
 
5275
test.t1 check   note    The storage engine for the table doesn't support check
 
5276
CHECKSUM TABLE t1 EXTENDED;
 
5277
Table   Checksum
 
5278
test.t1 <some_value>
 
5279
OPTIMIZE TABLE t1;
 
5280
Table   Op      Msg_type        Msg_text
 
5281
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
5282
# check layout success:    1
 
5283
REPAIR   TABLE t1 EXTENDED;
 
5284
Table   Op      Msg_type        Msg_text
 
5285
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5286
# check layout success:    1
 
5287
TRUNCATE t1;
 
5288
        
 
5289
# check TRUNCATE success:       1
 
5290
# check layout success:    1
 
5291
# End usability test (inc/partition_check.inc)
 
5292
DROP TABLE t1;
 
5293
CREATE TABLE t1 (
 
5294
f_int1 INTEGER,
 
5295
f_int2 INTEGER,
 
5296
f_char1 CHAR(20),
 
5297
f_char2 CHAR(20),
 
5298
f_charbig VARCHAR(1000)
 
5299
 
 
5300
)
 
5301
PARTITION BY LIST(MOD(f_int1,4))
 
5302
(PARTITION part_3 VALUES IN (-3),
 
5303
PARTITION part_2 VALUES IN (-2),
 
5304
PARTITION part_1 VALUES IN (-1),
 
5305
PARTITION part_N VALUES IN (NULL),
 
5306
PARTITION part0 VALUES IN (0),
 
5307
PARTITION part1 VALUES IN (1),
 
5308
PARTITION part2 VALUES IN (2),
 
5309
PARTITION part3 VALUES IN (3));
 
5310
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5311
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5312
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5313
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
5314
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5315
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5316
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5317
# Start usability test (inc/partition_check.inc)
 
5318
create_command
 
5319
SHOW CREATE TABLE t1;
 
5320
Table   Create Table
 
5321
t1      CREATE TABLE `t1` (
 
5322
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
5323
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
5324
  `f_char1` char(20) DEFAULT NULL,
 
5325
  `f_char2` char(20) DEFAULT NULL,
 
5326
  `f_charbig` varchar(1000) DEFAULT NULL,
 
5327
  PRIMARY KEY (`f_int2`,`f_int1`)
 
5328
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
5329
 
 
5330
# check prerequisites-1 success:    1
 
5331
# check COUNT(*) success:    1
 
5332
# check MIN/MAX(f_int1) success:    1
 
5333
# check MIN/MAX(f_int2) success:    1
 
5334
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5335
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5336
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5337
WHERE f_int1 IN (2,3);
 
5338
ERROR 23000: Can't write; duplicate key in table 't1'
 
5339
# check prerequisites-3 success:    1
 
5340
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
5341
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5342
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5343
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5344
WHERE f_int1 IN (2,3);
 
5345
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5346
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5347
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5348
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5349
WHERE f_int1 IN (2,3);
 
5350
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5351
# check read via f_int1 success: 1
 
5352
# check read via f_int2 success: 1
 
5353
        
 
5354
# check multiple-1 success:     1
 
5355
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5356
        
 
5357
# check multiple-2 success:     1
 
5358
INSERT INTO t1 SELECT * FROM t0_template
 
5359
WHERE MOD(f_int1,3) = 0;
 
5360
        
 
5361
# check multiple-3 success:     1
 
5362
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5363
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5364
AND @max_row_div2 + @max_row_div4;
 
5365
        
 
5366
# check multiple-4 success:     1
 
5367
DELETE FROM t1
 
5368
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5369
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5370
        
 
5371
# check multiple-5 success:     1
 
5372
SELECT COUNT(*) INTO @try_count FROM t0_template
 
5373
WHERE MOD(f_int1,3) = 0
 
5374
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5375
SELECT COUNT(*) INTO @clash_count
 
5376
FROM t1 INNER JOIN t0_template USING(f_int1)
 
5377
WHERE MOD(f_int1,3) = 0
 
5378
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5379
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5380
INSERT INTO t1
 
5381
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5382
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5383
f_charbig = '#SINGLE#';
 
5384
        
 
5385
# check single-1 success:       1
 
5386
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5387
INSERT INTO t1
 
5388
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5389
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5390
f_charbig = '#SINGLE#';
 
5391
        
 
5392
# check single-2 success:       1
 
5393
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5394
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5395
UPDATE t1 SET f_int1 = @cur_value2
 
5396
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5397
        
 
5398
# check single-3 success:       1
 
5399
SET @cur_value1= -1;
 
5400
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5401
UPDATE t1 SET f_int1 = @cur_value1
 
5402
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5403
        
 
5404
# check single-4 success:       1
 
5405
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5406
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5407
        
 
5408
# check single-5 success:       1
 
5409
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5410
        
 
5411
# check single-6 success:       1
 
5412
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5413
        
 
5414
# check single-7 success:       1
 
5415
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5416
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5417
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5418
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5419
f_charbig = '#NULL#';
 
5420
INSERT INTO t1
 
5421
SET f_int1 = NULL , f_int2 = -@max_row,
 
5422
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5423
f_charbig = '#NULL#';
 
5424
ERROR 23000: Column 'f_int1' cannot be null
 
5425
# check null success:    1
 
5426
DELETE FROM t1
 
5427
WHERE f_int1 = 0 AND f_int2 = 0
 
5428
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5429
AND f_charbig = '#NULL#';
 
5430
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5431
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5432
   FROM t0_template source_tab
 
5433
WHERE MOD(f_int1,3) = 0
 
5434
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
5435
ON DUPLICATE KEY
 
5436
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
5437
f_int2 = 2 * @max_row + source_tab.f_int1,
 
5438
f_charbig = 'was updated';
 
5439
        
 
5440
# check unique-1-a success:     1
 
5441
        
 
5442
# check unique-1-b success:     1
 
5443
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5446
f_charbig = CONCAT('===',f_char1,'===')
 
5447
WHERE f_charbig = 'was updated';
 
5448
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5449
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
5450
   FROM t0_template source_tab
 
5451
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5452
        
 
5453
# check replace success:        1
 
5454
DELETE FROM t1
 
5455
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
5456
DELETE FROM t1
 
5457
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
5458
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
5459
UPDATE t1 SET f_int2 = f_int1,
 
5460
f_char1 = CAST(f_int1 AS CHAR),
 
5461
f_char2 = CAST(f_int1 AS CHAR),
 
5462
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
5463
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
5464
SET AUTOCOMMIT= 0;
 
5465
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5466
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5467
FROM t0_template source_tab
 
5468
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5469
        
 
5470
# check transactions-1 success:         1
 
5471
COMMIT WORK;
 
5472
        
 
5473
# check transactions-2 success:         1
 
5474
ROLLBACK WORK;
 
5475
        
 
5476
# check transactions-3 success:         1
 
5477
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5478
COMMIT WORK;
 
5479
ROLLBACK WORK;
 
5480
        
 
5481
# check transactions-4 success:         1
 
5482
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5483
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5484
FROM t0_template source_tab
 
5485
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5486
        
 
5487
# check transactions-5 success:         1
 
5488
ROLLBACK WORK;
 
5489
        
 
5490
# check transactions-6 success:         1
 
5491
# INFO: Storage engine used for t1 seems to be transactional.
 
5492
COMMIT;
 
5493
        
 
5494
# check transactions-7 success:         1
 
5495
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5496
COMMIT WORK;
 
5497
SET @@session.sql_mode = 'traditional';
 
5498
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5499
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5500
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5501
'', '', 'was inserted' FROM t0_template
 
5502
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5503
ERROR 22012: Division by 0
 
5504
COMMIT;
 
5505
        
 
5506
# check transactions-8 success:         1
 
5507
# INFO: Storage engine used for t1 seems to be able to revert
 
5508
#       changes made by the failing statement.
 
5509
SET @@session.sql_mode = '';
 
5510
SET AUTOCOMMIT= 1;
 
5511
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5512
COMMIT WORK;
 
5513
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5514
        
 
5515
# check special-1 success:      1
 
5516
UPDATE t1 SET f_charbig = '';
 
5517
        
 
5518
# check special-2 success:      1
 
5519
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5520
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5521
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5525
'just inserted' FROM t0_template
 
5526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5527
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5528
BEGIN
 
5529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5530
f_charbig = 'updated by trigger'
 
5531
      WHERE f_int1 = new.f_int1;
 
5532
END|
 
5533
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5534
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5536
        
 
5537
# check trigger-1 success:      1
 
5538
DROP TRIGGER trg_1;
 
5539
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5540
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5541
f_charbig = 'just inserted'
 
5542
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5543
DELETE FROM t0_aux
 
5544
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5546
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5547
'just inserted' FROM t0_template
 
5548
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5549
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5550
BEGIN
 
5551
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5552
f_charbig = 'updated by trigger'
 
5553
      WHERE f_int1 = new.f_int1;
 
5554
END|
 
5555
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5556
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5558
        
 
5559
# check trigger-2 success:      1
 
5560
DROP TRIGGER trg_1;
 
5561
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5562
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5563
f_charbig = 'just inserted'
 
5564
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5565
DELETE FROM t0_aux
 
5566
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5567
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5568
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5569
'just inserted' FROM t0_template
 
5570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5571
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5572
BEGIN
 
5573
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5574
f_charbig = 'updated by trigger'
 
5575
      WHERE f_int1 = new.f_int1;
 
5576
END|
 
5577
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5578
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5579
        
 
5580
# check trigger-3 success:      1
 
5581
DROP TRIGGER trg_1;
 
5582
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5583
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5584
f_charbig = 'just inserted'
 
5585
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5586
DELETE FROM t0_aux
 
5587
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5588
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5589
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5590
'just inserted' FROM t0_template
 
5591
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5592
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5593
BEGIN
 
5594
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5595
f_charbig = 'updated by trigger'
 
5596
      WHERE f_int1 = - old.f_int1;
 
5597
END|
 
5598
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5599
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5600
        
 
5601
# check trigger-4 success:      1
 
5602
DROP TRIGGER trg_1;
 
5603
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5604
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5605
f_charbig = 'just inserted'
 
5606
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5607
DELETE FROM t0_aux
 
5608
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5609
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5610
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5611
'just inserted' FROM t0_template
 
5612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5613
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5614
BEGIN
 
5615
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5616
f_charbig = 'updated by trigger'
 
5617
      WHERE f_int1 = new.f_int1;
 
5618
END|
 
5619
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5620
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5621
        
 
5622
# check trigger-5 success:      1
 
5623
DROP TRIGGER trg_1;
 
5624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5626
f_charbig = 'just inserted'
 
5627
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5628
DELETE FROM t0_aux
 
5629
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5630
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5631
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5632
'just inserted' FROM t0_template
 
5633
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5634
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5635
BEGIN
 
5636
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5637
f_charbig = 'updated by trigger'
 
5638
      WHERE f_int1 = - old.f_int1;
 
5639
END|
 
5640
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5641
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5642
        
 
5643
# check trigger-6 success:      1
 
5644
DROP TRIGGER trg_1;
 
5645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5647
f_charbig = 'just inserted'
 
5648
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5649
DELETE FROM t0_aux
 
5650
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5651
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5652
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5653
'just inserted' FROM t0_template
 
5654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5655
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5656
BEGIN
 
5657
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5658
f_charbig = 'updated by trigger'
 
5659
      WHERE f_int1 = - old.f_int1;
 
5660
END|
 
5661
DELETE FROM t0_aux
 
5662
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5663
        
 
5664
# check trigger-7 success:      1
 
5665
DROP TRIGGER trg_1;
 
5666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5668
f_charbig = 'just inserted'
 
5669
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5670
DELETE FROM t0_aux
 
5671
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5674
'just inserted' FROM t0_template
 
5675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5676
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5677
BEGIN
 
5678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5679
f_charbig = 'updated by trigger'
 
5680
      WHERE f_int1 = - old.f_int1;
 
5681
END|
 
5682
DELETE FROM t0_aux
 
5683
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5684
        
 
5685
# check trigger-8 success:      1
 
5686
DROP TRIGGER trg_1;
 
5687
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5688
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5689
f_charbig = 'just inserted'
 
5690
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5691
DELETE FROM t0_aux
 
5692
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5693
DELETE FROM t1
 
5694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5695
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5696
BEGIN
 
5697
SET new.f_int1 = old.f_int1 + @max_row,
 
5698
new.f_int2 = old.f_int2 - @max_row,
 
5699
new.f_charbig = '####updated per update trigger####';
 
5700
END|
 
5701
UPDATE t1
 
5702
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5703
f_charbig = '####updated per update statement itself####';
 
5704
        
 
5705
# check trigger-9 success:      1
 
5706
DROP TRIGGER trg_2;
 
5707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5709
f_charbig = CONCAT('===',f_char1,'===');
 
5710
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5711
BEGIN
 
5712
SET new.f_int1 = new.f_int1 + @max_row,
 
5713
new.f_int2 = new.f_int2 - @max_row,
 
5714
new.f_charbig = '####updated per update trigger####';
 
5715
END|
 
5716
UPDATE t1
 
5717
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5718
f_charbig = '####updated per update statement itself####';
 
5719
        
 
5720
# check trigger-10 success:     1
 
5721
DROP TRIGGER trg_2;
 
5722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5724
f_charbig = CONCAT('===',f_char1,'===');
 
5725
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5726
BEGIN
 
5727
SET new.f_int1 = @my_max1 + @counter,
 
5728
new.f_int2 = @my_min2 - @counter,
 
5729
new.f_charbig = '####updated per insert trigger####';
 
5730
SET @counter = @counter + 1;
 
5731
END|
 
5732
SET @counter = 1;
 
5733
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5734
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5735
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5736
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5738
ORDER BY f_int1;
 
5739
DROP TRIGGER trg_3;
 
5740
        
 
5741
# check trigger-11 success:     1
 
5742
DELETE FROM t1
 
5743
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5744
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5745
AND f_charbig = '####updated per insert trigger####';
 
5746
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5747
BEGIN
 
5748
SET new.f_int1 = @my_max1 + @counter,
 
5749
new.f_int2 = @my_min2 - @counter,
 
5750
new.f_charbig = '####updated per insert trigger####';
 
5751
SET @counter = @counter + 1;
 
5752
END|
 
5753
SET @counter = 1;
 
5754
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5755
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5756
SELECT CAST(f_int1 AS CHAR),
 
5757
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5759
ORDER BY f_int1;
 
5760
DROP TRIGGER trg_3;
 
5761
        
 
5762
# check trigger-12 success:     1
 
5763
DELETE FROM t1
 
5764
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5765
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5766
AND f_charbig = '####updated per insert trigger####';
 
5767
ANALYZE  TABLE t1;
 
5768
Table   Op      Msg_type        Msg_text
 
5769
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5770
CHECK    TABLE t1 EXTENDED;
 
5771
Table   Op      Msg_type        Msg_text
 
5772
test.t1 check   note    The storage engine for the table doesn't support check
 
5773
CHECKSUM TABLE t1 EXTENDED;
 
5774
Table   Checksum
 
5775
test.t1 <some_value>
 
5776
OPTIMIZE TABLE t1;
 
5777
Table   Op      Msg_type        Msg_text
 
5778
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
5779
# check layout success:    1
 
5780
REPAIR   TABLE t1 EXTENDED;
 
5781
Table   Op      Msg_type        Msg_text
 
5782
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5783
# check layout success:    1
 
5784
TRUNCATE t1;
 
5785
        
 
5786
# check TRUNCATE success:       1
 
5787
# check layout success:    1
 
5788
# End usability test (inc/partition_check.inc)
 
5789
DROP TABLE t1;
 
5790
CREATE TABLE t1 (
 
5791
f_int1 INTEGER,
 
5792
f_int2 INTEGER,
 
5793
f_char1 CHAR(20),
 
5794
f_char2 CHAR(20),
 
5795
f_charbig VARCHAR(1000)
 
5796
 
 
5797
)
 
5798
PARTITION BY RANGE(f_int1)
 
5799
(PARTITION parta VALUES LESS THAN (0),
 
5800
PARTITION partb VALUES LESS THAN (5),
 
5801
PARTITION partc VALUES LESS THAN (10),
 
5802
PARTITION partd VALUES LESS THAN (10 + 5),
 
5803
PARTITION parte VALUES LESS THAN (20),
 
5804
PARTITION partf VALUES LESS THAN (2147483646));
 
5805
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5806
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5807
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5808
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
5809
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5810
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5811
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5812
# Start usability test (inc/partition_check.inc)
 
5813
create_command
 
5814
SHOW CREATE TABLE t1;
 
5815
Table   Create Table
 
5816
t1      CREATE TABLE `t1` (
 
5817
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
5818
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
5819
  `f_char1` char(20) DEFAULT NULL,
 
5820
  `f_char2` char(20) DEFAULT NULL,
 
5821
  `f_charbig` varchar(1000) DEFAULT NULL,
 
5822
  PRIMARY KEY (`f_int2`,`f_int1`)
 
5823
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
5824
 
 
5825
# check prerequisites-1 success:    1
 
5826
# check COUNT(*) success:    1
 
5827
# check MIN/MAX(f_int1) success:    1
 
5828
# check MIN/MAX(f_int2) success:    1
 
5829
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5830
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5831
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5832
WHERE f_int1 IN (2,3);
 
5833
ERROR 23000: Can't write; duplicate key in table 't1'
 
5834
# check prerequisites-3 success:    1
 
5835
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
5836
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5837
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5838
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5839
WHERE f_int1 IN (2,3);
 
5840
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5841
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5842
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5843
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5844
WHERE f_int1 IN (2,3);
 
5845
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5846
# check read via f_int1 success: 1
 
5847
# check read via f_int2 success: 1
 
5848
        
 
5849
# check multiple-1 success:     1
 
5850
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5851
        
 
5852
# check multiple-2 success:     1
 
5853
INSERT INTO t1 SELECT * FROM t0_template
 
5854
WHERE MOD(f_int1,3) = 0;
 
5855
        
 
5856
# check multiple-3 success:     1
 
5857
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5858
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5859
AND @max_row_div2 + @max_row_div4;
 
5860
        
 
5861
# check multiple-4 success:     1
 
5862
DELETE FROM t1
 
5863
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5864
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5865
        
 
5866
# check multiple-5 success:     1
 
5867
SELECT COUNT(*) INTO @try_count FROM t0_template
 
5868
WHERE MOD(f_int1,3) = 0
 
5869
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5870
SELECT COUNT(*) INTO @clash_count
 
5871
FROM t1 INNER JOIN t0_template USING(f_int1)
 
5872
WHERE MOD(f_int1,3) = 0
 
5873
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5874
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5875
INSERT INTO t1
 
5876
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5877
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5878
f_charbig = '#SINGLE#';
 
5879
        
 
5880
# check single-1 success:       1
 
5881
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5882
INSERT INTO t1
 
5883
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5884
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5885
f_charbig = '#SINGLE#';
 
5886
        
 
5887
# check single-2 success:       1
 
5888
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5889
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5890
UPDATE t1 SET f_int1 = @cur_value2
 
5891
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5892
        
 
5893
# check single-3 success:       1
 
5894
SET @cur_value1= -1;
 
5895
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5896
UPDATE t1 SET f_int1 = @cur_value1
 
5897
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5898
        
 
5899
# check single-4 success:       1
 
5900
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5901
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5902
        
 
5903
# check single-5 success:       1
 
5904
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5905
        
 
5906
# check single-6 success:       1
 
5907
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5908
ERROR HY000: Table has no partition for value 2147483647
 
5909
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5910
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5911
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5912
f_charbig = '#NULL#';
 
5913
INSERT INTO t1
 
5914
SET f_int1 = NULL , f_int2 = -@max_row,
 
5915
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5916
f_charbig = '#NULL#';
 
5917
ERROR 23000: Column 'f_int1' cannot be null
 
5918
# check null success:    1
 
5919
DELETE FROM t1
 
5920
WHERE f_int1 = 0 AND f_int2 = 0
 
5921
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5922
AND f_charbig = '#NULL#';
 
5923
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5924
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5925
   FROM t0_template source_tab
 
5926
WHERE MOD(f_int1,3) = 0
 
5927
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
5928
ON DUPLICATE KEY
 
5929
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
5930
f_int2 = 2 * @max_row + source_tab.f_int1,
 
5931
f_charbig = 'was updated';
 
5932
        
 
5933
# check unique-1-a success:     1
 
5934
        
 
5935
# check unique-1-b success:     1
 
5936
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5939
f_charbig = CONCAT('===',f_char1,'===')
 
5940
WHERE f_charbig = 'was updated';
 
5941
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5942
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
5943
   FROM t0_template source_tab
 
5944
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5945
        
 
5946
# check replace success:        1
 
5947
DELETE FROM t1
 
5948
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
5949
DELETE FROM t1
 
5950
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
5951
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
5952
UPDATE t1 SET f_int2 = f_int1,
 
5953
f_char1 = CAST(f_int1 AS CHAR),
 
5954
f_char2 = CAST(f_int1 AS CHAR),
 
5955
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
5956
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
5957
SET AUTOCOMMIT= 0;
 
5958
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5959
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5960
FROM t0_template source_tab
 
5961
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5962
        
 
5963
# check transactions-1 success:         1
 
5964
COMMIT WORK;
 
5965
        
 
5966
# check transactions-2 success:         1
 
5967
ROLLBACK WORK;
 
5968
        
 
5969
# check transactions-3 success:         1
 
5970
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5971
COMMIT WORK;
 
5972
ROLLBACK WORK;
 
5973
        
 
5974
# check transactions-4 success:         1
 
5975
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5976
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5977
FROM t0_template source_tab
 
5978
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5979
        
 
5980
# check transactions-5 success:         1
 
5981
ROLLBACK WORK;
 
5982
        
 
5983
# check transactions-6 success:         1
 
5984
# INFO: Storage engine used for t1 seems to be transactional.
 
5985
COMMIT;
 
5986
        
 
5987
# check transactions-7 success:         1
 
5988
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5989
COMMIT WORK;
 
5990
SET @@session.sql_mode = 'traditional';
 
5991
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5992
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5993
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5994
'', '', 'was inserted' FROM t0_template
 
5995
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5996
ERROR 22012: Division by 0
 
5997
COMMIT;
 
5998
        
 
5999
# check transactions-8 success:         1
 
6000
# INFO: Storage engine used for t1 seems to be able to revert
 
6001
#       changes made by the failing statement.
 
6002
SET @@session.sql_mode = '';
 
6003
SET AUTOCOMMIT= 1;
 
6004
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6005
COMMIT WORK;
 
6006
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6007
        
 
6008
# check special-1 success:      1
 
6009
UPDATE t1 SET f_charbig = '';
 
6010
        
 
6011
# check special-2 success:      1
 
6012
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6013
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6014
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6018
'just inserted' FROM t0_template
 
6019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6020
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6021
BEGIN
 
6022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6023
f_charbig = 'updated by trigger'
 
6024
      WHERE f_int1 = new.f_int1;
 
6025
END|
 
6026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6027
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6029
        
 
6030
# check trigger-1 success:      1
 
6031
DROP TRIGGER trg_1;
 
6032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6034
f_charbig = 'just inserted'
 
6035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6036
DELETE FROM t0_aux
 
6037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6039
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6040
'just inserted' FROM t0_template
 
6041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6042
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6043
BEGIN
 
6044
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6045
f_charbig = 'updated by trigger'
 
6046
      WHERE f_int1 = new.f_int1;
 
6047
END|
 
6048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6049
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6051
        
 
6052
# check trigger-2 success:      1
 
6053
DROP TRIGGER trg_1;
 
6054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6056
f_charbig = 'just inserted'
 
6057
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6058
DELETE FROM t0_aux
 
6059
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6061
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6062
'just inserted' FROM t0_template
 
6063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6064
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6065
BEGIN
 
6066
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6067
f_charbig = 'updated by trigger'
 
6068
      WHERE f_int1 = new.f_int1;
 
6069
END|
 
6070
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6071
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6072
        
 
6073
# check trigger-3 success:      1
 
6074
DROP TRIGGER trg_1;
 
6075
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6076
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6077
f_charbig = 'just inserted'
 
6078
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6079
DELETE FROM t0_aux
 
6080
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6083
'just inserted' FROM t0_template
 
6084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6085
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6086
BEGIN
 
6087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6088
f_charbig = 'updated by trigger'
 
6089
      WHERE f_int1 = - old.f_int1;
 
6090
END|
 
6091
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6092
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6093
        
 
6094
# check trigger-4 success:      1
 
6095
DROP TRIGGER trg_1;
 
6096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6098
f_charbig = 'just inserted'
 
6099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6100
DELETE FROM t0_aux
 
6101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6103
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6104
'just inserted' FROM t0_template
 
6105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6106
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6107
BEGIN
 
6108
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6109
f_charbig = 'updated by trigger'
 
6110
      WHERE f_int1 = new.f_int1;
 
6111
END|
 
6112
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6113
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6114
        
 
6115
# check trigger-5 success:      1
 
6116
DROP TRIGGER trg_1;
 
6117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6119
f_charbig = 'just inserted'
 
6120
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6121
DELETE FROM t0_aux
 
6122
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6123
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6124
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6125
'just inserted' FROM t0_template
 
6126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6127
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6128
BEGIN
 
6129
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6130
f_charbig = 'updated by trigger'
 
6131
      WHERE f_int1 = - old.f_int1;
 
6132
END|
 
6133
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6134
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6135
        
 
6136
# check trigger-6 success:      1
 
6137
DROP TRIGGER trg_1;
 
6138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6140
f_charbig = 'just inserted'
 
6141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6142
DELETE FROM t0_aux
 
6143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6146
'just inserted' FROM t0_template
 
6147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6148
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6149
BEGIN
 
6150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6151
f_charbig = 'updated by trigger'
 
6152
      WHERE f_int1 = - old.f_int1;
 
6153
END|
 
6154
DELETE FROM t0_aux
 
6155
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6156
        
 
6157
# check trigger-7 success:      1
 
6158
DROP TRIGGER trg_1;
 
6159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6161
f_charbig = 'just inserted'
 
6162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6163
DELETE FROM t0_aux
 
6164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6167
'just inserted' FROM t0_template
 
6168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6169
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6170
BEGIN
 
6171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6172
f_charbig = 'updated by trigger'
 
6173
      WHERE f_int1 = - old.f_int1;
 
6174
END|
 
6175
DELETE FROM t0_aux
 
6176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6177
        
 
6178
# check trigger-8 success:      1
 
6179
DROP TRIGGER trg_1;
 
6180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6182
f_charbig = 'just inserted'
 
6183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6184
DELETE FROM t0_aux
 
6185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6186
DELETE FROM t1
 
6187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6188
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6189
BEGIN
 
6190
SET new.f_int1 = old.f_int1 + @max_row,
 
6191
new.f_int2 = old.f_int2 - @max_row,
 
6192
new.f_charbig = '####updated per update trigger####';
 
6193
END|
 
6194
UPDATE t1
 
6195
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6196
f_charbig = '####updated per update statement itself####';
 
6197
        
 
6198
# check trigger-9 success:      1
 
6199
DROP TRIGGER trg_2;
 
6200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6202
f_charbig = CONCAT('===',f_char1,'===');
 
6203
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6204
BEGIN
 
6205
SET new.f_int1 = new.f_int1 + @max_row,
 
6206
new.f_int2 = new.f_int2 - @max_row,
 
6207
new.f_charbig = '####updated per update trigger####';
 
6208
END|
 
6209
UPDATE t1
 
6210
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6211
f_charbig = '####updated per update statement itself####';
 
6212
        
 
6213
# check trigger-10 success:     1
 
6214
DROP TRIGGER trg_2;
 
6215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6217
f_charbig = CONCAT('===',f_char1,'===');
 
6218
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6219
BEGIN
 
6220
SET new.f_int1 = @my_max1 + @counter,
 
6221
new.f_int2 = @my_min2 - @counter,
 
6222
new.f_charbig = '####updated per insert trigger####';
 
6223
SET @counter = @counter + 1;
 
6224
END|
 
6225
SET @counter = 1;
 
6226
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6227
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6228
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6229
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6231
ORDER BY f_int1;
 
6232
DROP TRIGGER trg_3;
 
6233
        
 
6234
# check trigger-11 success:     1
 
6235
DELETE FROM t1
 
6236
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6237
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6238
AND f_charbig = '####updated per insert trigger####';
 
6239
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6240
BEGIN
 
6241
SET new.f_int1 = @my_max1 + @counter,
 
6242
new.f_int2 = @my_min2 - @counter,
 
6243
new.f_charbig = '####updated per insert trigger####';
 
6244
SET @counter = @counter + 1;
 
6245
END|
 
6246
SET @counter = 1;
 
6247
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6248
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6249
SELECT CAST(f_int1 AS CHAR),
 
6250
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6252
ORDER BY f_int1;
 
6253
DROP TRIGGER trg_3;
 
6254
        
 
6255
# check trigger-12 success:     1
 
6256
DELETE FROM t1
 
6257
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6258
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6259
AND f_charbig = '####updated per insert trigger####';
 
6260
ANALYZE  TABLE t1;
 
6261
Table   Op      Msg_type        Msg_text
 
6262
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
6263
CHECK    TABLE t1 EXTENDED;
 
6264
Table   Op      Msg_type        Msg_text
 
6265
test.t1 check   note    The storage engine for the table doesn't support check
 
6266
CHECKSUM TABLE t1 EXTENDED;
 
6267
Table   Checksum
 
6268
test.t1 <some_value>
 
6269
OPTIMIZE TABLE t1;
 
6270
Table   Op      Msg_type        Msg_text
 
6271
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
6272
# check layout success:    1
 
6273
REPAIR   TABLE t1 EXTENDED;
 
6274
Table   Op      Msg_type        Msg_text
 
6275
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6276
# check layout success:    1
 
6277
TRUNCATE t1;
 
6278
        
 
6279
# check TRUNCATE success:       1
 
6280
# check layout success:    1
 
6281
# End usability test (inc/partition_check.inc)
 
6282
DROP TABLE t1;
 
6283
CREATE TABLE t1 (
 
6284
f_int1 INTEGER,
 
6285
f_int2 INTEGER,
 
6286
f_char1 CHAR(20),
 
6287
f_char2 CHAR(20),
 
6288
f_charbig VARCHAR(1000)
 
6289
 
 
6290
)
 
6291
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
6292
(PARTITION parta VALUES LESS THAN (0),
 
6293
PARTITION partb VALUES LESS THAN (5),
 
6294
PARTITION partc VALUES LESS THAN (10),
 
6295
PARTITION partd VALUES LESS THAN (2147483646));
 
6296
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6297
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6298
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6299
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
6300
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6301
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6302
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6303
# Start usability test (inc/partition_check.inc)
 
6304
create_command
 
6305
SHOW CREATE TABLE t1;
 
6306
Table   Create Table
 
6307
t1      CREATE TABLE `t1` (
 
6308
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
6309
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
6310
  `f_char1` char(20) DEFAULT NULL,
 
6311
  `f_char2` char(20) DEFAULT NULL,
 
6312
  `f_charbig` varchar(1000) DEFAULT NULL,
 
6313
  PRIMARY KEY (`f_int2`,`f_int1`)
 
6314
) ENGINE=InnoDB 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 = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
6315
 
 
6316
# check prerequisites-1 success:    1
 
6317
# check COUNT(*) success:    1
 
6318
# check MIN/MAX(f_int1) success:    1
 
6319
# check MIN/MAX(f_int2) success:    1
 
6320
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6321
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6322
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6323
WHERE f_int1 IN (2,3);
 
6324
ERROR 23000: Can't write; duplicate key in table 't1'
 
6325
# check prerequisites-3 success:    1
 
6326
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
6327
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6328
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6329
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6330
WHERE f_int1 IN (2,3);
 
6331
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6332
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6333
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6334
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6335
WHERE f_int1 IN (2,3);
 
6336
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6337
# check read via f_int1 success: 1
 
6338
# check read via f_int2 success: 1
 
6339
        
 
6340
# check multiple-1 success:     1
 
6341
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6342
        
 
6343
# check multiple-2 success:     1
 
6344
INSERT INTO t1 SELECT * FROM t0_template
 
6345
WHERE MOD(f_int1,3) = 0;
 
6346
        
 
6347
# check multiple-3 success:     1
 
6348
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6349
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6350
AND @max_row_div2 + @max_row_div4;
 
6351
        
 
6352
# check multiple-4 success:     1
 
6353
DELETE FROM t1
 
6354
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6355
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6356
        
 
6357
# check multiple-5 success:     1
 
6358
SELECT COUNT(*) INTO @try_count FROM t0_template
 
6359
WHERE MOD(f_int1,3) = 0
 
6360
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6361
SELECT COUNT(*) INTO @clash_count
 
6362
FROM t1 INNER JOIN t0_template USING(f_int1)
 
6363
WHERE MOD(f_int1,3) = 0
 
6364
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6365
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6366
INSERT INTO t1
 
6367
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6368
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6369
f_charbig = '#SINGLE#';
 
6370
        
 
6371
# check single-1 success:       1
 
6372
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6373
INSERT INTO t1
 
6374
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6375
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6376
f_charbig = '#SINGLE#';
 
6377
        
 
6378
# check single-2 success:       1
 
6379
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6380
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6381
UPDATE t1 SET f_int1 = @cur_value2
 
6382
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6383
        
 
6384
# check single-3 success:       1
 
6385
SET @cur_value1= -1;
 
6386
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6387
UPDATE t1 SET f_int1 = @cur_value1
 
6388
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6389
        
 
6390
# check single-4 success:       1
 
6391
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6392
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6393
        
 
6394
# check single-5 success:       1
 
6395
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6396
        
 
6397
# check single-6 success:       1
 
6398
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6399
        
 
6400
# check single-7 success:       1
 
6401
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6402
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6403
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6404
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6405
f_charbig = '#NULL#';
 
6406
INSERT INTO t1
 
6407
SET f_int1 = NULL , f_int2 = -@max_row,
 
6408
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6409
f_charbig = '#NULL#';
 
6410
ERROR 23000: Column 'f_int1' cannot be null
 
6411
# check null success:    1
 
6412
DELETE FROM t1
 
6413
WHERE f_int1 = 0 AND f_int2 = 0
 
6414
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6415
AND f_charbig = '#NULL#';
 
6416
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6417
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6418
   FROM t0_template source_tab
 
6419
WHERE MOD(f_int1,3) = 0
 
6420
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
6421
ON DUPLICATE KEY
 
6422
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
6423
f_int2 = 2 * @max_row + source_tab.f_int1,
 
6424
f_charbig = 'was updated';
 
6425
        
 
6426
# check unique-1-a success:     1
 
6427
        
 
6428
# check unique-1-b success:     1
 
6429
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6432
f_charbig = CONCAT('===',f_char1,'===')
 
6433
WHERE f_charbig = 'was updated';
 
6434
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6435
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
6436
   FROM t0_template source_tab
 
6437
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6438
        
 
6439
# check replace success:        1
 
6440
DELETE FROM t1
 
6441
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
6442
DELETE FROM t1
 
6443
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
6444
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
6445
UPDATE t1 SET f_int2 = f_int1,
 
6446
f_char1 = CAST(f_int1 AS CHAR),
 
6447
f_char2 = CAST(f_int1 AS CHAR),
 
6448
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
6449
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
6450
SET AUTOCOMMIT= 0;
 
6451
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6452
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6453
FROM t0_template source_tab
 
6454
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6455
        
 
6456
# check transactions-1 success:         1
 
6457
COMMIT WORK;
 
6458
        
 
6459
# check transactions-2 success:         1
 
6460
ROLLBACK WORK;
 
6461
        
 
6462
# check transactions-3 success:         1
 
6463
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6464
COMMIT WORK;
 
6465
ROLLBACK WORK;
 
6466
        
 
6467
# check transactions-4 success:         1
 
6468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6469
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6470
FROM t0_template source_tab
 
6471
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6472
        
 
6473
# check transactions-5 success:         1
 
6474
ROLLBACK WORK;
 
6475
        
 
6476
# check transactions-6 success:         1
 
6477
# INFO: Storage engine used for t1 seems to be transactional.
 
6478
COMMIT;
 
6479
        
 
6480
# check transactions-7 success:         1
 
6481
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6482
COMMIT WORK;
 
6483
SET @@session.sql_mode = 'traditional';
 
6484
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6485
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6486
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6487
'', '', 'was inserted' FROM t0_template
 
6488
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6489
ERROR 22012: Division by 0
 
6490
COMMIT;
 
6491
        
 
6492
# check transactions-8 success:         1
 
6493
# INFO: Storage engine used for t1 seems to be able to revert
 
6494
#       changes made by the failing statement.
 
6495
SET @@session.sql_mode = '';
 
6496
SET AUTOCOMMIT= 1;
 
6497
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6498
COMMIT WORK;
 
6499
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6500
        
 
6501
# check special-1 success:      1
 
6502
UPDATE t1 SET f_charbig = '';
 
6503
        
 
6504
# check special-2 success:      1
 
6505
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6506
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6507
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6510
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6511
'just inserted' FROM t0_template
 
6512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6513
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6514
BEGIN
 
6515
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6516
f_charbig = 'updated by trigger'
 
6517
      WHERE f_int1 = new.f_int1;
 
6518
END|
 
6519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6520
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6522
        
 
6523
# check trigger-1 success:      1
 
6524
DROP TRIGGER trg_1;
 
6525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6527
f_charbig = 'just inserted'
 
6528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6529
DELETE FROM t0_aux
 
6530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6533
'just inserted' FROM t0_template
 
6534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6535
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6536
BEGIN
 
6537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6538
f_charbig = 'updated by trigger'
 
6539
      WHERE f_int1 = new.f_int1;
 
6540
END|
 
6541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6542
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6544
        
 
6545
# check trigger-2 success:      1
 
6546
DROP TRIGGER trg_1;
 
6547
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6548
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6549
f_charbig = 'just inserted'
 
6550
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6551
DELETE FROM t0_aux
 
6552
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6553
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6554
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6555
'just inserted' FROM t0_template
 
6556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6557
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6558
BEGIN
 
6559
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6560
f_charbig = 'updated by trigger'
 
6561
      WHERE f_int1 = new.f_int1;
 
6562
END|
 
6563
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6564
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6565
        
 
6566
# check trigger-3 success:      1
 
6567
DROP TRIGGER trg_1;
 
6568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6570
f_charbig = 'just inserted'
 
6571
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6572
DELETE FROM t0_aux
 
6573
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6575
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6576
'just inserted' FROM t0_template
 
6577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6578
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6579
BEGIN
 
6580
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6581
f_charbig = 'updated by trigger'
 
6582
      WHERE f_int1 = - old.f_int1;
 
6583
END|
 
6584
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6585
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6586
        
 
6587
# check trigger-4 success:      1
 
6588
DROP TRIGGER trg_1;
 
6589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6591
f_charbig = 'just inserted'
 
6592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6593
DELETE FROM t0_aux
 
6594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6596
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6597
'just inserted' FROM t0_template
 
6598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6599
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6600
BEGIN
 
6601
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6602
f_charbig = 'updated by trigger'
 
6603
      WHERE f_int1 = new.f_int1;
 
6604
END|
 
6605
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6606
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6607
        
 
6608
# check trigger-5 success:      1
 
6609
DROP TRIGGER trg_1;
 
6610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6612
f_charbig = 'just inserted'
 
6613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6614
DELETE FROM t0_aux
 
6615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6618
'just inserted' FROM t0_template
 
6619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6620
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6621
BEGIN
 
6622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6623
f_charbig = 'updated by trigger'
 
6624
      WHERE f_int1 = - old.f_int1;
 
6625
END|
 
6626
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6627
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6628
        
 
6629
# check trigger-6 success:      1
 
6630
DROP TRIGGER trg_1;
 
6631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6633
f_charbig = 'just inserted'
 
6634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6635
DELETE FROM t0_aux
 
6636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6639
'just inserted' FROM t0_template
 
6640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6641
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6642
BEGIN
 
6643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6644
f_charbig = 'updated by trigger'
 
6645
      WHERE f_int1 = - old.f_int1;
 
6646
END|
 
6647
DELETE FROM t0_aux
 
6648
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6649
        
 
6650
# check trigger-7 success:      1
 
6651
DROP TRIGGER trg_1;
 
6652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6654
f_charbig = 'just inserted'
 
6655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6656
DELETE FROM t0_aux
 
6657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6660
'just inserted' FROM t0_template
 
6661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6662
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6663
BEGIN
 
6664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6665
f_charbig = 'updated by trigger'
 
6666
      WHERE f_int1 = - old.f_int1;
 
6667
END|
 
6668
DELETE FROM t0_aux
 
6669
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6670
        
 
6671
# check trigger-8 success:      1
 
6672
DROP TRIGGER trg_1;
 
6673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6675
f_charbig = 'just inserted'
 
6676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6677
DELETE FROM t0_aux
 
6678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6679
DELETE FROM t1
 
6680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6681
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6682
BEGIN
 
6683
SET new.f_int1 = old.f_int1 + @max_row,
 
6684
new.f_int2 = old.f_int2 - @max_row,
 
6685
new.f_charbig = '####updated per update trigger####';
 
6686
END|
 
6687
UPDATE t1
 
6688
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6689
f_charbig = '####updated per update statement itself####';
 
6690
        
 
6691
# check trigger-9 success:      1
 
6692
DROP TRIGGER trg_2;
 
6693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6695
f_charbig = CONCAT('===',f_char1,'===');
 
6696
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6697
BEGIN
 
6698
SET new.f_int1 = new.f_int1 + @max_row,
 
6699
new.f_int2 = new.f_int2 - @max_row,
 
6700
new.f_charbig = '####updated per update trigger####';
 
6701
END|
 
6702
UPDATE t1
 
6703
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6704
f_charbig = '####updated per update statement itself####';
 
6705
        
 
6706
# check trigger-10 success:     1
 
6707
DROP TRIGGER trg_2;
 
6708
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6709
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6710
f_charbig = CONCAT('===',f_char1,'===');
 
6711
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6712
BEGIN
 
6713
SET new.f_int1 = @my_max1 + @counter,
 
6714
new.f_int2 = @my_min2 - @counter,
 
6715
new.f_charbig = '####updated per insert trigger####';
 
6716
SET @counter = @counter + 1;
 
6717
END|
 
6718
SET @counter = 1;
 
6719
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6720
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6721
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6722
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6724
ORDER BY f_int1;
 
6725
DROP TRIGGER trg_3;
 
6726
        
 
6727
# check trigger-11 success:     1
 
6728
DELETE FROM t1
 
6729
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6730
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6731
AND f_charbig = '####updated per insert trigger####';
 
6732
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6733
BEGIN
 
6734
SET new.f_int1 = @my_max1 + @counter,
 
6735
new.f_int2 = @my_min2 - @counter,
 
6736
new.f_charbig = '####updated per insert trigger####';
 
6737
SET @counter = @counter + 1;
 
6738
END|
 
6739
SET @counter = 1;
 
6740
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6741
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6742
SELECT CAST(f_int1 AS CHAR),
 
6743
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6745
ORDER BY f_int1;
 
6746
DROP TRIGGER trg_3;
 
6747
        
 
6748
# check trigger-12 success:     1
 
6749
DELETE FROM t1
 
6750
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6751
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6752
AND f_charbig = '####updated per insert trigger####';
 
6753
ANALYZE  TABLE t1;
 
6754
Table   Op      Msg_type        Msg_text
 
6755
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
6756
CHECK    TABLE t1 EXTENDED;
 
6757
Table   Op      Msg_type        Msg_text
 
6758
test.t1 check   note    The storage engine for the table doesn't support check
 
6759
CHECKSUM TABLE t1 EXTENDED;
 
6760
Table   Checksum
 
6761
test.t1 <some_value>
 
6762
OPTIMIZE TABLE t1;
 
6763
Table   Op      Msg_type        Msg_text
 
6764
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
6765
# check layout success:    1
 
6766
REPAIR   TABLE t1 EXTENDED;
 
6767
Table   Op      Msg_type        Msg_text
 
6768
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6769
# check layout success:    1
 
6770
TRUNCATE t1;
 
6771
        
 
6772
# check TRUNCATE success:       1
 
6773
# check layout success:    1
 
6774
# End usability test (inc/partition_check.inc)
 
6775
DROP TABLE t1;
 
6776
CREATE TABLE t1 (
 
6777
f_int1 INTEGER,
 
6778
f_int2 INTEGER,
 
6779
f_char1 CHAR(20),
 
6780
f_char2 CHAR(20),
 
6781
f_charbig VARCHAR(1000)
 
6782
 
 
6783
)
 
6784
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
6785
(PARTITION part1 VALUES LESS THAN (0)
 
6786
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
6787
PARTITION part2 VALUES LESS THAN (5)
 
6788
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
6789
PARTITION part3 VALUES LESS THAN (10)
 
6790
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
6791
PARTITION part4 VALUES LESS THAN (2147483646)
 
6792
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
6793
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6794
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6795
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6796
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
6797
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6798
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6799
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6800
# Start usability test (inc/partition_check.inc)
 
6801
create_command
 
6802
SHOW CREATE TABLE t1;
 
6803
Table   Create Table
 
6804
t1      CREATE TABLE `t1` (
 
6805
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
6806
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
6807
  `f_char1` char(20) DEFAULT NULL,
 
6808
  `f_char2` char(20) DEFAULT NULL,
 
6809
  `f_charbig` varchar(1000) DEFAULT NULL,
 
6810
  PRIMARY KEY (`f_int2`,`f_int1`)
 
6811
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
6812
 
 
6813
# check prerequisites-1 success:    1
 
6814
# check COUNT(*) success:    1
 
6815
# check MIN/MAX(f_int1) success:    1
 
6816
# check MIN/MAX(f_int2) success:    1
 
6817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6818
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6819
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6820
WHERE f_int1 IN (2,3);
 
6821
ERROR 23000: Can't write; duplicate key in table 't1'
 
6822
# check prerequisites-3 success:    1
 
6823
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
6824
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6825
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6826
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6827
WHERE f_int1 IN (2,3);
 
6828
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6829
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6830
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6831
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6832
WHERE f_int1 IN (2,3);
 
6833
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6834
# check read via f_int1 success: 1
 
6835
# check read via f_int2 success: 1
 
6836
        
 
6837
# check multiple-1 success:     1
 
6838
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6839
        
 
6840
# check multiple-2 success:     1
 
6841
INSERT INTO t1 SELECT * FROM t0_template
 
6842
WHERE MOD(f_int1,3) = 0;
 
6843
        
 
6844
# check multiple-3 success:     1
 
6845
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6846
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6847
AND @max_row_div2 + @max_row_div4;
 
6848
        
 
6849
# check multiple-4 success:     1
 
6850
DELETE FROM t1
 
6851
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6852
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6853
        
 
6854
# check multiple-5 success:     1
 
6855
SELECT COUNT(*) INTO @try_count FROM t0_template
 
6856
WHERE MOD(f_int1,3) = 0
 
6857
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6858
SELECT COUNT(*) INTO @clash_count
 
6859
FROM t1 INNER JOIN t0_template USING(f_int1)
 
6860
WHERE MOD(f_int1,3) = 0
 
6861
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6862
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6863
INSERT INTO t1
 
6864
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6865
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6866
f_charbig = '#SINGLE#';
 
6867
        
 
6868
# check single-1 success:       1
 
6869
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6870
INSERT INTO t1
 
6871
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6872
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6873
f_charbig = '#SINGLE#';
 
6874
        
 
6875
# check single-2 success:       1
 
6876
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6877
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6878
UPDATE t1 SET f_int1 = @cur_value2
 
6879
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6880
        
 
6881
# check single-3 success:       1
 
6882
SET @cur_value1= -1;
 
6883
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6884
UPDATE t1 SET f_int1 = @cur_value1
 
6885
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6886
        
 
6887
# check single-4 success:       1
 
6888
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6889
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6890
        
 
6891
# check single-5 success:       1
 
6892
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6893
        
 
6894
# check single-6 success:       1
 
6895
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6896
ERROR HY000: Table has no partition for value 2147483647
 
6897
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6898
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6899
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6900
f_charbig = '#NULL#';
 
6901
INSERT INTO t1
 
6902
SET f_int1 = NULL , f_int2 = -@max_row,
 
6903
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6904
f_charbig = '#NULL#';
 
6905
ERROR 23000: Column 'f_int1' cannot be null
 
6906
# check null success:    1
 
6907
DELETE FROM t1
 
6908
WHERE f_int1 = 0 AND f_int2 = 0
 
6909
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6910
AND f_charbig = '#NULL#';
 
6911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6912
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6913
   FROM t0_template source_tab
 
6914
WHERE MOD(f_int1,3) = 0
 
6915
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
6916
ON DUPLICATE KEY
 
6917
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
6918
f_int2 = 2 * @max_row + source_tab.f_int1,
 
6919
f_charbig = 'was updated';
 
6920
        
 
6921
# check unique-1-a success:     1
 
6922
        
 
6923
# check unique-1-b success:     1
 
6924
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6927
f_charbig = CONCAT('===',f_char1,'===')
 
6928
WHERE f_charbig = 'was updated';
 
6929
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6930
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
6931
   FROM t0_template source_tab
 
6932
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6933
        
 
6934
# check replace success:        1
 
6935
DELETE FROM t1
 
6936
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
6937
DELETE FROM t1
 
6938
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
6939
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
6940
UPDATE t1 SET f_int2 = f_int1,
 
6941
f_char1 = CAST(f_int1 AS CHAR),
 
6942
f_char2 = CAST(f_int1 AS CHAR),
 
6943
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
6944
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
6945
SET AUTOCOMMIT= 0;
 
6946
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6947
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6948
FROM t0_template source_tab
 
6949
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6950
        
 
6951
# check transactions-1 success:         1
 
6952
COMMIT WORK;
 
6953
        
 
6954
# check transactions-2 success:         1
 
6955
ROLLBACK WORK;
 
6956
        
 
6957
# check transactions-3 success:         1
 
6958
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6959
COMMIT WORK;
 
6960
ROLLBACK WORK;
 
6961
        
 
6962
# check transactions-4 success:         1
 
6963
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6964
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6965
FROM t0_template source_tab
 
6966
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6967
        
 
6968
# check transactions-5 success:         1
 
6969
ROLLBACK WORK;
 
6970
        
 
6971
# check transactions-6 success:         1
 
6972
# INFO: Storage engine used for t1 seems to be transactional.
 
6973
COMMIT;
 
6974
        
 
6975
# check transactions-7 success:         1
 
6976
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6977
COMMIT WORK;
 
6978
SET @@session.sql_mode = 'traditional';
 
6979
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6980
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6981
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6982
'', '', 'was inserted' FROM t0_template
 
6983
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6984
ERROR 22012: Division by 0
 
6985
COMMIT;
 
6986
        
 
6987
# check transactions-8 success:         1
 
6988
# INFO: Storage engine used for t1 seems to be able to revert
 
6989
#       changes made by the failing statement.
 
6990
SET @@session.sql_mode = '';
 
6991
SET AUTOCOMMIT= 1;
 
6992
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6993
COMMIT WORK;
 
6994
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6995
        
 
6996
# check special-1 success:      1
 
6997
UPDATE t1 SET f_charbig = '';
 
6998
        
 
6999
# check special-2 success:      1
 
7000
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7001
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7002
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7004
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7005
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7006
'just inserted' FROM t0_template
 
7007
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7008
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7009
BEGIN
 
7010
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7011
f_charbig = 'updated by trigger'
 
7012
      WHERE f_int1 = new.f_int1;
 
7013
END|
 
7014
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7015
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7017
        
 
7018
# check trigger-1 success:      1
 
7019
DROP TRIGGER trg_1;
 
7020
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7021
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7022
f_charbig = 'just inserted'
 
7023
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7024
DELETE FROM t0_aux
 
7025
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7027
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7028
'just inserted' FROM t0_template
 
7029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7030
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7031
BEGIN
 
7032
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7033
f_charbig = 'updated by trigger'
 
7034
      WHERE f_int1 = new.f_int1;
 
7035
END|
 
7036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7037
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7039
        
 
7040
# check trigger-2 success:      1
 
7041
DROP TRIGGER trg_1;
 
7042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7044
f_charbig = 'just inserted'
 
7045
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7046
DELETE FROM t0_aux
 
7047
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7049
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7050
'just inserted' FROM t0_template
 
7051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7052
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7053
BEGIN
 
7054
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7055
f_charbig = 'updated by trigger'
 
7056
      WHERE f_int1 = new.f_int1;
 
7057
END|
 
7058
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7059
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7060
        
 
7061
# check trigger-3 success:      1
 
7062
DROP TRIGGER trg_1;
 
7063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7065
f_charbig = 'just inserted'
 
7066
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7067
DELETE FROM t0_aux
 
7068
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7071
'just inserted' FROM t0_template
 
7072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7073
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7074
BEGIN
 
7075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7076
f_charbig = 'updated by trigger'
 
7077
      WHERE f_int1 = - old.f_int1;
 
7078
END|
 
7079
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7080
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7081
        
 
7082
# check trigger-4 success:      1
 
7083
DROP TRIGGER trg_1;
 
7084
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7085
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7086
f_charbig = 'just inserted'
 
7087
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7088
DELETE FROM t0_aux
 
7089
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7090
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7091
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7092
'just inserted' FROM t0_template
 
7093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7094
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7095
BEGIN
 
7096
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7097
f_charbig = 'updated by trigger'
 
7098
      WHERE f_int1 = new.f_int1;
 
7099
END|
 
7100
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7101
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7102
        
 
7103
# check trigger-5 success:      1
 
7104
DROP TRIGGER trg_1;
 
7105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7107
f_charbig = 'just inserted'
 
7108
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7109
DELETE FROM t0_aux
 
7110
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7111
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7112
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7113
'just inserted' FROM t0_template
 
7114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7115
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7116
BEGIN
 
7117
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7118
f_charbig = 'updated by trigger'
 
7119
      WHERE f_int1 = - old.f_int1;
 
7120
END|
 
7121
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7122
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7123
        
 
7124
# check trigger-6 success:      1
 
7125
DROP TRIGGER trg_1;
 
7126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7128
f_charbig = 'just inserted'
 
7129
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7130
DELETE FROM t0_aux
 
7131
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7133
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7134
'just inserted' FROM t0_template
 
7135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7136
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7137
BEGIN
 
7138
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7139
f_charbig = 'updated by trigger'
 
7140
      WHERE f_int1 = - old.f_int1;
 
7141
END|
 
7142
DELETE FROM t0_aux
 
7143
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7144
        
 
7145
# check trigger-7 success:      1
 
7146
DROP TRIGGER trg_1;
 
7147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7149
f_charbig = 'just inserted'
 
7150
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7151
DELETE FROM t0_aux
 
7152
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7155
'just inserted' FROM t0_template
 
7156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7157
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7158
BEGIN
 
7159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7160
f_charbig = 'updated by trigger'
 
7161
      WHERE f_int1 = - old.f_int1;
 
7162
END|
 
7163
DELETE FROM t0_aux
 
7164
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7165
        
 
7166
# check trigger-8 success:      1
 
7167
DROP TRIGGER trg_1;
 
7168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7169
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7170
f_charbig = 'just inserted'
 
7171
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7172
DELETE FROM t0_aux
 
7173
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7174
DELETE FROM t1
 
7175
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7176
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7177
BEGIN
 
7178
SET new.f_int1 = old.f_int1 + @max_row,
 
7179
new.f_int2 = old.f_int2 - @max_row,
 
7180
new.f_charbig = '####updated per update trigger####';
 
7181
END|
 
7182
UPDATE t1
 
7183
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7184
f_charbig = '####updated per update statement itself####';
 
7185
        
 
7186
# check trigger-9 success:      1
 
7187
DROP TRIGGER trg_2;
 
7188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7190
f_charbig = CONCAT('===',f_char1,'===');
 
7191
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7192
BEGIN
 
7193
SET new.f_int1 = new.f_int1 + @max_row,
 
7194
new.f_int2 = new.f_int2 - @max_row,
 
7195
new.f_charbig = '####updated per update trigger####';
 
7196
END|
 
7197
UPDATE t1
 
7198
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7199
f_charbig = '####updated per update statement itself####';
 
7200
        
 
7201
# check trigger-10 success:     1
 
7202
DROP TRIGGER trg_2;
 
7203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7205
f_charbig = CONCAT('===',f_char1,'===');
 
7206
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7207
BEGIN
 
7208
SET new.f_int1 = @my_max1 + @counter,
 
7209
new.f_int2 = @my_min2 - @counter,
 
7210
new.f_charbig = '####updated per insert trigger####';
 
7211
SET @counter = @counter + 1;
 
7212
END|
 
7213
SET @counter = 1;
 
7214
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7215
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7216
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7217
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7219
ORDER BY f_int1;
 
7220
DROP TRIGGER trg_3;
 
7221
        
 
7222
# check trigger-11 success:     1
 
7223
DELETE FROM t1
 
7224
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7225
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7226
AND f_charbig = '####updated per insert trigger####';
 
7227
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7228
BEGIN
 
7229
SET new.f_int1 = @my_max1 + @counter,
 
7230
new.f_int2 = @my_min2 - @counter,
 
7231
new.f_charbig = '####updated per insert trigger####';
 
7232
SET @counter = @counter + 1;
 
7233
END|
 
7234
SET @counter = 1;
 
7235
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7236
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7237
SELECT CAST(f_int1 AS CHAR),
 
7238
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7239
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7240
ORDER BY f_int1;
 
7241
DROP TRIGGER trg_3;
 
7242
        
 
7243
# check trigger-12 success:     1
 
7244
DELETE FROM t1
 
7245
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7246
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7247
AND f_charbig = '####updated per insert trigger####';
 
7248
ANALYZE  TABLE t1;
 
7249
Table   Op      Msg_type        Msg_text
 
7250
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
7251
CHECK    TABLE t1 EXTENDED;
 
7252
Table   Op      Msg_type        Msg_text
 
7253
test.t1 check   note    The storage engine for the table doesn't support check
 
7254
CHECKSUM TABLE t1 EXTENDED;
 
7255
Table   Checksum
 
7256
test.t1 <some_value>
 
7257
OPTIMIZE TABLE t1;
 
7258
Table   Op      Msg_type        Msg_text
 
7259
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
7260
# check layout success:    1
 
7261
REPAIR   TABLE t1 EXTENDED;
 
7262
Table   Op      Msg_type        Msg_text
 
7263
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7264
# check layout success:    1
 
7265
TRUNCATE t1;
 
7266
        
 
7267
# check TRUNCATE success:       1
 
7268
# check layout success:    1
 
7269
# End usability test (inc/partition_check.inc)
 
7270
DROP TABLE t1;
 
7271
CREATE TABLE t1 (
 
7272
f_int1 INTEGER,
 
7273
f_int2 INTEGER,
 
7274
f_char1 CHAR(20),
 
7275
f_char2 CHAR(20),
 
7276
f_charbig VARCHAR(1000)
 
7277
 
 
7278
)
 
7279
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
7280
(PARTITION part1 VALUES IN (0)
 
7281
(SUBPARTITION sp11, SUBPARTITION sp12),
 
7282
PARTITION part2 VALUES IN (1)
 
7283
(SUBPARTITION sp21, SUBPARTITION sp22),
 
7284
PARTITION part3 VALUES IN (2)
 
7285
(SUBPARTITION sp31, SUBPARTITION sp32),
 
7286
PARTITION part4 VALUES IN (NULL)
 
7287
(SUBPARTITION sp41, SUBPARTITION sp42));
 
7288
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7289
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7290
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7291
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
7292
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7293
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7294
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7295
# Start usability test (inc/partition_check.inc)
 
7296
create_command
 
7297
SHOW CREATE TABLE t1;
 
7298
Table   Create Table
 
7299
t1      CREATE TABLE `t1` (
 
7300
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
7301
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
7302
  `f_char1` char(20) DEFAULT NULL,
 
7303
  `f_char2` char(20) DEFAULT NULL,
 
7304
  `f_charbig` varchar(1000) DEFAULT NULL,
 
7305
  PRIMARY KEY (`f_int2`,`f_int1`)
 
7306
) ENGINE=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
7307
 
 
7308
# check prerequisites-1 success:    1
 
7309
# check COUNT(*) success:    1
 
7310
# check MIN/MAX(f_int1) success:    1
 
7311
# check MIN/MAX(f_int2) success:    1
 
7312
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7313
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7314
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7315
WHERE f_int1 IN (2,3);
 
7316
ERROR 23000: Can't write; duplicate key in table 't1'
 
7317
# check prerequisites-3 success:    1
 
7318
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7319
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7320
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7321
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7322
WHERE f_int1 IN (2,3);
 
7323
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7324
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7325
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7326
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7327
WHERE f_int1 IN (2,3);
 
7328
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7329
# check read via f_int1 success: 1
 
7330
# check read via f_int2 success: 1
 
7331
        
 
7332
# check multiple-1 success:     1
 
7333
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7334
        
 
7335
# check multiple-2 success:     1
 
7336
INSERT INTO t1 SELECT * FROM t0_template
 
7337
WHERE MOD(f_int1,3) = 0;
 
7338
        
 
7339
# check multiple-3 success:     1
 
7340
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7341
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7342
AND @max_row_div2 + @max_row_div4;
 
7343
        
 
7344
# check multiple-4 success:     1
 
7345
DELETE FROM t1
 
7346
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7347
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7348
        
 
7349
# check multiple-5 success:     1
 
7350
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7351
WHERE MOD(f_int1,3) = 0
 
7352
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7353
SELECT COUNT(*) INTO @clash_count
 
7354
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7355
WHERE MOD(f_int1,3) = 0
 
7356
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7357
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7358
INSERT INTO t1
 
7359
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7360
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7361
f_charbig = '#SINGLE#';
 
7362
        
 
7363
# check single-1 success:       1
 
7364
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7365
INSERT INTO t1
 
7366
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7367
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7368
f_charbig = '#SINGLE#';
 
7369
        
 
7370
# check single-2 success:       1
 
7371
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7372
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7373
UPDATE t1 SET f_int1 = @cur_value2
 
7374
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7375
        
 
7376
# check single-3 success:       1
 
7377
SET @cur_value1= -1;
 
7378
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7379
UPDATE t1 SET f_int1 = @cur_value1
 
7380
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7381
        
 
7382
# check single-4 success:       1
 
7383
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7384
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7385
        
 
7386
# check single-5 success:       1
 
7387
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7388
        
 
7389
# check single-6 success:       1
 
7390
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7391
        
 
7392
# check single-7 success:       1
 
7393
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7394
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7395
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7396
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7397
f_charbig = '#NULL#';
 
7398
INSERT INTO t1
 
7399
SET f_int1 = NULL , f_int2 = -@max_row,
 
7400
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7401
f_charbig = '#NULL#';
 
7402
ERROR 23000: Column 'f_int1' cannot be null
 
7403
# check null success:    1
 
7404
DELETE FROM t1
 
7405
WHERE f_int1 = 0 AND f_int2 = 0
 
7406
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7407
AND f_charbig = '#NULL#';
 
7408
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7409
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7410
   FROM t0_template source_tab
 
7411
WHERE MOD(f_int1,3) = 0
 
7412
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7413
ON DUPLICATE KEY
 
7414
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7415
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7416
f_charbig = 'was updated';
 
7417
        
 
7418
# check unique-1-a success:     1
 
7419
        
 
7420
# check unique-1-b success:     1
 
7421
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7422
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7423
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7424
f_charbig = CONCAT('===',f_char1,'===')
 
7425
WHERE f_charbig = 'was updated';
 
7426
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7427
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7428
   FROM t0_template source_tab
 
7429
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7430
        
 
7431
# check replace success:        1
 
7432
DELETE FROM t1
 
7433
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7434
DELETE FROM t1
 
7435
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7436
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7437
UPDATE t1 SET f_int2 = f_int1,
 
7438
f_char1 = CAST(f_int1 AS CHAR),
 
7439
f_char2 = CAST(f_int1 AS CHAR),
 
7440
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7441
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7442
SET AUTOCOMMIT= 0;
 
7443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7444
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7445
FROM t0_template source_tab
 
7446
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7447
        
 
7448
# check transactions-1 success:         1
 
7449
COMMIT WORK;
 
7450
        
 
7451
# check transactions-2 success:         1
 
7452
ROLLBACK WORK;
 
7453
        
 
7454
# check transactions-3 success:         1
 
7455
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7456
COMMIT WORK;
 
7457
ROLLBACK WORK;
 
7458
        
 
7459
# check transactions-4 success:         1
 
7460
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7461
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7462
FROM t0_template source_tab
 
7463
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7464
        
 
7465
# check transactions-5 success:         1
 
7466
ROLLBACK WORK;
 
7467
        
 
7468
# check transactions-6 success:         1
 
7469
# INFO: Storage engine used for t1 seems to be transactional.
 
7470
COMMIT;
 
7471
        
 
7472
# check transactions-7 success:         1
 
7473
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7474
COMMIT WORK;
 
7475
SET @@session.sql_mode = 'traditional';
 
7476
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7477
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7478
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7479
'', '', 'was inserted' FROM t0_template
 
7480
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7481
ERROR 22012: Division by 0
 
7482
COMMIT;
 
7483
        
 
7484
# check transactions-8 success:         1
 
7485
# INFO: Storage engine used for t1 seems to be able to revert
 
7486
#       changes made by the failing statement.
 
7487
SET @@session.sql_mode = '';
 
7488
SET AUTOCOMMIT= 1;
 
7489
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7490
COMMIT WORK;
 
7491
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7492
        
 
7493
# check special-1 success:      1
 
7494
UPDATE t1 SET f_charbig = '';
 
7495
        
 
7496
# check special-2 success:      1
 
7497
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7498
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7499
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7501
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7502
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7503
'just inserted' FROM t0_template
 
7504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7505
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7506
BEGIN
 
7507
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7508
f_charbig = 'updated by trigger'
 
7509
      WHERE f_int1 = new.f_int1;
 
7510
END|
 
7511
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7512
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7514
        
 
7515
# check trigger-1 success:      1
 
7516
DROP TRIGGER trg_1;
 
7517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7519
f_charbig = 'just inserted'
 
7520
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7521
DELETE FROM t0_aux
 
7522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7525
'just inserted' FROM t0_template
 
7526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7527
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7528
BEGIN
 
7529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7530
f_charbig = 'updated by trigger'
 
7531
      WHERE f_int1 = new.f_int1;
 
7532
END|
 
7533
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7534
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7536
        
 
7537
# check trigger-2 success:      1
 
7538
DROP TRIGGER trg_1;
 
7539
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7540
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7541
f_charbig = 'just inserted'
 
7542
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7543
DELETE FROM t0_aux
 
7544
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7546
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7547
'just inserted' FROM t0_template
 
7548
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7549
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7550
BEGIN
 
7551
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7552
f_charbig = 'updated by trigger'
 
7553
      WHERE f_int1 = new.f_int1;
 
7554
END|
 
7555
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7556
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7557
        
 
7558
# check trigger-3 success:      1
 
7559
DROP TRIGGER trg_1;
 
7560
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7561
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7562
f_charbig = 'just inserted'
 
7563
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7564
DELETE FROM t0_aux
 
7565
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7566
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7567
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7568
'just inserted' FROM t0_template
 
7569
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7570
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7571
BEGIN
 
7572
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7573
f_charbig = 'updated by trigger'
 
7574
      WHERE f_int1 = - old.f_int1;
 
7575
END|
 
7576
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7577
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7578
        
 
7579
# check trigger-4 success:      1
 
7580
DROP TRIGGER trg_1;
 
7581
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7582
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7583
f_charbig = 'just inserted'
 
7584
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7585
DELETE FROM t0_aux
 
7586
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7588
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7589
'just inserted' FROM t0_template
 
7590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7591
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7592
BEGIN
 
7593
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7594
f_charbig = 'updated by trigger'
 
7595
      WHERE f_int1 = new.f_int1;
 
7596
END|
 
7597
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7598
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7599
        
 
7600
# check trigger-5 success:      1
 
7601
DROP TRIGGER trg_1;
 
7602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7604
f_charbig = 'just inserted'
 
7605
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7606
DELETE FROM t0_aux
 
7607
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7608
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7609
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7610
'just inserted' FROM t0_template
 
7611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7612
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7613
BEGIN
 
7614
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7615
f_charbig = 'updated by trigger'
 
7616
      WHERE f_int1 = - old.f_int1;
 
7617
END|
 
7618
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7619
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7620
        
 
7621
# check trigger-6 success:      1
 
7622
DROP TRIGGER trg_1;
 
7623
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7624
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7625
f_charbig = 'just inserted'
 
7626
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7627
DELETE FROM t0_aux
 
7628
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7629
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7630
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7631
'just inserted' FROM t0_template
 
7632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7633
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7634
BEGIN
 
7635
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7636
f_charbig = 'updated by trigger'
 
7637
      WHERE f_int1 = - old.f_int1;
 
7638
END|
 
7639
DELETE FROM t0_aux
 
7640
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7641
        
 
7642
# check trigger-7 success:      1
 
7643
DROP TRIGGER trg_1;
 
7644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7646
f_charbig = 'just inserted'
 
7647
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7648
DELETE FROM t0_aux
 
7649
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7652
'just inserted' FROM t0_template
 
7653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7654
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7655
BEGIN
 
7656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7657
f_charbig = 'updated by trigger'
 
7658
      WHERE f_int1 = - old.f_int1;
 
7659
END|
 
7660
DELETE FROM t0_aux
 
7661
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7662
        
 
7663
# check trigger-8 success:      1
 
7664
DROP TRIGGER trg_1;
 
7665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7667
f_charbig = 'just inserted'
 
7668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7669
DELETE FROM t0_aux
 
7670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7671
DELETE FROM t1
 
7672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7673
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7674
BEGIN
 
7675
SET new.f_int1 = old.f_int1 + @max_row,
 
7676
new.f_int2 = old.f_int2 - @max_row,
 
7677
new.f_charbig = '####updated per update trigger####';
 
7678
END|
 
7679
UPDATE t1
 
7680
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7681
f_charbig = '####updated per update statement itself####';
 
7682
        
 
7683
# check trigger-9 success:      1
 
7684
DROP TRIGGER trg_2;
 
7685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7687
f_charbig = CONCAT('===',f_char1,'===');
 
7688
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7689
BEGIN
 
7690
SET new.f_int1 = new.f_int1 + @max_row,
 
7691
new.f_int2 = new.f_int2 - @max_row,
 
7692
new.f_charbig = '####updated per update trigger####';
 
7693
END|
 
7694
UPDATE t1
 
7695
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7696
f_charbig = '####updated per update statement itself####';
 
7697
        
 
7698
# check trigger-10 success:     1
 
7699
DROP TRIGGER trg_2;
 
7700
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7701
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7702
f_charbig = CONCAT('===',f_char1,'===');
 
7703
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7704
BEGIN
 
7705
SET new.f_int1 = @my_max1 + @counter,
 
7706
new.f_int2 = @my_min2 - @counter,
 
7707
new.f_charbig = '####updated per insert trigger####';
 
7708
SET @counter = @counter + 1;
 
7709
END|
 
7710
SET @counter = 1;
 
7711
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7712
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7713
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7714
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7716
ORDER BY f_int1;
 
7717
DROP TRIGGER trg_3;
 
7718
        
 
7719
# check trigger-11 success:     1
 
7720
DELETE FROM t1
 
7721
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7722
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7723
AND f_charbig = '####updated per insert trigger####';
 
7724
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7725
BEGIN
 
7726
SET new.f_int1 = @my_max1 + @counter,
 
7727
new.f_int2 = @my_min2 - @counter,
 
7728
new.f_charbig = '####updated per insert trigger####';
 
7729
SET @counter = @counter + 1;
 
7730
END|
 
7731
SET @counter = 1;
 
7732
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7733
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7734
SELECT CAST(f_int1 AS CHAR),
 
7735
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7737
ORDER BY f_int1;
 
7738
DROP TRIGGER trg_3;
 
7739
        
 
7740
# check trigger-12 success:     1
 
7741
DELETE FROM t1
 
7742
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7743
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7744
AND f_charbig = '####updated per insert trigger####';
 
7745
ANALYZE  TABLE t1;
 
7746
Table   Op      Msg_type        Msg_text
 
7747
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
7748
CHECK    TABLE t1 EXTENDED;
 
7749
Table   Op      Msg_type        Msg_text
 
7750
test.t1 check   note    The storage engine for the table doesn't support check
 
7751
CHECKSUM TABLE t1 EXTENDED;
 
7752
Table   Checksum
 
7753
test.t1 <some_value>
 
7754
OPTIMIZE TABLE t1;
 
7755
Table   Op      Msg_type        Msg_text
 
7756
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
7757
# check layout success:    1
 
7758
REPAIR   TABLE t1 EXTENDED;
 
7759
Table   Op      Msg_type        Msg_text
 
7760
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7761
# check layout success:    1
 
7762
TRUNCATE t1;
 
7763
        
 
7764
# check TRUNCATE success:       1
 
7765
# check layout success:    1
 
7766
# End usability test (inc/partition_check.inc)
 
7767
DROP TABLE t1;
 
7768
CREATE TABLE t1 (
 
7769
f_int1 INTEGER,
 
7770
f_int2 INTEGER,
 
7771
f_char1 CHAR(20),
 
7772
f_char2 CHAR(20),
 
7773
f_charbig VARCHAR(1000)
 
7774
 
 
7775
)
 
7776
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7777
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
7778
(PARTITION part1 VALUES IN (0),
 
7779
 PARTITION part2 VALUES IN (1),
 
7780
 PARTITION part3 VALUES IN (NULL));
 
7781
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7782
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7783
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7784
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
7785
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7786
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7787
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7788
# Start usability test (inc/partition_check.inc)
 
7789
create_command
 
7790
SHOW CREATE TABLE t1;
 
7791
Table   Create Table
 
7792
t1      CREATE TABLE `t1` (
 
7793
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
7794
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
7795
  `f_char1` char(20) DEFAULT NULL,
 
7796
  `f_char2` char(20) DEFAULT NULL,
 
7797
  `f_charbig` varchar(1000) DEFAULT NULL,
 
7798
  PRIMARY KEY (`f_int2`,`f_int1`)
 
7799
) ENGINE=InnoDB 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 = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
7800
 
 
7801
# check prerequisites-1 success:    1
 
7802
# check COUNT(*) success:    1
 
7803
# check MIN/MAX(f_int1) success:    1
 
7804
# check MIN/MAX(f_int2) success:    1
 
7805
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7806
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7807
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7808
WHERE f_int1 IN (2,3);
 
7809
ERROR 23000: Can't write; duplicate key in table 't1'
 
7810
# check prerequisites-3 success:    1
 
7811
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7812
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7813
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7814
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7815
WHERE f_int1 IN (2,3);
 
7816
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7818
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7819
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7820
WHERE f_int1 IN (2,3);
 
7821
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7822
# check read via f_int1 success: 1
 
7823
# check read via f_int2 success: 1
 
7824
        
 
7825
# check multiple-1 success:     1
 
7826
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7827
        
 
7828
# check multiple-2 success:     1
 
7829
INSERT INTO t1 SELECT * FROM t0_template
 
7830
WHERE MOD(f_int1,3) = 0;
 
7831
        
 
7832
# check multiple-3 success:     1
 
7833
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7834
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7835
AND @max_row_div2 + @max_row_div4;
 
7836
        
 
7837
# check multiple-4 success:     1
 
7838
DELETE FROM t1
 
7839
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7840
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7841
        
 
7842
# check multiple-5 success:     1
 
7843
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7844
WHERE MOD(f_int1,3) = 0
 
7845
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7846
SELECT COUNT(*) INTO @clash_count
 
7847
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7848
WHERE MOD(f_int1,3) = 0
 
7849
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7850
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7851
INSERT INTO t1
 
7852
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7853
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7854
f_charbig = '#SINGLE#';
 
7855
        
 
7856
# check single-1 success:       1
 
7857
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7858
INSERT INTO t1
 
7859
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7860
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7861
f_charbig = '#SINGLE#';
 
7862
        
 
7863
# check single-2 success:       1
 
7864
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7865
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7866
UPDATE t1 SET f_int1 = @cur_value2
 
7867
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7868
        
 
7869
# check single-3 success:       1
 
7870
SET @cur_value1= -1;
 
7871
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7872
UPDATE t1 SET f_int1 = @cur_value1
 
7873
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7874
        
 
7875
# check single-4 success:       1
 
7876
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7877
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7878
        
 
7879
# check single-5 success:       1
 
7880
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7881
        
 
7882
# check single-6 success:       1
 
7883
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7884
        
 
7885
# check single-7 success:       1
 
7886
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7887
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7888
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7889
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7890
f_charbig = '#NULL#';
 
7891
INSERT INTO t1
 
7892
SET f_int1 = NULL , f_int2 = -@max_row,
 
7893
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7894
f_charbig = '#NULL#';
 
7895
ERROR 23000: Column 'f_int1' cannot be null
 
7896
# check null success:    1
 
7897
DELETE FROM t1
 
7898
WHERE f_int1 = 0 AND f_int2 = 0
 
7899
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7900
AND f_charbig = '#NULL#';
 
7901
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7902
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7903
   FROM t0_template source_tab
 
7904
WHERE MOD(f_int1,3) = 0
 
7905
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7906
ON DUPLICATE KEY
 
7907
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7908
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7909
f_charbig = 'was updated';
 
7910
        
 
7911
# check unique-1-a success:     1
 
7912
        
 
7913
# check unique-1-b success:     1
 
7914
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7915
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7916
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7917
f_charbig = CONCAT('===',f_char1,'===')
 
7918
WHERE f_charbig = 'was updated';
 
7919
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7920
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7921
   FROM t0_template source_tab
 
7922
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7923
        
 
7924
# check replace success:        1
 
7925
DELETE FROM t1
 
7926
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7927
DELETE FROM t1
 
7928
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7929
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7930
UPDATE t1 SET f_int2 = f_int1,
 
7931
f_char1 = CAST(f_int1 AS CHAR),
 
7932
f_char2 = CAST(f_int1 AS CHAR),
 
7933
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7934
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7935
SET AUTOCOMMIT= 0;
 
7936
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7937
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7938
FROM t0_template source_tab
 
7939
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7940
        
 
7941
# check transactions-1 success:         1
 
7942
COMMIT WORK;
 
7943
        
 
7944
# check transactions-2 success:         1
 
7945
ROLLBACK WORK;
 
7946
        
 
7947
# check transactions-3 success:         1
 
7948
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7949
COMMIT WORK;
 
7950
ROLLBACK WORK;
 
7951
        
 
7952
# check transactions-4 success:         1
 
7953
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7954
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7955
FROM t0_template source_tab
 
7956
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7957
        
 
7958
# check transactions-5 success:         1
 
7959
ROLLBACK WORK;
 
7960
        
 
7961
# check transactions-6 success:         1
 
7962
# INFO: Storage engine used for t1 seems to be transactional.
 
7963
COMMIT;
 
7964
        
 
7965
# check transactions-7 success:         1
 
7966
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7967
COMMIT WORK;
 
7968
SET @@session.sql_mode = 'traditional';
 
7969
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7970
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7971
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7972
'', '', 'was inserted' FROM t0_template
 
7973
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7974
ERROR 22012: Division by 0
 
7975
COMMIT;
 
7976
        
 
7977
# check transactions-8 success:         1
 
7978
# INFO: Storage engine used for t1 seems to be able to revert
 
7979
#       changes made by the failing statement.
 
7980
SET @@session.sql_mode = '';
 
7981
SET AUTOCOMMIT= 1;
 
7982
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7983
COMMIT WORK;
 
7984
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7985
        
 
7986
# check special-1 success:      1
 
7987
UPDATE t1 SET f_charbig = '';
 
7988
        
 
7989
# check special-2 success:      1
 
7990
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7991
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7992
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7995
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7996
'just inserted' FROM t0_template
 
7997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7998
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7999
BEGIN
 
8000
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8001
f_charbig = 'updated by trigger'
 
8002
      WHERE f_int1 = new.f_int1;
 
8003
END|
 
8004
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8005
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8006
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8007
        
 
8008
# check trigger-1 success:      1
 
8009
DROP TRIGGER trg_1;
 
8010
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8011
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8012
f_charbig = 'just inserted'
 
8013
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8014
DELETE FROM t0_aux
 
8015
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8018
'just inserted' FROM t0_template
 
8019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8020
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8021
BEGIN
 
8022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8023
f_charbig = 'updated by trigger'
 
8024
      WHERE f_int1 = new.f_int1;
 
8025
END|
 
8026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8027
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8029
        
 
8030
# check trigger-2 success:      1
 
8031
DROP TRIGGER trg_1;
 
8032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8034
f_charbig = 'just inserted'
 
8035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8036
DELETE FROM t0_aux
 
8037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8039
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8040
'just inserted' FROM t0_template
 
8041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8042
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8043
BEGIN
 
8044
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8045
f_charbig = 'updated by trigger'
 
8046
      WHERE f_int1 = new.f_int1;
 
8047
END|
 
8048
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8049
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8050
        
 
8051
# check trigger-3 success:      1
 
8052
DROP TRIGGER trg_1;
 
8053
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8054
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8055
f_charbig = 'just inserted'
 
8056
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8057
DELETE FROM t0_aux
 
8058
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8059
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8060
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8061
'just inserted' FROM t0_template
 
8062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8063
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8064
BEGIN
 
8065
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8066
f_charbig = 'updated by trigger'
 
8067
      WHERE f_int1 = - old.f_int1;
 
8068
END|
 
8069
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8070
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8071
        
 
8072
# check trigger-4 success:      1
 
8073
DROP TRIGGER trg_1;
 
8074
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8075
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8076
f_charbig = 'just inserted'
 
8077
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8078
DELETE FROM t0_aux
 
8079
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8081
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8082
'just inserted' FROM t0_template
 
8083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8084
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8085
BEGIN
 
8086
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8087
f_charbig = 'updated by trigger'
 
8088
      WHERE f_int1 = new.f_int1;
 
8089
END|
 
8090
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8091
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8092
        
 
8093
# check trigger-5 success:      1
 
8094
DROP TRIGGER trg_1;
 
8095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8097
f_charbig = 'just inserted'
 
8098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8099
DELETE FROM t0_aux
 
8100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8102
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8103
'just inserted' FROM t0_template
 
8104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8105
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8106
BEGIN
 
8107
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8108
f_charbig = 'updated by trigger'
 
8109
      WHERE f_int1 = - old.f_int1;
 
8110
END|
 
8111
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8112
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8113
        
 
8114
# check trigger-6 success:      1
 
8115
DROP TRIGGER trg_1;
 
8116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8118
f_charbig = 'just inserted'
 
8119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8120
DELETE FROM t0_aux
 
8121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8124
'just inserted' FROM t0_template
 
8125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8126
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8127
BEGIN
 
8128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8129
f_charbig = 'updated by trigger'
 
8130
      WHERE f_int1 = - old.f_int1;
 
8131
END|
 
8132
DELETE FROM t0_aux
 
8133
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8134
        
 
8135
# check trigger-7 success:      1
 
8136
DROP TRIGGER trg_1;
 
8137
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8138
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8139
f_charbig = 'just inserted'
 
8140
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8141
DELETE FROM t0_aux
 
8142
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8144
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8145
'just inserted' FROM t0_template
 
8146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8147
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8148
BEGIN
 
8149
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8150
f_charbig = 'updated by trigger'
 
8151
      WHERE f_int1 = - old.f_int1;
 
8152
END|
 
8153
DELETE FROM t0_aux
 
8154
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8155
        
 
8156
# check trigger-8 success:      1
 
8157
DROP TRIGGER trg_1;
 
8158
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8159
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8160
f_charbig = 'just inserted'
 
8161
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8162
DELETE FROM t0_aux
 
8163
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8164
DELETE FROM t1
 
8165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8166
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8167
BEGIN
 
8168
SET new.f_int1 = old.f_int1 + @max_row,
 
8169
new.f_int2 = old.f_int2 - @max_row,
 
8170
new.f_charbig = '####updated per update trigger####';
 
8171
END|
 
8172
UPDATE t1
 
8173
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8174
f_charbig = '####updated per update statement itself####';
 
8175
        
 
8176
# check trigger-9 success:      1
 
8177
DROP TRIGGER trg_2;
 
8178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8180
f_charbig = CONCAT('===',f_char1,'===');
 
8181
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8182
BEGIN
 
8183
SET new.f_int1 = new.f_int1 + @max_row,
 
8184
new.f_int2 = new.f_int2 - @max_row,
 
8185
new.f_charbig = '####updated per update trigger####';
 
8186
END|
 
8187
UPDATE t1
 
8188
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8189
f_charbig = '####updated per update statement itself####';
 
8190
        
 
8191
# check trigger-10 success:     1
 
8192
DROP TRIGGER trg_2;
 
8193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8195
f_charbig = CONCAT('===',f_char1,'===');
 
8196
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8197
BEGIN
 
8198
SET new.f_int1 = @my_max1 + @counter,
 
8199
new.f_int2 = @my_min2 - @counter,
 
8200
new.f_charbig = '####updated per insert trigger####';
 
8201
SET @counter = @counter + 1;
 
8202
END|
 
8203
SET @counter = 1;
 
8204
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8205
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8206
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8207
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8209
ORDER BY f_int1;
 
8210
DROP TRIGGER trg_3;
 
8211
        
 
8212
# check trigger-11 success:     1
 
8213
DELETE FROM t1
 
8214
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8215
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8216
AND f_charbig = '####updated per insert trigger####';
 
8217
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8218
BEGIN
 
8219
SET new.f_int1 = @my_max1 + @counter,
 
8220
new.f_int2 = @my_min2 - @counter,
 
8221
new.f_charbig = '####updated per insert trigger####';
 
8222
SET @counter = @counter + 1;
 
8223
END|
 
8224
SET @counter = 1;
 
8225
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8226
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8227
SELECT CAST(f_int1 AS CHAR),
 
8228
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8230
ORDER BY f_int1;
 
8231
DROP TRIGGER trg_3;
 
8232
        
 
8233
# check trigger-12 success:     1
 
8234
DELETE FROM t1
 
8235
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8236
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8237
AND f_charbig = '####updated per insert trigger####';
 
8238
ANALYZE  TABLE t1;
 
8239
Table   Op      Msg_type        Msg_text
 
8240
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
8241
CHECK    TABLE t1 EXTENDED;
 
8242
Table   Op      Msg_type        Msg_text
 
8243
test.t1 check   note    The storage engine for the table doesn't support check
 
8244
CHECKSUM TABLE t1 EXTENDED;
 
8245
Table   Checksum
 
8246
test.t1 <some_value>
 
8247
OPTIMIZE TABLE t1;
 
8248
Table   Op      Msg_type        Msg_text
 
8249
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
8250
# check layout success:    1
 
8251
REPAIR   TABLE t1 EXTENDED;
 
8252
Table   Op      Msg_type        Msg_text
 
8253
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8254
# check layout success:    1
 
8255
TRUNCATE t1;
 
8256
        
 
8257
# check TRUNCATE success:       1
 
8258
# check layout success:    1
 
8259
# End usability test (inc/partition_check.inc)
 
8260
DROP TABLE t1;
 
8261
#  1.1.4 UNIQUE INDEX consisting of two columns
 
8262
DROP TABLE IF EXISTS t1;
 
8263
CREATE TABLE t1 (
 
8264
f_int1 INTEGER,
 
8265
f_int2 INTEGER,
 
8266
f_char1 CHAR(20),
 
8267
f_char2 CHAR(20),
 
8268
f_charbig VARCHAR(1000)
 
8269
 
 
8270
)
 
8271
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
8272
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8273
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8274
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8275
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
8276
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8277
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8278
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8279
# Start usability test (inc/partition_check.inc)
 
8280
create_command
 
8281
SHOW CREATE TABLE t1;
 
8282
Table   Create Table
 
8283
t1      CREATE TABLE `t1` (
 
8284
  `f_int1` int(11) DEFAULT NULL,
 
8285
  `f_int2` int(11) DEFAULT NULL,
 
8286
  `f_char1` char(20) DEFAULT NULL,
 
8287
  `f_char2` char(20) DEFAULT NULL,
 
8288
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8289
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
8290
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
8291
 
 
8292
# check prerequisites-1 success:    1
 
8293
# check COUNT(*) success:    1
 
8294
# check MIN/MAX(f_int1) success:    1
 
8295
# check MIN/MAX(f_int2) success:    1
 
8296
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8297
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8298
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8299
WHERE f_int1 IN (2,3);
 
8300
ERROR 23000: Can't write; duplicate key in table 't1'
 
8301
# check prerequisites-3 success:    1
 
8302
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8303
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8304
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8305
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8306
WHERE f_int1 IN (2,3);
 
8307
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8308
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8309
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8310
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8311
WHERE f_int1 IN (2,3);
 
8312
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8313
# check read via f_int1 success: 1
 
8314
# check read via f_int2 success: 1
 
8315
        
 
8316
# check multiple-1 success:     1
 
8317
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8318
        
 
8319
# check multiple-2 success:     1
 
8320
INSERT INTO t1 SELECT * FROM t0_template
 
8321
WHERE MOD(f_int1,3) = 0;
 
8322
        
 
8323
# check multiple-3 success:     1
 
8324
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8325
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8326
AND @max_row_div2 + @max_row_div4;
 
8327
        
 
8328
# check multiple-4 success:     1
 
8329
DELETE FROM t1
 
8330
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8331
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8332
        
 
8333
# check multiple-5 success:     1
 
8334
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8335
WHERE MOD(f_int1,3) = 0
 
8336
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8337
SELECT COUNT(*) INTO @clash_count
 
8338
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8339
WHERE MOD(f_int1,3) = 0
 
8340
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8341
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8342
INSERT INTO t1
 
8343
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8344
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8345
f_charbig = '#SINGLE#';
 
8346
        
 
8347
# check single-1 success:       1
 
8348
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8349
INSERT INTO t1
 
8350
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8351
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8352
f_charbig = '#SINGLE#';
 
8353
        
 
8354
# check single-2 success:       1
 
8355
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8356
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8357
UPDATE t1 SET f_int1 = @cur_value2
 
8358
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8359
        
 
8360
# check single-3 success:       1
 
8361
SET @cur_value1= -1;
 
8362
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8363
UPDATE t1 SET f_int1 = @cur_value1
 
8364
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8365
        
 
8366
# check single-4 success:       1
 
8367
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8368
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8369
        
 
8370
# check single-5 success:       1
 
8371
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8372
        
 
8373
# check single-6 success:       1
 
8374
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8375
        
 
8376
# check single-7 success:       1
 
8377
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8378
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8379
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8380
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8381
f_charbig = '#NULL#';
 
8382
INSERT INTO t1
 
8383
SET f_int1 = NULL , f_int2 = -@max_row,
 
8384
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8385
f_charbig = '#NULL#';
 
8386
# check null success:    1
 
8387
        
 
8388
# check null-1 success:         1
 
8389
UPDATE t1 SET f_int1 = -@max_row
 
8390
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8391
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8392
        
 
8393
# check null-2 success:         1
 
8394
UPDATE t1 SET f_int1 = NULL
 
8395
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8396
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8397
        
 
8398
# check null-3 success:         1
 
8399
DELETE FROM t1
 
8400
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8401
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8402
        
 
8403
# check null-4 success:         1
 
8404
DELETE FROM t1
 
8405
WHERE f_int1 = 0 AND f_int2 = 0
 
8406
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8407
AND f_charbig = '#NULL#';
 
8408
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8409
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8410
   FROM t0_template source_tab
 
8411
WHERE MOD(f_int1,3) = 0
 
8412
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8413
ON DUPLICATE KEY
 
8414
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8415
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8416
f_charbig = 'was updated';
 
8417
        
 
8418
# check unique-1-a success:     1
 
8419
        
 
8420
# check unique-1-b success:     1
 
8421
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8422
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8423
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8424
f_charbig = CONCAT('===',f_char1,'===')
 
8425
WHERE f_charbig = 'was updated';
 
8426
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8427
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8428
   FROM t0_template source_tab
 
8429
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8430
        
 
8431
# check replace success:        1
 
8432
DELETE FROM t1
 
8433
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8434
DELETE FROM t1
 
8435
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8436
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8437
UPDATE t1 SET f_int2 = f_int1,
 
8438
f_char1 = CAST(f_int1 AS CHAR),
 
8439
f_char2 = CAST(f_int1 AS CHAR),
 
8440
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8441
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8442
SET AUTOCOMMIT= 0;
 
8443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8444
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8445
FROM t0_template source_tab
 
8446
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8447
        
 
8448
# check transactions-1 success:         1
 
8449
COMMIT WORK;
 
8450
        
 
8451
# check transactions-2 success:         1
 
8452
ROLLBACK WORK;
 
8453
        
 
8454
# check transactions-3 success:         1
 
8455
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8456
COMMIT WORK;
 
8457
ROLLBACK WORK;
 
8458
        
 
8459
# check transactions-4 success:         1
 
8460
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8461
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8462
FROM t0_template source_tab
 
8463
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8464
        
 
8465
# check transactions-5 success:         1
 
8466
ROLLBACK WORK;
 
8467
        
 
8468
# check transactions-6 success:         1
 
8469
# INFO: Storage engine used for t1 seems to be transactional.
 
8470
COMMIT;
 
8471
        
 
8472
# check transactions-7 success:         1
 
8473
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8474
COMMIT WORK;
 
8475
SET @@session.sql_mode = 'traditional';
 
8476
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8477
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8478
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8479
'', '', 'was inserted' FROM t0_template
 
8480
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8481
ERROR 22012: Division by 0
 
8482
COMMIT;
 
8483
        
 
8484
# check transactions-8 success:         1
 
8485
# INFO: Storage engine used for t1 seems to be able to revert
 
8486
#       changes made by the failing statement.
 
8487
SET @@session.sql_mode = '';
 
8488
SET AUTOCOMMIT= 1;
 
8489
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8490
COMMIT WORK;
 
8491
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8492
        
 
8493
# check special-1 success:      1
 
8494
UPDATE t1 SET f_charbig = '';
 
8495
        
 
8496
# check special-2 success:      1
 
8497
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8498
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8499
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8501
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8502
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8503
'just inserted' FROM t0_template
 
8504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8505
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8506
BEGIN
 
8507
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8508
f_charbig = 'updated by trigger'
 
8509
      WHERE f_int1 = new.f_int1;
 
8510
END|
 
8511
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8512
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8514
        
 
8515
# check trigger-1 success:      1
 
8516
DROP TRIGGER trg_1;
 
8517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8519
f_charbig = 'just inserted'
 
8520
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8521
DELETE FROM t0_aux
 
8522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8525
'just inserted' FROM t0_template
 
8526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8527
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8528
BEGIN
 
8529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8530
f_charbig = 'updated by trigger'
 
8531
      WHERE f_int1 = new.f_int1;
 
8532
END|
 
8533
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8534
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8536
        
 
8537
# check trigger-2 success:      1
 
8538
DROP TRIGGER trg_1;
 
8539
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8540
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8541
f_charbig = 'just inserted'
 
8542
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8543
DELETE FROM t0_aux
 
8544
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8546
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8547
'just inserted' FROM t0_template
 
8548
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8549
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8550
BEGIN
 
8551
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8552
f_charbig = 'updated by trigger'
 
8553
      WHERE f_int1 = new.f_int1;
 
8554
END|
 
8555
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8556
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8557
        
 
8558
# check trigger-3 success:      1
 
8559
DROP TRIGGER trg_1;
 
8560
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8561
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8562
f_charbig = 'just inserted'
 
8563
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8564
DELETE FROM t0_aux
 
8565
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8566
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8567
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8568
'just inserted' FROM t0_template
 
8569
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8570
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8571
BEGIN
 
8572
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8573
f_charbig = 'updated by trigger'
 
8574
      WHERE f_int1 = - old.f_int1;
 
8575
END|
 
8576
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8577
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8578
        
 
8579
# check trigger-4 success:      1
 
8580
DROP TRIGGER trg_1;
 
8581
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8582
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8583
f_charbig = 'just inserted'
 
8584
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8585
DELETE FROM t0_aux
 
8586
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8588
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8589
'just inserted' FROM t0_template
 
8590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8591
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8592
BEGIN
 
8593
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8594
f_charbig = 'updated by trigger'
 
8595
      WHERE f_int1 = new.f_int1;
 
8596
END|
 
8597
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8598
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8599
        
 
8600
# check trigger-5 success:      1
 
8601
DROP TRIGGER trg_1;
 
8602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8604
f_charbig = 'just inserted'
 
8605
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8606
DELETE FROM t0_aux
 
8607
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8608
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8609
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8610
'just inserted' FROM t0_template
 
8611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8612
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8613
BEGIN
 
8614
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8615
f_charbig = 'updated by trigger'
 
8616
      WHERE f_int1 = - old.f_int1;
 
8617
END|
 
8618
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8619
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8620
        
 
8621
# check trigger-6 success:      1
 
8622
DROP TRIGGER trg_1;
 
8623
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8624
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8625
f_charbig = 'just inserted'
 
8626
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8627
DELETE FROM t0_aux
 
8628
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8629
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8630
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8631
'just inserted' FROM t0_template
 
8632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8633
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8634
BEGIN
 
8635
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8636
f_charbig = 'updated by trigger'
 
8637
      WHERE f_int1 = - old.f_int1;
 
8638
END|
 
8639
DELETE FROM t0_aux
 
8640
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8641
        
 
8642
# check trigger-7 success:      1
 
8643
DROP TRIGGER trg_1;
 
8644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8646
f_charbig = 'just inserted'
 
8647
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8648
DELETE FROM t0_aux
 
8649
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8652
'just inserted' FROM t0_template
 
8653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8654
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8655
BEGIN
 
8656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8657
f_charbig = 'updated by trigger'
 
8658
      WHERE f_int1 = - old.f_int1;
 
8659
END|
 
8660
DELETE FROM t0_aux
 
8661
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8662
        
 
8663
# check trigger-8 success:      1
 
8664
DROP TRIGGER trg_1;
 
8665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8667
f_charbig = 'just inserted'
 
8668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8669
DELETE FROM t0_aux
 
8670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8671
DELETE FROM t1
 
8672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8673
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8674
BEGIN
 
8675
SET new.f_int1 = old.f_int1 + @max_row,
 
8676
new.f_int2 = old.f_int2 - @max_row,
 
8677
new.f_charbig = '####updated per update trigger####';
 
8678
END|
 
8679
UPDATE t1
 
8680
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8681
f_charbig = '####updated per update statement itself####';
 
8682
        
 
8683
# check trigger-9 success:      1
 
8684
DROP TRIGGER trg_2;
 
8685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8687
f_charbig = CONCAT('===',f_char1,'===');
 
8688
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8689
BEGIN
 
8690
SET new.f_int1 = new.f_int1 + @max_row,
 
8691
new.f_int2 = new.f_int2 - @max_row,
 
8692
new.f_charbig = '####updated per update trigger####';
 
8693
END|
 
8694
UPDATE t1
 
8695
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8696
f_charbig = '####updated per update statement itself####';
 
8697
        
 
8698
# check trigger-10 success:     1
 
8699
DROP TRIGGER trg_2;
 
8700
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8701
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8702
f_charbig = CONCAT('===',f_char1,'===');
 
8703
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8704
BEGIN
 
8705
SET new.f_int1 = @my_max1 + @counter,
 
8706
new.f_int2 = @my_min2 - @counter,
 
8707
new.f_charbig = '####updated per insert trigger####';
 
8708
SET @counter = @counter + 1;
 
8709
END|
 
8710
SET @counter = 1;
 
8711
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8712
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8713
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8714
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8716
ORDER BY f_int1;
 
8717
DROP TRIGGER trg_3;
 
8718
        
 
8719
# check trigger-11 success:     1
 
8720
DELETE FROM t1
 
8721
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8722
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8723
AND f_charbig = '####updated per insert trigger####';
 
8724
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8725
BEGIN
 
8726
SET new.f_int1 = @my_max1 + @counter,
 
8727
new.f_int2 = @my_min2 - @counter,
 
8728
new.f_charbig = '####updated per insert trigger####';
 
8729
SET @counter = @counter + 1;
 
8730
END|
 
8731
SET @counter = 1;
 
8732
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8733
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8734
SELECT CAST(f_int1 AS CHAR),
 
8735
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8737
ORDER BY f_int1;
 
8738
DROP TRIGGER trg_3;
 
8739
        
 
8740
# check trigger-12 success:     1
 
8741
DELETE FROM t1
 
8742
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8743
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8744
AND f_charbig = '####updated per insert trigger####';
 
8745
ANALYZE  TABLE t1;
 
8746
Table   Op      Msg_type        Msg_text
 
8747
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
8748
CHECK    TABLE t1 EXTENDED;
 
8749
Table   Op      Msg_type        Msg_text
 
8750
test.t1 check   note    The storage engine for the table doesn't support check
 
8751
CHECKSUM TABLE t1 EXTENDED;
 
8752
Table   Checksum
 
8753
test.t1 <some_value>
 
8754
OPTIMIZE TABLE t1;
 
8755
Table   Op      Msg_type        Msg_text
 
8756
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
8757
# check layout success:    1
 
8758
REPAIR   TABLE t1 EXTENDED;
 
8759
Table   Op      Msg_type        Msg_text
 
8760
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8761
# check layout success:    1
 
8762
TRUNCATE t1;
 
8763
        
 
8764
# check TRUNCATE success:       1
 
8765
# check layout success:    1
 
8766
# End usability test (inc/partition_check.inc)
 
8767
DROP TABLE t1;
 
8768
CREATE TABLE t1 (
 
8769
f_int1 INTEGER,
 
8770
f_int2 INTEGER,
 
8771
f_char1 CHAR(20),
 
8772
f_char2 CHAR(20),
 
8773
f_charbig VARCHAR(1000)
 
8774
 
 
8775
)
 
8776
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
8777
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8778
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8779
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8780
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
8781
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8782
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8783
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8784
# Start usability test (inc/partition_check.inc)
 
8785
create_command
 
8786
SHOW CREATE TABLE t1;
 
8787
Table   Create Table
 
8788
t1      CREATE TABLE `t1` (
 
8789
  `f_int1` int(11) DEFAULT NULL,
 
8790
  `f_int2` int(11) DEFAULT NULL,
 
8791
  `f_char1` char(20) DEFAULT NULL,
 
8792
  `f_char2` char(20) DEFAULT NULL,
 
8793
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8794
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
8795
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
8796
 
 
8797
# check prerequisites-1 success:    1
 
8798
# check COUNT(*) success:    1
 
8799
# check MIN/MAX(f_int1) success:    1
 
8800
# check MIN/MAX(f_int2) success:    1
 
8801
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8802
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8803
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8804
WHERE f_int1 IN (2,3);
 
8805
ERROR 23000: Can't write; duplicate key in table 't1'
 
8806
# check prerequisites-3 success:    1
 
8807
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8808
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8809
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8810
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8811
WHERE f_int1 IN (2,3);
 
8812
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8813
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8814
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8815
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8816
WHERE f_int1 IN (2,3);
 
8817
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8818
# check read via f_int1 success: 1
 
8819
# check read via f_int2 success: 1
 
8820
        
 
8821
# check multiple-1 success:     1
 
8822
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8823
        
 
8824
# check multiple-2 success:     1
 
8825
INSERT INTO t1 SELECT * FROM t0_template
 
8826
WHERE MOD(f_int1,3) = 0;
 
8827
        
 
8828
# check multiple-3 success:     1
 
8829
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8830
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8831
AND @max_row_div2 + @max_row_div4;
 
8832
        
 
8833
# check multiple-4 success:     1
 
8834
DELETE FROM t1
 
8835
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8836
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8837
        
 
8838
# check multiple-5 success:     1
 
8839
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8840
WHERE MOD(f_int1,3) = 0
 
8841
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8842
SELECT COUNT(*) INTO @clash_count
 
8843
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8844
WHERE MOD(f_int1,3) = 0
 
8845
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8846
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8847
INSERT INTO t1
 
8848
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8849
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8850
f_charbig = '#SINGLE#';
 
8851
        
 
8852
# check single-1 success:       1
 
8853
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8854
INSERT INTO t1
 
8855
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8856
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8857
f_charbig = '#SINGLE#';
 
8858
        
 
8859
# check single-2 success:       1
 
8860
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8861
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8862
UPDATE t1 SET f_int1 = @cur_value2
 
8863
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8864
        
 
8865
# check single-3 success:       1
 
8866
SET @cur_value1= -1;
 
8867
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8868
UPDATE t1 SET f_int1 = @cur_value1
 
8869
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8870
        
 
8871
# check single-4 success:       1
 
8872
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8873
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8874
        
 
8875
# check single-5 success:       1
 
8876
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8877
        
 
8878
# check single-6 success:       1
 
8879
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8880
        
 
8881
# check single-7 success:       1
 
8882
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8883
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8884
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8885
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8886
f_charbig = '#NULL#';
 
8887
INSERT INTO t1
 
8888
SET f_int1 = NULL , f_int2 = -@max_row,
 
8889
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8890
f_charbig = '#NULL#';
 
8891
# check null success:    1
 
8892
        
 
8893
# check null-1 success:         1
 
8894
UPDATE t1 SET f_int1 = -@max_row
 
8895
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8896
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8897
        
 
8898
# check null-2 success:         1
 
8899
UPDATE t1 SET f_int1 = NULL
 
8900
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8901
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8902
        
 
8903
# check null-3 success:         1
 
8904
DELETE FROM t1
 
8905
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8906
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8907
        
 
8908
# check null-4 success:         1
 
8909
DELETE FROM t1
 
8910
WHERE f_int1 = 0 AND f_int2 = 0
 
8911
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8912
AND f_charbig = '#NULL#';
 
8913
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8914
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8915
   FROM t0_template source_tab
 
8916
WHERE MOD(f_int1,3) = 0
 
8917
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8918
ON DUPLICATE KEY
 
8919
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8920
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8921
f_charbig = 'was updated';
 
8922
        
 
8923
# check unique-1-a success:     1
 
8924
        
 
8925
# check unique-1-b success:     1
 
8926
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8927
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8928
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8929
f_charbig = CONCAT('===',f_char1,'===')
 
8930
WHERE f_charbig = 'was updated';
 
8931
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8932
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8933
   FROM t0_template source_tab
 
8934
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8935
        
 
8936
# check replace success:        1
 
8937
DELETE FROM t1
 
8938
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8939
DELETE FROM t1
 
8940
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8941
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8942
UPDATE t1 SET f_int2 = f_int1,
 
8943
f_char1 = CAST(f_int1 AS CHAR),
 
8944
f_char2 = CAST(f_int1 AS CHAR),
 
8945
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8946
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8947
SET AUTOCOMMIT= 0;
 
8948
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8949
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8950
FROM t0_template source_tab
 
8951
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8952
        
 
8953
# check transactions-1 success:         1
 
8954
COMMIT WORK;
 
8955
        
 
8956
# check transactions-2 success:         1
 
8957
ROLLBACK WORK;
 
8958
        
 
8959
# check transactions-3 success:         1
 
8960
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8961
COMMIT WORK;
 
8962
ROLLBACK WORK;
 
8963
        
 
8964
# check transactions-4 success:         1
 
8965
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8966
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8967
FROM t0_template source_tab
 
8968
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8969
        
 
8970
# check transactions-5 success:         1
 
8971
ROLLBACK WORK;
 
8972
        
 
8973
# check transactions-6 success:         1
 
8974
# INFO: Storage engine used for t1 seems to be transactional.
 
8975
COMMIT;
 
8976
        
 
8977
# check transactions-7 success:         1
 
8978
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8979
COMMIT WORK;
 
8980
SET @@session.sql_mode = 'traditional';
 
8981
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8982
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8983
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8984
'', '', 'was inserted' FROM t0_template
 
8985
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8986
ERROR 22012: Division by 0
 
8987
COMMIT;
 
8988
        
 
8989
# check transactions-8 success:         1
 
8990
# INFO: Storage engine used for t1 seems to be able to revert
 
8991
#       changes made by the failing statement.
 
8992
SET @@session.sql_mode = '';
 
8993
SET AUTOCOMMIT= 1;
 
8994
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8995
COMMIT WORK;
 
8996
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8997
        
 
8998
# check special-1 success:      1
 
8999
UPDATE t1 SET f_charbig = '';
 
9000
        
 
9001
# check special-2 success:      1
 
9002
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9003
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9004
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9006
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9007
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9008
'just inserted' FROM t0_template
 
9009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9010
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9011
BEGIN
 
9012
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9013
f_charbig = 'updated by trigger'
 
9014
      WHERE f_int1 = new.f_int1;
 
9015
END|
 
9016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9017
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9019
        
 
9020
# check trigger-1 success:      1
 
9021
DROP TRIGGER trg_1;
 
9022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9024
f_charbig = 'just inserted'
 
9025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9026
DELETE FROM t0_aux
 
9027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9030
'just inserted' FROM t0_template
 
9031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9032
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9033
BEGIN
 
9034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9035
f_charbig = 'updated by trigger'
 
9036
      WHERE f_int1 = new.f_int1;
 
9037
END|
 
9038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9039
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9041
        
 
9042
# check trigger-2 success:      1
 
9043
DROP TRIGGER trg_1;
 
9044
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9045
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9046
f_charbig = 'just inserted'
 
9047
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9048
DELETE FROM t0_aux
 
9049
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9051
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9052
'just inserted' FROM t0_template
 
9053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9054
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9055
BEGIN
 
9056
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9057
f_charbig = 'updated by trigger'
 
9058
      WHERE f_int1 = new.f_int1;
 
9059
END|
 
9060
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9061
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9062
        
 
9063
# check trigger-3 success:      1
 
9064
DROP TRIGGER trg_1;
 
9065
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9066
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9067
f_charbig = 'just inserted'
 
9068
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9069
DELETE FROM t0_aux
 
9070
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9071
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9072
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9073
'just inserted' FROM t0_template
 
9074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9075
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9076
BEGIN
 
9077
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9078
f_charbig = 'updated by trigger'
 
9079
      WHERE f_int1 = - old.f_int1;
 
9080
END|
 
9081
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9082
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9083
        
 
9084
# check trigger-4 success:      1
 
9085
DROP TRIGGER trg_1;
 
9086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9088
f_charbig = 'just inserted'
 
9089
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9090
DELETE FROM t0_aux
 
9091
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9094
'just inserted' FROM t0_template
 
9095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9096
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9097
BEGIN
 
9098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9099
f_charbig = 'updated by trigger'
 
9100
      WHERE f_int1 = new.f_int1;
 
9101
END|
 
9102
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9103
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9104
        
 
9105
# check trigger-5 success:      1
 
9106
DROP TRIGGER trg_1;
 
9107
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9108
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9109
f_charbig = 'just inserted'
 
9110
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9111
DELETE FROM t0_aux
 
9112
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9114
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9115
'just inserted' FROM t0_template
 
9116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9117
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9118
BEGIN
 
9119
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9120
f_charbig = 'updated by trigger'
 
9121
      WHERE f_int1 = - old.f_int1;
 
9122
END|
 
9123
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9124
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9125
        
 
9126
# check trigger-6 success:      1
 
9127
DROP TRIGGER trg_1;
 
9128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9130
f_charbig = 'just inserted'
 
9131
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9132
DELETE FROM t0_aux
 
9133
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9134
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9135
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9136
'just inserted' FROM t0_template
 
9137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9138
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9139
BEGIN
 
9140
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9141
f_charbig = 'updated by trigger'
 
9142
      WHERE f_int1 = - old.f_int1;
 
9143
END|
 
9144
DELETE FROM t0_aux
 
9145
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9146
        
 
9147
# check trigger-7 success:      1
 
9148
DROP TRIGGER trg_1;
 
9149
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9150
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9151
f_charbig = 'just inserted'
 
9152
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9153
DELETE FROM t0_aux
 
9154
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9156
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9157
'just inserted' FROM t0_template
 
9158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9159
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9160
BEGIN
 
9161
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9162
f_charbig = 'updated by trigger'
 
9163
      WHERE f_int1 = - old.f_int1;
 
9164
END|
 
9165
DELETE FROM t0_aux
 
9166
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9167
        
 
9168
# check trigger-8 success:      1
 
9169
DROP TRIGGER trg_1;
 
9170
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9171
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9172
f_charbig = 'just inserted'
 
9173
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9174
DELETE FROM t0_aux
 
9175
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9176
DELETE FROM t1
 
9177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9178
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9179
BEGIN
 
9180
SET new.f_int1 = old.f_int1 + @max_row,
 
9181
new.f_int2 = old.f_int2 - @max_row,
 
9182
new.f_charbig = '####updated per update trigger####';
 
9183
END|
 
9184
UPDATE t1
 
9185
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9186
f_charbig = '####updated per update statement itself####';
 
9187
        
 
9188
# check trigger-9 success:      1
 
9189
DROP TRIGGER trg_2;
 
9190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9192
f_charbig = CONCAT('===',f_char1,'===');
 
9193
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9194
BEGIN
 
9195
SET new.f_int1 = new.f_int1 + @max_row,
 
9196
new.f_int2 = new.f_int2 - @max_row,
 
9197
new.f_charbig = '####updated per update trigger####';
 
9198
END|
 
9199
UPDATE t1
 
9200
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9201
f_charbig = '####updated per update statement itself####';
 
9202
        
 
9203
# check trigger-10 success:     1
 
9204
DROP TRIGGER trg_2;
 
9205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9207
f_charbig = CONCAT('===',f_char1,'===');
 
9208
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9209
BEGIN
 
9210
SET new.f_int1 = @my_max1 + @counter,
 
9211
new.f_int2 = @my_min2 - @counter,
 
9212
new.f_charbig = '####updated per insert trigger####';
 
9213
SET @counter = @counter + 1;
 
9214
END|
 
9215
SET @counter = 1;
 
9216
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9217
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9218
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9219
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9221
ORDER BY f_int1;
 
9222
DROP TRIGGER trg_3;
 
9223
        
 
9224
# check trigger-11 success:     1
 
9225
DELETE FROM t1
 
9226
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9227
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9228
AND f_charbig = '####updated per insert trigger####';
 
9229
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9230
BEGIN
 
9231
SET new.f_int1 = @my_max1 + @counter,
 
9232
new.f_int2 = @my_min2 - @counter,
 
9233
new.f_charbig = '####updated per insert trigger####';
 
9234
SET @counter = @counter + 1;
 
9235
END|
 
9236
SET @counter = 1;
 
9237
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9238
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9239
SELECT CAST(f_int1 AS CHAR),
 
9240
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9242
ORDER BY f_int1;
 
9243
DROP TRIGGER trg_3;
 
9244
        
 
9245
# check trigger-12 success:     1
 
9246
DELETE FROM t1
 
9247
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9248
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9249
AND f_charbig = '####updated per insert trigger####';
 
9250
ANALYZE  TABLE t1;
 
9251
Table   Op      Msg_type        Msg_text
 
9252
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
9253
CHECK    TABLE t1 EXTENDED;
 
9254
Table   Op      Msg_type        Msg_text
 
9255
test.t1 check   note    The storage engine for the table doesn't support check
 
9256
CHECKSUM TABLE t1 EXTENDED;
 
9257
Table   Checksum
 
9258
test.t1 <some_value>
 
9259
OPTIMIZE TABLE t1;
 
9260
Table   Op      Msg_type        Msg_text
 
9261
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
9262
# check layout success:    1
 
9263
REPAIR   TABLE t1 EXTENDED;
 
9264
Table   Op      Msg_type        Msg_text
 
9265
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9266
# check layout success:    1
 
9267
TRUNCATE t1;
 
9268
        
 
9269
# check TRUNCATE success:       1
 
9270
# check layout success:    1
 
9271
# End usability test (inc/partition_check.inc)
 
9272
DROP TABLE t1;
 
9273
CREATE TABLE t1 (
 
9274
f_int1 INTEGER,
 
9275
f_int2 INTEGER,
 
9276
f_char1 CHAR(20),
 
9277
f_char2 CHAR(20),
 
9278
f_charbig VARCHAR(1000)
 
9279
 
 
9280
)
 
9281
PARTITION BY LIST(MOD(f_int1,4))
 
9282
(PARTITION part_3 VALUES IN (-3),
 
9283
PARTITION part_2 VALUES IN (-2),
 
9284
PARTITION part_1 VALUES IN (-1),
 
9285
PARTITION part_N VALUES IN (NULL),
 
9286
PARTITION part0 VALUES IN (0),
 
9287
PARTITION part1 VALUES IN (1),
 
9288
PARTITION part2 VALUES IN (2),
 
9289
PARTITION part3 VALUES IN (3));
 
9290
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9291
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9292
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9293
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
9294
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9295
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9296
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9297
# Start usability test (inc/partition_check.inc)
 
9298
create_command
 
9299
SHOW CREATE TABLE t1;
 
9300
Table   Create Table
 
9301
t1      CREATE TABLE `t1` (
 
9302
  `f_int1` int(11) DEFAULT NULL,
 
9303
  `f_int2` int(11) DEFAULT NULL,
 
9304
  `f_char1` char(20) DEFAULT NULL,
 
9305
  `f_char2` char(20) DEFAULT NULL,
 
9306
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9307
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
9308
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
9309
 
 
9310
# check prerequisites-1 success:    1
 
9311
# check COUNT(*) success:    1
 
9312
# check MIN/MAX(f_int1) success:    1
 
9313
# check MIN/MAX(f_int2) success:    1
 
9314
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9315
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9316
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9317
WHERE f_int1 IN (2,3);
 
9318
ERROR 23000: Can't write; duplicate key in table 't1'
 
9319
# check prerequisites-3 success:    1
 
9320
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9321
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9322
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9323
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9324
WHERE f_int1 IN (2,3);
 
9325
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9326
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9327
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9328
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9329
WHERE f_int1 IN (2,3);
 
9330
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9331
# check read via f_int1 success: 1
 
9332
# check read via f_int2 success: 1
 
9333
        
 
9334
# check multiple-1 success:     1
 
9335
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9336
        
 
9337
# check multiple-2 success:     1
 
9338
INSERT INTO t1 SELECT * FROM t0_template
 
9339
WHERE MOD(f_int1,3) = 0;
 
9340
        
 
9341
# check multiple-3 success:     1
 
9342
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9343
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9344
AND @max_row_div2 + @max_row_div4;
 
9345
        
 
9346
# check multiple-4 success:     1
 
9347
DELETE FROM t1
 
9348
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9349
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9350
        
 
9351
# check multiple-5 success:     1
 
9352
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9353
WHERE MOD(f_int1,3) = 0
 
9354
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9355
SELECT COUNT(*) INTO @clash_count
 
9356
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9357
WHERE MOD(f_int1,3) = 0
 
9358
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9359
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9360
INSERT INTO t1
 
9361
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9362
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9363
f_charbig = '#SINGLE#';
 
9364
        
 
9365
# check single-1 success:       1
 
9366
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9367
INSERT INTO t1
 
9368
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9369
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9370
f_charbig = '#SINGLE#';
 
9371
        
 
9372
# check single-2 success:       1
 
9373
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9374
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9375
UPDATE t1 SET f_int1 = @cur_value2
 
9376
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9377
        
 
9378
# check single-3 success:       1
 
9379
SET @cur_value1= -1;
 
9380
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9381
UPDATE t1 SET f_int1 = @cur_value1
 
9382
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9383
        
 
9384
# check single-4 success:       1
 
9385
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9386
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9387
        
 
9388
# check single-5 success:       1
 
9389
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9390
        
 
9391
# check single-6 success:       1
 
9392
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9393
        
 
9394
# check single-7 success:       1
 
9395
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9396
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9397
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9398
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9399
f_charbig = '#NULL#';
 
9400
INSERT INTO t1
 
9401
SET f_int1 = NULL , f_int2 = -@max_row,
 
9402
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9403
f_charbig = '#NULL#';
 
9404
# check null success:    1
 
9405
        
 
9406
# check null-1 success:         1
 
9407
UPDATE t1 SET f_int1 = -@max_row
 
9408
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9409
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9410
        
 
9411
# check null-2 success:         1
 
9412
UPDATE t1 SET f_int1 = NULL
 
9413
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9414
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9415
        
 
9416
# check null-3 success:         1
 
9417
DELETE FROM t1
 
9418
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9419
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9420
        
 
9421
# check null-4 success:         1
 
9422
DELETE FROM t1
 
9423
WHERE f_int1 = 0 AND f_int2 = 0
 
9424
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9425
AND f_charbig = '#NULL#';
 
9426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9427
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9428
   FROM t0_template source_tab
 
9429
WHERE MOD(f_int1,3) = 0
 
9430
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
9431
ON DUPLICATE KEY
 
9432
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
9433
f_int2 = 2 * @max_row + source_tab.f_int1,
 
9434
f_charbig = 'was updated';
 
9435
        
 
9436
# check unique-1-a success:     1
 
9437
        
 
9438
# check unique-1-b success:     1
 
9439
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9440
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9441
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9442
f_charbig = CONCAT('===',f_char1,'===')
 
9443
WHERE f_charbig = 'was updated';
 
9444
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9445
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
9446
   FROM t0_template source_tab
 
9447
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9448
        
 
9449
# check replace success:        1
 
9450
DELETE FROM t1
 
9451
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
9452
DELETE FROM t1
 
9453
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
9454
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
9455
UPDATE t1 SET f_int2 = f_int1,
 
9456
f_char1 = CAST(f_int1 AS CHAR),
 
9457
f_char2 = CAST(f_int1 AS CHAR),
 
9458
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
9459
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
9460
SET AUTOCOMMIT= 0;
 
9461
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9462
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9463
FROM t0_template source_tab
 
9464
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9465
        
 
9466
# check transactions-1 success:         1
 
9467
COMMIT WORK;
 
9468
        
 
9469
# check transactions-2 success:         1
 
9470
ROLLBACK WORK;
 
9471
        
 
9472
# check transactions-3 success:         1
 
9473
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9474
COMMIT WORK;
 
9475
ROLLBACK WORK;
 
9476
        
 
9477
# check transactions-4 success:         1
 
9478
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9479
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9480
FROM t0_template source_tab
 
9481
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9482
        
 
9483
# check transactions-5 success:         1
 
9484
ROLLBACK WORK;
 
9485
        
 
9486
# check transactions-6 success:         1
 
9487
# INFO: Storage engine used for t1 seems to be transactional.
 
9488
COMMIT;
 
9489
        
 
9490
# check transactions-7 success:         1
 
9491
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9492
COMMIT WORK;
 
9493
SET @@session.sql_mode = 'traditional';
 
9494
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9495
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9496
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9497
'', '', 'was inserted' FROM t0_template
 
9498
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9499
ERROR 22012: Division by 0
 
9500
COMMIT;
 
9501
        
 
9502
# check transactions-8 success:         1
 
9503
# INFO: Storage engine used for t1 seems to be able to revert
 
9504
#       changes made by the failing statement.
 
9505
SET @@session.sql_mode = '';
 
9506
SET AUTOCOMMIT= 1;
 
9507
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9508
COMMIT WORK;
 
9509
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9510
        
 
9511
# check special-1 success:      1
 
9512
UPDATE t1 SET f_charbig = '';
 
9513
        
 
9514
# check special-2 success:      1
 
9515
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9516
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9517
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9521
'just inserted' FROM t0_template
 
9522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9523
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9524
BEGIN
 
9525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9526
f_charbig = 'updated by trigger'
 
9527
      WHERE f_int1 = new.f_int1;
 
9528
END|
 
9529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9530
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9532
        
 
9533
# check trigger-1 success:      1
 
9534
DROP TRIGGER trg_1;
 
9535
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9536
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9537
f_charbig = 'just inserted'
 
9538
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9539
DELETE FROM t0_aux
 
9540
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9542
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9543
'just inserted' FROM t0_template
 
9544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9545
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9546
BEGIN
 
9547
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9548
f_charbig = 'updated by trigger'
 
9549
      WHERE f_int1 = new.f_int1;
 
9550
END|
 
9551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9552
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9554
        
 
9555
# check trigger-2 success:      1
 
9556
DROP TRIGGER trg_1;
 
9557
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9558
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9559
f_charbig = 'just inserted'
 
9560
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9561
DELETE FROM t0_aux
 
9562
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9563
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9564
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9565
'just inserted' FROM t0_template
 
9566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9567
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9568
BEGIN
 
9569
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9570
f_charbig = 'updated by trigger'
 
9571
      WHERE f_int1 = new.f_int1;
 
9572
END|
 
9573
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9574
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9575
        
 
9576
# check trigger-3 success:      1
 
9577
DROP TRIGGER trg_1;
 
9578
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9579
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9580
f_charbig = 'just inserted'
 
9581
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9582
DELETE FROM t0_aux
 
9583
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9584
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9585
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9586
'just inserted' FROM t0_template
 
9587
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9588
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9589
BEGIN
 
9590
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9591
f_charbig = 'updated by trigger'
 
9592
      WHERE f_int1 = - old.f_int1;
 
9593
END|
 
9594
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9595
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9596
        
 
9597
# check trigger-4 success:      1
 
9598
DROP TRIGGER trg_1;
 
9599
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9600
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9601
f_charbig = 'just inserted'
 
9602
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9603
DELETE FROM t0_aux
 
9604
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9605
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9606
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9607
'just inserted' FROM t0_template
 
9608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9609
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9610
BEGIN
 
9611
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9612
f_charbig = 'updated by trigger'
 
9613
      WHERE f_int1 = new.f_int1;
 
9614
END|
 
9615
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9616
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9617
        
 
9618
# check trigger-5 success:      1
 
9619
DROP TRIGGER trg_1;
 
9620
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9621
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9622
f_charbig = 'just inserted'
 
9623
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9624
DELETE FROM t0_aux
 
9625
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9627
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9628
'just inserted' FROM t0_template
 
9629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9630
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9631
BEGIN
 
9632
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9633
f_charbig = 'updated by trigger'
 
9634
      WHERE f_int1 = - old.f_int1;
 
9635
END|
 
9636
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9637
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9638
        
 
9639
# check trigger-6 success:      1
 
9640
DROP TRIGGER trg_1;
 
9641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9643
f_charbig = 'just inserted'
 
9644
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9645
DELETE FROM t0_aux
 
9646
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9647
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9648
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9649
'just inserted' FROM t0_template
 
9650
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9651
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9652
BEGIN
 
9653
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9654
f_charbig = 'updated by trigger'
 
9655
      WHERE f_int1 = - old.f_int1;
 
9656
END|
 
9657
DELETE FROM t0_aux
 
9658
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9659
        
 
9660
# check trigger-7 success:      1
 
9661
DROP TRIGGER trg_1;
 
9662
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9663
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9664
f_charbig = 'just inserted'
 
9665
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9666
DELETE FROM t0_aux
 
9667
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9668
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9669
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9670
'just inserted' FROM t0_template
 
9671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9672
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9673
BEGIN
 
9674
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9675
f_charbig = 'updated by trigger'
 
9676
      WHERE f_int1 = - old.f_int1;
 
9677
END|
 
9678
DELETE FROM t0_aux
 
9679
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9680
        
 
9681
# check trigger-8 success:      1
 
9682
DROP TRIGGER trg_1;
 
9683
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9684
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9685
f_charbig = 'just inserted'
 
9686
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9687
DELETE FROM t0_aux
 
9688
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9689
DELETE FROM t1
 
9690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9691
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9692
BEGIN
 
9693
SET new.f_int1 = old.f_int1 + @max_row,
 
9694
new.f_int2 = old.f_int2 - @max_row,
 
9695
new.f_charbig = '####updated per update trigger####';
 
9696
END|
 
9697
UPDATE t1
 
9698
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9699
f_charbig = '####updated per update statement itself####';
 
9700
        
 
9701
# check trigger-9 success:      1
 
9702
DROP TRIGGER trg_2;
 
9703
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9704
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9705
f_charbig = CONCAT('===',f_char1,'===');
 
9706
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9707
BEGIN
 
9708
SET new.f_int1 = new.f_int1 + @max_row,
 
9709
new.f_int2 = new.f_int2 - @max_row,
 
9710
new.f_charbig = '####updated per update trigger####';
 
9711
END|
 
9712
UPDATE t1
 
9713
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9714
f_charbig = '####updated per update statement itself####';
 
9715
        
 
9716
# check trigger-10 success:     1
 
9717
DROP TRIGGER trg_2;
 
9718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9720
f_charbig = CONCAT('===',f_char1,'===');
 
9721
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9722
BEGIN
 
9723
SET new.f_int1 = @my_max1 + @counter,
 
9724
new.f_int2 = @my_min2 - @counter,
 
9725
new.f_charbig = '####updated per insert trigger####';
 
9726
SET @counter = @counter + 1;
 
9727
END|
 
9728
SET @counter = 1;
 
9729
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9730
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9731
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9732
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9734
ORDER BY f_int1;
 
9735
DROP TRIGGER trg_3;
 
9736
        
 
9737
# check trigger-11 success:     1
 
9738
DELETE FROM t1
 
9739
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9740
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9741
AND f_charbig = '####updated per insert trigger####';
 
9742
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9743
BEGIN
 
9744
SET new.f_int1 = @my_max1 + @counter,
 
9745
new.f_int2 = @my_min2 - @counter,
 
9746
new.f_charbig = '####updated per insert trigger####';
 
9747
SET @counter = @counter + 1;
 
9748
END|
 
9749
SET @counter = 1;
 
9750
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9751
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9752
SELECT CAST(f_int1 AS CHAR),
 
9753
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9754
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9755
ORDER BY f_int1;
 
9756
DROP TRIGGER trg_3;
 
9757
        
 
9758
# check trigger-12 success:     1
 
9759
DELETE FROM t1
 
9760
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9761
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9762
AND f_charbig = '####updated per insert trigger####';
 
9763
ANALYZE  TABLE t1;
 
9764
Table   Op      Msg_type        Msg_text
 
9765
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
9766
CHECK    TABLE t1 EXTENDED;
 
9767
Table   Op      Msg_type        Msg_text
 
9768
test.t1 check   note    The storage engine for the table doesn't support check
 
9769
CHECKSUM TABLE t1 EXTENDED;
 
9770
Table   Checksum
 
9771
test.t1 <some_value>
 
9772
OPTIMIZE TABLE t1;
 
9773
Table   Op      Msg_type        Msg_text
 
9774
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
9775
# check layout success:    1
 
9776
REPAIR   TABLE t1 EXTENDED;
 
9777
Table   Op      Msg_type        Msg_text
 
9778
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9779
# check layout success:    1
 
9780
TRUNCATE t1;
 
9781
        
 
9782
# check TRUNCATE success:       1
 
9783
# check layout success:    1
 
9784
# End usability test (inc/partition_check.inc)
 
9785
DROP TABLE t1;
 
9786
CREATE TABLE t1 (
 
9787
f_int1 INTEGER,
 
9788
f_int2 INTEGER,
 
9789
f_char1 CHAR(20),
 
9790
f_char2 CHAR(20),
 
9791
f_charbig VARCHAR(1000)
 
9792
 
 
9793
)
 
9794
PARTITION BY RANGE(f_int1)
 
9795
(PARTITION parta VALUES LESS THAN (0),
 
9796
PARTITION partb VALUES LESS THAN (5),
 
9797
PARTITION partc VALUES LESS THAN (10),
 
9798
PARTITION partd VALUES LESS THAN (10 + 5),
 
9799
PARTITION parte VALUES LESS THAN (20),
 
9800
PARTITION partf VALUES LESS THAN (2147483646));
 
9801
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9802
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9803
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9804
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
9805
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9806
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9807
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9808
# Start usability test (inc/partition_check.inc)
 
9809
create_command
 
9810
SHOW CREATE TABLE t1;
 
9811
Table   Create Table
 
9812
t1      CREATE TABLE `t1` (
 
9813
  `f_int1` int(11) DEFAULT NULL,
 
9814
  `f_int2` int(11) DEFAULT NULL,
 
9815
  `f_char1` char(20) DEFAULT NULL,
 
9816
  `f_char2` char(20) DEFAULT NULL,
 
9817
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9818
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
9819
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
9820
 
 
9821
# check prerequisites-1 success:    1
 
9822
# check COUNT(*) success:    1
 
9823
# check MIN/MAX(f_int1) success:    1
 
9824
# check MIN/MAX(f_int2) success:    1
 
9825
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9826
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9827
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9828
WHERE f_int1 IN (2,3);
 
9829
ERROR 23000: Can't write; duplicate key in table 't1'
 
9830
# check prerequisites-3 success:    1
 
9831
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9832
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9833
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9834
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9835
WHERE f_int1 IN (2,3);
 
9836
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9838
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9839
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9840
WHERE f_int1 IN (2,3);
 
9841
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9842
# check read via f_int1 success: 1
 
9843
# check read via f_int2 success: 1
 
9844
        
 
9845
# check multiple-1 success:     1
 
9846
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9847
        
 
9848
# check multiple-2 success:     1
 
9849
INSERT INTO t1 SELECT * FROM t0_template
 
9850
WHERE MOD(f_int1,3) = 0;
 
9851
        
 
9852
# check multiple-3 success:     1
 
9853
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9854
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9855
AND @max_row_div2 + @max_row_div4;
 
9856
        
 
9857
# check multiple-4 success:     1
 
9858
DELETE FROM t1
 
9859
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9860
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9861
        
 
9862
# check multiple-5 success:     1
 
9863
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9864
WHERE MOD(f_int1,3) = 0
 
9865
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9866
SELECT COUNT(*) INTO @clash_count
 
9867
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9868
WHERE MOD(f_int1,3) = 0
 
9869
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9870
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9871
INSERT INTO t1
 
9872
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9873
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9874
f_charbig = '#SINGLE#';
 
9875
        
 
9876
# check single-1 success:       1
 
9877
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9878
INSERT INTO t1
 
9879
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9880
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9881
f_charbig = '#SINGLE#';
 
9882
        
 
9883
# check single-2 success:       1
 
9884
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9885
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9886
UPDATE t1 SET f_int1 = @cur_value2
 
9887
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9888
        
 
9889
# check single-3 success:       1
 
9890
SET @cur_value1= -1;
 
9891
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9892
UPDATE t1 SET f_int1 = @cur_value1
 
9893
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9894
        
 
9895
# check single-4 success:       1
 
9896
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9897
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9898
        
 
9899
# check single-5 success:       1
 
9900
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9901
        
 
9902
# check single-6 success:       1
 
9903
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9904
ERROR HY000: Table has no partition for value 2147483647
 
9905
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9906
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9907
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9908
f_charbig = '#NULL#';
 
9909
INSERT INTO t1
 
9910
SET f_int1 = NULL , f_int2 = -@max_row,
 
9911
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9912
f_charbig = '#NULL#';
 
9913
# check null success:    1
 
9914
        
 
9915
# check null-1 success:         1
 
9916
UPDATE t1 SET f_int1 = -@max_row
 
9917
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9918
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9919
        
 
9920
# check null-2 success:         1
 
9921
UPDATE t1 SET f_int1 = NULL
 
9922
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9923
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9924
        
 
9925
# check null-3 success:         1
 
9926
DELETE FROM t1
 
9927
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9928
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9929
        
 
9930
# check null-4 success:         1
 
9931
DELETE FROM t1
 
9932
WHERE f_int1 = 0 AND f_int2 = 0
 
9933
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9934
AND f_charbig = '#NULL#';
 
9935
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9936
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9937
   FROM t0_template source_tab
 
9938
WHERE MOD(f_int1,3) = 0
 
9939
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
9940
ON DUPLICATE KEY
 
9941
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
9942
f_int2 = 2 * @max_row + source_tab.f_int1,
 
9943
f_charbig = 'was updated';
 
9944
        
 
9945
# check unique-1-a success:     1
 
9946
        
 
9947
# check unique-1-b success:     1
 
9948
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9949
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9950
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9951
f_charbig = CONCAT('===',f_char1,'===')
 
9952
WHERE f_charbig = 'was updated';
 
9953
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9954
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
9955
   FROM t0_template source_tab
 
9956
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9957
        
 
9958
# check replace success:        1
 
9959
DELETE FROM t1
 
9960
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
9961
DELETE FROM t1
 
9962
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
9963
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
9964
UPDATE t1 SET f_int2 = f_int1,
 
9965
f_char1 = CAST(f_int1 AS CHAR),
 
9966
f_char2 = CAST(f_int1 AS CHAR),
 
9967
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
9968
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
9969
SET AUTOCOMMIT= 0;
 
9970
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9971
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9972
FROM t0_template source_tab
 
9973
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9974
        
 
9975
# check transactions-1 success:         1
 
9976
COMMIT WORK;
 
9977
        
 
9978
# check transactions-2 success:         1
 
9979
ROLLBACK WORK;
 
9980
        
 
9981
# check transactions-3 success:         1
 
9982
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9983
COMMIT WORK;
 
9984
ROLLBACK WORK;
 
9985
        
 
9986
# check transactions-4 success:         1
 
9987
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9988
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9989
FROM t0_template source_tab
 
9990
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9991
        
 
9992
# check transactions-5 success:         1
 
9993
ROLLBACK WORK;
 
9994
        
 
9995
# check transactions-6 success:         1
 
9996
# INFO: Storage engine used for t1 seems to be transactional.
 
9997
COMMIT;
 
9998
        
 
9999
# check transactions-7 success:         1
 
10000
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10001
COMMIT WORK;
 
10002
SET @@session.sql_mode = 'traditional';
 
10003
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10004
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10005
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10006
'', '', 'was inserted' FROM t0_template
 
10007
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10008
ERROR 22012: Division by 0
 
10009
COMMIT;
 
10010
        
 
10011
# check transactions-8 success:         1
 
10012
# INFO: Storage engine used for t1 seems to be able to revert
 
10013
#       changes made by the failing statement.
 
10014
SET @@session.sql_mode = '';
 
10015
SET AUTOCOMMIT= 1;
 
10016
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10017
COMMIT WORK;
 
10018
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10019
        
 
10020
# check special-1 success:      1
 
10021
UPDATE t1 SET f_charbig = '';
 
10022
        
 
10023
# check special-2 success:      1
 
10024
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10025
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10026
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10030
'just inserted' FROM t0_template
 
10031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10032
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10033
BEGIN
 
10034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10035
f_charbig = 'updated by trigger'
 
10036
      WHERE f_int1 = new.f_int1;
 
10037
END|
 
10038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10039
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10041
        
 
10042
# check trigger-1 success:      1
 
10043
DROP TRIGGER trg_1;
 
10044
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10045
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10046
f_charbig = 'just inserted'
 
10047
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10048
DELETE FROM t0_aux
 
10049
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10051
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10052
'just inserted' FROM t0_template
 
10053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10054
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10055
BEGIN
 
10056
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10057
f_charbig = 'updated by trigger'
 
10058
      WHERE f_int1 = new.f_int1;
 
10059
END|
 
10060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10061
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10063
        
 
10064
# check trigger-2 success:      1
 
10065
DROP TRIGGER trg_1;
 
10066
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10067
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10068
f_charbig = 'just inserted'
 
10069
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10070
DELETE FROM t0_aux
 
10071
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10073
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10074
'just inserted' FROM t0_template
 
10075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10076
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10077
BEGIN
 
10078
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10079
f_charbig = 'updated by trigger'
 
10080
      WHERE f_int1 = new.f_int1;
 
10081
END|
 
10082
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10083
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10084
        
 
10085
# check trigger-3 success:      1
 
10086
DROP TRIGGER trg_1;
 
10087
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10088
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10089
f_charbig = 'just inserted'
 
10090
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10091
DELETE FROM t0_aux
 
10092
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10093
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10094
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10095
'just inserted' FROM t0_template
 
10096
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10097
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10098
BEGIN
 
10099
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10100
f_charbig = 'updated by trigger'
 
10101
      WHERE f_int1 = - old.f_int1;
 
10102
END|
 
10103
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10104
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10105
        
 
10106
# check trigger-4 success:      1
 
10107
DROP TRIGGER trg_1;
 
10108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10110
f_charbig = 'just inserted'
 
10111
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10112
DELETE FROM t0_aux
 
10113
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10116
'just inserted' FROM t0_template
 
10117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10118
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10119
BEGIN
 
10120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10121
f_charbig = 'updated by trigger'
 
10122
      WHERE f_int1 = new.f_int1;
 
10123
END|
 
10124
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10125
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10126
        
 
10127
# check trigger-5 success:      1
 
10128
DROP TRIGGER trg_1;
 
10129
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10130
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10131
f_charbig = 'just inserted'
 
10132
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10133
DELETE FROM t0_aux
 
10134
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10136
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10137
'just inserted' FROM t0_template
 
10138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10139
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10140
BEGIN
 
10141
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10142
f_charbig = 'updated by trigger'
 
10143
      WHERE f_int1 = - old.f_int1;
 
10144
END|
 
10145
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10146
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10147
        
 
10148
# check trigger-6 success:      1
 
10149
DROP TRIGGER trg_1;
 
10150
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10151
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10152
f_charbig = 'just inserted'
 
10153
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10154
DELETE FROM t0_aux
 
10155
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10156
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10157
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10158
'just inserted' FROM t0_template
 
10159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10160
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10161
BEGIN
 
10162
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10163
f_charbig = 'updated by trigger'
 
10164
      WHERE f_int1 = - old.f_int1;
 
10165
END|
 
10166
DELETE FROM t0_aux
 
10167
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10168
        
 
10169
# check trigger-7 success:      1
 
10170
DROP TRIGGER trg_1;
 
10171
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10172
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10173
f_charbig = 'just inserted'
 
10174
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10175
DELETE FROM t0_aux
 
10176
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10178
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10179
'just inserted' FROM t0_template
 
10180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10181
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10182
BEGIN
 
10183
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10184
f_charbig = 'updated by trigger'
 
10185
      WHERE f_int1 = - old.f_int1;
 
10186
END|
 
10187
DELETE FROM t0_aux
 
10188
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10189
        
 
10190
# check trigger-8 success:      1
 
10191
DROP TRIGGER trg_1;
 
10192
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10193
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10194
f_charbig = 'just inserted'
 
10195
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10196
DELETE FROM t0_aux
 
10197
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10198
DELETE FROM t1
 
10199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10200
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10201
BEGIN
 
10202
SET new.f_int1 = old.f_int1 + @max_row,
 
10203
new.f_int2 = old.f_int2 - @max_row,
 
10204
new.f_charbig = '####updated per update trigger####';
 
10205
END|
 
10206
UPDATE t1
 
10207
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10208
f_charbig = '####updated per update statement itself####';
 
10209
        
 
10210
# check trigger-9 success:      1
 
10211
DROP TRIGGER trg_2;
 
10212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10214
f_charbig = CONCAT('===',f_char1,'===');
 
10215
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10216
BEGIN
 
10217
SET new.f_int1 = new.f_int1 + @max_row,
 
10218
new.f_int2 = new.f_int2 - @max_row,
 
10219
new.f_charbig = '####updated per update trigger####';
 
10220
END|
 
10221
UPDATE t1
 
10222
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10223
f_charbig = '####updated per update statement itself####';
 
10224
        
 
10225
# check trigger-10 success:     1
 
10226
DROP TRIGGER trg_2;
 
10227
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10228
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10229
f_charbig = CONCAT('===',f_char1,'===');
 
10230
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10231
BEGIN
 
10232
SET new.f_int1 = @my_max1 + @counter,
 
10233
new.f_int2 = @my_min2 - @counter,
 
10234
new.f_charbig = '####updated per insert trigger####';
 
10235
SET @counter = @counter + 1;
 
10236
END|
 
10237
SET @counter = 1;
 
10238
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10239
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10240
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10241
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10243
ORDER BY f_int1;
 
10244
DROP TRIGGER trg_3;
 
10245
        
 
10246
# check trigger-11 success:     1
 
10247
DELETE FROM t1
 
10248
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10249
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10250
AND f_charbig = '####updated per insert trigger####';
 
10251
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10252
BEGIN
 
10253
SET new.f_int1 = @my_max1 + @counter,
 
10254
new.f_int2 = @my_min2 - @counter,
 
10255
new.f_charbig = '####updated per insert trigger####';
 
10256
SET @counter = @counter + 1;
 
10257
END|
 
10258
SET @counter = 1;
 
10259
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10260
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10261
SELECT CAST(f_int1 AS CHAR),
 
10262
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10264
ORDER BY f_int1;
 
10265
DROP TRIGGER trg_3;
 
10266
        
 
10267
# check trigger-12 success:     1
 
10268
DELETE FROM t1
 
10269
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10270
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10271
AND f_charbig = '####updated per insert trigger####';
 
10272
ANALYZE  TABLE t1;
 
10273
Table   Op      Msg_type        Msg_text
 
10274
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
10275
CHECK    TABLE t1 EXTENDED;
 
10276
Table   Op      Msg_type        Msg_text
 
10277
test.t1 check   note    The storage engine for the table doesn't support check
 
10278
CHECKSUM TABLE t1 EXTENDED;
 
10279
Table   Checksum
 
10280
test.t1 <some_value>
 
10281
OPTIMIZE TABLE t1;
 
10282
Table   Op      Msg_type        Msg_text
 
10283
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
10284
# check layout success:    1
 
10285
REPAIR   TABLE t1 EXTENDED;
 
10286
Table   Op      Msg_type        Msg_text
 
10287
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10288
# check layout success:    1
 
10289
TRUNCATE t1;
 
10290
        
 
10291
# check TRUNCATE success:       1
 
10292
# check layout success:    1
 
10293
# End usability test (inc/partition_check.inc)
 
10294
DROP TABLE t1;
 
10295
CREATE TABLE t1 (
 
10296
f_int1 INTEGER,
 
10297
f_int2 INTEGER,
 
10298
f_char1 CHAR(20),
 
10299
f_char2 CHAR(20),
 
10300
f_charbig VARCHAR(1000)
 
10301
 
 
10302
)
 
10303
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
10304
(PARTITION parta VALUES LESS THAN (0),
 
10305
PARTITION partb VALUES LESS THAN (5),
 
10306
PARTITION partc VALUES LESS THAN (10),
 
10307
PARTITION partd VALUES LESS THAN (2147483646));
 
10308
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10309
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10310
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10311
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
10312
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10313
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10314
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10315
# Start usability test (inc/partition_check.inc)
 
10316
create_command
 
10317
SHOW CREATE TABLE t1;
 
10318
Table   Create Table
 
10319
t1      CREATE TABLE `t1` (
 
10320
  `f_int1` int(11) DEFAULT NULL,
 
10321
  `f_int2` int(11) DEFAULT NULL,
 
10322
  `f_char1` char(20) DEFAULT NULL,
 
10323
  `f_char2` char(20) DEFAULT NULL,
 
10324
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10325
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
10326
) ENGINE=InnoDB 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 = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
10327
 
 
10328
# check prerequisites-1 success:    1
 
10329
# check COUNT(*) success:    1
 
10330
# check MIN/MAX(f_int1) success:    1
 
10331
# check MIN/MAX(f_int2) success:    1
 
10332
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10333
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10334
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10335
WHERE f_int1 IN (2,3);
 
10336
ERROR 23000: Can't write; duplicate key in table 't1'
 
10337
# check prerequisites-3 success:    1
 
10338
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10339
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10340
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10341
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10342
WHERE f_int1 IN (2,3);
 
10343
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10344
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10345
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10346
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10347
WHERE f_int1 IN (2,3);
 
10348
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10349
# check read via f_int1 success: 1
 
10350
# check read via f_int2 success: 1
 
10351
        
 
10352
# check multiple-1 success:     1
 
10353
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10354
        
 
10355
# check multiple-2 success:     1
 
10356
INSERT INTO t1 SELECT * FROM t0_template
 
10357
WHERE MOD(f_int1,3) = 0;
 
10358
        
 
10359
# check multiple-3 success:     1
 
10360
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10361
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10362
AND @max_row_div2 + @max_row_div4;
 
10363
        
 
10364
# check multiple-4 success:     1
 
10365
DELETE FROM t1
 
10366
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10367
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10368
        
 
10369
# check multiple-5 success:     1
 
10370
SELECT COUNT(*) INTO @try_count FROM t0_template
 
10371
WHERE MOD(f_int1,3) = 0
 
10372
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10373
SELECT COUNT(*) INTO @clash_count
 
10374
FROM t1 INNER JOIN t0_template USING(f_int1)
 
10375
WHERE MOD(f_int1,3) = 0
 
10376
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10377
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10378
INSERT INTO t1
 
10379
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10380
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10381
f_charbig = '#SINGLE#';
 
10382
        
 
10383
# check single-1 success:       1
 
10384
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10385
INSERT INTO t1
 
10386
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10387
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10388
f_charbig = '#SINGLE#';
 
10389
        
 
10390
# check single-2 success:       1
 
10391
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10392
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10393
UPDATE t1 SET f_int1 = @cur_value2
 
10394
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10395
        
 
10396
# check single-3 success:       1
 
10397
SET @cur_value1= -1;
 
10398
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10399
UPDATE t1 SET f_int1 = @cur_value1
 
10400
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10401
        
 
10402
# check single-4 success:       1
 
10403
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10404
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10405
        
 
10406
# check single-5 success:       1
 
10407
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10408
        
 
10409
# check single-6 success:       1
 
10410
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10411
        
 
10412
# check single-7 success:       1
 
10413
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10414
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10415
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10416
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10417
f_charbig = '#NULL#';
 
10418
INSERT INTO t1
 
10419
SET f_int1 = NULL , f_int2 = -@max_row,
 
10420
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10421
f_charbig = '#NULL#';
 
10422
# check null success:    1
 
10423
        
 
10424
# check null-1 success:         1
 
10425
UPDATE t1 SET f_int1 = -@max_row
 
10426
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10427
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10428
        
 
10429
# check null-2 success:         1
 
10430
UPDATE t1 SET f_int1 = NULL
 
10431
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10432
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10433
        
 
10434
# check null-3 success:         1
 
10435
DELETE FROM t1
 
10436
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10437
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10438
        
 
10439
# check null-4 success:         1
 
10440
DELETE FROM t1
 
10441
WHERE f_int1 = 0 AND f_int2 = 0
 
10442
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10443
AND f_charbig = '#NULL#';
 
10444
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10445
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10446
   FROM t0_template source_tab
 
10447
WHERE MOD(f_int1,3) = 0
 
10448
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10449
ON DUPLICATE KEY
 
10450
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10451
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10452
f_charbig = 'was updated';
 
10453
        
 
10454
# check unique-1-a success:     1
 
10455
        
 
10456
# check unique-1-b success:     1
 
10457
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10458
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10459
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10460
f_charbig = CONCAT('===',f_char1,'===')
 
10461
WHERE f_charbig = 'was updated';
 
10462
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10463
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10464
   FROM t0_template source_tab
 
10465
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10466
        
 
10467
# check replace success:        1
 
10468
DELETE FROM t1
 
10469
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10470
DELETE FROM t1
 
10471
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10472
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10473
UPDATE t1 SET f_int2 = f_int1,
 
10474
f_char1 = CAST(f_int1 AS CHAR),
 
10475
f_char2 = CAST(f_int1 AS CHAR),
 
10476
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10477
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10478
SET AUTOCOMMIT= 0;
 
10479
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10480
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10481
FROM t0_template source_tab
 
10482
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10483
        
 
10484
# check transactions-1 success:         1
 
10485
COMMIT WORK;
 
10486
        
 
10487
# check transactions-2 success:         1
 
10488
ROLLBACK WORK;
 
10489
        
 
10490
# check transactions-3 success:         1
 
10491
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10492
COMMIT WORK;
 
10493
ROLLBACK WORK;
 
10494
        
 
10495
# check transactions-4 success:         1
 
10496
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10497
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10498
FROM t0_template source_tab
 
10499
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10500
        
 
10501
# check transactions-5 success:         1
 
10502
ROLLBACK WORK;
 
10503
        
 
10504
# check transactions-6 success:         1
 
10505
# INFO: Storage engine used for t1 seems to be transactional.
 
10506
COMMIT;
 
10507
        
 
10508
# check transactions-7 success:         1
 
10509
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10510
COMMIT WORK;
 
10511
SET @@session.sql_mode = 'traditional';
 
10512
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10514
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10515
'', '', 'was inserted' FROM t0_template
 
10516
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10517
ERROR 22012: Division by 0
 
10518
COMMIT;
 
10519
        
 
10520
# check transactions-8 success:         1
 
10521
# INFO: Storage engine used for t1 seems to be able to revert
 
10522
#       changes made by the failing statement.
 
10523
SET @@session.sql_mode = '';
 
10524
SET AUTOCOMMIT= 1;
 
10525
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10526
COMMIT WORK;
 
10527
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10528
        
 
10529
# check special-1 success:      1
 
10530
UPDATE t1 SET f_charbig = '';
 
10531
        
 
10532
# check special-2 success:      1
 
10533
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10534
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10535
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10536
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10537
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10538
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10539
'just inserted' FROM t0_template
 
10540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10541
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10542
BEGIN
 
10543
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10544
f_charbig = 'updated by trigger'
 
10545
      WHERE f_int1 = new.f_int1;
 
10546
END|
 
10547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10548
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10550
        
 
10551
# check trigger-1 success:      1
 
10552
DROP TRIGGER trg_1;
 
10553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10555
f_charbig = 'just inserted'
 
10556
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10557
DELETE FROM t0_aux
 
10558
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10559
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10560
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10561
'just inserted' FROM t0_template
 
10562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10563
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10564
BEGIN
 
10565
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10566
f_charbig = 'updated by trigger'
 
10567
      WHERE f_int1 = new.f_int1;
 
10568
END|
 
10569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10570
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10572
        
 
10573
# check trigger-2 success:      1
 
10574
DROP TRIGGER trg_1;
 
10575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10577
f_charbig = 'just inserted'
 
10578
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10579
DELETE FROM t0_aux
 
10580
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10582
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10583
'just inserted' FROM t0_template
 
10584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10585
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10586
BEGIN
 
10587
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10588
f_charbig = 'updated by trigger'
 
10589
      WHERE f_int1 = new.f_int1;
 
10590
END|
 
10591
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10592
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10593
        
 
10594
# check trigger-3 success:      1
 
10595
DROP TRIGGER trg_1;
 
10596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10598
f_charbig = 'just inserted'
 
10599
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10600
DELETE FROM t0_aux
 
10601
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10604
'just inserted' FROM t0_template
 
10605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10606
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10607
BEGIN
 
10608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10609
f_charbig = 'updated by trigger'
 
10610
      WHERE f_int1 = - old.f_int1;
 
10611
END|
 
10612
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10613
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10614
        
 
10615
# check trigger-4 success:      1
 
10616
DROP TRIGGER trg_1;
 
10617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10619
f_charbig = 'just inserted'
 
10620
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10621
DELETE FROM t0_aux
 
10622
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10623
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10624
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10625
'just inserted' FROM t0_template
 
10626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10627
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10628
BEGIN
 
10629
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10630
f_charbig = 'updated by trigger'
 
10631
      WHERE f_int1 = new.f_int1;
 
10632
END|
 
10633
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10634
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10635
        
 
10636
# check trigger-5 success:      1
 
10637
DROP TRIGGER trg_1;
 
10638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10640
f_charbig = 'just inserted'
 
10641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10642
DELETE FROM t0_aux
 
10643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10646
'just inserted' FROM t0_template
 
10647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10648
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10649
BEGIN
 
10650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10651
f_charbig = 'updated by trigger'
 
10652
      WHERE f_int1 = - old.f_int1;
 
10653
END|
 
10654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10656
        
 
10657
# check trigger-6 success:      1
 
10658
DROP TRIGGER trg_1;
 
10659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10661
f_charbig = 'just inserted'
 
10662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10663
DELETE FROM t0_aux
 
10664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10667
'just inserted' FROM t0_template
 
10668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10669
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10670
BEGIN
 
10671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10672
f_charbig = 'updated by trigger'
 
10673
      WHERE f_int1 = - old.f_int1;
 
10674
END|
 
10675
DELETE FROM t0_aux
 
10676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10677
        
 
10678
# check trigger-7 success:      1
 
10679
DROP TRIGGER trg_1;
 
10680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10682
f_charbig = 'just inserted'
 
10683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10684
DELETE FROM t0_aux
 
10685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10688
'just inserted' FROM t0_template
 
10689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10690
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10691
BEGIN
 
10692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10693
f_charbig = 'updated by trigger'
 
10694
      WHERE f_int1 = - old.f_int1;
 
10695
END|
 
10696
DELETE FROM t0_aux
 
10697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10698
        
 
10699
# check trigger-8 success:      1
 
10700
DROP TRIGGER trg_1;
 
10701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10703
f_charbig = 'just inserted'
 
10704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10705
DELETE FROM t0_aux
 
10706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10707
DELETE FROM t1
 
10708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10709
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10710
BEGIN
 
10711
SET new.f_int1 = old.f_int1 + @max_row,
 
10712
new.f_int2 = old.f_int2 - @max_row,
 
10713
new.f_charbig = '####updated per update trigger####';
 
10714
END|
 
10715
UPDATE t1
 
10716
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10717
f_charbig = '####updated per update statement itself####';
 
10718
        
 
10719
# check trigger-9 success:      1
 
10720
DROP TRIGGER trg_2;
 
10721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10723
f_charbig = CONCAT('===',f_char1,'===');
 
10724
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10725
BEGIN
 
10726
SET new.f_int1 = new.f_int1 + @max_row,
 
10727
new.f_int2 = new.f_int2 - @max_row,
 
10728
new.f_charbig = '####updated per update trigger####';
 
10729
END|
 
10730
UPDATE t1
 
10731
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10732
f_charbig = '####updated per update statement itself####';
 
10733
        
 
10734
# check trigger-10 success:     1
 
10735
DROP TRIGGER trg_2;
 
10736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10738
f_charbig = CONCAT('===',f_char1,'===');
 
10739
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10740
BEGIN
 
10741
SET new.f_int1 = @my_max1 + @counter,
 
10742
new.f_int2 = @my_min2 - @counter,
 
10743
new.f_charbig = '####updated per insert trigger####';
 
10744
SET @counter = @counter + 1;
 
10745
END|
 
10746
SET @counter = 1;
 
10747
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10748
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10749
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10750
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10752
ORDER BY f_int1;
 
10753
DROP TRIGGER trg_3;
 
10754
        
 
10755
# check trigger-11 success:     1
 
10756
DELETE FROM t1
 
10757
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10758
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10759
AND f_charbig = '####updated per insert trigger####';
 
10760
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10761
BEGIN
 
10762
SET new.f_int1 = @my_max1 + @counter,
 
10763
new.f_int2 = @my_min2 - @counter,
 
10764
new.f_charbig = '####updated per insert trigger####';
 
10765
SET @counter = @counter + 1;
 
10766
END|
 
10767
SET @counter = 1;
 
10768
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10769
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10770
SELECT CAST(f_int1 AS CHAR),
 
10771
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10773
ORDER BY f_int1;
 
10774
DROP TRIGGER trg_3;
 
10775
        
 
10776
# check trigger-12 success:     1
 
10777
DELETE FROM t1
 
10778
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10779
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10780
AND f_charbig = '####updated per insert trigger####';
 
10781
ANALYZE  TABLE t1;
 
10782
Table   Op      Msg_type        Msg_text
 
10783
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
10784
CHECK    TABLE t1 EXTENDED;
 
10785
Table   Op      Msg_type        Msg_text
 
10786
test.t1 check   note    The storage engine for the table doesn't support check
 
10787
CHECKSUM TABLE t1 EXTENDED;
 
10788
Table   Checksum
 
10789
test.t1 <some_value>
 
10790
OPTIMIZE TABLE t1;
 
10791
Table   Op      Msg_type        Msg_text
 
10792
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
10793
# check layout success:    1
 
10794
REPAIR   TABLE t1 EXTENDED;
 
10795
Table   Op      Msg_type        Msg_text
 
10796
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10797
# check layout success:    1
 
10798
TRUNCATE t1;
 
10799
        
 
10800
# check TRUNCATE success:       1
 
10801
# check layout success:    1
 
10802
# End usability test (inc/partition_check.inc)
 
10803
DROP TABLE t1;
 
10804
CREATE TABLE t1 (
 
10805
f_int1 INTEGER,
 
10806
f_int2 INTEGER,
 
10807
f_char1 CHAR(20),
 
10808
f_char2 CHAR(20),
 
10809
f_charbig VARCHAR(1000)
 
10810
 
 
10811
)
 
10812
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
10813
(PARTITION part1 VALUES LESS THAN (0)
 
10814
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
10815
PARTITION part2 VALUES LESS THAN (5)
 
10816
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
10817
PARTITION part3 VALUES LESS THAN (10)
 
10818
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
10819
PARTITION part4 VALUES LESS THAN (2147483646)
 
10820
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
10821
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10822
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10823
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10824
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
10825
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10826
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10827
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10828
# Start usability test (inc/partition_check.inc)
 
10829
create_command
 
10830
SHOW CREATE TABLE t1;
 
10831
Table   Create Table
 
10832
t1      CREATE TABLE `t1` (
 
10833
  `f_int1` int(11) DEFAULT NULL,
 
10834
  `f_int2` int(11) DEFAULT NULL,
 
10835
  `f_char1` char(20) DEFAULT NULL,
 
10836
  `f_char2` char(20) DEFAULT NULL,
 
10837
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10838
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
10839
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
10840
 
 
10841
# check prerequisites-1 success:    1
 
10842
# check COUNT(*) success:    1
 
10843
# check MIN/MAX(f_int1) success:    1
 
10844
# check MIN/MAX(f_int2) success:    1
 
10845
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10846
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10847
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10848
WHERE f_int1 IN (2,3);
 
10849
ERROR 23000: Can't write; duplicate key in table 't1'
 
10850
# check prerequisites-3 success:    1
 
10851
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10852
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10853
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10854
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10855
WHERE f_int1 IN (2,3);
 
10856
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10857
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10858
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10859
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10860
WHERE f_int1 IN (2,3);
 
10861
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10862
# check read via f_int1 success: 1
 
10863
# check read via f_int2 success: 1
 
10864
        
 
10865
# check multiple-1 success:     1
 
10866
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10867
        
 
10868
# check multiple-2 success:     1
 
10869
INSERT INTO t1 SELECT * FROM t0_template
 
10870
WHERE MOD(f_int1,3) = 0;
 
10871
        
 
10872
# check multiple-3 success:     1
 
10873
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10874
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10875
AND @max_row_div2 + @max_row_div4;
 
10876
        
 
10877
# check multiple-4 success:     1
 
10878
DELETE FROM t1
 
10879
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10880
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10881
        
 
10882
# check multiple-5 success:     1
 
10883
SELECT COUNT(*) INTO @try_count FROM t0_template
 
10884
WHERE MOD(f_int1,3) = 0
 
10885
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10886
SELECT COUNT(*) INTO @clash_count
 
10887
FROM t1 INNER JOIN t0_template USING(f_int1)
 
10888
WHERE MOD(f_int1,3) = 0
 
10889
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10890
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10891
INSERT INTO t1
 
10892
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10893
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10894
f_charbig = '#SINGLE#';
 
10895
        
 
10896
# check single-1 success:       1
 
10897
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10898
INSERT INTO t1
 
10899
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10900
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10901
f_charbig = '#SINGLE#';
 
10902
        
 
10903
# check single-2 success:       1
 
10904
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10905
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10906
UPDATE t1 SET f_int1 = @cur_value2
 
10907
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10908
        
 
10909
# check single-3 success:       1
 
10910
SET @cur_value1= -1;
 
10911
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10912
UPDATE t1 SET f_int1 = @cur_value1
 
10913
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10914
        
 
10915
# check single-4 success:       1
 
10916
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10917
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10918
        
 
10919
# check single-5 success:       1
 
10920
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10921
        
 
10922
# check single-6 success:       1
 
10923
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10924
ERROR HY000: Table has no partition for value 2147483647
 
10925
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10926
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10927
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10928
f_charbig = '#NULL#';
 
10929
INSERT INTO t1
 
10930
SET f_int1 = NULL , f_int2 = -@max_row,
 
10931
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10932
f_charbig = '#NULL#';
 
10933
# check null success:    1
 
10934
        
 
10935
# check null-1 success:         1
 
10936
UPDATE t1 SET f_int1 = -@max_row
 
10937
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10938
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10939
        
 
10940
# check null-2 success:         1
 
10941
UPDATE t1 SET f_int1 = NULL
 
10942
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10943
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10944
        
 
10945
# check null-3 success:         1
 
10946
DELETE FROM t1
 
10947
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10948
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10949
        
 
10950
# check null-4 success:         1
 
10951
DELETE FROM t1
 
10952
WHERE f_int1 = 0 AND f_int2 = 0
 
10953
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10954
AND f_charbig = '#NULL#';
 
10955
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10956
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10957
   FROM t0_template source_tab
 
10958
WHERE MOD(f_int1,3) = 0
 
10959
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10960
ON DUPLICATE KEY
 
10961
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10962
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10963
f_charbig = 'was updated';
 
10964
        
 
10965
# check unique-1-a success:     1
 
10966
        
 
10967
# check unique-1-b success:     1
 
10968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10969
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10970
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10971
f_charbig = CONCAT('===',f_char1,'===')
 
10972
WHERE f_charbig = 'was updated';
 
10973
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10974
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10975
   FROM t0_template source_tab
 
10976
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10977
        
 
10978
# check replace success:        1
 
10979
DELETE FROM t1
 
10980
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10981
DELETE FROM t1
 
10982
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10983
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10984
UPDATE t1 SET f_int2 = f_int1,
 
10985
f_char1 = CAST(f_int1 AS CHAR),
 
10986
f_char2 = CAST(f_int1 AS CHAR),
 
10987
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10988
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10989
SET AUTOCOMMIT= 0;
 
10990
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10991
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10992
FROM t0_template source_tab
 
10993
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10994
        
 
10995
# check transactions-1 success:         1
 
10996
COMMIT WORK;
 
10997
        
 
10998
# check transactions-2 success:         1
 
10999
ROLLBACK WORK;
 
11000
        
 
11001
# check transactions-3 success:         1
 
11002
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11003
COMMIT WORK;
 
11004
ROLLBACK WORK;
 
11005
        
 
11006
# check transactions-4 success:         1
 
11007
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11008
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11009
FROM t0_template source_tab
 
11010
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11011
        
 
11012
# check transactions-5 success:         1
 
11013
ROLLBACK WORK;
 
11014
        
 
11015
# check transactions-6 success:         1
 
11016
# INFO: Storage engine used for t1 seems to be transactional.
 
11017
COMMIT;
 
11018
        
 
11019
# check transactions-7 success:         1
 
11020
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11021
COMMIT WORK;
 
11022
SET @@session.sql_mode = 'traditional';
 
11023
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11024
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11025
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11026
'', '', 'was inserted' FROM t0_template
 
11027
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11028
ERROR 22012: Division by 0
 
11029
COMMIT;
 
11030
        
 
11031
# check transactions-8 success:         1
 
11032
# INFO: Storage engine used for t1 seems to be able to revert
 
11033
#       changes made by the failing statement.
 
11034
SET @@session.sql_mode = '';
 
11035
SET AUTOCOMMIT= 1;
 
11036
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11037
COMMIT WORK;
 
11038
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11039
        
 
11040
# check special-1 success:      1
 
11041
UPDATE t1 SET f_charbig = '';
 
11042
        
 
11043
# check special-2 success:      1
 
11044
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11045
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11046
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11049
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11050
'just inserted' FROM t0_template
 
11051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11052
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11053
BEGIN
 
11054
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11055
f_charbig = 'updated by trigger'
 
11056
      WHERE f_int1 = new.f_int1;
 
11057
END|
 
11058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11059
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11061
        
 
11062
# check trigger-1 success:      1
 
11063
DROP TRIGGER trg_1;
 
11064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11066
f_charbig = 'just inserted'
 
11067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11068
DELETE FROM t0_aux
 
11069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11072
'just inserted' FROM t0_template
 
11073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11074
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11075
BEGIN
 
11076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11077
f_charbig = 'updated by trigger'
 
11078
      WHERE f_int1 = new.f_int1;
 
11079
END|
 
11080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11081
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11083
        
 
11084
# check trigger-2 success:      1
 
11085
DROP TRIGGER trg_1;
 
11086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11088
f_charbig = 'just inserted'
 
11089
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11090
DELETE FROM t0_aux
 
11091
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11094
'just inserted' FROM t0_template
 
11095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11096
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11097
BEGIN
 
11098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11099
f_charbig = 'updated by trigger'
 
11100
      WHERE f_int1 = new.f_int1;
 
11101
END|
 
11102
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11103
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11104
        
 
11105
# check trigger-3 success:      1
 
11106
DROP TRIGGER trg_1;
 
11107
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11108
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11109
f_charbig = 'just inserted'
 
11110
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11111
DELETE FROM t0_aux
 
11112
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11114
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11115
'just inserted' FROM t0_template
 
11116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11117
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11118
BEGIN
 
11119
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11120
f_charbig = 'updated by trigger'
 
11121
      WHERE f_int1 = - old.f_int1;
 
11122
END|
 
11123
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11124
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11125
        
 
11126
# check trigger-4 success:      1
 
11127
DROP TRIGGER trg_1;
 
11128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11130
f_charbig = 'just inserted'
 
11131
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11132
DELETE FROM t0_aux
 
11133
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11134
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11135
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11136
'just inserted' FROM t0_template
 
11137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11138
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11139
BEGIN
 
11140
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11141
f_charbig = 'updated by trigger'
 
11142
      WHERE f_int1 = new.f_int1;
 
11143
END|
 
11144
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11145
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11146
        
 
11147
# check trigger-5 success:      1
 
11148
DROP TRIGGER trg_1;
 
11149
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11150
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11151
f_charbig = 'just inserted'
 
11152
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11153
DELETE FROM t0_aux
 
11154
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11156
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11157
'just inserted' FROM t0_template
 
11158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11159
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11160
BEGIN
 
11161
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11162
f_charbig = 'updated by trigger'
 
11163
      WHERE f_int1 = - old.f_int1;
 
11164
END|
 
11165
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11166
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11167
        
 
11168
# check trigger-6 success:      1
 
11169
DROP TRIGGER trg_1;
 
11170
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11171
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11172
f_charbig = 'just inserted'
 
11173
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11174
DELETE FROM t0_aux
 
11175
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11176
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11177
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11178
'just inserted' FROM t0_template
 
11179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11180
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11181
BEGIN
 
11182
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11183
f_charbig = 'updated by trigger'
 
11184
      WHERE f_int1 = - old.f_int1;
 
11185
END|
 
11186
DELETE FROM t0_aux
 
11187
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11188
        
 
11189
# check trigger-7 success:      1
 
11190
DROP TRIGGER trg_1;
 
11191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11193
f_charbig = 'just inserted'
 
11194
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11195
DELETE FROM t0_aux
 
11196
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11199
'just inserted' FROM t0_template
 
11200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11201
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11202
BEGIN
 
11203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11204
f_charbig = 'updated by trigger'
 
11205
      WHERE f_int1 = - old.f_int1;
 
11206
END|
 
11207
DELETE FROM t0_aux
 
11208
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11209
        
 
11210
# check trigger-8 success:      1
 
11211
DROP TRIGGER trg_1;
 
11212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11214
f_charbig = 'just inserted'
 
11215
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11216
DELETE FROM t0_aux
 
11217
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11218
DELETE FROM t1
 
11219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11220
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11221
BEGIN
 
11222
SET new.f_int1 = old.f_int1 + @max_row,
 
11223
new.f_int2 = old.f_int2 - @max_row,
 
11224
new.f_charbig = '####updated per update trigger####';
 
11225
END|
 
11226
UPDATE t1
 
11227
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11228
f_charbig = '####updated per update statement itself####';
 
11229
        
 
11230
# check trigger-9 success:      1
 
11231
DROP TRIGGER trg_2;
 
11232
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11233
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11234
f_charbig = CONCAT('===',f_char1,'===');
 
11235
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11236
BEGIN
 
11237
SET new.f_int1 = new.f_int1 + @max_row,
 
11238
new.f_int2 = new.f_int2 - @max_row,
 
11239
new.f_charbig = '####updated per update trigger####';
 
11240
END|
 
11241
UPDATE t1
 
11242
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11243
f_charbig = '####updated per update statement itself####';
 
11244
        
 
11245
# check trigger-10 success:     1
 
11246
DROP TRIGGER trg_2;
 
11247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11249
f_charbig = CONCAT('===',f_char1,'===');
 
11250
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11251
BEGIN
 
11252
SET new.f_int1 = @my_max1 + @counter,
 
11253
new.f_int2 = @my_min2 - @counter,
 
11254
new.f_charbig = '####updated per insert trigger####';
 
11255
SET @counter = @counter + 1;
 
11256
END|
 
11257
SET @counter = 1;
 
11258
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11259
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11260
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11261
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11263
ORDER BY f_int1;
 
11264
DROP TRIGGER trg_3;
 
11265
        
 
11266
# check trigger-11 success:     1
 
11267
DELETE FROM t1
 
11268
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11269
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11270
AND f_charbig = '####updated per insert trigger####';
 
11271
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11272
BEGIN
 
11273
SET new.f_int1 = @my_max1 + @counter,
 
11274
new.f_int2 = @my_min2 - @counter,
 
11275
new.f_charbig = '####updated per insert trigger####';
 
11276
SET @counter = @counter + 1;
 
11277
END|
 
11278
SET @counter = 1;
 
11279
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11280
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11281
SELECT CAST(f_int1 AS CHAR),
 
11282
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11284
ORDER BY f_int1;
 
11285
DROP TRIGGER trg_3;
 
11286
        
 
11287
# check trigger-12 success:     1
 
11288
DELETE FROM t1
 
11289
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11290
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11291
AND f_charbig = '####updated per insert trigger####';
 
11292
ANALYZE  TABLE t1;
 
11293
Table   Op      Msg_type        Msg_text
 
11294
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
11295
CHECK    TABLE t1 EXTENDED;
 
11296
Table   Op      Msg_type        Msg_text
 
11297
test.t1 check   note    The storage engine for the table doesn't support check
 
11298
CHECKSUM TABLE t1 EXTENDED;
 
11299
Table   Checksum
 
11300
test.t1 <some_value>
 
11301
OPTIMIZE TABLE t1;
 
11302
Table   Op      Msg_type        Msg_text
 
11303
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
11304
# check layout success:    1
 
11305
REPAIR   TABLE t1 EXTENDED;
 
11306
Table   Op      Msg_type        Msg_text
 
11307
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11308
# check layout success:    1
 
11309
TRUNCATE t1;
 
11310
        
 
11311
# check TRUNCATE success:       1
 
11312
# check layout success:    1
 
11313
# End usability test (inc/partition_check.inc)
 
11314
DROP TABLE t1;
 
11315
CREATE TABLE t1 (
 
11316
f_int1 INTEGER,
 
11317
f_int2 INTEGER,
 
11318
f_char1 CHAR(20),
 
11319
f_char2 CHAR(20),
 
11320
f_charbig VARCHAR(1000)
 
11321
 
 
11322
)
 
11323
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
11324
(PARTITION part1 VALUES IN (0)
 
11325
(SUBPARTITION sp11, SUBPARTITION sp12),
 
11326
PARTITION part2 VALUES IN (1)
 
11327
(SUBPARTITION sp21, SUBPARTITION sp22),
 
11328
PARTITION part3 VALUES IN (2)
 
11329
(SUBPARTITION sp31, SUBPARTITION sp32),
 
11330
PARTITION part4 VALUES IN (NULL)
 
11331
(SUBPARTITION sp41, SUBPARTITION sp42));
 
11332
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11333
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11334
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11335
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
11336
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11337
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11338
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11339
# Start usability test (inc/partition_check.inc)
 
11340
create_command
 
11341
SHOW CREATE TABLE t1;
 
11342
Table   Create Table
 
11343
t1      CREATE TABLE `t1` (
 
11344
  `f_int1` int(11) DEFAULT NULL,
 
11345
  `f_int2` int(11) DEFAULT NULL,
 
11346
  `f_char1` char(20) DEFAULT NULL,
 
11347
  `f_char2` char(20) DEFAULT NULL,
 
11348
  `f_charbig` varchar(1000) DEFAULT NULL,
 
11349
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
11350
) ENGINE=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
11351
 
 
11352
# check prerequisites-1 success:    1
 
11353
# check COUNT(*) success:    1
 
11354
# check MIN/MAX(f_int1) success:    1
 
11355
# check MIN/MAX(f_int2) success:    1
 
11356
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11357
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11358
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11359
WHERE f_int1 IN (2,3);
 
11360
ERROR 23000: Can't write; duplicate key in table 't1'
 
11361
# check prerequisites-3 success:    1
 
11362
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
11363
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11364
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11365
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11366
WHERE f_int1 IN (2,3);
 
11367
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11368
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11369
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11370
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11371
WHERE f_int1 IN (2,3);
 
11372
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11373
# check read via f_int1 success: 1
 
11374
# check read via f_int2 success: 1
 
11375
        
 
11376
# check multiple-1 success:     1
 
11377
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11378
        
 
11379
# check multiple-2 success:     1
 
11380
INSERT INTO t1 SELECT * FROM t0_template
 
11381
WHERE MOD(f_int1,3) = 0;
 
11382
        
 
11383
# check multiple-3 success:     1
 
11384
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11385
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11386
AND @max_row_div2 + @max_row_div4;
 
11387
        
 
11388
# check multiple-4 success:     1
 
11389
DELETE FROM t1
 
11390
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11391
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11392
        
 
11393
# check multiple-5 success:     1
 
11394
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11395
WHERE MOD(f_int1,3) = 0
 
11396
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11397
SELECT COUNT(*) INTO @clash_count
 
11398
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11399
WHERE MOD(f_int1,3) = 0
 
11400
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11401
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11402
INSERT INTO t1
 
11403
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11404
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11405
f_charbig = '#SINGLE#';
 
11406
        
 
11407
# check single-1 success:       1
 
11408
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11409
INSERT INTO t1
 
11410
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11411
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11412
f_charbig = '#SINGLE#';
 
11413
        
 
11414
# check single-2 success:       1
 
11415
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11416
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11417
UPDATE t1 SET f_int1 = @cur_value2
 
11418
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11419
        
 
11420
# check single-3 success:       1
 
11421
SET @cur_value1= -1;
 
11422
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11423
UPDATE t1 SET f_int1 = @cur_value1
 
11424
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11425
        
 
11426
# check single-4 success:       1
 
11427
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11428
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11429
        
 
11430
# check single-5 success:       1
 
11431
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11432
        
 
11433
# check single-6 success:       1
 
11434
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11435
        
 
11436
# check single-7 success:       1
 
11437
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11438
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11439
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11440
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11441
f_charbig = '#NULL#';
 
11442
INSERT INTO t1
 
11443
SET f_int1 = NULL , f_int2 = -@max_row,
 
11444
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11445
f_charbig = '#NULL#';
 
11446
# check null success:    1
 
11447
        
 
11448
# check null-1 success:         1
 
11449
UPDATE t1 SET f_int1 = -@max_row
 
11450
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11451
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11452
        
 
11453
# check null-2 success:         1
 
11454
UPDATE t1 SET f_int1 = NULL
 
11455
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11456
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11457
        
 
11458
# check null-3 success:         1
 
11459
DELETE FROM t1
 
11460
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11461
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11462
        
 
11463
# check null-4 success:         1
 
11464
DELETE FROM t1
 
11465
WHERE f_int1 = 0 AND f_int2 = 0
 
11466
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11467
AND f_charbig = '#NULL#';
 
11468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11469
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11470
   FROM t0_template source_tab
 
11471
WHERE MOD(f_int1,3) = 0
 
11472
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
11473
ON DUPLICATE KEY
 
11474
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
11475
f_int2 = 2 * @max_row + source_tab.f_int1,
 
11476
f_charbig = 'was updated';
 
11477
        
 
11478
# check unique-1-a success:     1
 
11479
        
 
11480
# check unique-1-b success:     1
 
11481
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11482
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11483
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11484
f_charbig = CONCAT('===',f_char1,'===')
 
11485
WHERE f_charbig = 'was updated';
 
11486
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11487
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
11488
   FROM t0_template source_tab
 
11489
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11490
        
 
11491
# check replace success:        1
 
11492
DELETE FROM t1
 
11493
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
11494
DELETE FROM t1
 
11495
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
11496
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
11497
UPDATE t1 SET f_int2 = f_int1,
 
11498
f_char1 = CAST(f_int1 AS CHAR),
 
11499
f_char2 = CAST(f_int1 AS CHAR),
 
11500
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
11501
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
11502
SET AUTOCOMMIT= 0;
 
11503
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11504
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11505
FROM t0_template source_tab
 
11506
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11507
        
 
11508
# check transactions-1 success:         1
 
11509
COMMIT WORK;
 
11510
        
 
11511
# check transactions-2 success:         1
 
11512
ROLLBACK WORK;
 
11513
        
 
11514
# check transactions-3 success:         1
 
11515
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11516
COMMIT WORK;
 
11517
ROLLBACK WORK;
 
11518
        
 
11519
# check transactions-4 success:         1
 
11520
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11521
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11522
FROM t0_template source_tab
 
11523
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11524
        
 
11525
# check transactions-5 success:         1
 
11526
ROLLBACK WORK;
 
11527
        
 
11528
# check transactions-6 success:         1
 
11529
# INFO: Storage engine used for t1 seems to be transactional.
 
11530
COMMIT;
 
11531
        
 
11532
# check transactions-7 success:         1
 
11533
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11534
COMMIT WORK;
 
11535
SET @@session.sql_mode = 'traditional';
 
11536
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11538
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11539
'', '', 'was inserted' FROM t0_template
 
11540
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11541
ERROR 22012: Division by 0
 
11542
COMMIT;
 
11543
        
 
11544
# check transactions-8 success:         1
 
11545
# INFO: Storage engine used for t1 seems to be able to revert
 
11546
#       changes made by the failing statement.
 
11547
SET @@session.sql_mode = '';
 
11548
SET AUTOCOMMIT= 1;
 
11549
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11550
COMMIT WORK;
 
11551
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11552
        
 
11553
# check special-1 success:      1
 
11554
UPDATE t1 SET f_charbig = '';
 
11555
        
 
11556
# check special-2 success:      1
 
11557
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11558
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11559
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11561
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11562
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11563
'just inserted' FROM t0_template
 
11564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11565
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11566
BEGIN
 
11567
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11568
f_charbig = 'updated by trigger'
 
11569
      WHERE f_int1 = new.f_int1;
 
11570
END|
 
11571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11572
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11573
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11574
        
 
11575
# check trigger-1 success:      1
 
11576
DROP TRIGGER trg_1;
 
11577
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11578
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11579
f_charbig = 'just inserted'
 
11580
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11581
DELETE FROM t0_aux
 
11582
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11583
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11584
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11585
'just inserted' FROM t0_template
 
11586
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11587
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11588
BEGIN
 
11589
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11590
f_charbig = 'updated by trigger'
 
11591
      WHERE f_int1 = new.f_int1;
 
11592
END|
 
11593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11594
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11596
        
 
11597
# check trigger-2 success:      1
 
11598
DROP TRIGGER trg_1;
 
11599
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11600
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11601
f_charbig = 'just inserted'
 
11602
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11603
DELETE FROM t0_aux
 
11604
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11605
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11606
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11607
'just inserted' FROM t0_template
 
11608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11609
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11610
BEGIN
 
11611
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11612
f_charbig = 'updated by trigger'
 
11613
      WHERE f_int1 = new.f_int1;
 
11614
END|
 
11615
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11616
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11617
        
 
11618
# check trigger-3 success:      1
 
11619
DROP TRIGGER trg_1;
 
11620
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11621
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11622
f_charbig = 'just inserted'
 
11623
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11624
DELETE FROM t0_aux
 
11625
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11627
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11628
'just inserted' FROM t0_template
 
11629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11630
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11631
BEGIN
 
11632
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11633
f_charbig = 'updated by trigger'
 
11634
      WHERE f_int1 = - old.f_int1;
 
11635
END|
 
11636
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11637
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11638
        
 
11639
# check trigger-4 success:      1
 
11640
DROP TRIGGER trg_1;
 
11641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11643
f_charbig = 'just inserted'
 
11644
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11645
DELETE FROM t0_aux
 
11646
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11647
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11648
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11649
'just inserted' FROM t0_template
 
11650
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11651
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11652
BEGIN
 
11653
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11654
f_charbig = 'updated by trigger'
 
11655
      WHERE f_int1 = new.f_int1;
 
11656
END|
 
11657
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11658
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11659
        
 
11660
# check trigger-5 success:      1
 
11661
DROP TRIGGER trg_1;
 
11662
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11663
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11664
f_charbig = 'just inserted'
 
11665
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11666
DELETE FROM t0_aux
 
11667
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11668
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11669
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11670
'just inserted' FROM t0_template
 
11671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11672
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11673
BEGIN
 
11674
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11675
f_charbig = 'updated by trigger'
 
11676
      WHERE f_int1 = - old.f_int1;
 
11677
END|
 
11678
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11679
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11680
        
 
11681
# check trigger-6 success:      1
 
11682
DROP TRIGGER trg_1;
 
11683
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11684
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11685
f_charbig = 'just inserted'
 
11686
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11687
DELETE FROM t0_aux
 
11688
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11689
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11690
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11691
'just inserted' FROM t0_template
 
11692
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11693
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11694
BEGIN
 
11695
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11696
f_charbig = 'updated by trigger'
 
11697
      WHERE f_int1 = - old.f_int1;
 
11698
END|
 
11699
DELETE FROM t0_aux
 
11700
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11701
        
 
11702
# check trigger-7 success:      1
 
11703
DROP TRIGGER trg_1;
 
11704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11706
f_charbig = 'just inserted'
 
11707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11708
DELETE FROM t0_aux
 
11709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11712
'just inserted' FROM t0_template
 
11713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11714
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11715
BEGIN
 
11716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11717
f_charbig = 'updated by trigger'
 
11718
      WHERE f_int1 = - old.f_int1;
 
11719
END|
 
11720
DELETE FROM t0_aux
 
11721
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11722
        
 
11723
# check trigger-8 success:      1
 
11724
DROP TRIGGER trg_1;
 
11725
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11726
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11727
f_charbig = 'just inserted'
 
11728
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11729
DELETE FROM t0_aux
 
11730
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11731
DELETE FROM t1
 
11732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11733
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11734
BEGIN
 
11735
SET new.f_int1 = old.f_int1 + @max_row,
 
11736
new.f_int2 = old.f_int2 - @max_row,
 
11737
new.f_charbig = '####updated per update trigger####';
 
11738
END|
 
11739
UPDATE t1
 
11740
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11741
f_charbig = '####updated per update statement itself####';
 
11742
        
 
11743
# check trigger-9 success:      1
 
11744
DROP TRIGGER trg_2;
 
11745
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11746
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11747
f_charbig = CONCAT('===',f_char1,'===');
 
11748
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11749
BEGIN
 
11750
SET new.f_int1 = new.f_int1 + @max_row,
 
11751
new.f_int2 = new.f_int2 - @max_row,
 
11752
new.f_charbig = '####updated per update trigger####';
 
11753
END|
 
11754
UPDATE t1
 
11755
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11756
f_charbig = '####updated per update statement itself####';
 
11757
        
 
11758
# check trigger-10 success:     1
 
11759
DROP TRIGGER trg_2;
 
11760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11762
f_charbig = CONCAT('===',f_char1,'===');
 
11763
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11764
BEGIN
 
11765
SET new.f_int1 = @my_max1 + @counter,
 
11766
new.f_int2 = @my_min2 - @counter,
 
11767
new.f_charbig = '####updated per insert trigger####';
 
11768
SET @counter = @counter + 1;
 
11769
END|
 
11770
SET @counter = 1;
 
11771
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11772
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11773
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11774
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11775
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11776
ORDER BY f_int1;
 
11777
DROP TRIGGER trg_3;
 
11778
        
 
11779
# check trigger-11 success:     1
 
11780
DELETE FROM t1
 
11781
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11782
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11783
AND f_charbig = '####updated per insert trigger####';
 
11784
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11785
BEGIN
 
11786
SET new.f_int1 = @my_max1 + @counter,
 
11787
new.f_int2 = @my_min2 - @counter,
 
11788
new.f_charbig = '####updated per insert trigger####';
 
11789
SET @counter = @counter + 1;
 
11790
END|
 
11791
SET @counter = 1;
 
11792
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11793
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11794
SELECT CAST(f_int1 AS CHAR),
 
11795
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11796
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11797
ORDER BY f_int1;
 
11798
DROP TRIGGER trg_3;
 
11799
        
 
11800
# check trigger-12 success:     1
 
11801
DELETE FROM t1
 
11802
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11803
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11804
AND f_charbig = '####updated per insert trigger####';
 
11805
ANALYZE  TABLE t1;
 
11806
Table   Op      Msg_type        Msg_text
 
11807
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
11808
CHECK    TABLE t1 EXTENDED;
 
11809
Table   Op      Msg_type        Msg_text
 
11810
test.t1 check   note    The storage engine for the table doesn't support check
 
11811
CHECKSUM TABLE t1 EXTENDED;
 
11812
Table   Checksum
 
11813
test.t1 <some_value>
 
11814
OPTIMIZE TABLE t1;
 
11815
Table   Op      Msg_type        Msg_text
 
11816
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
11817
# check layout success:    1
 
11818
REPAIR   TABLE t1 EXTENDED;
 
11819
Table   Op      Msg_type        Msg_text
 
11820
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11821
# check layout success:    1
 
11822
TRUNCATE t1;
 
11823
        
 
11824
# check TRUNCATE success:       1
 
11825
# check layout success:    1
 
11826
# End usability test (inc/partition_check.inc)
 
11827
DROP TABLE t1;
 
11828
CREATE TABLE t1 (
 
11829
f_int1 INTEGER,
 
11830
f_int2 INTEGER,
 
11831
f_char1 CHAR(20),
 
11832
f_char2 CHAR(20),
 
11833
f_charbig VARCHAR(1000)
 
11834
 
 
11835
)
 
11836
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
11837
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
11838
(PARTITION part1 VALUES IN (0),
 
11839
 PARTITION part2 VALUES IN (1),
 
11840
 PARTITION part3 VALUES IN (NULL));
 
11841
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11842
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11843
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11844
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
11845
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11846
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11847
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11848
# Start usability test (inc/partition_check.inc)
 
11849
create_command
 
11850
SHOW CREATE TABLE t1;
 
11851
Table   Create Table
 
11852
t1      CREATE TABLE `t1` (
 
11853
  `f_int1` int(11) DEFAULT NULL,
 
11854
  `f_int2` int(11) DEFAULT NULL,
 
11855
  `f_char1` char(20) DEFAULT NULL,
 
11856
  `f_char2` char(20) DEFAULT NULL,
 
11857
  `f_charbig` varchar(1000) DEFAULT NULL,
 
11858
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
11859
) ENGINE=InnoDB 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 = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
11860
 
 
11861
# check prerequisites-1 success:    1
 
11862
# check COUNT(*) success:    1
 
11863
# check MIN/MAX(f_int1) success:    1
 
11864
# check MIN/MAX(f_int2) success:    1
 
11865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11866
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11867
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11868
WHERE f_int1 IN (2,3);
 
11869
ERROR 23000: Can't write; duplicate key in table 't1'
 
11870
# check prerequisites-3 success:    1
 
11871
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
11872
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11873
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11874
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11875
WHERE f_int1 IN (2,3);
 
11876
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11878
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11879
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11880
WHERE f_int1 IN (2,3);
 
11881
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11882
# check read via f_int1 success: 1
 
11883
# check read via f_int2 success: 1
 
11884
        
 
11885
# check multiple-1 success:     1
 
11886
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11887
        
 
11888
# check multiple-2 success:     1
 
11889
INSERT INTO t1 SELECT * FROM t0_template
 
11890
WHERE MOD(f_int1,3) = 0;
 
11891
        
 
11892
# check multiple-3 success:     1
 
11893
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11894
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11895
AND @max_row_div2 + @max_row_div4;
 
11896
        
 
11897
# check multiple-4 success:     1
 
11898
DELETE FROM t1
 
11899
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11900
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11901
        
 
11902
# check multiple-5 success:     1
 
11903
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11904
WHERE MOD(f_int1,3) = 0
 
11905
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11906
SELECT COUNT(*) INTO @clash_count
 
11907
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11908
WHERE MOD(f_int1,3) = 0
 
11909
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11910
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11911
INSERT INTO t1
 
11912
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11913
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11914
f_charbig = '#SINGLE#';
 
11915
        
 
11916
# check single-1 success:       1
 
11917
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11918
INSERT INTO t1
 
11919
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11920
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11921
f_charbig = '#SINGLE#';
 
11922
        
 
11923
# check single-2 success:       1
 
11924
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11925
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11926
UPDATE t1 SET f_int1 = @cur_value2
 
11927
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11928
        
 
11929
# check single-3 success:       1
 
11930
SET @cur_value1= -1;
 
11931
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11932
UPDATE t1 SET f_int1 = @cur_value1
 
11933
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11934
        
 
11935
# check single-4 success:       1
 
11936
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11937
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11938
        
 
11939
# check single-5 success:       1
 
11940
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11941
        
 
11942
# check single-6 success:       1
 
11943
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11944
        
 
11945
# check single-7 success:       1
 
11946
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11947
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11948
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11949
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11950
f_charbig = '#NULL#';
 
11951
INSERT INTO t1
 
11952
SET f_int1 = NULL , f_int2 = -@max_row,
 
11953
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11954
f_charbig = '#NULL#';
 
11955
# check null success:    1
 
11956
        
 
11957
# check null-1 success:         1
 
11958
UPDATE t1 SET f_int1 = -@max_row
 
11959
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11960
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11961
        
 
11962
# check null-2 success:         1
 
11963
UPDATE t1 SET f_int1 = NULL
 
11964
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11965
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11966
        
 
11967
# check null-3 success:         1
 
11968
DELETE FROM t1
 
11969
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11970
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11971
        
 
11972
# check null-4 success:         1
 
11973
DELETE FROM t1
 
11974
WHERE f_int1 = 0 AND f_int2 = 0
 
11975
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11976
AND f_charbig = '#NULL#';
 
11977
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11978
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11979
   FROM t0_template source_tab
 
11980
WHERE MOD(f_int1,3) = 0
 
11981
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
11982
ON DUPLICATE KEY
 
11983
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
11984
f_int2 = 2 * @max_row + source_tab.f_int1,
 
11985
f_charbig = 'was updated';
 
11986
        
 
11987
# check unique-1-a success:     1
 
11988
        
 
11989
# check unique-1-b success:     1
 
11990
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11992
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11993
f_charbig = CONCAT('===',f_char1,'===')
 
11994
WHERE f_charbig = 'was updated';
 
11995
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11996
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
11997
   FROM t0_template source_tab
 
11998
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11999
        
 
12000
# check replace success:        1
 
12001
DELETE FROM t1
 
12002
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12003
DELETE FROM t1
 
12004
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12005
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12006
UPDATE t1 SET f_int2 = f_int1,
 
12007
f_char1 = CAST(f_int1 AS CHAR),
 
12008
f_char2 = CAST(f_int1 AS CHAR),
 
12009
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12010
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12011
SET AUTOCOMMIT= 0;
 
12012
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12013
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12014
FROM t0_template source_tab
 
12015
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12016
        
 
12017
# check transactions-1 success:         1
 
12018
COMMIT WORK;
 
12019
        
 
12020
# check transactions-2 success:         1
 
12021
ROLLBACK WORK;
 
12022
        
 
12023
# check transactions-3 success:         1
 
12024
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12025
COMMIT WORK;
 
12026
ROLLBACK WORK;
 
12027
        
 
12028
# check transactions-4 success:         1
 
12029
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12030
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12031
FROM t0_template source_tab
 
12032
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12033
        
 
12034
# check transactions-5 success:         1
 
12035
ROLLBACK WORK;
 
12036
        
 
12037
# check transactions-6 success:         1
 
12038
# INFO: Storage engine used for t1 seems to be transactional.
 
12039
COMMIT;
 
12040
        
 
12041
# check transactions-7 success:         1
 
12042
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12043
COMMIT WORK;
 
12044
SET @@session.sql_mode = 'traditional';
 
12045
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12046
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12047
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12048
'', '', 'was inserted' FROM t0_template
 
12049
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12050
ERROR 22012: Division by 0
 
12051
COMMIT;
 
12052
        
 
12053
# check transactions-8 success:         1
 
12054
# INFO: Storage engine used for t1 seems to be able to revert
 
12055
#       changes made by the failing statement.
 
12056
SET @@session.sql_mode = '';
 
12057
SET AUTOCOMMIT= 1;
 
12058
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12059
COMMIT WORK;
 
12060
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12061
        
 
12062
# check special-1 success:      1
 
12063
UPDATE t1 SET f_charbig = '';
 
12064
        
 
12065
# check special-2 success:      1
 
12066
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12067
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12068
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12072
'just inserted' FROM t0_template
 
12073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12074
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12075
BEGIN
 
12076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12077
f_charbig = 'updated by trigger'
 
12078
      WHERE f_int1 = new.f_int1;
 
12079
END|
 
12080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12081
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12083
        
 
12084
# check trigger-1 success:      1
 
12085
DROP TRIGGER trg_1;
 
12086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12088
f_charbig = 'just inserted'
 
12089
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12090
DELETE FROM t0_aux
 
12091
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12094
'just inserted' FROM t0_template
 
12095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12096
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12097
BEGIN
 
12098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12099
f_charbig = 'updated by trigger'
 
12100
      WHERE f_int1 = new.f_int1;
 
12101
END|
 
12102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12103
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12105
        
 
12106
# check trigger-2 success:      1
 
12107
DROP TRIGGER trg_1;
 
12108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12110
f_charbig = 'just inserted'
 
12111
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12112
DELETE FROM t0_aux
 
12113
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12116
'just inserted' FROM t0_template
 
12117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12118
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12119
BEGIN
 
12120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12121
f_charbig = 'updated by trigger'
 
12122
      WHERE f_int1 = new.f_int1;
 
12123
END|
 
12124
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12125
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12126
        
 
12127
# check trigger-3 success:      1
 
12128
DROP TRIGGER trg_1;
 
12129
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12130
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12131
f_charbig = 'just inserted'
 
12132
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12133
DELETE FROM t0_aux
 
12134
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12136
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12137
'just inserted' FROM t0_template
 
12138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12139
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12140
BEGIN
 
12141
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12142
f_charbig = 'updated by trigger'
 
12143
      WHERE f_int1 = - old.f_int1;
 
12144
END|
 
12145
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12146
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12147
        
 
12148
# check trigger-4 success:      1
 
12149
DROP TRIGGER trg_1;
 
12150
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12151
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12152
f_charbig = 'just inserted'
 
12153
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12154
DELETE FROM t0_aux
 
12155
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12156
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12157
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12158
'just inserted' FROM t0_template
 
12159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12160
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12161
BEGIN
 
12162
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12163
f_charbig = 'updated by trigger'
 
12164
      WHERE f_int1 = new.f_int1;
 
12165
END|
 
12166
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12167
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12168
        
 
12169
# check trigger-5 success:      1
 
12170
DROP TRIGGER trg_1;
 
12171
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12172
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12173
f_charbig = 'just inserted'
 
12174
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12175
DELETE FROM t0_aux
 
12176
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12178
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12179
'just inserted' FROM t0_template
 
12180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12181
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12182
BEGIN
 
12183
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12184
f_charbig = 'updated by trigger'
 
12185
      WHERE f_int1 = - old.f_int1;
 
12186
END|
 
12187
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12188
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12189
        
 
12190
# check trigger-6 success:      1
 
12191
DROP TRIGGER trg_1;
 
12192
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12193
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12194
f_charbig = 'just inserted'
 
12195
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12196
DELETE FROM t0_aux
 
12197
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12198
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12199
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12200
'just inserted' FROM t0_template
 
12201
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12202
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12203
BEGIN
 
12204
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12205
f_charbig = 'updated by trigger'
 
12206
      WHERE f_int1 = - old.f_int1;
 
12207
END|
 
12208
DELETE FROM t0_aux
 
12209
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12210
        
 
12211
# check trigger-7 success:      1
 
12212
DROP TRIGGER trg_1;
 
12213
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12214
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12215
f_charbig = 'just inserted'
 
12216
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12217
DELETE FROM t0_aux
 
12218
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12220
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12221
'just inserted' FROM t0_template
 
12222
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12223
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12224
BEGIN
 
12225
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12226
f_charbig = 'updated by trigger'
 
12227
      WHERE f_int1 = - old.f_int1;
 
12228
END|
 
12229
DELETE FROM t0_aux
 
12230
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12231
        
 
12232
# check trigger-8 success:      1
 
12233
DROP TRIGGER trg_1;
 
12234
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12235
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12236
f_charbig = 'just inserted'
 
12237
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12238
DELETE FROM t0_aux
 
12239
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12240
DELETE FROM t1
 
12241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12242
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12243
BEGIN
 
12244
SET new.f_int1 = old.f_int1 + @max_row,
 
12245
new.f_int2 = old.f_int2 - @max_row,
 
12246
new.f_charbig = '####updated per update trigger####';
 
12247
END|
 
12248
UPDATE t1
 
12249
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12250
f_charbig = '####updated per update statement itself####';
 
12251
        
 
12252
# check trigger-9 success:      1
 
12253
DROP TRIGGER trg_2;
 
12254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12256
f_charbig = CONCAT('===',f_char1,'===');
 
12257
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12258
BEGIN
 
12259
SET new.f_int1 = new.f_int1 + @max_row,
 
12260
new.f_int2 = new.f_int2 - @max_row,
 
12261
new.f_charbig = '####updated per update trigger####';
 
12262
END|
 
12263
UPDATE t1
 
12264
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12265
f_charbig = '####updated per update statement itself####';
 
12266
        
 
12267
# check trigger-10 success:     1
 
12268
DROP TRIGGER trg_2;
 
12269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12271
f_charbig = CONCAT('===',f_char1,'===');
 
12272
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12273
BEGIN
 
12274
SET new.f_int1 = @my_max1 + @counter,
 
12275
new.f_int2 = @my_min2 - @counter,
 
12276
new.f_charbig = '####updated per insert trigger####';
 
12277
SET @counter = @counter + 1;
 
12278
END|
 
12279
SET @counter = 1;
 
12280
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12281
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12282
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12283
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12285
ORDER BY f_int1;
 
12286
DROP TRIGGER trg_3;
 
12287
        
 
12288
# check trigger-11 success:     1
 
12289
DELETE FROM t1
 
12290
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12291
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12292
AND f_charbig = '####updated per insert trigger####';
 
12293
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12294
BEGIN
 
12295
SET new.f_int1 = @my_max1 + @counter,
 
12296
new.f_int2 = @my_min2 - @counter,
 
12297
new.f_charbig = '####updated per insert trigger####';
 
12298
SET @counter = @counter + 1;
 
12299
END|
 
12300
SET @counter = 1;
 
12301
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12302
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12303
SELECT CAST(f_int1 AS CHAR),
 
12304
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12306
ORDER BY f_int1;
 
12307
DROP TRIGGER trg_3;
 
12308
        
 
12309
# check trigger-12 success:     1
 
12310
DELETE FROM t1
 
12311
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12312
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12313
AND f_charbig = '####updated per insert trigger####';
 
12314
ANALYZE  TABLE t1;
 
12315
Table   Op      Msg_type        Msg_text
 
12316
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
12317
CHECK    TABLE t1 EXTENDED;
 
12318
Table   Op      Msg_type        Msg_text
 
12319
test.t1 check   note    The storage engine for the table doesn't support check
 
12320
CHECKSUM TABLE t1 EXTENDED;
 
12321
Table   Checksum
 
12322
test.t1 <some_value>
 
12323
OPTIMIZE TABLE t1;
 
12324
Table   Op      Msg_type        Msg_text
 
12325
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
12326
# check layout success:    1
 
12327
REPAIR   TABLE t1 EXTENDED;
 
12328
Table   Op      Msg_type        Msg_text
 
12329
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12330
# check layout success:    1
 
12331
TRUNCATE t1;
 
12332
        
 
12333
# check TRUNCATE success:       1
 
12334
# check layout success:    1
 
12335
# End usability test (inc/partition_check.inc)
 
12336
DROP TABLE t1;
 
12337
DROP TABLE IF EXISTS t1;
 
12338
CREATE TABLE t1 (
 
12339
f_int1 INTEGER,
 
12340
f_int2 INTEGER,
 
12341
f_char1 CHAR(20),
 
12342
f_char2 CHAR(20),
 
12343
f_charbig VARCHAR(1000)
 
12344
 
 
12345
)
 
12346
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
12347
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12348
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12349
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12350
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
12351
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12352
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12353
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12354
# Start usability test (inc/partition_check.inc)
 
12355
create_command
 
12356
SHOW CREATE TABLE t1;
 
12357
Table   Create Table
 
12358
t1      CREATE TABLE `t1` (
 
12359
  `f_int1` int(11) DEFAULT NULL,
 
12360
  `f_int2` int(11) DEFAULT NULL,
 
12361
  `f_char1` char(20) DEFAULT NULL,
 
12362
  `f_char2` char(20) DEFAULT NULL,
 
12363
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12364
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
12365
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
12366
 
 
12367
# check prerequisites-1 success:    1
 
12368
# check COUNT(*) success:    1
 
12369
# check MIN/MAX(f_int1) success:    1
 
12370
# check MIN/MAX(f_int2) success:    1
 
12371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12372
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12373
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12374
WHERE f_int1 IN (2,3);
 
12375
ERROR 23000: Can't write; duplicate key in table 't1'
 
12376
# check prerequisites-3 success:    1
 
12377
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12379
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12380
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12381
WHERE f_int1 IN (2,3);
 
12382
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12383
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12384
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12385
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12386
WHERE f_int1 IN (2,3);
 
12387
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12388
# check read via f_int1 success: 1
 
12389
# check read via f_int2 success: 1
 
12390
        
 
12391
# check multiple-1 success:     1
 
12392
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12393
        
 
12394
# check multiple-2 success:     1
 
12395
INSERT INTO t1 SELECT * FROM t0_template
 
12396
WHERE MOD(f_int1,3) = 0;
 
12397
        
 
12398
# check multiple-3 success:     1
 
12399
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12400
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12401
AND @max_row_div2 + @max_row_div4;
 
12402
        
 
12403
# check multiple-4 success:     1
 
12404
DELETE FROM t1
 
12405
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12406
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12407
        
 
12408
# check multiple-5 success:     1
 
12409
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12410
WHERE MOD(f_int1,3) = 0
 
12411
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12412
SELECT COUNT(*) INTO @clash_count
 
12413
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12414
WHERE MOD(f_int1,3) = 0
 
12415
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12416
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12417
INSERT INTO t1
 
12418
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12419
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12420
f_charbig = '#SINGLE#';
 
12421
        
 
12422
# check single-1 success:       1
 
12423
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12424
INSERT INTO t1
 
12425
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12426
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12427
f_charbig = '#SINGLE#';
 
12428
        
 
12429
# check single-2 success:       1
 
12430
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12431
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12432
UPDATE t1 SET f_int1 = @cur_value2
 
12433
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12434
        
 
12435
# check single-3 success:       1
 
12436
SET @cur_value1= -1;
 
12437
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12438
UPDATE t1 SET f_int1 = @cur_value1
 
12439
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12440
        
 
12441
# check single-4 success:       1
 
12442
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12443
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12444
        
 
12445
# check single-5 success:       1
 
12446
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12447
        
 
12448
# check single-6 success:       1
 
12449
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12450
        
 
12451
# check single-7 success:       1
 
12452
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12453
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12454
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12455
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12456
f_charbig = '#NULL#';
 
12457
INSERT INTO t1
 
12458
SET f_int1 = NULL , f_int2 = -@max_row,
 
12459
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12460
f_charbig = '#NULL#';
 
12461
# check null success:    1
 
12462
        
 
12463
# check null-1 success:         1
 
12464
UPDATE t1 SET f_int1 = -@max_row
 
12465
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12466
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12467
        
 
12468
# check null-2 success:         1
 
12469
UPDATE t1 SET f_int1 = NULL
 
12470
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12471
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12472
        
 
12473
# check null-3 success:         1
 
12474
DELETE FROM t1
 
12475
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12476
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12477
        
 
12478
# check null-4 success:         1
 
12479
DELETE FROM t1
 
12480
WHERE f_int1 = 0 AND f_int2 = 0
 
12481
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12482
AND f_charbig = '#NULL#';
 
12483
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12484
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12485
   FROM t0_template source_tab
 
12486
WHERE MOD(f_int1,3) = 0
 
12487
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12488
ON DUPLICATE KEY
 
12489
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12490
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12491
f_charbig = 'was updated';
 
12492
        
 
12493
# check unique-1-a success:     1
 
12494
        
 
12495
# check unique-1-b success:     1
 
12496
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12499
f_charbig = CONCAT('===',f_char1,'===')
 
12500
WHERE f_charbig = 'was updated';
 
12501
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12502
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
12503
   FROM t0_template source_tab
 
12504
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12505
        
 
12506
# check replace success:        1
 
12507
DELETE FROM t1
 
12508
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12509
DELETE FROM t1
 
12510
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12511
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12512
UPDATE t1 SET f_int2 = f_int1,
 
12513
f_char1 = CAST(f_int1 AS CHAR),
 
12514
f_char2 = CAST(f_int1 AS CHAR),
 
12515
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12516
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12517
SET AUTOCOMMIT= 0;
 
12518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12519
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12520
FROM t0_template source_tab
 
12521
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12522
        
 
12523
# check transactions-1 success:         1
 
12524
COMMIT WORK;
 
12525
        
 
12526
# check transactions-2 success:         1
 
12527
ROLLBACK WORK;
 
12528
        
 
12529
# check transactions-3 success:         1
 
12530
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12531
COMMIT WORK;
 
12532
ROLLBACK WORK;
 
12533
        
 
12534
# check transactions-4 success:         1
 
12535
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12536
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12537
FROM t0_template source_tab
 
12538
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12539
        
 
12540
# check transactions-5 success:         1
 
12541
ROLLBACK WORK;
 
12542
        
 
12543
# check transactions-6 success:         1
 
12544
# INFO: Storage engine used for t1 seems to be transactional.
 
12545
COMMIT;
 
12546
        
 
12547
# check transactions-7 success:         1
 
12548
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12549
COMMIT WORK;
 
12550
SET @@session.sql_mode = 'traditional';
 
12551
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12552
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12553
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12554
'', '', 'was inserted' FROM t0_template
 
12555
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12556
ERROR 22012: Division by 0
 
12557
COMMIT;
 
12558
        
 
12559
# check transactions-8 success:         1
 
12560
# INFO: Storage engine used for t1 seems to be able to revert
 
12561
#       changes made by the failing statement.
 
12562
SET @@session.sql_mode = '';
 
12563
SET AUTOCOMMIT= 1;
 
12564
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12565
COMMIT WORK;
 
12566
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12567
        
 
12568
# check special-1 success:      1
 
12569
UPDATE t1 SET f_charbig = '';
 
12570
        
 
12571
# check special-2 success:      1
 
12572
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12573
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12574
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12576
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12577
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12578
'just inserted' FROM t0_template
 
12579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12580
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12581
BEGIN
 
12582
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12583
f_charbig = 'updated by trigger'
 
12584
      WHERE f_int1 = new.f_int1;
 
12585
END|
 
12586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12587
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12589
        
 
12590
# check trigger-1 success:      1
 
12591
DROP TRIGGER trg_1;
 
12592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12593
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12594
f_charbig = 'just inserted'
 
12595
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12596
DELETE FROM t0_aux
 
12597
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12598
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12599
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12600
'just inserted' FROM t0_template
 
12601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12602
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12603
BEGIN
 
12604
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12605
f_charbig = 'updated by trigger'
 
12606
      WHERE f_int1 = new.f_int1;
 
12607
END|
 
12608
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12609
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12611
        
 
12612
# check trigger-2 success:      1
 
12613
DROP TRIGGER trg_1;
 
12614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12616
f_charbig = 'just inserted'
 
12617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12618
DELETE FROM t0_aux
 
12619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12622
'just inserted' FROM t0_template
 
12623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12624
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12625
BEGIN
 
12626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12627
f_charbig = 'updated by trigger'
 
12628
      WHERE f_int1 = new.f_int1;
 
12629
END|
 
12630
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12632
        
 
12633
# check trigger-3 success:      1
 
12634
DROP TRIGGER trg_1;
 
12635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12637
f_charbig = 'just inserted'
 
12638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12639
DELETE FROM t0_aux
 
12640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12643
'just inserted' FROM t0_template
 
12644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12645
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12646
BEGIN
 
12647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12648
f_charbig = 'updated by trigger'
 
12649
      WHERE f_int1 = - old.f_int1;
 
12650
END|
 
12651
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12653
        
 
12654
# check trigger-4 success:      1
 
12655
DROP TRIGGER trg_1;
 
12656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12658
f_charbig = 'just inserted'
 
12659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12660
DELETE FROM t0_aux
 
12661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12664
'just inserted' FROM t0_template
 
12665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12666
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12667
BEGIN
 
12668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12669
f_charbig = 'updated by trigger'
 
12670
      WHERE f_int1 = new.f_int1;
 
12671
END|
 
12672
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12674
        
 
12675
# check trigger-5 success:      1
 
12676
DROP TRIGGER trg_1;
 
12677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12679
f_charbig = 'just inserted'
 
12680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12681
DELETE FROM t0_aux
 
12682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12685
'just inserted' FROM t0_template
 
12686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12687
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12688
BEGIN
 
12689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12690
f_charbig = 'updated by trigger'
 
12691
      WHERE f_int1 = - old.f_int1;
 
12692
END|
 
12693
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12695
        
 
12696
# check trigger-6 success:      1
 
12697
DROP TRIGGER trg_1;
 
12698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12700
f_charbig = 'just inserted'
 
12701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12702
DELETE FROM t0_aux
 
12703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12706
'just inserted' FROM t0_template
 
12707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12708
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12709
BEGIN
 
12710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12711
f_charbig = 'updated by trigger'
 
12712
      WHERE f_int1 = - old.f_int1;
 
12713
END|
 
12714
DELETE FROM t0_aux
 
12715
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12716
        
 
12717
# check trigger-7 success:      1
 
12718
DROP TRIGGER trg_1;
 
12719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12721
f_charbig = 'just inserted'
 
12722
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12723
DELETE FROM t0_aux
 
12724
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12725
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12726
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12727
'just inserted' FROM t0_template
 
12728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12729
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12730
BEGIN
 
12731
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12732
f_charbig = 'updated by trigger'
 
12733
      WHERE f_int1 = - old.f_int1;
 
12734
END|
 
12735
DELETE FROM t0_aux
 
12736
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12737
        
 
12738
# check trigger-8 success:      1
 
12739
DROP TRIGGER trg_1;
 
12740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12742
f_charbig = 'just inserted'
 
12743
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12744
DELETE FROM t0_aux
 
12745
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12746
DELETE FROM t1
 
12747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12748
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12749
BEGIN
 
12750
SET new.f_int1 = old.f_int1 + @max_row,
 
12751
new.f_int2 = old.f_int2 - @max_row,
 
12752
new.f_charbig = '####updated per update trigger####';
 
12753
END|
 
12754
UPDATE t1
 
12755
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12756
f_charbig = '####updated per update statement itself####';
 
12757
        
 
12758
# check trigger-9 success:      1
 
12759
DROP TRIGGER trg_2;
 
12760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12762
f_charbig = CONCAT('===',f_char1,'===');
 
12763
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12764
BEGIN
 
12765
SET new.f_int1 = new.f_int1 + @max_row,
 
12766
new.f_int2 = new.f_int2 - @max_row,
 
12767
new.f_charbig = '####updated per update trigger####';
 
12768
END|
 
12769
UPDATE t1
 
12770
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12771
f_charbig = '####updated per update statement itself####';
 
12772
        
 
12773
# check trigger-10 success:     1
 
12774
DROP TRIGGER trg_2;
 
12775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12777
f_charbig = CONCAT('===',f_char1,'===');
 
12778
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12779
BEGIN
 
12780
SET new.f_int1 = @my_max1 + @counter,
 
12781
new.f_int2 = @my_min2 - @counter,
 
12782
new.f_charbig = '####updated per insert trigger####';
 
12783
SET @counter = @counter + 1;
 
12784
END|
 
12785
SET @counter = 1;
 
12786
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12787
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12788
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12789
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12791
ORDER BY f_int1;
 
12792
DROP TRIGGER trg_3;
 
12793
        
 
12794
# check trigger-11 success:     1
 
12795
DELETE FROM t1
 
12796
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12797
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12798
AND f_charbig = '####updated per insert trigger####';
 
12799
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12800
BEGIN
 
12801
SET new.f_int1 = @my_max1 + @counter,
 
12802
new.f_int2 = @my_min2 - @counter,
 
12803
new.f_charbig = '####updated per insert trigger####';
 
12804
SET @counter = @counter + 1;
 
12805
END|
 
12806
SET @counter = 1;
 
12807
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12808
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12809
SELECT CAST(f_int1 AS CHAR),
 
12810
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12811
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12812
ORDER BY f_int1;
 
12813
DROP TRIGGER trg_3;
 
12814
        
 
12815
# check trigger-12 success:     1
 
12816
DELETE FROM t1
 
12817
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12818
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12819
AND f_charbig = '####updated per insert trigger####';
 
12820
ANALYZE  TABLE t1;
 
12821
Table   Op      Msg_type        Msg_text
 
12822
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
12823
CHECK    TABLE t1 EXTENDED;
 
12824
Table   Op      Msg_type        Msg_text
 
12825
test.t1 check   note    The storage engine for the table doesn't support check
 
12826
CHECKSUM TABLE t1 EXTENDED;
 
12827
Table   Checksum
 
12828
test.t1 <some_value>
 
12829
OPTIMIZE TABLE t1;
 
12830
Table   Op      Msg_type        Msg_text
 
12831
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
12832
# check layout success:    1
 
12833
REPAIR   TABLE t1 EXTENDED;
 
12834
Table   Op      Msg_type        Msg_text
 
12835
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12836
# check layout success:    1
 
12837
TRUNCATE t1;
 
12838
        
 
12839
# check TRUNCATE success:       1
 
12840
# check layout success:    1
 
12841
# End usability test (inc/partition_check.inc)
 
12842
DROP TABLE t1;
 
12843
CREATE TABLE t1 (
 
12844
f_int1 INTEGER,
 
12845
f_int2 INTEGER,
 
12846
f_char1 CHAR(20),
 
12847
f_char2 CHAR(20),
 
12848
f_charbig VARCHAR(1000)
 
12849
 
 
12850
)
 
12851
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
12852
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12853
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12854
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12855
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
12856
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12857
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12858
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12859
# Start usability test (inc/partition_check.inc)
 
12860
create_command
 
12861
SHOW CREATE TABLE t1;
 
12862
Table   Create Table
 
12863
t1      CREATE TABLE `t1` (
 
12864
  `f_int1` int(11) DEFAULT NULL,
 
12865
  `f_int2` int(11) DEFAULT NULL,
 
12866
  `f_char1` char(20) DEFAULT NULL,
 
12867
  `f_char2` char(20) DEFAULT NULL,
 
12868
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12869
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
12870
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
12871
 
 
12872
# check prerequisites-1 success:    1
 
12873
# check COUNT(*) success:    1
 
12874
# check MIN/MAX(f_int1) success:    1
 
12875
# check MIN/MAX(f_int2) success:    1
 
12876
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12877
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12878
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12879
WHERE f_int1 IN (2,3);
 
12880
ERROR 23000: Can't write; duplicate key in table 't1'
 
12881
# check prerequisites-3 success:    1
 
12882
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12884
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12885
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12886
WHERE f_int1 IN (2,3);
 
12887
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12888
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12889
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12890
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12891
WHERE f_int1 IN (2,3);
 
12892
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12893
# check read via f_int1 success: 1
 
12894
# check read via f_int2 success: 1
 
12895
        
 
12896
# check multiple-1 success:     1
 
12897
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12898
        
 
12899
# check multiple-2 success:     1
 
12900
INSERT INTO t1 SELECT * FROM t0_template
 
12901
WHERE MOD(f_int1,3) = 0;
 
12902
        
 
12903
# check multiple-3 success:     1
 
12904
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12905
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12906
AND @max_row_div2 + @max_row_div4;
 
12907
        
 
12908
# check multiple-4 success:     1
 
12909
DELETE FROM t1
 
12910
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12911
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12912
        
 
12913
# check multiple-5 success:     1
 
12914
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12915
WHERE MOD(f_int1,3) = 0
 
12916
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12917
SELECT COUNT(*) INTO @clash_count
 
12918
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12919
WHERE MOD(f_int1,3) = 0
 
12920
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12921
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12922
INSERT INTO t1
 
12923
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12924
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12925
f_charbig = '#SINGLE#';
 
12926
        
 
12927
# check single-1 success:       1
 
12928
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12929
INSERT INTO t1
 
12930
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12931
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12932
f_charbig = '#SINGLE#';
 
12933
        
 
12934
# check single-2 success:       1
 
12935
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12936
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12937
UPDATE t1 SET f_int1 = @cur_value2
 
12938
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12939
        
 
12940
# check single-3 success:       1
 
12941
SET @cur_value1= -1;
 
12942
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12943
UPDATE t1 SET f_int1 = @cur_value1
 
12944
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12945
        
 
12946
# check single-4 success:       1
 
12947
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12948
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12949
        
 
12950
# check single-5 success:       1
 
12951
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12952
        
 
12953
# check single-6 success:       1
 
12954
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12955
        
 
12956
# check single-7 success:       1
 
12957
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12958
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12959
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12960
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12961
f_charbig = '#NULL#';
 
12962
INSERT INTO t1
 
12963
SET f_int1 = NULL , f_int2 = -@max_row,
 
12964
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12965
f_charbig = '#NULL#';
 
12966
# check null success:    1
 
12967
        
 
12968
# check null-1 success:         1
 
12969
UPDATE t1 SET f_int1 = -@max_row
 
12970
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12971
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12972
        
 
12973
# check null-2 success:         1
 
12974
UPDATE t1 SET f_int1 = NULL
 
12975
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12976
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12977
        
 
12978
# check null-3 success:         1
 
12979
DELETE FROM t1
 
12980
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12981
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12982
        
 
12983
# check null-4 success:         1
 
12984
DELETE FROM t1
 
12985
WHERE f_int1 = 0 AND f_int2 = 0
 
12986
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12987
AND f_charbig = '#NULL#';
 
12988
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12989
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12990
   FROM t0_template source_tab
 
12991
WHERE MOD(f_int1,3) = 0
 
12992
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12993
ON DUPLICATE KEY
 
12994
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12995
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12996
f_charbig = 'was updated';
 
12997
        
 
12998
# check unique-1-a success:     1
 
12999
        
 
13000
# check unique-1-b success:     1
 
13001
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13003
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13004
f_charbig = CONCAT('===',f_char1,'===')
 
13005
WHERE f_charbig = 'was updated';
 
13006
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13007
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13008
   FROM t0_template source_tab
 
13009
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13010
        
 
13011
# check replace success:        1
 
13012
DELETE FROM t1
 
13013
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13014
DELETE FROM t1
 
13015
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13016
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13017
UPDATE t1 SET f_int2 = f_int1,
 
13018
f_char1 = CAST(f_int1 AS CHAR),
 
13019
f_char2 = CAST(f_int1 AS CHAR),
 
13020
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13021
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13022
SET AUTOCOMMIT= 0;
 
13023
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13024
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13025
FROM t0_template source_tab
 
13026
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13027
        
 
13028
# check transactions-1 success:         1
 
13029
COMMIT WORK;
 
13030
        
 
13031
# check transactions-2 success:         1
 
13032
ROLLBACK WORK;
 
13033
        
 
13034
# check transactions-3 success:         1
 
13035
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13036
COMMIT WORK;
 
13037
ROLLBACK WORK;
 
13038
        
 
13039
# check transactions-4 success:         1
 
13040
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13041
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13042
FROM t0_template source_tab
 
13043
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13044
        
 
13045
# check transactions-5 success:         1
 
13046
ROLLBACK WORK;
 
13047
        
 
13048
# check transactions-6 success:         1
 
13049
# INFO: Storage engine used for t1 seems to be transactional.
 
13050
COMMIT;
 
13051
        
 
13052
# check transactions-7 success:         1
 
13053
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13054
COMMIT WORK;
 
13055
SET @@session.sql_mode = 'traditional';
 
13056
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13057
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13058
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13059
'', '', 'was inserted' FROM t0_template
 
13060
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13061
ERROR 22012: Division by 0
 
13062
COMMIT;
 
13063
        
 
13064
# check transactions-8 success:         1
 
13065
# INFO: Storage engine used for t1 seems to be able to revert
 
13066
#       changes made by the failing statement.
 
13067
SET @@session.sql_mode = '';
 
13068
SET AUTOCOMMIT= 1;
 
13069
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13070
COMMIT WORK;
 
13071
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13072
        
 
13073
# check special-1 success:      1
 
13074
UPDATE t1 SET f_charbig = '';
 
13075
        
 
13076
# check special-2 success:      1
 
13077
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13078
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13079
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13083
'just inserted' FROM t0_template
 
13084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13085
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13086
BEGIN
 
13087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13088
f_charbig = 'updated by trigger'
 
13089
      WHERE f_int1 = new.f_int1;
 
13090
END|
 
13091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13092
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13094
        
 
13095
# check trigger-1 success:      1
 
13096
DROP TRIGGER trg_1;
 
13097
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13098
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13099
f_charbig = 'just inserted'
 
13100
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13101
DELETE FROM t0_aux
 
13102
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13103
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13104
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13105
'just inserted' FROM t0_template
 
13106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13107
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13108
BEGIN
 
13109
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13110
f_charbig = 'updated by trigger'
 
13111
      WHERE f_int1 = new.f_int1;
 
13112
END|
 
13113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13114
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13116
        
 
13117
# check trigger-2 success:      1
 
13118
DROP TRIGGER trg_1;
 
13119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13121
f_charbig = 'just inserted'
 
13122
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13123
DELETE FROM t0_aux
 
13124
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13127
'just inserted' FROM t0_template
 
13128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13129
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13130
BEGIN
 
13131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13132
f_charbig = 'updated by trigger'
 
13133
      WHERE f_int1 = new.f_int1;
 
13134
END|
 
13135
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13136
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13137
        
 
13138
# check trigger-3 success:      1
 
13139
DROP TRIGGER trg_1;
 
13140
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13141
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13142
f_charbig = 'just inserted'
 
13143
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13144
DELETE FROM t0_aux
 
13145
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13147
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13148
'just inserted' FROM t0_template
 
13149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13150
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13151
BEGIN
 
13152
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13153
f_charbig = 'updated by trigger'
 
13154
      WHERE f_int1 = - old.f_int1;
 
13155
END|
 
13156
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13157
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13158
        
 
13159
# check trigger-4 success:      1
 
13160
DROP TRIGGER trg_1;
 
13161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13163
f_charbig = 'just inserted'
 
13164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13165
DELETE FROM t0_aux
 
13166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13169
'just inserted' FROM t0_template
 
13170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13171
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13172
BEGIN
 
13173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13174
f_charbig = 'updated by trigger'
 
13175
      WHERE f_int1 = new.f_int1;
 
13176
END|
 
13177
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13178
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13179
        
 
13180
# check trigger-5 success:      1
 
13181
DROP TRIGGER trg_1;
 
13182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13184
f_charbig = 'just inserted'
 
13185
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13186
DELETE FROM t0_aux
 
13187
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13189
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13190
'just inserted' FROM t0_template
 
13191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13192
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13193
BEGIN
 
13194
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13195
f_charbig = 'updated by trigger'
 
13196
      WHERE f_int1 = - old.f_int1;
 
13197
END|
 
13198
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13199
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13200
        
 
13201
# check trigger-6 success:      1
 
13202
DROP TRIGGER trg_1;
 
13203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13205
f_charbig = 'just inserted'
 
13206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13207
DELETE FROM t0_aux
 
13208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13211
'just inserted' FROM t0_template
 
13212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13213
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13214
BEGIN
 
13215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13216
f_charbig = 'updated by trigger'
 
13217
      WHERE f_int1 = - old.f_int1;
 
13218
END|
 
13219
DELETE FROM t0_aux
 
13220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13221
        
 
13222
# check trigger-7 success:      1
 
13223
DROP TRIGGER trg_1;
 
13224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13226
f_charbig = 'just inserted'
 
13227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13228
DELETE FROM t0_aux
 
13229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13230
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13231
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13232
'just inserted' FROM t0_template
 
13233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13234
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13235
BEGIN
 
13236
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13237
f_charbig = 'updated by trigger'
 
13238
      WHERE f_int1 = - old.f_int1;
 
13239
END|
 
13240
DELETE FROM t0_aux
 
13241
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13242
        
 
13243
# check trigger-8 success:      1
 
13244
DROP TRIGGER trg_1;
 
13245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13247
f_charbig = 'just inserted'
 
13248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13249
DELETE FROM t0_aux
 
13250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13251
DELETE FROM t1
 
13252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13253
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13254
BEGIN
 
13255
SET new.f_int1 = old.f_int1 + @max_row,
 
13256
new.f_int2 = old.f_int2 - @max_row,
 
13257
new.f_charbig = '####updated per update trigger####';
 
13258
END|
 
13259
UPDATE t1
 
13260
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13261
f_charbig = '####updated per update statement itself####';
 
13262
        
 
13263
# check trigger-9 success:      1
 
13264
DROP TRIGGER trg_2;
 
13265
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13266
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13267
f_charbig = CONCAT('===',f_char1,'===');
 
13268
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13269
BEGIN
 
13270
SET new.f_int1 = new.f_int1 + @max_row,
 
13271
new.f_int2 = new.f_int2 - @max_row,
 
13272
new.f_charbig = '####updated per update trigger####';
 
13273
END|
 
13274
UPDATE t1
 
13275
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13276
f_charbig = '####updated per update statement itself####';
 
13277
        
 
13278
# check trigger-10 success:     1
 
13279
DROP TRIGGER trg_2;
 
13280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13282
f_charbig = CONCAT('===',f_char1,'===');
 
13283
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13284
BEGIN
 
13285
SET new.f_int1 = @my_max1 + @counter,
 
13286
new.f_int2 = @my_min2 - @counter,
 
13287
new.f_charbig = '####updated per insert trigger####';
 
13288
SET @counter = @counter + 1;
 
13289
END|
 
13290
SET @counter = 1;
 
13291
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13292
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13293
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13294
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13295
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13296
ORDER BY f_int1;
 
13297
DROP TRIGGER trg_3;
 
13298
        
 
13299
# check trigger-11 success:     1
 
13300
DELETE FROM t1
 
13301
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13302
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13303
AND f_charbig = '####updated per insert trigger####';
 
13304
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13305
BEGIN
 
13306
SET new.f_int1 = @my_max1 + @counter,
 
13307
new.f_int2 = @my_min2 - @counter,
 
13308
new.f_charbig = '####updated per insert trigger####';
 
13309
SET @counter = @counter + 1;
 
13310
END|
 
13311
SET @counter = 1;
 
13312
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13313
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13314
SELECT CAST(f_int1 AS CHAR),
 
13315
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13316
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13317
ORDER BY f_int1;
 
13318
DROP TRIGGER trg_3;
 
13319
        
 
13320
# check trigger-12 success:     1
 
13321
DELETE FROM t1
 
13322
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13323
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13324
AND f_charbig = '####updated per insert trigger####';
 
13325
ANALYZE  TABLE t1;
 
13326
Table   Op      Msg_type        Msg_text
 
13327
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
13328
CHECK    TABLE t1 EXTENDED;
 
13329
Table   Op      Msg_type        Msg_text
 
13330
test.t1 check   note    The storage engine for the table doesn't support check
 
13331
CHECKSUM TABLE t1 EXTENDED;
 
13332
Table   Checksum
 
13333
test.t1 <some_value>
 
13334
OPTIMIZE TABLE t1;
 
13335
Table   Op      Msg_type        Msg_text
 
13336
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
13337
# check layout success:    1
 
13338
REPAIR   TABLE t1 EXTENDED;
 
13339
Table   Op      Msg_type        Msg_text
 
13340
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13341
# check layout success:    1
 
13342
TRUNCATE t1;
 
13343
        
 
13344
# check TRUNCATE success:       1
 
13345
# check layout success:    1
 
13346
# End usability test (inc/partition_check.inc)
 
13347
DROP TABLE t1;
 
13348
CREATE TABLE t1 (
 
13349
f_int1 INTEGER,
 
13350
f_int2 INTEGER,
 
13351
f_char1 CHAR(20),
 
13352
f_char2 CHAR(20),
 
13353
f_charbig VARCHAR(1000)
 
13354
 
 
13355
)
 
13356
PARTITION BY LIST(MOD(f_int1,4))
 
13357
(PARTITION part_3 VALUES IN (-3),
 
13358
PARTITION part_2 VALUES IN (-2),
 
13359
PARTITION part_1 VALUES IN (-1),
 
13360
PARTITION part_N VALUES IN (NULL),
 
13361
PARTITION part0 VALUES IN (0),
 
13362
PARTITION part1 VALUES IN (1),
 
13363
PARTITION part2 VALUES IN (2),
 
13364
PARTITION part3 VALUES IN (3));
 
13365
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13366
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13367
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13368
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
13369
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13370
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13371
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13372
# Start usability test (inc/partition_check.inc)
 
13373
create_command
 
13374
SHOW CREATE TABLE t1;
 
13375
Table   Create Table
 
13376
t1      CREATE TABLE `t1` (
 
13377
  `f_int1` int(11) DEFAULT NULL,
 
13378
  `f_int2` int(11) DEFAULT NULL,
 
13379
  `f_char1` char(20) DEFAULT NULL,
 
13380
  `f_char2` char(20) DEFAULT NULL,
 
13381
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13382
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
13383
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
13384
 
 
13385
# check prerequisites-1 success:    1
 
13386
# check COUNT(*) success:    1
 
13387
# check MIN/MAX(f_int1) success:    1
 
13388
# check MIN/MAX(f_int2) success:    1
 
13389
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13390
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13391
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13392
WHERE f_int1 IN (2,3);
 
13393
ERROR 23000: Can't write; duplicate key in table 't1'
 
13394
# check prerequisites-3 success:    1
 
13395
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
13396
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13397
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13398
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13399
WHERE f_int1 IN (2,3);
 
13400
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13401
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13402
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13403
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13404
WHERE f_int1 IN (2,3);
 
13405
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13406
# check read via f_int1 success: 1
 
13407
# check read via f_int2 success: 1
 
13408
        
 
13409
# check multiple-1 success:     1
 
13410
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13411
        
 
13412
# check multiple-2 success:     1
 
13413
INSERT INTO t1 SELECT * FROM t0_template
 
13414
WHERE MOD(f_int1,3) = 0;
 
13415
        
 
13416
# check multiple-3 success:     1
 
13417
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13418
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13419
AND @max_row_div2 + @max_row_div4;
 
13420
        
 
13421
# check multiple-4 success:     1
 
13422
DELETE FROM t1
 
13423
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13424
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13425
        
 
13426
# check multiple-5 success:     1
 
13427
SELECT COUNT(*) INTO @try_count FROM t0_template
 
13428
WHERE MOD(f_int1,3) = 0
 
13429
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13430
SELECT COUNT(*) INTO @clash_count
 
13431
FROM t1 INNER JOIN t0_template USING(f_int1)
 
13432
WHERE MOD(f_int1,3) = 0
 
13433
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13434
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13435
INSERT INTO t1
 
13436
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13437
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13438
f_charbig = '#SINGLE#';
 
13439
        
 
13440
# check single-1 success:       1
 
13441
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13442
INSERT INTO t1
 
13443
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13444
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13445
f_charbig = '#SINGLE#';
 
13446
        
 
13447
# check single-2 success:       1
 
13448
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13449
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13450
UPDATE t1 SET f_int1 = @cur_value2
 
13451
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13452
        
 
13453
# check single-3 success:       1
 
13454
SET @cur_value1= -1;
 
13455
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13456
UPDATE t1 SET f_int1 = @cur_value1
 
13457
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13458
        
 
13459
# check single-4 success:       1
 
13460
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13461
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13462
        
 
13463
# check single-5 success:       1
 
13464
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13465
        
 
13466
# check single-6 success:       1
 
13467
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13468
        
 
13469
# check single-7 success:       1
 
13470
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13471
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13472
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13473
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13474
f_charbig = '#NULL#';
 
13475
INSERT INTO t1
 
13476
SET f_int1 = NULL , f_int2 = -@max_row,
 
13477
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13478
f_charbig = '#NULL#';
 
13479
# check null success:    1
 
13480
        
 
13481
# check null-1 success:         1
 
13482
UPDATE t1 SET f_int1 = -@max_row
 
13483
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13484
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13485
        
 
13486
# check null-2 success:         1
 
13487
UPDATE t1 SET f_int1 = NULL
 
13488
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13489
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13490
        
 
13491
# check null-3 success:         1
 
13492
DELETE FROM t1
 
13493
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13494
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13495
        
 
13496
# check null-4 success:         1
 
13497
DELETE FROM t1
 
13498
WHERE f_int1 = 0 AND f_int2 = 0
 
13499
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13500
AND f_charbig = '#NULL#';
 
13501
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13502
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13503
   FROM t0_template source_tab
 
13504
WHERE MOD(f_int1,3) = 0
 
13505
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
13506
ON DUPLICATE KEY
 
13507
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
13508
f_int2 = 2 * @max_row + source_tab.f_int1,
 
13509
f_charbig = 'was updated';
 
13510
        
 
13511
# check unique-1-a success:     1
 
13512
        
 
13513
# check unique-1-b success:     1
 
13514
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13515
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13516
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13517
f_charbig = CONCAT('===',f_char1,'===')
 
13518
WHERE f_charbig = 'was updated';
 
13519
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13520
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13521
   FROM t0_template source_tab
 
13522
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13523
        
 
13524
# check replace success:        1
 
13525
DELETE FROM t1
 
13526
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13527
DELETE FROM t1
 
13528
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13529
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13530
UPDATE t1 SET f_int2 = f_int1,
 
13531
f_char1 = CAST(f_int1 AS CHAR),
 
13532
f_char2 = CAST(f_int1 AS CHAR),
 
13533
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13534
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13535
SET AUTOCOMMIT= 0;
 
13536
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13537
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13538
FROM t0_template source_tab
 
13539
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13540
        
 
13541
# check transactions-1 success:         1
 
13542
COMMIT WORK;
 
13543
        
 
13544
# check transactions-2 success:         1
 
13545
ROLLBACK WORK;
 
13546
        
 
13547
# check transactions-3 success:         1
 
13548
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13549
COMMIT WORK;
 
13550
ROLLBACK WORK;
 
13551
        
 
13552
# check transactions-4 success:         1
 
13553
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13554
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13555
FROM t0_template source_tab
 
13556
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13557
        
 
13558
# check transactions-5 success:         1
 
13559
ROLLBACK WORK;
 
13560
        
 
13561
# check transactions-6 success:         1
 
13562
# INFO: Storage engine used for t1 seems to be transactional.
 
13563
COMMIT;
 
13564
        
 
13565
# check transactions-7 success:         1
 
13566
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13567
COMMIT WORK;
 
13568
SET @@session.sql_mode = 'traditional';
 
13569
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13570
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13571
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13572
'', '', 'was inserted' FROM t0_template
 
13573
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13574
ERROR 22012: Division by 0
 
13575
COMMIT;
 
13576
        
 
13577
# check transactions-8 success:         1
 
13578
# INFO: Storage engine used for t1 seems to be able to revert
 
13579
#       changes made by the failing statement.
 
13580
SET @@session.sql_mode = '';
 
13581
SET AUTOCOMMIT= 1;
 
13582
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13583
COMMIT WORK;
 
13584
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13585
        
 
13586
# check special-1 success:      1
 
13587
UPDATE t1 SET f_charbig = '';
 
13588
        
 
13589
# check special-2 success:      1
 
13590
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13591
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13592
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13593
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13594
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13595
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13596
'just inserted' FROM t0_template
 
13597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13598
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13599
BEGIN
 
13600
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13601
f_charbig = 'updated by trigger'
 
13602
      WHERE f_int1 = new.f_int1;
 
13603
END|
 
13604
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13605
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13607
        
 
13608
# check trigger-1 success:      1
 
13609
DROP TRIGGER trg_1;
 
13610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13612
f_charbig = 'just inserted'
 
13613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13614
DELETE FROM t0_aux
 
13615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13618
'just inserted' FROM t0_template
 
13619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13620
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13621
BEGIN
 
13622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13623
f_charbig = 'updated by trigger'
 
13624
      WHERE f_int1 = new.f_int1;
 
13625
END|
 
13626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13627
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13629
        
 
13630
# check trigger-2 success:      1
 
13631
DROP TRIGGER trg_1;
 
13632
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13633
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13634
f_charbig = 'just inserted'
 
13635
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13636
DELETE FROM t0_aux
 
13637
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13638
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13639
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13640
'just inserted' FROM t0_template
 
13641
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13642
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13643
BEGIN
 
13644
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13645
f_charbig = 'updated by trigger'
 
13646
      WHERE f_int1 = new.f_int1;
 
13647
END|
 
13648
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13649
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13650
        
 
13651
# check trigger-3 success:      1
 
13652
DROP TRIGGER trg_1;
 
13653
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13654
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13655
f_charbig = 'just inserted'
 
13656
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13657
DELETE FROM t0_aux
 
13658
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13659
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13660
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13661
'just inserted' FROM t0_template
 
13662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13663
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13664
BEGIN
 
13665
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13666
f_charbig = 'updated by trigger'
 
13667
      WHERE f_int1 = - old.f_int1;
 
13668
END|
 
13669
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13670
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13671
        
 
13672
# check trigger-4 success:      1
 
13673
DROP TRIGGER trg_1;
 
13674
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13675
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13676
f_charbig = 'just inserted'
 
13677
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13678
DELETE FROM t0_aux
 
13679
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13680
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13681
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13682
'just inserted' FROM t0_template
 
13683
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13684
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13685
BEGIN
 
13686
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13687
f_charbig = 'updated by trigger'
 
13688
      WHERE f_int1 = new.f_int1;
 
13689
END|
 
13690
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13691
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13692
        
 
13693
# check trigger-5 success:      1
 
13694
DROP TRIGGER trg_1;
 
13695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13697
f_charbig = 'just inserted'
 
13698
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13699
DELETE FROM t0_aux
 
13700
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13702
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13703
'just inserted' FROM t0_template
 
13704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13705
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13706
BEGIN
 
13707
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13708
f_charbig = 'updated by trigger'
 
13709
      WHERE f_int1 = - old.f_int1;
 
13710
END|
 
13711
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13712
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13713
        
 
13714
# check trigger-6 success:      1
 
13715
DROP TRIGGER trg_1;
 
13716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13718
f_charbig = 'just inserted'
 
13719
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13720
DELETE FROM t0_aux
 
13721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13722
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13723
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13724
'just inserted' FROM t0_template
 
13725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13726
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13727
BEGIN
 
13728
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13729
f_charbig = 'updated by trigger'
 
13730
      WHERE f_int1 = - old.f_int1;
 
13731
END|
 
13732
DELETE FROM t0_aux
 
13733
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13734
        
 
13735
# check trigger-7 success:      1
 
13736
DROP TRIGGER trg_1;
 
13737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13739
f_charbig = 'just inserted'
 
13740
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13741
DELETE FROM t0_aux
 
13742
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13743
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13744
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13745
'just inserted' FROM t0_template
 
13746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13747
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13748
BEGIN
 
13749
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13750
f_charbig = 'updated by trigger'
 
13751
      WHERE f_int1 = - old.f_int1;
 
13752
END|
 
13753
DELETE FROM t0_aux
 
13754
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13755
        
 
13756
# check trigger-8 success:      1
 
13757
DROP TRIGGER trg_1;
 
13758
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13759
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13760
f_charbig = 'just inserted'
 
13761
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13762
DELETE FROM t0_aux
 
13763
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13764
DELETE FROM t1
 
13765
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13766
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13767
BEGIN
 
13768
SET new.f_int1 = old.f_int1 + @max_row,
 
13769
new.f_int2 = old.f_int2 - @max_row,
 
13770
new.f_charbig = '####updated per update trigger####';
 
13771
END|
 
13772
UPDATE t1
 
13773
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13774
f_charbig = '####updated per update statement itself####';
 
13775
        
 
13776
# check trigger-9 success:      1
 
13777
DROP TRIGGER trg_2;
 
13778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13780
f_charbig = CONCAT('===',f_char1,'===');
 
13781
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13782
BEGIN
 
13783
SET new.f_int1 = new.f_int1 + @max_row,
 
13784
new.f_int2 = new.f_int2 - @max_row,
 
13785
new.f_charbig = '####updated per update trigger####';
 
13786
END|
 
13787
UPDATE t1
 
13788
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13789
f_charbig = '####updated per update statement itself####';
 
13790
        
 
13791
# check trigger-10 success:     1
 
13792
DROP TRIGGER trg_2;
 
13793
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13794
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13795
f_charbig = CONCAT('===',f_char1,'===');
 
13796
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13797
BEGIN
 
13798
SET new.f_int1 = @my_max1 + @counter,
 
13799
new.f_int2 = @my_min2 - @counter,
 
13800
new.f_charbig = '####updated per insert trigger####';
 
13801
SET @counter = @counter + 1;
 
13802
END|
 
13803
SET @counter = 1;
 
13804
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13805
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13806
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13807
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13809
ORDER BY f_int1;
 
13810
DROP TRIGGER trg_3;
 
13811
        
 
13812
# check trigger-11 success:     1
 
13813
DELETE FROM t1
 
13814
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13815
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13816
AND f_charbig = '####updated per insert trigger####';
 
13817
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13818
BEGIN
 
13819
SET new.f_int1 = @my_max1 + @counter,
 
13820
new.f_int2 = @my_min2 - @counter,
 
13821
new.f_charbig = '####updated per insert trigger####';
 
13822
SET @counter = @counter + 1;
 
13823
END|
 
13824
SET @counter = 1;
 
13825
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13826
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13827
SELECT CAST(f_int1 AS CHAR),
 
13828
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13829
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13830
ORDER BY f_int1;
 
13831
DROP TRIGGER trg_3;
 
13832
        
 
13833
# check trigger-12 success:     1
 
13834
DELETE FROM t1
 
13835
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13836
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13837
AND f_charbig = '####updated per insert trigger####';
 
13838
ANALYZE  TABLE t1;
 
13839
Table   Op      Msg_type        Msg_text
 
13840
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
13841
CHECK    TABLE t1 EXTENDED;
 
13842
Table   Op      Msg_type        Msg_text
 
13843
test.t1 check   note    The storage engine for the table doesn't support check
 
13844
CHECKSUM TABLE t1 EXTENDED;
 
13845
Table   Checksum
 
13846
test.t1 <some_value>
 
13847
OPTIMIZE TABLE t1;
 
13848
Table   Op      Msg_type        Msg_text
 
13849
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
13850
# check layout success:    1
 
13851
REPAIR   TABLE t1 EXTENDED;
 
13852
Table   Op      Msg_type        Msg_text
 
13853
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13854
# check layout success:    1
 
13855
TRUNCATE t1;
 
13856
        
 
13857
# check TRUNCATE success:       1
 
13858
# check layout success:    1
 
13859
# End usability test (inc/partition_check.inc)
 
13860
DROP TABLE t1;
 
13861
CREATE TABLE t1 (
 
13862
f_int1 INTEGER,
 
13863
f_int2 INTEGER,
 
13864
f_char1 CHAR(20),
 
13865
f_char2 CHAR(20),
 
13866
f_charbig VARCHAR(1000)
 
13867
 
 
13868
)
 
13869
PARTITION BY RANGE(f_int1)
 
13870
(PARTITION parta VALUES LESS THAN (0),
 
13871
PARTITION partb VALUES LESS THAN (5),
 
13872
PARTITION partc VALUES LESS THAN (10),
 
13873
PARTITION partd VALUES LESS THAN (10 + 5),
 
13874
PARTITION parte VALUES LESS THAN (20),
 
13875
PARTITION partf VALUES LESS THAN (2147483646));
 
13876
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13877
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13878
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13879
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
13880
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13881
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13882
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13883
# Start usability test (inc/partition_check.inc)
 
13884
create_command
 
13885
SHOW CREATE TABLE t1;
 
13886
Table   Create Table
 
13887
t1      CREATE TABLE `t1` (
 
13888
  `f_int1` int(11) DEFAULT NULL,
 
13889
  `f_int2` int(11) DEFAULT NULL,
 
13890
  `f_char1` char(20) DEFAULT NULL,
 
13891
  `f_char2` char(20) DEFAULT NULL,
 
13892
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13893
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
13894
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
13895
 
 
13896
# check prerequisites-1 success:    1
 
13897
# check COUNT(*) success:    1
 
13898
# check MIN/MAX(f_int1) success:    1
 
13899
# check MIN/MAX(f_int2) success:    1
 
13900
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13901
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13902
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13903
WHERE f_int1 IN (2,3);
 
13904
ERROR 23000: Can't write; duplicate key in table 't1'
 
13905
# check prerequisites-3 success:    1
 
13906
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
13907
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13908
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13909
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13910
WHERE f_int1 IN (2,3);
 
13911
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13912
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13913
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13914
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13915
WHERE f_int1 IN (2,3);
 
13916
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13917
# check read via f_int1 success: 1
 
13918
# check read via f_int2 success: 1
 
13919
        
 
13920
# check multiple-1 success:     1
 
13921
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13922
        
 
13923
# check multiple-2 success:     1
 
13924
INSERT INTO t1 SELECT * FROM t0_template
 
13925
WHERE MOD(f_int1,3) = 0;
 
13926
        
 
13927
# check multiple-3 success:     1
 
13928
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13929
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13930
AND @max_row_div2 + @max_row_div4;
 
13931
        
 
13932
# check multiple-4 success:     1
 
13933
DELETE FROM t1
 
13934
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13935
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13936
        
 
13937
# check multiple-5 success:     1
 
13938
SELECT COUNT(*) INTO @try_count FROM t0_template
 
13939
WHERE MOD(f_int1,3) = 0
 
13940
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13941
SELECT COUNT(*) INTO @clash_count
 
13942
FROM t1 INNER JOIN t0_template USING(f_int1)
 
13943
WHERE MOD(f_int1,3) = 0
 
13944
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13945
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13946
INSERT INTO t1
 
13947
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13948
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13949
f_charbig = '#SINGLE#';
 
13950
        
 
13951
# check single-1 success:       1
 
13952
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13953
INSERT INTO t1
 
13954
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13955
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13956
f_charbig = '#SINGLE#';
 
13957
        
 
13958
# check single-2 success:       1
 
13959
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13960
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13961
UPDATE t1 SET f_int1 = @cur_value2
 
13962
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13963
        
 
13964
# check single-3 success:       1
 
13965
SET @cur_value1= -1;
 
13966
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13967
UPDATE t1 SET f_int1 = @cur_value1
 
13968
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13969
        
 
13970
# check single-4 success:       1
 
13971
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13972
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13973
        
 
13974
# check single-5 success:       1
 
13975
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13976
        
 
13977
# check single-6 success:       1
 
13978
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13979
ERROR HY000: Table has no partition for value 2147483647
 
13980
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13981
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13982
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13983
f_charbig = '#NULL#';
 
13984
INSERT INTO t1
 
13985
SET f_int1 = NULL , f_int2 = -@max_row,
 
13986
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13987
f_charbig = '#NULL#';
 
13988
# check null success:    1
 
13989
        
 
13990
# check null-1 success:         1
 
13991
UPDATE t1 SET f_int1 = -@max_row
 
13992
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13993
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13994
        
 
13995
# check null-2 success:         1
 
13996
UPDATE t1 SET f_int1 = NULL
 
13997
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13998
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13999
        
 
14000
# check null-3 success:         1
 
14001
DELETE FROM t1
 
14002
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14003
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14004
        
 
14005
# check null-4 success:         1
 
14006
DELETE FROM t1
 
14007
WHERE f_int1 = 0 AND f_int2 = 0
 
14008
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14009
AND f_charbig = '#NULL#';
 
14010
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14011
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14012
   FROM t0_template source_tab
 
14013
WHERE MOD(f_int1,3) = 0
 
14014
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14015
ON DUPLICATE KEY
 
14016
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14017
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14018
f_charbig = 'was updated';
 
14019
        
 
14020
# check unique-1-a success:     1
 
14021
        
 
14022
# check unique-1-b success:     1
 
14023
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14024
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14025
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14026
f_charbig = CONCAT('===',f_char1,'===')
 
14027
WHERE f_charbig = 'was updated';
 
14028
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14029
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14030
   FROM t0_template source_tab
 
14031
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14032
        
 
14033
# check replace success:        1
 
14034
DELETE FROM t1
 
14035
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14036
DELETE FROM t1
 
14037
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14038
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14039
UPDATE t1 SET f_int2 = f_int1,
 
14040
f_char1 = CAST(f_int1 AS CHAR),
 
14041
f_char2 = CAST(f_int1 AS CHAR),
 
14042
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14043
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14044
SET AUTOCOMMIT= 0;
 
14045
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14046
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14047
FROM t0_template source_tab
 
14048
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14049
        
 
14050
# check transactions-1 success:         1
 
14051
COMMIT WORK;
 
14052
        
 
14053
# check transactions-2 success:         1
 
14054
ROLLBACK WORK;
 
14055
        
 
14056
# check transactions-3 success:         1
 
14057
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14058
COMMIT WORK;
 
14059
ROLLBACK WORK;
 
14060
        
 
14061
# check transactions-4 success:         1
 
14062
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14063
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14064
FROM t0_template source_tab
 
14065
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14066
        
 
14067
# check transactions-5 success:         1
 
14068
ROLLBACK WORK;
 
14069
        
 
14070
# check transactions-6 success:         1
 
14071
# INFO: Storage engine used for t1 seems to be transactional.
 
14072
COMMIT;
 
14073
        
 
14074
# check transactions-7 success:         1
 
14075
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14076
COMMIT WORK;
 
14077
SET @@session.sql_mode = 'traditional';
 
14078
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14079
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14080
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14081
'', '', 'was inserted' FROM t0_template
 
14082
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14083
ERROR 22012: Division by 0
 
14084
COMMIT;
 
14085
        
 
14086
# check transactions-8 success:         1
 
14087
# INFO: Storage engine used for t1 seems to be able to revert
 
14088
#       changes made by the failing statement.
 
14089
SET @@session.sql_mode = '';
 
14090
SET AUTOCOMMIT= 1;
 
14091
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14092
COMMIT WORK;
 
14093
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14094
        
 
14095
# check special-1 success:      1
 
14096
UPDATE t1 SET f_charbig = '';
 
14097
        
 
14098
# check special-2 success:      1
 
14099
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14100
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14101
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14103
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14104
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14105
'just inserted' FROM t0_template
 
14106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14107
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14108
BEGIN
 
14109
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14110
f_charbig = 'updated by trigger'
 
14111
      WHERE f_int1 = new.f_int1;
 
14112
END|
 
14113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14114
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14116
        
 
14117
# check trigger-1 success:      1
 
14118
DROP TRIGGER trg_1;
 
14119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14121
f_charbig = 'just inserted'
 
14122
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14123
DELETE FROM t0_aux
 
14124
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14127
'just inserted' FROM t0_template
 
14128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14129
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14130
BEGIN
 
14131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14132
f_charbig = 'updated by trigger'
 
14133
      WHERE f_int1 = new.f_int1;
 
14134
END|
 
14135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14136
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14138
        
 
14139
# check trigger-2 success:      1
 
14140
DROP TRIGGER trg_1;
 
14141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14143
f_charbig = 'just inserted'
 
14144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14145
DELETE FROM t0_aux
 
14146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14149
'just inserted' FROM t0_template
 
14150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14151
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14152
BEGIN
 
14153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14154
f_charbig = 'updated by trigger'
 
14155
      WHERE f_int1 = new.f_int1;
 
14156
END|
 
14157
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14159
        
 
14160
# check trigger-3 success:      1
 
14161
DROP TRIGGER trg_1;
 
14162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14164
f_charbig = 'just inserted'
 
14165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14166
DELETE FROM t0_aux
 
14167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14170
'just inserted' FROM t0_template
 
14171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14172
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14173
BEGIN
 
14174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14175
f_charbig = 'updated by trigger'
 
14176
      WHERE f_int1 = - old.f_int1;
 
14177
END|
 
14178
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14180
        
 
14181
# check trigger-4 success:      1
 
14182
DROP TRIGGER trg_1;
 
14183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14185
f_charbig = 'just inserted'
 
14186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14187
DELETE FROM t0_aux
 
14188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14191
'just inserted' FROM t0_template
 
14192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14193
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14194
BEGIN
 
14195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14196
f_charbig = 'updated by trigger'
 
14197
      WHERE f_int1 = new.f_int1;
 
14198
END|
 
14199
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14201
        
 
14202
# check trigger-5 success:      1
 
14203
DROP TRIGGER trg_1;
 
14204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14206
f_charbig = 'just inserted'
 
14207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14208
DELETE FROM t0_aux
 
14209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14211
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14212
'just inserted' FROM t0_template
 
14213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14214
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14215
BEGIN
 
14216
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14217
f_charbig = 'updated by trigger'
 
14218
      WHERE f_int1 = - old.f_int1;
 
14219
END|
 
14220
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14221
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14222
        
 
14223
# check trigger-6 success:      1
 
14224
DROP TRIGGER trg_1;
 
14225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14227
f_charbig = 'just inserted'
 
14228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14229
DELETE FROM t0_aux
 
14230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14233
'just inserted' FROM t0_template
 
14234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14235
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14236
BEGIN
 
14237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14238
f_charbig = 'updated by trigger'
 
14239
      WHERE f_int1 = - old.f_int1;
 
14240
END|
 
14241
DELETE FROM t0_aux
 
14242
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14243
        
 
14244
# check trigger-7 success:      1
 
14245
DROP TRIGGER trg_1;
 
14246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14248
f_charbig = 'just inserted'
 
14249
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14250
DELETE FROM t0_aux
 
14251
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14252
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14253
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14254
'just inserted' FROM t0_template
 
14255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14256
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14257
BEGIN
 
14258
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14259
f_charbig = 'updated by trigger'
 
14260
      WHERE f_int1 = - old.f_int1;
 
14261
END|
 
14262
DELETE FROM t0_aux
 
14263
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14264
        
 
14265
# check trigger-8 success:      1
 
14266
DROP TRIGGER trg_1;
 
14267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14269
f_charbig = 'just inserted'
 
14270
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14271
DELETE FROM t0_aux
 
14272
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14273
DELETE FROM t1
 
14274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14275
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14276
BEGIN
 
14277
SET new.f_int1 = old.f_int1 + @max_row,
 
14278
new.f_int2 = old.f_int2 - @max_row,
 
14279
new.f_charbig = '####updated per update trigger####';
 
14280
END|
 
14281
UPDATE t1
 
14282
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14283
f_charbig = '####updated per update statement itself####';
 
14284
        
 
14285
# check trigger-9 success:      1
 
14286
DROP TRIGGER trg_2;
 
14287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14289
f_charbig = CONCAT('===',f_char1,'===');
 
14290
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14291
BEGIN
 
14292
SET new.f_int1 = new.f_int1 + @max_row,
 
14293
new.f_int2 = new.f_int2 - @max_row,
 
14294
new.f_charbig = '####updated per update trigger####';
 
14295
END|
 
14296
UPDATE t1
 
14297
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14298
f_charbig = '####updated per update statement itself####';
 
14299
        
 
14300
# check trigger-10 success:     1
 
14301
DROP TRIGGER trg_2;
 
14302
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14303
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14304
f_charbig = CONCAT('===',f_char1,'===');
 
14305
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14306
BEGIN
 
14307
SET new.f_int1 = @my_max1 + @counter,
 
14308
new.f_int2 = @my_min2 - @counter,
 
14309
new.f_charbig = '####updated per insert trigger####';
 
14310
SET @counter = @counter + 1;
 
14311
END|
 
14312
SET @counter = 1;
 
14313
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14314
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14315
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14316
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14318
ORDER BY f_int1;
 
14319
DROP TRIGGER trg_3;
 
14320
        
 
14321
# check trigger-11 success:     1
 
14322
DELETE FROM t1
 
14323
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14324
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14325
AND f_charbig = '####updated per insert trigger####';
 
14326
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14327
BEGIN
 
14328
SET new.f_int1 = @my_max1 + @counter,
 
14329
new.f_int2 = @my_min2 - @counter,
 
14330
new.f_charbig = '####updated per insert trigger####';
 
14331
SET @counter = @counter + 1;
 
14332
END|
 
14333
SET @counter = 1;
 
14334
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14335
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14336
SELECT CAST(f_int1 AS CHAR),
 
14337
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14339
ORDER BY f_int1;
 
14340
DROP TRIGGER trg_3;
 
14341
        
 
14342
# check trigger-12 success:     1
 
14343
DELETE FROM t1
 
14344
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14345
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14346
AND f_charbig = '####updated per insert trigger####';
 
14347
ANALYZE  TABLE t1;
 
14348
Table   Op      Msg_type        Msg_text
 
14349
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
14350
CHECK    TABLE t1 EXTENDED;
 
14351
Table   Op      Msg_type        Msg_text
 
14352
test.t1 check   note    The storage engine for the table doesn't support check
 
14353
CHECKSUM TABLE t1 EXTENDED;
 
14354
Table   Checksum
 
14355
test.t1 <some_value>
 
14356
OPTIMIZE TABLE t1;
 
14357
Table   Op      Msg_type        Msg_text
 
14358
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
14359
# check layout success:    1
 
14360
REPAIR   TABLE t1 EXTENDED;
 
14361
Table   Op      Msg_type        Msg_text
 
14362
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14363
# check layout success:    1
 
14364
TRUNCATE t1;
 
14365
        
 
14366
# check TRUNCATE success:       1
 
14367
# check layout success:    1
 
14368
# End usability test (inc/partition_check.inc)
 
14369
DROP TABLE t1;
 
14370
CREATE TABLE t1 (
 
14371
f_int1 INTEGER,
 
14372
f_int2 INTEGER,
 
14373
f_char1 CHAR(20),
 
14374
f_char2 CHAR(20),
 
14375
f_charbig VARCHAR(1000)
 
14376
 
 
14377
)
 
14378
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
14379
(PARTITION parta VALUES LESS THAN (0),
 
14380
PARTITION partb VALUES LESS THAN (5),
 
14381
PARTITION partc VALUES LESS THAN (10),
 
14382
PARTITION partd VALUES LESS THAN (2147483646));
 
14383
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14384
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14385
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14386
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
14387
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14388
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14389
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14390
# Start usability test (inc/partition_check.inc)
 
14391
create_command
 
14392
SHOW CREATE TABLE t1;
 
14393
Table   Create Table
 
14394
t1      CREATE TABLE `t1` (
 
14395
  `f_int1` int(11) DEFAULT NULL,
 
14396
  `f_int2` int(11) DEFAULT NULL,
 
14397
  `f_char1` char(20) DEFAULT NULL,
 
14398
  `f_char2` char(20) DEFAULT NULL,
 
14399
  `f_charbig` varchar(1000) DEFAULT NULL,
 
14400
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
14401
) ENGINE=InnoDB 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 = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
14402
 
 
14403
# check prerequisites-1 success:    1
 
14404
# check COUNT(*) success:    1
 
14405
# check MIN/MAX(f_int1) success:    1
 
14406
# check MIN/MAX(f_int2) success:    1
 
14407
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14408
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14409
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14410
WHERE f_int1 IN (2,3);
 
14411
ERROR 23000: Can't write; duplicate key in table 't1'
 
14412
# check prerequisites-3 success:    1
 
14413
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14414
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14415
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14416
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14417
WHERE f_int1 IN (2,3);
 
14418
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14419
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14420
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14421
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14422
WHERE f_int1 IN (2,3);
 
14423
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14424
# check read via f_int1 success: 1
 
14425
# check read via f_int2 success: 1
 
14426
        
 
14427
# check multiple-1 success:     1
 
14428
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14429
        
 
14430
# check multiple-2 success:     1
 
14431
INSERT INTO t1 SELECT * FROM t0_template
 
14432
WHERE MOD(f_int1,3) = 0;
 
14433
        
 
14434
# check multiple-3 success:     1
 
14435
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14436
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14437
AND @max_row_div2 + @max_row_div4;
 
14438
        
 
14439
# check multiple-4 success:     1
 
14440
DELETE FROM t1
 
14441
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14442
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14443
        
 
14444
# check multiple-5 success:     1
 
14445
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14446
WHERE MOD(f_int1,3) = 0
 
14447
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14448
SELECT COUNT(*) INTO @clash_count
 
14449
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14450
WHERE MOD(f_int1,3) = 0
 
14451
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14452
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14453
INSERT INTO t1
 
14454
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14455
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14456
f_charbig = '#SINGLE#';
 
14457
        
 
14458
# check single-1 success:       1
 
14459
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14460
INSERT INTO t1
 
14461
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14462
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14463
f_charbig = '#SINGLE#';
 
14464
        
 
14465
# check single-2 success:       1
 
14466
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14467
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14468
UPDATE t1 SET f_int1 = @cur_value2
 
14469
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14470
        
 
14471
# check single-3 success:       1
 
14472
SET @cur_value1= -1;
 
14473
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14474
UPDATE t1 SET f_int1 = @cur_value1
 
14475
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14476
        
 
14477
# check single-4 success:       1
 
14478
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14479
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14480
        
 
14481
# check single-5 success:       1
 
14482
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14483
        
 
14484
# check single-6 success:       1
 
14485
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14486
        
 
14487
# check single-7 success:       1
 
14488
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14489
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14490
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14491
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14492
f_charbig = '#NULL#';
 
14493
INSERT INTO t1
 
14494
SET f_int1 = NULL , f_int2 = -@max_row,
 
14495
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14496
f_charbig = '#NULL#';
 
14497
# check null success:    1
 
14498
        
 
14499
# check null-1 success:         1
 
14500
UPDATE t1 SET f_int1 = -@max_row
 
14501
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14502
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14503
        
 
14504
# check null-2 success:         1
 
14505
UPDATE t1 SET f_int1 = NULL
 
14506
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14507
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14508
        
 
14509
# check null-3 success:         1
 
14510
DELETE FROM t1
 
14511
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14512
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14513
        
 
14514
# check null-4 success:         1
 
14515
DELETE FROM t1
 
14516
WHERE f_int1 = 0 AND f_int2 = 0
 
14517
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14518
AND f_charbig = '#NULL#';
 
14519
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14520
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14521
   FROM t0_template source_tab
 
14522
WHERE MOD(f_int1,3) = 0
 
14523
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14524
ON DUPLICATE KEY
 
14525
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14526
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14527
f_charbig = 'was updated';
 
14528
        
 
14529
# check unique-1-a success:     1
 
14530
        
 
14531
# check unique-1-b success:     1
 
14532
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14533
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14534
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14535
f_charbig = CONCAT('===',f_char1,'===')
 
14536
WHERE f_charbig = 'was updated';
 
14537
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14538
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14539
   FROM t0_template source_tab
 
14540
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14541
        
 
14542
# check replace success:        1
 
14543
DELETE FROM t1
 
14544
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14545
DELETE FROM t1
 
14546
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14547
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14548
UPDATE t1 SET f_int2 = f_int1,
 
14549
f_char1 = CAST(f_int1 AS CHAR),
 
14550
f_char2 = CAST(f_int1 AS CHAR),
 
14551
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14552
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14553
SET AUTOCOMMIT= 0;
 
14554
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14555
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14556
FROM t0_template source_tab
 
14557
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14558
        
 
14559
# check transactions-1 success:         1
 
14560
COMMIT WORK;
 
14561
        
 
14562
# check transactions-2 success:         1
 
14563
ROLLBACK WORK;
 
14564
        
 
14565
# check transactions-3 success:         1
 
14566
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14567
COMMIT WORK;
 
14568
ROLLBACK WORK;
 
14569
        
 
14570
# check transactions-4 success:         1
 
14571
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14572
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14573
FROM t0_template source_tab
 
14574
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14575
        
 
14576
# check transactions-5 success:         1
 
14577
ROLLBACK WORK;
 
14578
        
 
14579
# check transactions-6 success:         1
 
14580
# INFO: Storage engine used for t1 seems to be transactional.
 
14581
COMMIT;
 
14582
        
 
14583
# check transactions-7 success:         1
 
14584
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14585
COMMIT WORK;
 
14586
SET @@session.sql_mode = 'traditional';
 
14587
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14588
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14589
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14590
'', '', 'was inserted' FROM t0_template
 
14591
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14592
ERROR 22012: Division by 0
 
14593
COMMIT;
 
14594
        
 
14595
# check transactions-8 success:         1
 
14596
# INFO: Storage engine used for t1 seems to be able to revert
 
14597
#       changes made by the failing statement.
 
14598
SET @@session.sql_mode = '';
 
14599
SET AUTOCOMMIT= 1;
 
14600
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14601
COMMIT WORK;
 
14602
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14603
        
 
14604
# check special-1 success:      1
 
14605
UPDATE t1 SET f_charbig = '';
 
14606
        
 
14607
# check special-2 success:      1
 
14608
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14609
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14610
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14613
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14614
'just inserted' FROM t0_template
 
14615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14616
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14617
BEGIN
 
14618
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14619
f_charbig = 'updated by trigger'
 
14620
      WHERE f_int1 = new.f_int1;
 
14621
END|
 
14622
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14623
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14624
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14625
        
 
14626
# check trigger-1 success:      1
 
14627
DROP TRIGGER trg_1;
 
14628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14630
f_charbig = 'just inserted'
 
14631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14632
DELETE FROM t0_aux
 
14633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14636
'just inserted' FROM t0_template
 
14637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14638
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14639
BEGIN
 
14640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14641
f_charbig = 'updated by trigger'
 
14642
      WHERE f_int1 = new.f_int1;
 
14643
END|
 
14644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14645
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14646
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14647
        
 
14648
# check trigger-2 success:      1
 
14649
DROP TRIGGER trg_1;
 
14650
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14651
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14652
f_charbig = 'just inserted'
 
14653
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14654
DELETE FROM t0_aux
 
14655
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14656
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14657
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14658
'just inserted' FROM t0_template
 
14659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14660
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14661
BEGIN
 
14662
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14663
f_charbig = 'updated by trigger'
 
14664
      WHERE f_int1 = new.f_int1;
 
14665
END|
 
14666
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14667
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14668
        
 
14669
# check trigger-3 success:      1
 
14670
DROP TRIGGER trg_1;
 
14671
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14672
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14673
f_charbig = 'just inserted'
 
14674
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14675
DELETE FROM t0_aux
 
14676
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14677
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14678
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14679
'just inserted' FROM t0_template
 
14680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14681
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14682
BEGIN
 
14683
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14684
f_charbig = 'updated by trigger'
 
14685
      WHERE f_int1 = - old.f_int1;
 
14686
END|
 
14687
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14688
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14689
        
 
14690
# check trigger-4 success:      1
 
14691
DROP TRIGGER trg_1;
 
14692
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14693
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14694
f_charbig = 'just inserted'
 
14695
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14696
DELETE FROM t0_aux
 
14697
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14699
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14700
'just inserted' FROM t0_template
 
14701
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14702
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14703
BEGIN
 
14704
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14705
f_charbig = 'updated by trigger'
 
14706
      WHERE f_int1 = new.f_int1;
 
14707
END|
 
14708
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14709
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14710
        
 
14711
# check trigger-5 success:      1
 
14712
DROP TRIGGER trg_1;
 
14713
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14714
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14715
f_charbig = 'just inserted'
 
14716
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14717
DELETE FROM t0_aux
 
14718
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14719
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14720
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14721
'just inserted' FROM t0_template
 
14722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14723
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14724
BEGIN
 
14725
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14726
f_charbig = 'updated by trigger'
 
14727
      WHERE f_int1 = - old.f_int1;
 
14728
END|
 
14729
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14730
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14731
        
 
14732
# check trigger-6 success:      1
 
14733
DROP TRIGGER trg_1;
 
14734
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14735
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14736
f_charbig = 'just inserted'
 
14737
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14738
DELETE FROM t0_aux
 
14739
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14740
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14741
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14742
'just inserted' FROM t0_template
 
14743
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14744
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14745
BEGIN
 
14746
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14747
f_charbig = 'updated by trigger'
 
14748
      WHERE f_int1 = - old.f_int1;
 
14749
END|
 
14750
DELETE FROM t0_aux
 
14751
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14752
        
 
14753
# check trigger-7 success:      1
 
14754
DROP TRIGGER trg_1;
 
14755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14757
f_charbig = 'just inserted'
 
14758
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14759
DELETE FROM t0_aux
 
14760
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14761
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14762
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14763
'just inserted' FROM t0_template
 
14764
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14765
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14766
BEGIN
 
14767
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14768
f_charbig = 'updated by trigger'
 
14769
      WHERE f_int1 = - old.f_int1;
 
14770
END|
 
14771
DELETE FROM t0_aux
 
14772
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14773
        
 
14774
# check trigger-8 success:      1
 
14775
DROP TRIGGER trg_1;
 
14776
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14777
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14778
f_charbig = 'just inserted'
 
14779
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14780
DELETE FROM t0_aux
 
14781
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14782
DELETE FROM t1
 
14783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14784
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14785
BEGIN
 
14786
SET new.f_int1 = old.f_int1 + @max_row,
 
14787
new.f_int2 = old.f_int2 - @max_row,
 
14788
new.f_charbig = '####updated per update trigger####';
 
14789
END|
 
14790
UPDATE t1
 
14791
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14792
f_charbig = '####updated per update statement itself####';
 
14793
        
 
14794
# check trigger-9 success:      1
 
14795
DROP TRIGGER trg_2;
 
14796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14798
f_charbig = CONCAT('===',f_char1,'===');
 
14799
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14800
BEGIN
 
14801
SET new.f_int1 = new.f_int1 + @max_row,
 
14802
new.f_int2 = new.f_int2 - @max_row,
 
14803
new.f_charbig = '####updated per update trigger####';
 
14804
END|
 
14805
UPDATE t1
 
14806
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14807
f_charbig = '####updated per update statement itself####';
 
14808
        
 
14809
# check trigger-10 success:     1
 
14810
DROP TRIGGER trg_2;
 
14811
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14812
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14813
f_charbig = CONCAT('===',f_char1,'===');
 
14814
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14815
BEGIN
 
14816
SET new.f_int1 = @my_max1 + @counter,
 
14817
new.f_int2 = @my_min2 - @counter,
 
14818
new.f_charbig = '####updated per insert trigger####';
 
14819
SET @counter = @counter + 1;
 
14820
END|
 
14821
SET @counter = 1;
 
14822
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14823
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14824
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14825
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14827
ORDER BY f_int1;
 
14828
DROP TRIGGER trg_3;
 
14829
        
 
14830
# check trigger-11 success:     1
 
14831
DELETE FROM t1
 
14832
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14833
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14834
AND f_charbig = '####updated per insert trigger####';
 
14835
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14836
BEGIN
 
14837
SET new.f_int1 = @my_max1 + @counter,
 
14838
new.f_int2 = @my_min2 - @counter,
 
14839
new.f_charbig = '####updated per insert trigger####';
 
14840
SET @counter = @counter + 1;
 
14841
END|
 
14842
SET @counter = 1;
 
14843
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14844
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14845
SELECT CAST(f_int1 AS CHAR),
 
14846
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14847
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14848
ORDER BY f_int1;
 
14849
DROP TRIGGER trg_3;
 
14850
        
 
14851
# check trigger-12 success:     1
 
14852
DELETE FROM t1
 
14853
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14854
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14855
AND f_charbig = '####updated per insert trigger####';
 
14856
ANALYZE  TABLE t1;
 
14857
Table   Op      Msg_type        Msg_text
 
14858
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
14859
CHECK    TABLE t1 EXTENDED;
 
14860
Table   Op      Msg_type        Msg_text
 
14861
test.t1 check   note    The storage engine for the table doesn't support check
 
14862
CHECKSUM TABLE t1 EXTENDED;
 
14863
Table   Checksum
 
14864
test.t1 <some_value>
 
14865
OPTIMIZE TABLE t1;
 
14866
Table   Op      Msg_type        Msg_text
 
14867
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
14868
# check layout success:    1
 
14869
REPAIR   TABLE t1 EXTENDED;
 
14870
Table   Op      Msg_type        Msg_text
 
14871
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14872
# check layout success:    1
 
14873
TRUNCATE t1;
 
14874
        
 
14875
# check TRUNCATE success:       1
 
14876
# check layout success:    1
 
14877
# End usability test (inc/partition_check.inc)
 
14878
DROP TABLE t1;
 
14879
CREATE TABLE t1 (
 
14880
f_int1 INTEGER,
 
14881
f_int2 INTEGER,
 
14882
f_char1 CHAR(20),
 
14883
f_char2 CHAR(20),
 
14884
f_charbig VARCHAR(1000)
 
14885
 
 
14886
)
 
14887
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
14888
(PARTITION part1 VALUES LESS THAN (0)
 
14889
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
14890
PARTITION part2 VALUES LESS THAN (5)
 
14891
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
14892
PARTITION part3 VALUES LESS THAN (10)
 
14893
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
14894
PARTITION part4 VALUES LESS THAN (2147483646)
 
14895
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
14896
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14897
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14898
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14899
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
14900
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14901
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14902
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14903
# Start usability test (inc/partition_check.inc)
 
14904
create_command
 
14905
SHOW CREATE TABLE t1;
 
14906
Table   Create Table
 
14907
t1      CREATE TABLE `t1` (
 
14908
  `f_int1` int(11) DEFAULT NULL,
 
14909
  `f_int2` int(11) DEFAULT NULL,
 
14910
  `f_char1` char(20) DEFAULT NULL,
 
14911
  `f_char2` char(20) DEFAULT NULL,
 
14912
  `f_charbig` varchar(1000) DEFAULT NULL,
 
14913
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
14914
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
14915
 
 
14916
# check prerequisites-1 success:    1
 
14917
# check COUNT(*) success:    1
 
14918
# check MIN/MAX(f_int1) success:    1
 
14919
# check MIN/MAX(f_int2) success:    1
 
14920
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14921
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14922
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14923
WHERE f_int1 IN (2,3);
 
14924
ERROR 23000: Can't write; duplicate key in table 't1'
 
14925
# check prerequisites-3 success:    1
 
14926
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14927
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14928
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14929
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14930
WHERE f_int1 IN (2,3);
 
14931
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14932
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14933
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14934
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14935
WHERE f_int1 IN (2,3);
 
14936
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14937
# check read via f_int1 success: 1
 
14938
# check read via f_int2 success: 1
 
14939
        
 
14940
# check multiple-1 success:     1
 
14941
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14942
        
 
14943
# check multiple-2 success:     1
 
14944
INSERT INTO t1 SELECT * FROM t0_template
 
14945
WHERE MOD(f_int1,3) = 0;
 
14946
        
 
14947
# check multiple-3 success:     1
 
14948
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14949
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14950
AND @max_row_div2 + @max_row_div4;
 
14951
        
 
14952
# check multiple-4 success:     1
 
14953
DELETE FROM t1
 
14954
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14955
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14956
        
 
14957
# check multiple-5 success:     1
 
14958
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14959
WHERE MOD(f_int1,3) = 0
 
14960
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14961
SELECT COUNT(*) INTO @clash_count
 
14962
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14963
WHERE MOD(f_int1,3) = 0
 
14964
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14965
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14966
INSERT INTO t1
 
14967
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14968
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14969
f_charbig = '#SINGLE#';
 
14970
        
 
14971
# check single-1 success:       1
 
14972
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14973
INSERT INTO t1
 
14974
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14975
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14976
f_charbig = '#SINGLE#';
 
14977
        
 
14978
# check single-2 success:       1
 
14979
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14980
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14981
UPDATE t1 SET f_int1 = @cur_value2
 
14982
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14983
        
 
14984
# check single-3 success:       1
 
14985
SET @cur_value1= -1;
 
14986
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14987
UPDATE t1 SET f_int1 = @cur_value1
 
14988
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14989
        
 
14990
# check single-4 success:       1
 
14991
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14992
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14993
        
 
14994
# check single-5 success:       1
 
14995
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14996
        
 
14997
# check single-6 success:       1
 
14998
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14999
ERROR HY000: Table has no partition for value 2147483647
 
15000
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15001
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15002
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15003
f_charbig = '#NULL#';
 
15004
INSERT INTO t1
 
15005
SET f_int1 = NULL , f_int2 = -@max_row,
 
15006
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15007
f_charbig = '#NULL#';
 
15008
# check null success:    1
 
15009
        
 
15010
# check null-1 success:         1
 
15011
UPDATE t1 SET f_int1 = -@max_row
 
15012
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15013
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15014
        
 
15015
# check null-2 success:         1
 
15016
UPDATE t1 SET f_int1 = NULL
 
15017
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15018
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15019
        
 
15020
# check null-3 success:         1
 
15021
DELETE FROM t1
 
15022
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15023
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15024
        
 
15025
# check null-4 success:         1
 
15026
DELETE FROM t1
 
15027
WHERE f_int1 = 0 AND f_int2 = 0
 
15028
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15029
AND f_charbig = '#NULL#';
 
15030
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15031
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15032
   FROM t0_template source_tab
 
15033
WHERE MOD(f_int1,3) = 0
 
15034
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15035
ON DUPLICATE KEY
 
15036
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15037
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15038
f_charbig = 'was updated';
 
15039
        
 
15040
# check unique-1-a success:     1
 
15041
        
 
15042
# check unique-1-b success:     1
 
15043
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15044
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15045
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15046
f_charbig = CONCAT('===',f_char1,'===')
 
15047
WHERE f_charbig = 'was updated';
 
15048
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15049
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15050
   FROM t0_template source_tab
 
15051
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15052
        
 
15053
# check replace success:        1
 
15054
DELETE FROM t1
 
15055
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15056
DELETE FROM t1
 
15057
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15058
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15059
UPDATE t1 SET f_int2 = f_int1,
 
15060
f_char1 = CAST(f_int1 AS CHAR),
 
15061
f_char2 = CAST(f_int1 AS CHAR),
 
15062
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15063
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15064
SET AUTOCOMMIT= 0;
 
15065
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15066
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15067
FROM t0_template source_tab
 
15068
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15069
        
 
15070
# check transactions-1 success:         1
 
15071
COMMIT WORK;
 
15072
        
 
15073
# check transactions-2 success:         1
 
15074
ROLLBACK WORK;
 
15075
        
 
15076
# check transactions-3 success:         1
 
15077
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15078
COMMIT WORK;
 
15079
ROLLBACK WORK;
 
15080
        
 
15081
# check transactions-4 success:         1
 
15082
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15083
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15084
FROM t0_template source_tab
 
15085
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15086
        
 
15087
# check transactions-5 success:         1
 
15088
ROLLBACK WORK;
 
15089
        
 
15090
# check transactions-6 success:         1
 
15091
# INFO: Storage engine used for t1 seems to be transactional.
 
15092
COMMIT;
 
15093
        
 
15094
# check transactions-7 success:         1
 
15095
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15096
COMMIT WORK;
 
15097
SET @@session.sql_mode = 'traditional';
 
15098
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15099
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15100
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15101
'', '', 'was inserted' FROM t0_template
 
15102
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15103
ERROR 22012: Division by 0
 
15104
COMMIT;
 
15105
        
 
15106
# check transactions-8 success:         1
 
15107
# INFO: Storage engine used for t1 seems to be able to revert
 
15108
#       changes made by the failing statement.
 
15109
SET @@session.sql_mode = '';
 
15110
SET AUTOCOMMIT= 1;
 
15111
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15112
COMMIT WORK;
 
15113
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15114
        
 
15115
# check special-1 success:      1
 
15116
UPDATE t1 SET f_charbig = '';
 
15117
        
 
15118
# check special-2 success:      1
 
15119
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15120
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15121
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15123
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15124
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15125
'just inserted' FROM t0_template
 
15126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15127
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15128
BEGIN
 
15129
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15130
f_charbig = 'updated by trigger'
 
15131
      WHERE f_int1 = new.f_int1;
 
15132
END|
 
15133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15134
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15136
        
 
15137
# check trigger-1 success:      1
 
15138
DROP TRIGGER trg_1;
 
15139
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15140
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15141
f_charbig = 'just inserted'
 
15142
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15143
DELETE FROM t0_aux
 
15144
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15146
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15147
'just inserted' FROM t0_template
 
15148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15149
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15150
BEGIN
 
15151
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15152
f_charbig = 'updated by trigger'
 
15153
      WHERE f_int1 = new.f_int1;
 
15154
END|
 
15155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15156
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15158
        
 
15159
# check trigger-2 success:      1
 
15160
DROP TRIGGER trg_1;
 
15161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15163
f_charbig = 'just inserted'
 
15164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15165
DELETE FROM t0_aux
 
15166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15169
'just inserted' FROM t0_template
 
15170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15171
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15172
BEGIN
 
15173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15174
f_charbig = 'updated by trigger'
 
15175
      WHERE f_int1 = new.f_int1;
 
15176
END|
 
15177
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15178
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15179
        
 
15180
# check trigger-3 success:      1
 
15181
DROP TRIGGER trg_1;
 
15182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15184
f_charbig = 'just inserted'
 
15185
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15186
DELETE FROM t0_aux
 
15187
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15189
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15190
'just inserted' FROM t0_template
 
15191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15192
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15193
BEGIN
 
15194
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15195
f_charbig = 'updated by trigger'
 
15196
      WHERE f_int1 = - old.f_int1;
 
15197
END|
 
15198
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15199
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15200
        
 
15201
# check trigger-4 success:      1
 
15202
DROP TRIGGER trg_1;
 
15203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15205
f_charbig = 'just inserted'
 
15206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15207
DELETE FROM t0_aux
 
15208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15211
'just inserted' FROM t0_template
 
15212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15213
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15214
BEGIN
 
15215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15216
f_charbig = 'updated by trigger'
 
15217
      WHERE f_int1 = new.f_int1;
 
15218
END|
 
15219
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15221
        
 
15222
# check trigger-5 success:      1
 
15223
DROP TRIGGER trg_1;
 
15224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15226
f_charbig = 'just inserted'
 
15227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15228
DELETE FROM t0_aux
 
15229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15230
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15231
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15232
'just inserted' FROM t0_template
 
15233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15234
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15235
BEGIN
 
15236
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15237
f_charbig = 'updated by trigger'
 
15238
      WHERE f_int1 = - old.f_int1;
 
15239
END|
 
15240
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15241
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15242
        
 
15243
# check trigger-6 success:      1
 
15244
DROP TRIGGER trg_1;
 
15245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15247
f_charbig = 'just inserted'
 
15248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15249
DELETE FROM t0_aux
 
15250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15253
'just inserted' FROM t0_template
 
15254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15255
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15256
BEGIN
 
15257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15258
f_charbig = 'updated by trigger'
 
15259
      WHERE f_int1 = - old.f_int1;
 
15260
END|
 
15261
DELETE FROM t0_aux
 
15262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15263
        
 
15264
# check trigger-7 success:      1
 
15265
DROP TRIGGER trg_1;
 
15266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15268
f_charbig = 'just inserted'
 
15269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15270
DELETE FROM t0_aux
 
15271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15272
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15273
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15274
'just inserted' FROM t0_template
 
15275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15276
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15277
BEGIN
 
15278
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15279
f_charbig = 'updated by trigger'
 
15280
      WHERE f_int1 = - old.f_int1;
 
15281
END|
 
15282
DELETE FROM t0_aux
 
15283
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15284
        
 
15285
# check trigger-8 success:      1
 
15286
DROP TRIGGER trg_1;
 
15287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15289
f_charbig = 'just inserted'
 
15290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15291
DELETE FROM t0_aux
 
15292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15293
DELETE FROM t1
 
15294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15295
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15296
BEGIN
 
15297
SET new.f_int1 = old.f_int1 + @max_row,
 
15298
new.f_int2 = old.f_int2 - @max_row,
 
15299
new.f_charbig = '####updated per update trigger####';
 
15300
END|
 
15301
UPDATE t1
 
15302
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15303
f_charbig = '####updated per update statement itself####';
 
15304
        
 
15305
# check trigger-9 success:      1
 
15306
DROP TRIGGER trg_2;
 
15307
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15308
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15309
f_charbig = CONCAT('===',f_char1,'===');
 
15310
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15311
BEGIN
 
15312
SET new.f_int1 = new.f_int1 + @max_row,
 
15313
new.f_int2 = new.f_int2 - @max_row,
 
15314
new.f_charbig = '####updated per update trigger####';
 
15315
END|
 
15316
UPDATE t1
 
15317
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15318
f_charbig = '####updated per update statement itself####';
 
15319
        
 
15320
# check trigger-10 success:     1
 
15321
DROP TRIGGER trg_2;
 
15322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15324
f_charbig = CONCAT('===',f_char1,'===');
 
15325
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15326
BEGIN
 
15327
SET new.f_int1 = @my_max1 + @counter,
 
15328
new.f_int2 = @my_min2 - @counter,
 
15329
new.f_charbig = '####updated per insert trigger####';
 
15330
SET @counter = @counter + 1;
 
15331
END|
 
15332
SET @counter = 1;
 
15333
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15334
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15335
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15336
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15337
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15338
ORDER BY f_int1;
 
15339
DROP TRIGGER trg_3;
 
15340
        
 
15341
# check trigger-11 success:     1
 
15342
DELETE FROM t1
 
15343
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15344
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15345
AND f_charbig = '####updated per insert trigger####';
 
15346
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15347
BEGIN
 
15348
SET new.f_int1 = @my_max1 + @counter,
 
15349
new.f_int2 = @my_min2 - @counter,
 
15350
new.f_charbig = '####updated per insert trigger####';
 
15351
SET @counter = @counter + 1;
 
15352
END|
 
15353
SET @counter = 1;
 
15354
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15355
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15356
SELECT CAST(f_int1 AS CHAR),
 
15357
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15358
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15359
ORDER BY f_int1;
 
15360
DROP TRIGGER trg_3;
 
15361
        
 
15362
# check trigger-12 success:     1
 
15363
DELETE FROM t1
 
15364
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15365
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15366
AND f_charbig = '####updated per insert trigger####';
 
15367
ANALYZE  TABLE t1;
 
15368
Table   Op      Msg_type        Msg_text
 
15369
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
15370
CHECK    TABLE t1 EXTENDED;
 
15371
Table   Op      Msg_type        Msg_text
 
15372
test.t1 check   note    The storage engine for the table doesn't support check
 
15373
CHECKSUM TABLE t1 EXTENDED;
 
15374
Table   Checksum
 
15375
test.t1 <some_value>
 
15376
OPTIMIZE TABLE t1;
 
15377
Table   Op      Msg_type        Msg_text
 
15378
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
15379
# check layout success:    1
 
15380
REPAIR   TABLE t1 EXTENDED;
 
15381
Table   Op      Msg_type        Msg_text
 
15382
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15383
# check layout success:    1
 
15384
TRUNCATE t1;
 
15385
        
 
15386
# check TRUNCATE success:       1
 
15387
# check layout success:    1
 
15388
# End usability test (inc/partition_check.inc)
 
15389
DROP TABLE t1;
 
15390
CREATE TABLE t1 (
 
15391
f_int1 INTEGER,
 
15392
f_int2 INTEGER,
 
15393
f_char1 CHAR(20),
 
15394
f_char2 CHAR(20),
 
15395
f_charbig VARCHAR(1000)
 
15396
 
 
15397
)
 
15398
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15399
(PARTITION part1 VALUES IN (0)
 
15400
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15401
PARTITION part2 VALUES IN (1)
 
15402
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15403
PARTITION part3 VALUES IN (2)
 
15404
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15405
PARTITION part4 VALUES IN (NULL)
 
15406
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15407
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15408
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15409
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15410
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
15411
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15412
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15413
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15414
# Start usability test (inc/partition_check.inc)
 
15415
create_command
 
15416
SHOW CREATE TABLE t1;
 
15417
Table   Create Table
 
15418
t1      CREATE TABLE `t1` (
 
15419
  `f_int1` int(11) DEFAULT NULL,
 
15420
  `f_int2` int(11) DEFAULT NULL,
 
15421
  `f_char1` char(20) DEFAULT NULL,
 
15422
  `f_char2` char(20) DEFAULT NULL,
 
15423
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15424
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
15425
) ENGINE=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
15426
 
 
15427
# check prerequisites-1 success:    1
 
15428
# check COUNT(*) success:    1
 
15429
# check MIN/MAX(f_int1) success:    1
 
15430
# check MIN/MAX(f_int2) success:    1
 
15431
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15432
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15433
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15434
WHERE f_int1 IN (2,3);
 
15435
ERROR 23000: Can't write; duplicate key in table 't1'
 
15436
# check prerequisites-3 success:    1
 
15437
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15438
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15439
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15440
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15441
WHERE f_int1 IN (2,3);
 
15442
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15444
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15445
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15446
WHERE f_int1 IN (2,3);
 
15447
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15448
# check read via f_int1 success: 1
 
15449
# check read via f_int2 success: 1
 
15450
        
 
15451
# check multiple-1 success:     1
 
15452
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15453
        
 
15454
# check multiple-2 success:     1
 
15455
INSERT INTO t1 SELECT * FROM t0_template
 
15456
WHERE MOD(f_int1,3) = 0;
 
15457
        
 
15458
# check multiple-3 success:     1
 
15459
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15460
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15461
AND @max_row_div2 + @max_row_div4;
 
15462
        
 
15463
# check multiple-4 success:     1
 
15464
DELETE FROM t1
 
15465
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15466
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15467
        
 
15468
# check multiple-5 success:     1
 
15469
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15470
WHERE MOD(f_int1,3) = 0
 
15471
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15472
SELECT COUNT(*) INTO @clash_count
 
15473
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15474
WHERE MOD(f_int1,3) = 0
 
15475
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15476
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15477
INSERT INTO t1
 
15478
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15479
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15480
f_charbig = '#SINGLE#';
 
15481
        
 
15482
# check single-1 success:       1
 
15483
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15484
INSERT INTO t1
 
15485
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15486
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15487
f_charbig = '#SINGLE#';
 
15488
        
 
15489
# check single-2 success:       1
 
15490
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15491
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15492
UPDATE t1 SET f_int1 = @cur_value2
 
15493
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15494
        
 
15495
# check single-3 success:       1
 
15496
SET @cur_value1= -1;
 
15497
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15498
UPDATE t1 SET f_int1 = @cur_value1
 
15499
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15500
        
 
15501
# check single-4 success:       1
 
15502
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15503
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15504
        
 
15505
# check single-5 success:       1
 
15506
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15507
        
 
15508
# check single-6 success:       1
 
15509
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15510
        
 
15511
# check single-7 success:       1
 
15512
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15513
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15514
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15515
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15516
f_charbig = '#NULL#';
 
15517
INSERT INTO t1
 
15518
SET f_int1 = NULL , f_int2 = -@max_row,
 
15519
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15520
f_charbig = '#NULL#';
 
15521
# check null success:    1
 
15522
        
 
15523
# check null-1 success:         1
 
15524
UPDATE t1 SET f_int1 = -@max_row
 
15525
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15526
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15527
        
 
15528
# check null-2 success:         1
 
15529
UPDATE t1 SET f_int1 = NULL
 
15530
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15531
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15532
        
 
15533
# check null-3 success:         1
 
15534
DELETE FROM t1
 
15535
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15536
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15537
        
 
15538
# check null-4 success:         1
 
15539
DELETE FROM t1
 
15540
WHERE f_int1 = 0 AND f_int2 = 0
 
15541
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15542
AND f_charbig = '#NULL#';
 
15543
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15544
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15545
   FROM t0_template source_tab
 
15546
WHERE MOD(f_int1,3) = 0
 
15547
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15548
ON DUPLICATE KEY
 
15549
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15550
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15551
f_charbig = 'was updated';
 
15552
        
 
15553
# check unique-1-a success:     1
 
15554
        
 
15555
# check unique-1-b success:     1
 
15556
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15557
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15558
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15559
f_charbig = CONCAT('===',f_char1,'===')
 
15560
WHERE f_charbig = 'was updated';
 
15561
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15562
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15563
   FROM t0_template source_tab
 
15564
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15565
        
 
15566
# check replace success:        1
 
15567
DELETE FROM t1
 
15568
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15569
DELETE FROM t1
 
15570
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15571
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15572
UPDATE t1 SET f_int2 = f_int1,
 
15573
f_char1 = CAST(f_int1 AS CHAR),
 
15574
f_char2 = CAST(f_int1 AS CHAR),
 
15575
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15576
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15577
SET AUTOCOMMIT= 0;
 
15578
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15579
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15580
FROM t0_template source_tab
 
15581
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15582
        
 
15583
# check transactions-1 success:         1
 
15584
COMMIT WORK;
 
15585
        
 
15586
# check transactions-2 success:         1
 
15587
ROLLBACK WORK;
 
15588
        
 
15589
# check transactions-3 success:         1
 
15590
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15591
COMMIT WORK;
 
15592
ROLLBACK WORK;
 
15593
        
 
15594
# check transactions-4 success:         1
 
15595
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15596
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15597
FROM t0_template source_tab
 
15598
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15599
        
 
15600
# check transactions-5 success:         1
 
15601
ROLLBACK WORK;
 
15602
        
 
15603
# check transactions-6 success:         1
 
15604
# INFO: Storage engine used for t1 seems to be transactional.
 
15605
COMMIT;
 
15606
        
 
15607
# check transactions-7 success:         1
 
15608
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15609
COMMIT WORK;
 
15610
SET @@session.sql_mode = 'traditional';
 
15611
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15612
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15613
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15614
'', '', 'was inserted' FROM t0_template
 
15615
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15616
ERROR 22012: Division by 0
 
15617
COMMIT;
 
15618
        
 
15619
# check transactions-8 success:         1
 
15620
# INFO: Storage engine used for t1 seems to be able to revert
 
15621
#       changes made by the failing statement.
 
15622
SET @@session.sql_mode = '';
 
15623
SET AUTOCOMMIT= 1;
 
15624
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15625
COMMIT WORK;
 
15626
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15627
        
 
15628
# check special-1 success:      1
 
15629
UPDATE t1 SET f_charbig = '';
 
15630
        
 
15631
# check special-2 success:      1
 
15632
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15633
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15634
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15635
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15638
'just inserted' FROM t0_template
 
15639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15640
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15641
BEGIN
 
15642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15643
f_charbig = 'updated by trigger'
 
15644
      WHERE f_int1 = new.f_int1;
 
15645
END|
 
15646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15647
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15649
        
 
15650
# check trigger-1 success:      1
 
15651
DROP TRIGGER trg_1;
 
15652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15654
f_charbig = 'just inserted'
 
15655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15656
DELETE FROM t0_aux
 
15657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15660
'just inserted' FROM t0_template
 
15661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15662
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15663
BEGIN
 
15664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15665
f_charbig = 'updated by trigger'
 
15666
      WHERE f_int1 = new.f_int1;
 
15667
END|
 
15668
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15669
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15670
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15671
        
 
15672
# check trigger-2 success:      1
 
15673
DROP TRIGGER trg_1;
 
15674
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15675
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15676
f_charbig = 'just inserted'
 
15677
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15678
DELETE FROM t0_aux
 
15679
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15680
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15681
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15682
'just inserted' FROM t0_template
 
15683
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15684
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15685
BEGIN
 
15686
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15687
f_charbig = 'updated by trigger'
 
15688
      WHERE f_int1 = new.f_int1;
 
15689
END|
 
15690
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15691
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15692
        
 
15693
# check trigger-3 success:      1
 
15694
DROP TRIGGER trg_1;
 
15695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15697
f_charbig = 'just inserted'
 
15698
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15699
DELETE FROM t0_aux
 
15700
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15702
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15703
'just inserted' FROM t0_template
 
15704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15705
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15706
BEGIN
 
15707
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15708
f_charbig = 'updated by trigger'
 
15709
      WHERE f_int1 = - old.f_int1;
 
15710
END|
 
15711
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15712
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15713
        
 
15714
# check trigger-4 success:      1
 
15715
DROP TRIGGER trg_1;
 
15716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15718
f_charbig = 'just inserted'
 
15719
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15720
DELETE FROM t0_aux
 
15721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15722
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15723
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15724
'just inserted' FROM t0_template
 
15725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15726
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15727
BEGIN
 
15728
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15729
f_charbig = 'updated by trigger'
 
15730
      WHERE f_int1 = new.f_int1;
 
15731
END|
 
15732
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15733
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15734
        
 
15735
# check trigger-5 success:      1
 
15736
DROP TRIGGER trg_1;
 
15737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15739
f_charbig = 'just inserted'
 
15740
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15741
DELETE FROM t0_aux
 
15742
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15743
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15744
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15745
'just inserted' FROM t0_template
 
15746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15747
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15748
BEGIN
 
15749
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15750
f_charbig = 'updated by trigger'
 
15751
      WHERE f_int1 = - old.f_int1;
 
15752
END|
 
15753
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15754
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15755
        
 
15756
# check trigger-6 success:      1
 
15757
DROP TRIGGER trg_1;
 
15758
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15759
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15760
f_charbig = 'just inserted'
 
15761
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15762
DELETE FROM t0_aux
 
15763
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15764
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15765
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15766
'just inserted' FROM t0_template
 
15767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15768
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15769
BEGIN
 
15770
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15771
f_charbig = 'updated by trigger'
 
15772
      WHERE f_int1 = - old.f_int1;
 
15773
END|
 
15774
DELETE FROM t0_aux
 
15775
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15776
        
 
15777
# check trigger-7 success:      1
 
15778
DROP TRIGGER trg_1;
 
15779
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15780
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15781
f_charbig = 'just inserted'
 
15782
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15783
DELETE FROM t0_aux
 
15784
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15785
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15786
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15787
'just inserted' FROM t0_template
 
15788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15789
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15790
BEGIN
 
15791
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15792
f_charbig = 'updated by trigger'
 
15793
      WHERE f_int1 = - old.f_int1;
 
15794
END|
 
15795
DELETE FROM t0_aux
 
15796
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15797
        
 
15798
# check trigger-8 success:      1
 
15799
DROP TRIGGER trg_1;
 
15800
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15801
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15802
f_charbig = 'just inserted'
 
15803
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15804
DELETE FROM t0_aux
 
15805
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15806
DELETE FROM t1
 
15807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15808
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15809
BEGIN
 
15810
SET new.f_int1 = old.f_int1 + @max_row,
 
15811
new.f_int2 = old.f_int2 - @max_row,
 
15812
new.f_charbig = '####updated per update trigger####';
 
15813
END|
 
15814
UPDATE t1
 
15815
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15816
f_charbig = '####updated per update statement itself####';
 
15817
        
 
15818
# check trigger-9 success:      1
 
15819
DROP TRIGGER trg_2;
 
15820
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15821
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15822
f_charbig = CONCAT('===',f_char1,'===');
 
15823
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15824
BEGIN
 
15825
SET new.f_int1 = new.f_int1 + @max_row,
 
15826
new.f_int2 = new.f_int2 - @max_row,
 
15827
new.f_charbig = '####updated per update trigger####';
 
15828
END|
 
15829
UPDATE t1
 
15830
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15831
f_charbig = '####updated per update statement itself####';
 
15832
        
 
15833
# check trigger-10 success:     1
 
15834
DROP TRIGGER trg_2;
 
15835
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15836
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15837
f_charbig = CONCAT('===',f_char1,'===');
 
15838
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15839
BEGIN
 
15840
SET new.f_int1 = @my_max1 + @counter,
 
15841
new.f_int2 = @my_min2 - @counter,
 
15842
new.f_charbig = '####updated per insert trigger####';
 
15843
SET @counter = @counter + 1;
 
15844
END|
 
15845
SET @counter = 1;
 
15846
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15847
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15848
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15849
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15851
ORDER BY f_int1;
 
15852
DROP TRIGGER trg_3;
 
15853
        
 
15854
# check trigger-11 success:     1
 
15855
DELETE FROM t1
 
15856
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15857
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15858
AND f_charbig = '####updated per insert trigger####';
 
15859
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15860
BEGIN
 
15861
SET new.f_int1 = @my_max1 + @counter,
 
15862
new.f_int2 = @my_min2 - @counter,
 
15863
new.f_charbig = '####updated per insert trigger####';
 
15864
SET @counter = @counter + 1;
 
15865
END|
 
15866
SET @counter = 1;
 
15867
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15868
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15869
SELECT CAST(f_int1 AS CHAR),
 
15870
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15872
ORDER BY f_int1;
 
15873
DROP TRIGGER trg_3;
 
15874
        
 
15875
# check trigger-12 success:     1
 
15876
DELETE FROM t1
 
15877
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15878
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15879
AND f_charbig = '####updated per insert trigger####';
 
15880
ANALYZE  TABLE t1;
 
15881
Table   Op      Msg_type        Msg_text
 
15882
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
15883
CHECK    TABLE t1 EXTENDED;
 
15884
Table   Op      Msg_type        Msg_text
 
15885
test.t1 check   note    The storage engine for the table doesn't support check
 
15886
CHECKSUM TABLE t1 EXTENDED;
 
15887
Table   Checksum
 
15888
test.t1 <some_value>
 
15889
OPTIMIZE TABLE t1;
 
15890
Table   Op      Msg_type        Msg_text
 
15891
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
15892
# check layout success:    1
 
15893
REPAIR   TABLE t1 EXTENDED;
 
15894
Table   Op      Msg_type        Msg_text
 
15895
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15896
# check layout success:    1
 
15897
TRUNCATE t1;
 
15898
        
 
15899
# check TRUNCATE success:       1
 
15900
# check layout success:    1
 
15901
# End usability test (inc/partition_check.inc)
 
15902
DROP TABLE t1;
 
15903
CREATE TABLE t1 (
 
15904
f_int1 INTEGER,
 
15905
f_int2 INTEGER,
 
15906
f_char1 CHAR(20),
 
15907
f_char2 CHAR(20),
 
15908
f_charbig VARCHAR(1000)
 
15909
 
 
15910
)
 
15911
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15912
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15913
(PARTITION part1 VALUES IN (0),
 
15914
 PARTITION part2 VALUES IN (1),
 
15915
 PARTITION part3 VALUES IN (NULL));
 
15916
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15917
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15918
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15919
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
15920
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15921
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15922
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15923
# Start usability test (inc/partition_check.inc)
 
15924
create_command
 
15925
SHOW CREATE TABLE t1;
 
15926
Table   Create Table
 
15927
t1      CREATE TABLE `t1` (
 
15928
  `f_int1` int(11) DEFAULT NULL,
 
15929
  `f_int2` int(11) DEFAULT NULL,
 
15930
  `f_char1` char(20) DEFAULT NULL,
 
15931
  `f_char2` char(20) DEFAULT NULL,
 
15932
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15933
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
15934
) ENGINE=InnoDB 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 = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
15935
 
 
15936
# check prerequisites-1 success:    1
 
15937
# check COUNT(*) success:    1
 
15938
# check MIN/MAX(f_int1) success:    1
 
15939
# check MIN/MAX(f_int2) success:    1
 
15940
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15941
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15942
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15943
WHERE f_int1 IN (2,3);
 
15944
ERROR 23000: Can't write; duplicate key in table 't1'
 
15945
# check prerequisites-3 success:    1
 
15946
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15947
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15948
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15949
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15950
WHERE f_int1 IN (2,3);
 
15951
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15952
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15953
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15954
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15955
WHERE f_int1 IN (2,3);
 
15956
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15957
# check read via f_int1 success: 1
 
15958
# check read via f_int2 success: 1
 
15959
        
 
15960
# check multiple-1 success:     1
 
15961
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15962
        
 
15963
# check multiple-2 success:     1
 
15964
INSERT INTO t1 SELECT * FROM t0_template
 
15965
WHERE MOD(f_int1,3) = 0;
 
15966
        
 
15967
# check multiple-3 success:     1
 
15968
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15969
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15970
AND @max_row_div2 + @max_row_div4;
 
15971
        
 
15972
# check multiple-4 success:     1
 
15973
DELETE FROM t1
 
15974
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15975
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15976
        
 
15977
# check multiple-5 success:     1
 
15978
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15979
WHERE MOD(f_int1,3) = 0
 
15980
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15981
SELECT COUNT(*) INTO @clash_count
 
15982
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15983
WHERE MOD(f_int1,3) = 0
 
15984
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15985
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15986
INSERT INTO t1
 
15987
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15988
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15989
f_charbig = '#SINGLE#';
 
15990
        
 
15991
# check single-1 success:       1
 
15992
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15993
INSERT INTO t1
 
15994
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15995
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15996
f_charbig = '#SINGLE#';
 
15997
        
 
15998
# check single-2 success:       1
 
15999
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16000
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16001
UPDATE t1 SET f_int1 = @cur_value2
 
16002
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16003
        
 
16004
# check single-3 success:       1
 
16005
SET @cur_value1= -1;
 
16006
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16007
UPDATE t1 SET f_int1 = @cur_value1
 
16008
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16009
        
 
16010
# check single-4 success:       1
 
16011
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16012
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16013
        
 
16014
# check single-5 success:       1
 
16015
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16016
        
 
16017
# check single-6 success:       1
 
16018
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16019
        
 
16020
# check single-7 success:       1
 
16021
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16022
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16023
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16024
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16025
f_charbig = '#NULL#';
 
16026
INSERT INTO t1
 
16027
SET f_int1 = NULL , f_int2 = -@max_row,
 
16028
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16029
f_charbig = '#NULL#';
 
16030
# check null success:    1
 
16031
        
 
16032
# check null-1 success:         1
 
16033
UPDATE t1 SET f_int1 = -@max_row
 
16034
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16035
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16036
        
 
16037
# check null-2 success:         1
 
16038
UPDATE t1 SET f_int1 = NULL
 
16039
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16040
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16041
        
 
16042
# check null-3 success:         1
 
16043
DELETE FROM t1
 
16044
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16045
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16046
        
 
16047
# check null-4 success:         1
 
16048
DELETE FROM t1
 
16049
WHERE f_int1 = 0 AND f_int2 = 0
 
16050
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16051
AND f_charbig = '#NULL#';
 
16052
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16053
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16054
   FROM t0_template source_tab
 
16055
WHERE MOD(f_int1,3) = 0
 
16056
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
16057
ON DUPLICATE KEY
 
16058
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
16059
f_int2 = 2 * @max_row + source_tab.f_int1,
 
16060
f_charbig = 'was updated';
 
16061
        
 
16062
# check unique-1-a success:     1
 
16063
        
 
16064
# check unique-1-b success:     1
 
16065
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16066
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16067
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16068
f_charbig = CONCAT('===',f_char1,'===')
 
16069
WHERE f_charbig = 'was updated';
 
16070
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16071
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
16072
   FROM t0_template source_tab
 
16073
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16074
        
 
16075
# check replace success:        1
 
16076
DELETE FROM t1
 
16077
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
16078
DELETE FROM t1
 
16079
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
16080
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
16081
UPDATE t1 SET f_int2 = f_int1,
 
16082
f_char1 = CAST(f_int1 AS CHAR),
 
16083
f_char2 = CAST(f_int1 AS CHAR),
 
16084
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
16085
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
16086
SET AUTOCOMMIT= 0;
 
16087
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16088
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16089
FROM t0_template source_tab
 
16090
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16091
        
 
16092
# check transactions-1 success:         1
 
16093
COMMIT WORK;
 
16094
        
 
16095
# check transactions-2 success:         1
 
16096
ROLLBACK WORK;
 
16097
        
 
16098
# check transactions-3 success:         1
 
16099
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16100
COMMIT WORK;
 
16101
ROLLBACK WORK;
 
16102
        
 
16103
# check transactions-4 success:         1
 
16104
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16105
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16106
FROM t0_template source_tab
 
16107
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16108
        
 
16109
# check transactions-5 success:         1
 
16110
ROLLBACK WORK;
 
16111
        
 
16112
# check transactions-6 success:         1
 
16113
# INFO: Storage engine used for t1 seems to be transactional.
 
16114
COMMIT;
 
16115
        
 
16116
# check transactions-7 success:         1
 
16117
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16118
COMMIT WORK;
 
16119
SET @@session.sql_mode = 'traditional';
 
16120
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16121
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16122
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16123
'', '', 'was inserted' FROM t0_template
 
16124
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16125
ERROR 22012: Division by 0
 
16126
COMMIT;
 
16127
        
 
16128
# check transactions-8 success:         1
 
16129
# INFO: Storage engine used for t1 seems to be able to revert
 
16130
#       changes made by the failing statement.
 
16131
SET @@session.sql_mode = '';
 
16132
SET AUTOCOMMIT= 1;
 
16133
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16134
COMMIT WORK;
 
16135
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16136
        
 
16137
# check special-1 success:      1
 
16138
UPDATE t1 SET f_charbig = '';
 
16139
        
 
16140
# check special-2 success:      1
 
16141
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16142
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16143
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16146
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16147
'just inserted' FROM t0_template
 
16148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16149
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16150
BEGIN
 
16151
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16152
f_charbig = 'updated by trigger'
 
16153
      WHERE f_int1 = new.f_int1;
 
16154
END|
 
16155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16156
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16158
        
 
16159
# check trigger-1 success:      1
 
16160
DROP TRIGGER trg_1;
 
16161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16163
f_charbig = 'just inserted'
 
16164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16165
DELETE FROM t0_aux
 
16166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16169
'just inserted' FROM t0_template
 
16170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16171
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16172
BEGIN
 
16173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16174
f_charbig = 'updated by trigger'
 
16175
      WHERE f_int1 = new.f_int1;
 
16176
END|
 
16177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16178
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16180
        
 
16181
# check trigger-2 success:      1
 
16182
DROP TRIGGER trg_1;
 
16183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16185
f_charbig = 'just inserted'
 
16186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16187
DELETE FROM t0_aux
 
16188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16191
'just inserted' FROM t0_template
 
16192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16193
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16194
BEGIN
 
16195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16196
f_charbig = 'updated by trigger'
 
16197
      WHERE f_int1 = new.f_int1;
 
16198
END|
 
16199
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16201
        
 
16202
# check trigger-3 success:      1
 
16203
DROP TRIGGER trg_1;
 
16204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16206
f_charbig = 'just inserted'
 
16207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16208
DELETE FROM t0_aux
 
16209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16211
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16212
'just inserted' FROM t0_template
 
16213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16214
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16215
BEGIN
 
16216
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16217
f_charbig = 'updated by trigger'
 
16218
      WHERE f_int1 = - old.f_int1;
 
16219
END|
 
16220
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16221
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16222
        
 
16223
# check trigger-4 success:      1
 
16224
DROP TRIGGER trg_1;
 
16225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16227
f_charbig = 'just inserted'
 
16228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16229
DELETE FROM t0_aux
 
16230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16233
'just inserted' FROM t0_template
 
16234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16235
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16236
BEGIN
 
16237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16238
f_charbig = 'updated by trigger'
 
16239
      WHERE f_int1 = new.f_int1;
 
16240
END|
 
16241
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16242
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16243
        
 
16244
# check trigger-5 success:      1
 
16245
DROP TRIGGER trg_1;
 
16246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16248
f_charbig = 'just inserted'
 
16249
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16250
DELETE FROM t0_aux
 
16251
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16252
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16253
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16254
'just inserted' FROM t0_template
 
16255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16256
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16257
BEGIN
 
16258
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16259
f_charbig = 'updated by trigger'
 
16260
      WHERE f_int1 = - old.f_int1;
 
16261
END|
 
16262
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16263
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16264
        
 
16265
# check trigger-6 success:      1
 
16266
DROP TRIGGER trg_1;
 
16267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16269
f_charbig = 'just inserted'
 
16270
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16271
DELETE FROM t0_aux
 
16272
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16273
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16274
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16275
'just inserted' FROM t0_template
 
16276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16277
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16278
BEGIN
 
16279
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16280
f_charbig = 'updated by trigger'
 
16281
      WHERE f_int1 = - old.f_int1;
 
16282
END|
 
16283
DELETE FROM t0_aux
 
16284
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16285
        
 
16286
# check trigger-7 success:      1
 
16287
DROP TRIGGER trg_1;
 
16288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16290
f_charbig = 'just inserted'
 
16291
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16292
DELETE FROM t0_aux
 
16293
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16294
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16295
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16296
'just inserted' FROM t0_template
 
16297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16298
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16299
BEGIN
 
16300
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16301
f_charbig = 'updated by trigger'
 
16302
      WHERE f_int1 = - old.f_int1;
 
16303
END|
 
16304
DELETE FROM t0_aux
 
16305
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16306
        
 
16307
# check trigger-8 success:      1
 
16308
DROP TRIGGER trg_1;
 
16309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16311
f_charbig = 'just inserted'
 
16312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16313
DELETE FROM t0_aux
 
16314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16315
DELETE FROM t1
 
16316
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16317
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16318
BEGIN
 
16319
SET new.f_int1 = old.f_int1 + @max_row,
 
16320
new.f_int2 = old.f_int2 - @max_row,
 
16321
new.f_charbig = '####updated per update trigger####';
 
16322
END|
 
16323
UPDATE t1
 
16324
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16325
f_charbig = '####updated per update statement itself####';
 
16326
        
 
16327
# check trigger-9 success:      1
 
16328
DROP TRIGGER trg_2;
 
16329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16331
f_charbig = CONCAT('===',f_char1,'===');
 
16332
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16333
BEGIN
 
16334
SET new.f_int1 = new.f_int1 + @max_row,
 
16335
new.f_int2 = new.f_int2 - @max_row,
 
16336
new.f_charbig = '####updated per update trigger####';
 
16337
END|
 
16338
UPDATE t1
 
16339
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16340
f_charbig = '####updated per update statement itself####';
 
16341
        
 
16342
# check trigger-10 success:     1
 
16343
DROP TRIGGER trg_2;
 
16344
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16345
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16346
f_charbig = CONCAT('===',f_char1,'===');
 
16347
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16348
BEGIN
 
16349
SET new.f_int1 = @my_max1 + @counter,
 
16350
new.f_int2 = @my_min2 - @counter,
 
16351
new.f_charbig = '####updated per insert trigger####';
 
16352
SET @counter = @counter + 1;
 
16353
END|
 
16354
SET @counter = 1;
 
16355
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16356
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16357
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16358
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16359
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16360
ORDER BY f_int1;
 
16361
DROP TRIGGER trg_3;
 
16362
        
 
16363
# check trigger-11 success:     1
 
16364
DELETE FROM t1
 
16365
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16366
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16367
AND f_charbig = '####updated per insert trigger####';
 
16368
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16369
BEGIN
 
16370
SET new.f_int1 = @my_max1 + @counter,
 
16371
new.f_int2 = @my_min2 - @counter,
 
16372
new.f_charbig = '####updated per insert trigger####';
 
16373
SET @counter = @counter + 1;
 
16374
END|
 
16375
SET @counter = 1;
 
16376
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16377
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16378
SELECT CAST(f_int1 AS CHAR),
 
16379
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16381
ORDER BY f_int1;
 
16382
DROP TRIGGER trg_3;
 
16383
        
 
16384
# check trigger-12 success:     1
 
16385
DELETE FROM t1
 
16386
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16387
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16388
AND f_charbig = '####updated per insert trigger####';
 
16389
ANALYZE  TABLE t1;
 
16390
Table   Op      Msg_type        Msg_text
 
16391
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
16392
CHECK    TABLE t1 EXTENDED;
 
16393
Table   Op      Msg_type        Msg_text
 
16394
test.t1 check   note    The storage engine for the table doesn't support check
 
16395
CHECKSUM TABLE t1 EXTENDED;
 
16396
Table   Checksum
 
16397
test.t1 <some_value>
 
16398
OPTIMIZE TABLE t1;
 
16399
Table   Op      Msg_type        Msg_text
 
16400
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
16401
# check layout success:    1
 
16402
REPAIR   TABLE t1 EXTENDED;
 
16403
Table   Op      Msg_type        Msg_text
 
16404
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16405
# check layout success:    1
 
16406
TRUNCATE t1;
 
16407
        
 
16408
# check TRUNCATE success:       1
 
16409
# check layout success:    1
 
16410
# End usability test (inc/partition_check.inc)
 
16411
DROP TABLE t1;
 
16412
#------------------------------------------------------------------------
 
16413
#  1.2   ADD PRIMARY KEY or UNIQUE INDEX to table with two columns
 
16414
#        (f_int1 and f_int2) within the partitioning function
 
16415
#------------------------------------------------------------------------
 
16416
#  1.2.1 PRIMARY KEY consisting of two columns
 
16417
DROP TABLE IF EXISTS t1;
 
16418
CREATE TABLE t1 (
 
16419
f_int1 INTEGER,
 
16420
f_int2 INTEGER,
 
16421
f_char1 CHAR(20),
 
16422
f_char2 CHAR(20),
 
16423
f_charbig VARCHAR(1000)
 
16424
 
 
16425
)
 
16426
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
16427
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16428
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16429
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16430
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
16431
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16432
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16433
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16434
# Start usability test (inc/partition_check.inc)
 
16435
create_command
 
16436
SHOW CREATE TABLE t1;
 
16437
Table   Create Table
 
16438
t1      CREATE TABLE `t1` (
 
16439
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
16440
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
16441
  `f_char1` char(20) DEFAULT NULL,
 
16442
  `f_char2` char(20) DEFAULT NULL,
 
16443
  `f_charbig` varchar(1000) DEFAULT NULL,
 
16444
  PRIMARY KEY (`f_int1`,`f_int2`)
 
16445
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
16446
 
 
16447
# check prerequisites-1 success:    1
 
16448
# check COUNT(*) success:    1
 
16449
# check MIN/MAX(f_int1) success:    1
 
16450
# check MIN/MAX(f_int2) success:    1
 
16451
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16452
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16453
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16454
WHERE f_int1 IN (2,3);
 
16455
ERROR 23000: Can't write; duplicate key in table 't1'
 
16456
# check prerequisites-3 success:    1
 
16457
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
16458
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16459
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16460
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16461
WHERE f_int1 IN (2,3);
 
16462
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16463
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16464
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16465
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16466
WHERE f_int1 IN (2,3);
 
16467
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16468
# check read via f_int1 success: 1
 
16469
# check read via f_int2 success: 1
 
16470
        
 
16471
# check multiple-1 success:     1
 
16472
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16473
        
 
16474
# check multiple-2 success:     1
 
16475
INSERT INTO t1 SELECT * FROM t0_template
 
16476
WHERE MOD(f_int1,3) = 0;
 
16477
        
 
16478
# check multiple-3 success:     1
 
16479
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16480
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16481
AND @max_row_div2 + @max_row_div4;
 
16482
        
 
16483
# check multiple-4 success:     1
 
16484
DELETE FROM t1
 
16485
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16486
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16487
        
 
16488
# check multiple-5 success:     1
 
16489
SELECT COUNT(*) INTO @try_count FROM t0_template
 
16490
WHERE MOD(f_int1,3) = 0
 
16491
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16492
SELECT COUNT(*) INTO @clash_count
 
16493
FROM t1 INNER JOIN t0_template USING(f_int1)
 
16494
WHERE MOD(f_int1,3) = 0
 
16495
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16496
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16497
INSERT INTO t1
 
16498
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16499
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16500
f_charbig = '#SINGLE#';
 
16501
        
 
16502
# check single-1 success:       1
 
16503
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16504
INSERT INTO t1
 
16505
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16506
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16507
f_charbig = '#SINGLE#';
 
16508
        
 
16509
# check single-2 success:       1
 
16510
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16511
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16512
UPDATE t1 SET f_int1 = @cur_value2
 
16513
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16514
        
 
16515
# check single-3 success:       1
 
16516
SET @cur_value1= -1;
 
16517
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16518
UPDATE t1 SET f_int1 = @cur_value1
 
16519
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16520
        
 
16521
# check single-4 success:       1
 
16522
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16523
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16524
        
 
16525
# check single-5 success:       1
 
16526
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16527
        
 
16528
# check single-6 success:       1
 
16529
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16530
        
 
16531
# check single-7 success:       1
 
16532
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16533
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16534
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16535
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16536
f_charbig = '#NULL#';
 
16537
INSERT INTO t1
 
16538
SET f_int1 = NULL , f_int2 = -@max_row,
 
16539
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16540
f_charbig = '#NULL#';
 
16541
ERROR 23000: Column 'f_int1' cannot be null
 
16542
# check null success:    1
 
16543
DELETE FROM t1
 
16544
WHERE f_int1 = 0 AND f_int2 = 0
 
16545
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16546
AND f_charbig = '#NULL#';
 
16547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16548
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16549
   FROM t0_template source_tab
 
16550
WHERE MOD(f_int1,3) = 0
 
16551
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
16552
ON DUPLICATE KEY
 
16553
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
16554
f_int2 = 2 * @max_row + source_tab.f_int1,
 
16555
f_charbig = 'was updated';
 
16556
        
 
16557
# check unique-1-a success:     1
 
16558
        
 
16559
# check unique-1-b success:     1
 
16560
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16561
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16562
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16563
f_charbig = CONCAT('===',f_char1,'===')
 
16564
WHERE f_charbig = 'was updated';
 
16565
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16566
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
16567
   FROM t0_template source_tab
 
16568
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16569
        
 
16570
# check replace success:        1
 
16571
DELETE FROM t1
 
16572
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
16573
DELETE FROM t1
 
16574
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
16575
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
16576
UPDATE t1 SET f_int2 = f_int1,
 
16577
f_char1 = CAST(f_int1 AS CHAR),
 
16578
f_char2 = CAST(f_int1 AS CHAR),
 
16579
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
16580
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
16581
SET AUTOCOMMIT= 0;
 
16582
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16583
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16584
FROM t0_template source_tab
 
16585
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16586
        
 
16587
# check transactions-1 success:         1
 
16588
COMMIT WORK;
 
16589
        
 
16590
# check transactions-2 success:         1
 
16591
ROLLBACK WORK;
 
16592
        
 
16593
# check transactions-3 success:         1
 
16594
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16595
COMMIT WORK;
 
16596
ROLLBACK WORK;
 
16597
        
 
16598
# check transactions-4 success:         1
 
16599
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16600
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16601
FROM t0_template source_tab
 
16602
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16603
        
 
16604
# check transactions-5 success:         1
 
16605
ROLLBACK WORK;
 
16606
        
 
16607
# check transactions-6 success:         1
 
16608
# INFO: Storage engine used for t1 seems to be transactional.
 
16609
COMMIT;
 
16610
        
 
16611
# check transactions-7 success:         1
 
16612
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16613
COMMIT WORK;
 
16614
SET @@session.sql_mode = 'traditional';
 
16615
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16616
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16617
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16618
'', '', 'was inserted' FROM t0_template
 
16619
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16620
ERROR 22012: Division by 0
 
16621
COMMIT;
 
16622
        
 
16623
# check transactions-8 success:         1
 
16624
# INFO: Storage engine used for t1 seems to be able to revert
 
16625
#       changes made by the failing statement.
 
16626
SET @@session.sql_mode = '';
 
16627
SET AUTOCOMMIT= 1;
 
16628
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16629
COMMIT WORK;
 
16630
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16631
        
 
16632
# check special-1 success:      1
 
16633
UPDATE t1 SET f_charbig = '';
 
16634
        
 
16635
# check special-2 success:      1
 
16636
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16637
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16638
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16640
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16641
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16642
'just inserted' FROM t0_template
 
16643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16644
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16645
BEGIN
 
16646
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16647
f_charbig = 'updated by trigger'
 
16648
      WHERE f_int1 = new.f_int1;
 
16649
END|
 
16650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16651
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16652
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16653
        
 
16654
# check trigger-1 success:      1
 
16655
DROP TRIGGER trg_1;
 
16656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16658
f_charbig = 'just inserted'
 
16659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16660
DELETE FROM t0_aux
 
16661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16664
'just inserted' FROM t0_template
 
16665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16666
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16667
BEGIN
 
16668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16669
f_charbig = 'updated by trigger'
 
16670
      WHERE f_int1 = new.f_int1;
 
16671
END|
 
16672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16673
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16675
        
 
16676
# check trigger-2 success:      1
 
16677
DROP TRIGGER trg_1;
 
16678
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16679
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16680
f_charbig = 'just inserted'
 
16681
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16682
DELETE FROM t0_aux
 
16683
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16684
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16685
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16686
'just inserted' FROM t0_template
 
16687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16688
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16689
BEGIN
 
16690
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16691
f_charbig = 'updated by trigger'
 
16692
      WHERE f_int1 = new.f_int1;
 
16693
END|
 
16694
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16695
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16696
        
 
16697
# check trigger-3 success:      1
 
16698
DROP TRIGGER trg_1;
 
16699
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16700
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16701
f_charbig = 'just inserted'
 
16702
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16703
DELETE FROM t0_aux
 
16704
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16705
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16706
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16707
'just inserted' FROM t0_template
 
16708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16709
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16710
BEGIN
 
16711
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16712
f_charbig = 'updated by trigger'
 
16713
      WHERE f_int1 = - old.f_int1;
 
16714
END|
 
16715
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16716
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16717
        
 
16718
# check trigger-4 success:      1
 
16719
DROP TRIGGER trg_1;
 
16720
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16721
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16722
f_charbig = 'just inserted'
 
16723
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16724
DELETE FROM t0_aux
 
16725
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16726
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16727
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16728
'just inserted' FROM t0_template
 
16729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16730
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16731
BEGIN
 
16732
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16733
f_charbig = 'updated by trigger'
 
16734
      WHERE f_int1 = new.f_int1;
 
16735
END|
 
16736
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16737
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16738
        
 
16739
# check trigger-5 success:      1
 
16740
DROP TRIGGER trg_1;
 
16741
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16742
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16743
f_charbig = 'just inserted'
 
16744
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16745
DELETE FROM t0_aux
 
16746
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16747
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16748
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16749
'just inserted' FROM t0_template
 
16750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16751
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16752
BEGIN
 
16753
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16754
f_charbig = 'updated by trigger'
 
16755
      WHERE f_int1 = - old.f_int1;
 
16756
END|
 
16757
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16758
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16759
        
 
16760
# check trigger-6 success:      1
 
16761
DROP TRIGGER trg_1;
 
16762
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16763
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16764
f_charbig = 'just inserted'
 
16765
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16766
DELETE FROM t0_aux
 
16767
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16770
'just inserted' FROM t0_template
 
16771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16772
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16773
BEGIN
 
16774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16775
f_charbig = 'updated by trigger'
 
16776
      WHERE f_int1 = - old.f_int1;
 
16777
END|
 
16778
DELETE FROM t0_aux
 
16779
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16780
        
 
16781
# check trigger-7 success:      1
 
16782
DROP TRIGGER trg_1;
 
16783
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16784
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16785
f_charbig = 'just inserted'
 
16786
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16787
DELETE FROM t0_aux
 
16788
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16789
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16790
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16791
'just inserted' FROM t0_template
 
16792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16793
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16794
BEGIN
 
16795
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16796
f_charbig = 'updated by trigger'
 
16797
      WHERE f_int1 = - old.f_int1;
 
16798
END|
 
16799
DELETE FROM t0_aux
 
16800
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16801
        
 
16802
# check trigger-8 success:      1
 
16803
DROP TRIGGER trg_1;
 
16804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16806
f_charbig = 'just inserted'
 
16807
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16808
DELETE FROM t0_aux
 
16809
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16810
DELETE FROM t1
 
16811
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16812
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16813
BEGIN
 
16814
SET new.f_int1 = old.f_int1 + @max_row,
 
16815
new.f_int2 = old.f_int2 - @max_row,
 
16816
new.f_charbig = '####updated per update trigger####';
 
16817
END|
 
16818
UPDATE t1
 
16819
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16820
f_charbig = '####updated per update statement itself####';
 
16821
        
 
16822
# check trigger-9 success:      1
 
16823
DROP TRIGGER trg_2;
 
16824
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16825
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16826
f_charbig = CONCAT('===',f_char1,'===');
 
16827
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16828
BEGIN
 
16829
SET new.f_int1 = new.f_int1 + @max_row,
 
16830
new.f_int2 = new.f_int2 - @max_row,
 
16831
new.f_charbig = '####updated per update trigger####';
 
16832
END|
 
16833
UPDATE t1
 
16834
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16835
f_charbig = '####updated per update statement itself####';
 
16836
        
 
16837
# check trigger-10 success:     1
 
16838
DROP TRIGGER trg_2;
 
16839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16841
f_charbig = CONCAT('===',f_char1,'===');
 
16842
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16843
BEGIN
 
16844
SET new.f_int1 = @my_max1 + @counter,
 
16845
new.f_int2 = @my_min2 - @counter,
 
16846
new.f_charbig = '####updated per insert trigger####';
 
16847
SET @counter = @counter + 1;
 
16848
END|
 
16849
SET @counter = 1;
 
16850
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16851
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16852
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16853
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16855
ORDER BY f_int1;
 
16856
DROP TRIGGER trg_3;
 
16857
        
 
16858
# check trigger-11 success:     1
 
16859
DELETE FROM t1
 
16860
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16861
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16862
AND f_charbig = '####updated per insert trigger####';
 
16863
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16864
BEGIN
 
16865
SET new.f_int1 = @my_max1 + @counter,
 
16866
new.f_int2 = @my_min2 - @counter,
 
16867
new.f_charbig = '####updated per insert trigger####';
 
16868
SET @counter = @counter + 1;
 
16869
END|
 
16870
SET @counter = 1;
 
16871
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16872
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16873
SELECT CAST(f_int1 AS CHAR),
 
16874
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16876
ORDER BY f_int1;
 
16877
DROP TRIGGER trg_3;
 
16878
        
 
16879
# check trigger-12 success:     1
 
16880
DELETE FROM t1
 
16881
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16882
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16883
AND f_charbig = '####updated per insert trigger####';
 
16884
ANALYZE  TABLE t1;
 
16885
Table   Op      Msg_type        Msg_text
 
16886
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
16887
CHECK    TABLE t1 EXTENDED;
 
16888
Table   Op      Msg_type        Msg_text
 
16889
test.t1 check   note    The storage engine for the table doesn't support check
 
16890
CHECKSUM TABLE t1 EXTENDED;
 
16891
Table   Checksum
 
16892
test.t1 <some_value>
 
16893
OPTIMIZE TABLE t1;
 
16894
Table   Op      Msg_type        Msg_text
 
16895
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
16896
# check layout success:    1
 
16897
REPAIR   TABLE t1 EXTENDED;
 
16898
Table   Op      Msg_type        Msg_text
 
16899
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16900
# check layout success:    1
 
16901
TRUNCATE t1;
 
16902
        
 
16903
# check TRUNCATE success:       1
 
16904
# check layout success:    1
 
16905
# End usability test (inc/partition_check.inc)
 
16906
DROP TABLE t1;
 
16907
CREATE TABLE t1 (
 
16908
f_int1 INTEGER,
 
16909
f_int2 INTEGER,
 
16910
f_char1 CHAR(20),
 
16911
f_char2 CHAR(20),
 
16912
f_charbig VARCHAR(1000)
 
16913
 
 
16914
)
 
16915
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
16916
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16917
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16918
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16919
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
16920
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16921
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16922
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16923
# Start usability test (inc/partition_check.inc)
 
16924
create_command
 
16925
SHOW CREATE TABLE t1;
 
16926
Table   Create Table
 
16927
t1      CREATE TABLE `t1` (
 
16928
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
16929
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
16930
  `f_char1` char(20) DEFAULT NULL,
 
16931
  `f_char2` char(20) DEFAULT NULL,
 
16932
  `f_charbig` varchar(1000) DEFAULT NULL,
 
16933
  PRIMARY KEY (`f_int1`,`f_int2`)
 
16934
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
16935
 
 
16936
# check prerequisites-1 success:    1
 
16937
# check COUNT(*) success:    1
 
16938
# check MIN/MAX(f_int1) success:    1
 
16939
# check MIN/MAX(f_int2) success:    1
 
16940
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16941
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16942
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16943
WHERE f_int1 IN (2,3);
 
16944
ERROR 23000: Can't write; duplicate key in table 't1'
 
16945
# check prerequisites-3 success:    1
 
16946
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
16947
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16948
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16949
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16950
WHERE f_int1 IN (2,3);
 
16951
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16952
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16953
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16954
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16955
WHERE f_int1 IN (2,3);
 
16956
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16957
# check read via f_int1 success: 1
 
16958
# check read via f_int2 success: 1
 
16959
        
 
16960
# check multiple-1 success:     1
 
16961
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16962
        
 
16963
# check multiple-2 success:     1
 
16964
INSERT INTO t1 SELECT * FROM t0_template
 
16965
WHERE MOD(f_int1,3) = 0;
 
16966
        
 
16967
# check multiple-3 success:     1
 
16968
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16969
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16970
AND @max_row_div2 + @max_row_div4;
 
16971
        
 
16972
# check multiple-4 success:     1
 
16973
DELETE FROM t1
 
16974
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16975
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16976
        
 
16977
# check multiple-5 success:     1
 
16978
SELECT COUNT(*) INTO @try_count FROM t0_template
 
16979
WHERE MOD(f_int1,3) = 0
 
16980
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16981
SELECT COUNT(*) INTO @clash_count
 
16982
FROM t1 INNER JOIN t0_template USING(f_int1)
 
16983
WHERE MOD(f_int1,3) = 0
 
16984
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16985
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16986
INSERT INTO t1
 
16987
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16988
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16989
f_charbig = '#SINGLE#';
 
16990
        
 
16991
# check single-1 success:       1
 
16992
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16993
INSERT INTO t1
 
16994
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16995
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16996
f_charbig = '#SINGLE#';
 
16997
        
 
16998
# check single-2 success:       1
 
16999
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17000
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17001
UPDATE t1 SET f_int1 = @cur_value2
 
17002
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17003
        
 
17004
# check single-3 success:       1
 
17005
SET @cur_value1= -1;
 
17006
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17007
UPDATE t1 SET f_int1 = @cur_value1
 
17008
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17009
        
 
17010
# check single-4 success:       1
 
17011
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17012
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17013
        
 
17014
# check single-5 success:       1
 
17015
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17016
        
 
17017
# check single-6 success:       1
 
17018
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17019
        
 
17020
# check single-7 success:       1
 
17021
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17022
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17023
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17024
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17025
f_charbig = '#NULL#';
 
17026
INSERT INTO t1
 
17027
SET f_int1 = NULL , f_int2 = -@max_row,
 
17028
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17029
f_charbig = '#NULL#';
 
17030
ERROR 23000: Column 'f_int1' cannot be null
 
17031
# check null success:    1
 
17032
DELETE FROM t1
 
17033
WHERE f_int1 = 0 AND f_int2 = 0
 
17034
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17035
AND f_charbig = '#NULL#';
 
17036
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17037
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17038
   FROM t0_template source_tab
 
17039
WHERE MOD(f_int1,3) = 0
 
17040
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
17041
ON DUPLICATE KEY
 
17042
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
17043
f_int2 = 2 * @max_row + source_tab.f_int1,
 
17044
f_charbig = 'was updated';
 
17045
        
 
17046
# check unique-1-a success:     1
 
17047
        
 
17048
# check unique-1-b success:     1
 
17049
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17050
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17051
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17052
f_charbig = CONCAT('===',f_char1,'===')
 
17053
WHERE f_charbig = 'was updated';
 
17054
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17055
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
17056
   FROM t0_template source_tab
 
17057
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17058
        
 
17059
# check replace success:        1
 
17060
DELETE FROM t1
 
17061
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
17062
DELETE FROM t1
 
17063
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
17064
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
17065
UPDATE t1 SET f_int2 = f_int1,
 
17066
f_char1 = CAST(f_int1 AS CHAR),
 
17067
f_char2 = CAST(f_int1 AS CHAR),
 
17068
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
17069
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
17070
SET AUTOCOMMIT= 0;
 
17071
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17072
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17073
FROM t0_template source_tab
 
17074
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17075
        
 
17076
# check transactions-1 success:         1
 
17077
COMMIT WORK;
 
17078
        
 
17079
# check transactions-2 success:         1
 
17080
ROLLBACK WORK;
 
17081
        
 
17082
# check transactions-3 success:         1
 
17083
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17084
COMMIT WORK;
 
17085
ROLLBACK WORK;
 
17086
        
 
17087
# check transactions-4 success:         1
 
17088
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17089
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17090
FROM t0_template source_tab
 
17091
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17092
        
 
17093
# check transactions-5 success:         1
 
17094
ROLLBACK WORK;
 
17095
        
 
17096
# check transactions-6 success:         1
 
17097
# INFO: Storage engine used for t1 seems to be transactional.
 
17098
COMMIT;
 
17099
        
 
17100
# check transactions-7 success:         1
 
17101
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17102
COMMIT WORK;
 
17103
SET @@session.sql_mode = 'traditional';
 
17104
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17105
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17106
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17107
'', '', 'was inserted' FROM t0_template
 
17108
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17109
ERROR 22012: Division by 0
 
17110
COMMIT;
 
17111
        
 
17112
# check transactions-8 success:         1
 
17113
# INFO: Storage engine used for t1 seems to be able to revert
 
17114
#       changes made by the failing statement.
 
17115
SET @@session.sql_mode = '';
 
17116
SET AUTOCOMMIT= 1;
 
17117
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17118
COMMIT WORK;
 
17119
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17120
        
 
17121
# check special-1 success:      1
 
17122
UPDATE t1 SET f_charbig = '';
 
17123
        
 
17124
# check special-2 success:      1
 
17125
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17126
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17127
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17131
'just inserted' FROM t0_template
 
17132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17133
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17134
BEGIN
 
17135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17136
f_charbig = 'updated by trigger'
 
17137
      WHERE f_int1 = new.f_int1;
 
17138
END|
 
17139
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17140
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17142
        
 
17143
# check trigger-1 success:      1
 
17144
DROP TRIGGER trg_1;
 
17145
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17146
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17147
f_charbig = 'just inserted'
 
17148
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17149
DELETE FROM t0_aux
 
17150
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17152
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17153
'just inserted' FROM t0_template
 
17154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17155
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17156
BEGIN
 
17157
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17158
f_charbig = 'updated by trigger'
 
17159
      WHERE f_int1 = new.f_int1;
 
17160
END|
 
17161
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17162
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17164
        
 
17165
# check trigger-2 success:      1
 
17166
DROP TRIGGER trg_1;
 
17167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17169
f_charbig = 'just inserted'
 
17170
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17171
DELETE FROM t0_aux
 
17172
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17173
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17174
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17175
'just inserted' FROM t0_template
 
17176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17177
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17178
BEGIN
 
17179
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17180
f_charbig = 'updated by trigger'
 
17181
      WHERE f_int1 = new.f_int1;
 
17182
END|
 
17183
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17184
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17185
        
 
17186
# check trigger-3 success:      1
 
17187
DROP TRIGGER trg_1;
 
17188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17190
f_charbig = 'just inserted'
 
17191
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17192
DELETE FROM t0_aux
 
17193
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17194
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17195
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17196
'just inserted' FROM t0_template
 
17197
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17198
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17199
BEGIN
 
17200
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17201
f_charbig = 'updated by trigger'
 
17202
      WHERE f_int1 = - old.f_int1;
 
17203
END|
 
17204
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17205
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17206
        
 
17207
# check trigger-4 success:      1
 
17208
DROP TRIGGER trg_1;
 
17209
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17210
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17211
f_charbig = 'just inserted'
 
17212
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17213
DELETE FROM t0_aux
 
17214
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17215
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17216
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17217
'just inserted' FROM t0_template
 
17218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17219
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17220
BEGIN
 
17221
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17222
f_charbig = 'updated by trigger'
 
17223
      WHERE f_int1 = new.f_int1;
 
17224
END|
 
17225
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17226
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17227
        
 
17228
# check trigger-5 success:      1
 
17229
DROP TRIGGER trg_1;
 
17230
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17231
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17232
f_charbig = 'just inserted'
 
17233
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17234
DELETE FROM t0_aux
 
17235
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17236
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17237
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17238
'just inserted' FROM t0_template
 
17239
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17240
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17241
BEGIN
 
17242
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17243
f_charbig = 'updated by trigger'
 
17244
      WHERE f_int1 = - old.f_int1;
 
17245
END|
 
17246
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17247
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17248
        
 
17249
# check trigger-6 success:      1
 
17250
DROP TRIGGER trg_1;
 
17251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17253
f_charbig = 'just inserted'
 
17254
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17255
DELETE FROM t0_aux
 
17256
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17259
'just inserted' FROM t0_template
 
17260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17261
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17262
BEGIN
 
17263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17264
f_charbig = 'updated by trigger'
 
17265
      WHERE f_int1 = - old.f_int1;
 
17266
END|
 
17267
DELETE FROM t0_aux
 
17268
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17269
        
 
17270
# check trigger-7 success:      1
 
17271
DROP TRIGGER trg_1;
 
17272
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17273
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17274
f_charbig = 'just inserted'
 
17275
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17276
DELETE FROM t0_aux
 
17277
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17278
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17279
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17280
'just inserted' FROM t0_template
 
17281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17282
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17283
BEGIN
 
17284
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17285
f_charbig = 'updated by trigger'
 
17286
      WHERE f_int1 = - old.f_int1;
 
17287
END|
 
17288
DELETE FROM t0_aux
 
17289
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17290
        
 
17291
# check trigger-8 success:      1
 
17292
DROP TRIGGER trg_1;
 
17293
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17294
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17295
f_charbig = 'just inserted'
 
17296
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17297
DELETE FROM t0_aux
 
17298
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17299
DELETE FROM t1
 
17300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17301
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17302
BEGIN
 
17303
SET new.f_int1 = old.f_int1 + @max_row,
 
17304
new.f_int2 = old.f_int2 - @max_row,
 
17305
new.f_charbig = '####updated per update trigger####';
 
17306
END|
 
17307
UPDATE t1
 
17308
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17309
f_charbig = '####updated per update statement itself####';
 
17310
        
 
17311
# check trigger-9 success:      1
 
17312
DROP TRIGGER trg_2;
 
17313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17315
f_charbig = CONCAT('===',f_char1,'===');
 
17316
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17317
BEGIN
 
17318
SET new.f_int1 = new.f_int1 + @max_row,
 
17319
new.f_int2 = new.f_int2 - @max_row,
 
17320
new.f_charbig = '####updated per update trigger####';
 
17321
END|
 
17322
UPDATE t1
 
17323
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17324
f_charbig = '####updated per update statement itself####';
 
17325
        
 
17326
# check trigger-10 success:     1
 
17327
DROP TRIGGER trg_2;
 
17328
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17329
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17330
f_charbig = CONCAT('===',f_char1,'===');
 
17331
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17332
BEGIN
 
17333
SET new.f_int1 = @my_max1 + @counter,
 
17334
new.f_int2 = @my_min2 - @counter,
 
17335
new.f_charbig = '####updated per insert trigger####';
 
17336
SET @counter = @counter + 1;
 
17337
END|
 
17338
SET @counter = 1;
 
17339
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17340
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17341
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17342
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17344
ORDER BY f_int1;
 
17345
DROP TRIGGER trg_3;
 
17346
        
 
17347
# check trigger-11 success:     1
 
17348
DELETE FROM t1
 
17349
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17350
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17351
AND f_charbig = '####updated per insert trigger####';
 
17352
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17353
BEGIN
 
17354
SET new.f_int1 = @my_max1 + @counter,
 
17355
new.f_int2 = @my_min2 - @counter,
 
17356
new.f_charbig = '####updated per insert trigger####';
 
17357
SET @counter = @counter + 1;
 
17358
END|
 
17359
SET @counter = 1;
 
17360
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17361
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17362
SELECT CAST(f_int1 AS CHAR),
 
17363
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17364
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17365
ORDER BY f_int1;
 
17366
DROP TRIGGER trg_3;
 
17367
        
 
17368
# check trigger-12 success:     1
 
17369
DELETE FROM t1
 
17370
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17371
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17372
AND f_charbig = '####updated per insert trigger####';
 
17373
ANALYZE  TABLE t1;
 
17374
Table   Op      Msg_type        Msg_text
 
17375
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
17376
CHECK    TABLE t1 EXTENDED;
 
17377
Table   Op      Msg_type        Msg_text
 
17378
test.t1 check   note    The storage engine for the table doesn't support check
 
17379
CHECKSUM TABLE t1 EXTENDED;
 
17380
Table   Checksum
 
17381
test.t1 <some_value>
 
17382
OPTIMIZE TABLE t1;
 
17383
Table   Op      Msg_type        Msg_text
 
17384
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
17385
# check layout success:    1
 
17386
REPAIR   TABLE t1 EXTENDED;
 
17387
Table   Op      Msg_type        Msg_text
 
17388
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17389
# check layout success:    1
 
17390
TRUNCATE t1;
 
17391
        
 
17392
# check TRUNCATE success:       1
 
17393
# check layout success:    1
 
17394
# End usability test (inc/partition_check.inc)
 
17395
DROP TABLE t1;
 
17396
CREATE TABLE t1 (
 
17397
f_int1 INTEGER,
 
17398
f_int2 INTEGER,
 
17399
f_char1 CHAR(20),
 
17400
f_char2 CHAR(20),
 
17401
f_charbig VARCHAR(1000)
 
17402
 
 
17403
)
 
17404
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
17405
(PARTITION part_3 VALUES IN (-3),
 
17406
PARTITION part_2 VALUES IN (-2),
 
17407
PARTITION part_1 VALUES IN (-1),
 
17408
PARTITION part_N VALUES IN (NULL),
 
17409
PARTITION part0 VALUES IN (0),
 
17410
PARTITION part1 VALUES IN (1),
 
17411
PARTITION part2 VALUES IN (2),
 
17412
PARTITION part3 VALUES IN (3));
 
17413
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17414
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17415
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17416
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
17417
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17418
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17419
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17420
# Start usability test (inc/partition_check.inc)
 
17421
create_command
 
17422
SHOW CREATE TABLE t1;
 
17423
Table   Create Table
 
17424
t1      CREATE TABLE `t1` (
 
17425
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
17426
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
17427
  `f_char1` char(20) DEFAULT NULL,
 
17428
  `f_char2` char(20) DEFAULT NULL,
 
17429
  `f_charbig` varchar(1000) DEFAULT NULL,
 
17430
  PRIMARY KEY (`f_int1`,`f_int2`)
 
17431
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
17432
 
 
17433
# check prerequisites-1 success:    1
 
17434
# check COUNT(*) success:    1
 
17435
# check MIN/MAX(f_int1) success:    1
 
17436
# check MIN/MAX(f_int2) success:    1
 
17437
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17438
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17439
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17440
WHERE f_int1 IN (2,3);
 
17441
ERROR 23000: Can't write; duplicate key in table 't1'
 
17442
# check prerequisites-3 success:    1
 
17443
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
17444
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17445
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17446
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17447
WHERE f_int1 IN (2,3);
 
17448
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17449
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17450
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17451
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17452
WHERE f_int1 IN (2,3);
 
17453
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17454
# check read via f_int1 success: 1
 
17455
# check read via f_int2 success: 1
 
17456
        
 
17457
# check multiple-1 success:     1
 
17458
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17459
        
 
17460
# check multiple-2 success:     1
 
17461
INSERT INTO t1 SELECT * FROM t0_template
 
17462
WHERE MOD(f_int1,3) = 0;
 
17463
        
 
17464
# check multiple-3 success:     1
 
17465
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17466
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17467
AND @max_row_div2 + @max_row_div4;
 
17468
        
 
17469
# check multiple-4 success:     1
 
17470
DELETE FROM t1
 
17471
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17472
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17473
        
 
17474
# check multiple-5 success:     1
 
17475
SELECT COUNT(*) INTO @try_count FROM t0_template
 
17476
WHERE MOD(f_int1,3) = 0
 
17477
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17478
SELECT COUNT(*) INTO @clash_count
 
17479
FROM t1 INNER JOIN t0_template USING(f_int1)
 
17480
WHERE MOD(f_int1,3) = 0
 
17481
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17482
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17483
INSERT INTO t1
 
17484
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17485
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17486
f_charbig = '#SINGLE#';
 
17487
        
 
17488
# check single-1 success:       1
 
17489
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17490
INSERT INTO t1
 
17491
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17492
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17493
f_charbig = '#SINGLE#';
 
17494
        
 
17495
# check single-2 success:       1
 
17496
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17497
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17498
UPDATE t1 SET f_int1 = @cur_value2
 
17499
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17500
        
 
17501
# check single-3 success:       1
 
17502
SET @cur_value1= -1;
 
17503
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17504
UPDATE t1 SET f_int1 = @cur_value1
 
17505
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17506
        
 
17507
# check single-4 success:       1
 
17508
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17509
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17510
        
 
17511
# check single-5 success:       1
 
17512
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17513
        
 
17514
# check single-6 success:       1
 
17515
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17516
        
 
17517
# check single-7 success:       1
 
17518
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17519
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17520
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17521
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17522
f_charbig = '#NULL#';
 
17523
INSERT INTO t1
 
17524
SET f_int1 = NULL , f_int2 = -@max_row,
 
17525
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17526
f_charbig = '#NULL#';
 
17527
ERROR 23000: Column 'f_int1' cannot be null
 
17528
# check null success:    1
 
17529
DELETE FROM t1
 
17530
WHERE f_int1 = 0 AND f_int2 = 0
 
17531
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17532
AND f_charbig = '#NULL#';
 
17533
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17534
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17535
   FROM t0_template source_tab
 
17536
WHERE MOD(f_int1,3) = 0
 
17537
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
17538
ON DUPLICATE KEY
 
17539
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
17540
f_int2 = 2 * @max_row + source_tab.f_int1,
 
17541
f_charbig = 'was updated';
 
17542
        
 
17543
# check unique-1-a success:     1
 
17544
        
 
17545
# check unique-1-b success:     1
 
17546
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17547
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17548
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17549
f_charbig = CONCAT('===',f_char1,'===')
 
17550
WHERE f_charbig = 'was updated';
 
17551
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17552
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
17553
   FROM t0_template source_tab
 
17554
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17555
        
 
17556
# check replace success:        1
 
17557
DELETE FROM t1
 
17558
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
17559
DELETE FROM t1
 
17560
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
17561
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
17562
UPDATE t1 SET f_int2 = f_int1,
 
17563
f_char1 = CAST(f_int1 AS CHAR),
 
17564
f_char2 = CAST(f_int1 AS CHAR),
 
17565
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
17566
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
17567
SET AUTOCOMMIT= 0;
 
17568
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17569
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17570
FROM t0_template source_tab
 
17571
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17572
        
 
17573
# check transactions-1 success:         1
 
17574
COMMIT WORK;
 
17575
        
 
17576
# check transactions-2 success:         1
 
17577
ROLLBACK WORK;
 
17578
        
 
17579
# check transactions-3 success:         1
 
17580
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17581
COMMIT WORK;
 
17582
ROLLBACK WORK;
 
17583
        
 
17584
# check transactions-4 success:         1
 
17585
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17586
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17587
FROM t0_template source_tab
 
17588
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17589
        
 
17590
# check transactions-5 success:         1
 
17591
ROLLBACK WORK;
 
17592
        
 
17593
# check transactions-6 success:         1
 
17594
# INFO: Storage engine used for t1 seems to be transactional.
 
17595
COMMIT;
 
17596
        
 
17597
# check transactions-7 success:         1
 
17598
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17599
COMMIT WORK;
 
17600
SET @@session.sql_mode = 'traditional';
 
17601
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17602
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17603
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17604
'', '', 'was inserted' FROM t0_template
 
17605
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17606
ERROR 22012: Division by 0
 
17607
COMMIT;
 
17608
        
 
17609
# check transactions-8 success:         1
 
17610
# INFO: Storage engine used for t1 seems to be able to revert
 
17611
#       changes made by the failing statement.
 
17612
SET @@session.sql_mode = '';
 
17613
SET AUTOCOMMIT= 1;
 
17614
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17615
COMMIT WORK;
 
17616
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17617
        
 
17618
# check special-1 success:      1
 
17619
UPDATE t1 SET f_charbig = '';
 
17620
        
 
17621
# check special-2 success:      1
 
17622
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17623
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17624
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17627
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17628
'just inserted' FROM t0_template
 
17629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17630
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17631
BEGIN
 
17632
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17633
f_charbig = 'updated by trigger'
 
17634
      WHERE f_int1 = new.f_int1;
 
17635
END|
 
17636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17637
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17639
        
 
17640
# check trigger-1 success:      1
 
17641
DROP TRIGGER trg_1;
 
17642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17644
f_charbig = 'just inserted'
 
17645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17646
DELETE FROM t0_aux
 
17647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17650
'just inserted' FROM t0_template
 
17651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17652
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17653
BEGIN
 
17654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17655
f_charbig = 'updated by trigger'
 
17656
      WHERE f_int1 = new.f_int1;
 
17657
END|
 
17658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17659
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17661
        
 
17662
# check trigger-2 success:      1
 
17663
DROP TRIGGER trg_1;
 
17664
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17665
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17666
f_charbig = 'just inserted'
 
17667
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17668
DELETE FROM t0_aux
 
17669
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17671
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17672
'just inserted' FROM t0_template
 
17673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17674
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17675
BEGIN
 
17676
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17677
f_charbig = 'updated by trigger'
 
17678
      WHERE f_int1 = new.f_int1;
 
17679
END|
 
17680
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17681
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17682
        
 
17683
# check trigger-3 success:      1
 
17684
DROP TRIGGER trg_1;
 
17685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17687
f_charbig = 'just inserted'
 
17688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17689
DELETE FROM t0_aux
 
17690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17693
'just inserted' FROM t0_template
 
17694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17695
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17696
BEGIN
 
17697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17698
f_charbig = 'updated by trigger'
 
17699
      WHERE f_int1 = - old.f_int1;
 
17700
END|
 
17701
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17702
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17703
        
 
17704
# check trigger-4 success:      1
 
17705
DROP TRIGGER trg_1;
 
17706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17708
f_charbig = 'just inserted'
 
17709
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17710
DELETE FROM t0_aux
 
17711
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17712
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17713
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17714
'just inserted' FROM t0_template
 
17715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17716
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17717
BEGIN
 
17718
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17719
f_charbig = 'updated by trigger'
 
17720
      WHERE f_int1 = new.f_int1;
 
17721
END|
 
17722
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17723
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17724
        
 
17725
# check trigger-5 success:      1
 
17726
DROP TRIGGER trg_1;
 
17727
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17728
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17729
f_charbig = 'just inserted'
 
17730
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17731
DELETE FROM t0_aux
 
17732
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17733
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17734
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17735
'just inserted' FROM t0_template
 
17736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17737
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17738
BEGIN
 
17739
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17740
f_charbig = 'updated by trigger'
 
17741
      WHERE f_int1 = - old.f_int1;
 
17742
END|
 
17743
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17744
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17745
        
 
17746
# check trigger-6 success:      1
 
17747
DROP TRIGGER trg_1;
 
17748
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17749
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17750
f_charbig = 'just inserted'
 
17751
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17752
DELETE FROM t0_aux
 
17753
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17755
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17756
'just inserted' FROM t0_template
 
17757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17758
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17759
BEGIN
 
17760
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17761
f_charbig = 'updated by trigger'
 
17762
      WHERE f_int1 = - old.f_int1;
 
17763
END|
 
17764
DELETE FROM t0_aux
 
17765
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17766
        
 
17767
# check trigger-7 success:      1
 
17768
DROP TRIGGER trg_1;
 
17769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17771
f_charbig = 'just inserted'
 
17772
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17773
DELETE FROM t0_aux
 
17774
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17775
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17776
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17777
'just inserted' FROM t0_template
 
17778
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17779
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17780
BEGIN
 
17781
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17782
f_charbig = 'updated by trigger'
 
17783
      WHERE f_int1 = - old.f_int1;
 
17784
END|
 
17785
DELETE FROM t0_aux
 
17786
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17787
        
 
17788
# check trigger-8 success:      1
 
17789
DROP TRIGGER trg_1;
 
17790
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17791
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17792
f_charbig = 'just inserted'
 
17793
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17794
DELETE FROM t0_aux
 
17795
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17796
DELETE FROM t1
 
17797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17798
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17799
BEGIN
 
17800
SET new.f_int1 = old.f_int1 + @max_row,
 
17801
new.f_int2 = old.f_int2 - @max_row,
 
17802
new.f_charbig = '####updated per update trigger####';
 
17803
END|
 
17804
UPDATE t1
 
17805
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17806
f_charbig = '####updated per update statement itself####';
 
17807
        
 
17808
# check trigger-9 success:      1
 
17809
DROP TRIGGER trg_2;
 
17810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17812
f_charbig = CONCAT('===',f_char1,'===');
 
17813
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17814
BEGIN
 
17815
SET new.f_int1 = new.f_int1 + @max_row,
 
17816
new.f_int2 = new.f_int2 - @max_row,
 
17817
new.f_charbig = '####updated per update trigger####';
 
17818
END|
 
17819
UPDATE t1
 
17820
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17821
f_charbig = '####updated per update statement itself####';
 
17822
        
 
17823
# check trigger-10 success:     1
 
17824
DROP TRIGGER trg_2;
 
17825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17827
f_charbig = CONCAT('===',f_char1,'===');
 
17828
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17829
BEGIN
 
17830
SET new.f_int1 = @my_max1 + @counter,
 
17831
new.f_int2 = @my_min2 - @counter,
 
17832
new.f_charbig = '####updated per insert trigger####';
 
17833
SET @counter = @counter + 1;
 
17834
END|
 
17835
SET @counter = 1;
 
17836
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17838
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17839
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17841
ORDER BY f_int1;
 
17842
DROP TRIGGER trg_3;
 
17843
        
 
17844
# check trigger-11 success:     1
 
17845
DELETE FROM t1
 
17846
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17847
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17848
AND f_charbig = '####updated per insert trigger####';
 
17849
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17850
BEGIN
 
17851
SET new.f_int1 = @my_max1 + @counter,
 
17852
new.f_int2 = @my_min2 - @counter,
 
17853
new.f_charbig = '####updated per insert trigger####';
 
17854
SET @counter = @counter + 1;
 
17855
END|
 
17856
SET @counter = 1;
 
17857
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17858
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17859
SELECT CAST(f_int1 AS CHAR),
 
17860
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17862
ORDER BY f_int1;
 
17863
DROP TRIGGER trg_3;
 
17864
        
 
17865
# check trigger-12 success:     1
 
17866
DELETE FROM t1
 
17867
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17868
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17869
AND f_charbig = '####updated per insert trigger####';
 
17870
ANALYZE  TABLE t1;
 
17871
Table   Op      Msg_type        Msg_text
 
17872
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
17873
CHECK    TABLE t1 EXTENDED;
 
17874
Table   Op      Msg_type        Msg_text
 
17875
test.t1 check   note    The storage engine for the table doesn't support check
 
17876
CHECKSUM TABLE t1 EXTENDED;
 
17877
Table   Checksum
 
17878
test.t1 <some_value>
 
17879
OPTIMIZE TABLE t1;
 
17880
Table   Op      Msg_type        Msg_text
 
17881
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
17882
# check layout success:    1
 
17883
REPAIR   TABLE t1 EXTENDED;
 
17884
Table   Op      Msg_type        Msg_text
 
17885
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17886
# check layout success:    1
 
17887
TRUNCATE t1;
 
17888
        
 
17889
# check TRUNCATE success:       1
 
17890
# check layout success:    1
 
17891
# End usability test (inc/partition_check.inc)
 
17892
DROP TABLE t1;
 
17893
CREATE TABLE t1 (
 
17894
f_int1 INTEGER,
 
17895
f_int2 INTEGER,
 
17896
f_char1 CHAR(20),
 
17897
f_char2 CHAR(20),
 
17898
f_charbig VARCHAR(1000)
 
17899
 
 
17900
)
 
17901
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
17902
(PARTITION parta VALUES LESS THAN (0),
 
17903
PARTITION partb VALUES LESS THAN (5),
 
17904
PARTITION partc VALUES LESS THAN (10),
 
17905
PARTITION partd VALUES LESS THAN (10 + 5),
 
17906
PARTITION parte VALUES LESS THAN (20),
 
17907
PARTITION partf VALUES LESS THAN (2147483646));
 
17908
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17909
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17910
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17911
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
17912
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17913
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17914
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17915
# Start usability test (inc/partition_check.inc)
 
17916
create_command
 
17917
SHOW CREATE TABLE t1;
 
17918
Table   Create Table
 
17919
t1      CREATE TABLE `t1` (
 
17920
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
17921
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
17922
  `f_char1` char(20) DEFAULT NULL,
 
17923
  `f_char2` char(20) DEFAULT NULL,
 
17924
  `f_charbig` varchar(1000) DEFAULT NULL,
 
17925
  PRIMARY KEY (`f_int1`,`f_int2`)
 
17926
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
17927
 
 
17928
# check prerequisites-1 success:    1
 
17929
# check COUNT(*) success:    1
 
17930
# check MIN/MAX(f_int1) success:    1
 
17931
# check MIN/MAX(f_int2) success:    1
 
17932
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17933
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17934
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17935
WHERE f_int1 IN (2,3);
 
17936
ERROR 23000: Can't write; duplicate key in table 't1'
 
17937
# check prerequisites-3 success:    1
 
17938
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
17939
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17940
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17941
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17942
WHERE f_int1 IN (2,3);
 
17943
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17944
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17945
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17946
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17947
WHERE f_int1 IN (2,3);
 
17948
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17949
# check read via f_int1 success: 1
 
17950
# check read via f_int2 success: 1
 
17951
        
 
17952
# check multiple-1 success:     1
 
17953
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17954
        
 
17955
# check multiple-2 success:     1
 
17956
INSERT INTO t1 SELECT * FROM t0_template
 
17957
WHERE MOD(f_int1,3) = 0;
 
17958
        
 
17959
# check multiple-3 success:     1
 
17960
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17961
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17962
AND @max_row_div2 + @max_row_div4;
 
17963
        
 
17964
# check multiple-4 success:     1
 
17965
DELETE FROM t1
 
17966
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17967
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17968
        
 
17969
# check multiple-5 success:     1
 
17970
SELECT COUNT(*) INTO @try_count FROM t0_template
 
17971
WHERE MOD(f_int1,3) = 0
 
17972
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17973
SELECT COUNT(*) INTO @clash_count
 
17974
FROM t1 INNER JOIN t0_template USING(f_int1)
 
17975
WHERE MOD(f_int1,3) = 0
 
17976
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17977
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17978
INSERT INTO t1
 
17979
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17980
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17981
f_charbig = '#SINGLE#';
 
17982
        
 
17983
# check single-1 success:       1
 
17984
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17985
INSERT INTO t1
 
17986
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17987
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17988
f_charbig = '#SINGLE#';
 
17989
        
 
17990
# check single-2 success:       1
 
17991
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17992
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17993
UPDATE t1 SET f_int1 = @cur_value2
 
17994
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17995
        
 
17996
# check single-3 success:       1
 
17997
SET @cur_value1= -1;
 
17998
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17999
UPDATE t1 SET f_int1 = @cur_value1
 
18000
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18001
        
 
18002
# check single-4 success:       1
 
18003
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18004
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18005
        
 
18006
# check single-5 success:       1
 
18007
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18008
        
 
18009
# check single-6 success:       1
 
18010
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18011
ERROR HY000: Table has no partition for value 2147483647
 
18012
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18013
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18014
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18015
f_charbig = '#NULL#';
 
18016
INSERT INTO t1
 
18017
SET f_int1 = NULL , f_int2 = -@max_row,
 
18018
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18019
f_charbig = '#NULL#';
 
18020
ERROR 23000: Column 'f_int1' cannot be null
 
18021
# check null success:    1
 
18022
DELETE FROM t1
 
18023
WHERE f_int1 = 0 AND f_int2 = 0
 
18024
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18025
AND f_charbig = '#NULL#';
 
18026
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18027
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18028
   FROM t0_template source_tab
 
18029
WHERE MOD(f_int1,3) = 0
 
18030
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
18031
ON DUPLICATE KEY
 
18032
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
18033
f_int2 = 2 * @max_row + source_tab.f_int1,
 
18034
f_charbig = 'was updated';
 
18035
        
 
18036
# check unique-1-a success:     1
 
18037
        
 
18038
# check unique-1-b success:     1
 
18039
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18042
f_charbig = CONCAT('===',f_char1,'===')
 
18043
WHERE f_charbig = 'was updated';
 
18044
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18045
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
18046
   FROM t0_template source_tab
 
18047
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18048
        
 
18049
# check replace success:        1
 
18050
DELETE FROM t1
 
18051
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
18052
DELETE FROM t1
 
18053
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
18054
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
18055
UPDATE t1 SET f_int2 = f_int1,
 
18056
f_char1 = CAST(f_int1 AS CHAR),
 
18057
f_char2 = CAST(f_int1 AS CHAR),
 
18058
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
18059
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
18060
SET AUTOCOMMIT= 0;
 
18061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18062
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18063
FROM t0_template source_tab
 
18064
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18065
        
 
18066
# check transactions-1 success:         1
 
18067
COMMIT WORK;
 
18068
        
 
18069
# check transactions-2 success:         1
 
18070
ROLLBACK WORK;
 
18071
        
 
18072
# check transactions-3 success:         1
 
18073
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18074
COMMIT WORK;
 
18075
ROLLBACK WORK;
 
18076
        
 
18077
# check transactions-4 success:         1
 
18078
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18079
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18080
FROM t0_template source_tab
 
18081
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18082
        
 
18083
# check transactions-5 success:         1
 
18084
ROLLBACK WORK;
 
18085
        
 
18086
# check transactions-6 success:         1
 
18087
# INFO: Storage engine used for t1 seems to be transactional.
 
18088
COMMIT;
 
18089
        
 
18090
# check transactions-7 success:         1
 
18091
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18092
COMMIT WORK;
 
18093
SET @@session.sql_mode = 'traditional';
 
18094
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18096
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18097
'', '', 'was inserted' FROM t0_template
 
18098
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18099
ERROR 22012: Division by 0
 
18100
COMMIT;
 
18101
        
 
18102
# check transactions-8 success:         1
 
18103
# INFO: Storage engine used for t1 seems to be able to revert
 
18104
#       changes made by the failing statement.
 
18105
SET @@session.sql_mode = '';
 
18106
SET AUTOCOMMIT= 1;
 
18107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18108
COMMIT WORK;
 
18109
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18110
        
 
18111
# check special-1 success:      1
 
18112
UPDATE t1 SET f_charbig = '';
 
18113
        
 
18114
# check special-2 success:      1
 
18115
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18116
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18117
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18119
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18120
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18121
'just inserted' FROM t0_template
 
18122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18123
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18124
BEGIN
 
18125
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18126
f_charbig = 'updated by trigger'
 
18127
      WHERE f_int1 = new.f_int1;
 
18128
END|
 
18129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18130
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18132
        
 
18133
# check trigger-1 success:      1
 
18134
DROP TRIGGER trg_1;
 
18135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18137
f_charbig = 'just inserted'
 
18138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18139
DELETE FROM t0_aux
 
18140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18143
'just inserted' FROM t0_template
 
18144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18145
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18146
BEGIN
 
18147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18148
f_charbig = 'updated by trigger'
 
18149
      WHERE f_int1 = new.f_int1;
 
18150
END|
 
18151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18152
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18154
        
 
18155
# check trigger-2 success:      1
 
18156
DROP TRIGGER trg_1;
 
18157
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18158
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18159
f_charbig = 'just inserted'
 
18160
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18161
DELETE FROM t0_aux
 
18162
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18164
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18165
'just inserted' FROM t0_template
 
18166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18167
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18168
BEGIN
 
18169
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18170
f_charbig = 'updated by trigger'
 
18171
      WHERE f_int1 = new.f_int1;
 
18172
END|
 
18173
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18174
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18175
        
 
18176
# check trigger-3 success:      1
 
18177
DROP TRIGGER trg_1;
 
18178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18180
f_charbig = 'just inserted'
 
18181
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18182
DELETE FROM t0_aux
 
18183
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18184
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18185
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18186
'just inserted' FROM t0_template
 
18187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18188
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18189
BEGIN
 
18190
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18191
f_charbig = 'updated by trigger'
 
18192
      WHERE f_int1 = - old.f_int1;
 
18193
END|
 
18194
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18195
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18196
        
 
18197
# check trigger-4 success:      1
 
18198
DROP TRIGGER trg_1;
 
18199
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18200
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18201
f_charbig = 'just inserted'
 
18202
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18203
DELETE FROM t0_aux
 
18204
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18205
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18206
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18207
'just inserted' FROM t0_template
 
18208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18209
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18210
BEGIN
 
18211
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18212
f_charbig = 'updated by trigger'
 
18213
      WHERE f_int1 = new.f_int1;
 
18214
END|
 
18215
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18216
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18217
        
 
18218
# check trigger-5 success:      1
 
18219
DROP TRIGGER trg_1;
 
18220
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18221
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18222
f_charbig = 'just inserted'
 
18223
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18224
DELETE FROM t0_aux
 
18225
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18226
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18227
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18228
'just inserted' FROM t0_template
 
18229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18230
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18231
BEGIN
 
18232
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18233
f_charbig = 'updated by trigger'
 
18234
      WHERE f_int1 = - old.f_int1;
 
18235
END|
 
18236
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18237
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18238
        
 
18239
# check trigger-6 success:      1
 
18240
DROP TRIGGER trg_1;
 
18241
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18242
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18243
f_charbig = 'just inserted'
 
18244
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18245
DELETE FROM t0_aux
 
18246
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18248
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18249
'just inserted' FROM t0_template
 
18250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18251
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18252
BEGIN
 
18253
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18254
f_charbig = 'updated by trigger'
 
18255
      WHERE f_int1 = - old.f_int1;
 
18256
END|
 
18257
DELETE FROM t0_aux
 
18258
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18259
        
 
18260
# check trigger-7 success:      1
 
18261
DROP TRIGGER trg_1;
 
18262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18264
f_charbig = 'just inserted'
 
18265
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18266
DELETE FROM t0_aux
 
18267
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18270
'just inserted' FROM t0_template
 
18271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18272
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18273
BEGIN
 
18274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18275
f_charbig = 'updated by trigger'
 
18276
      WHERE f_int1 = - old.f_int1;
 
18277
END|
 
18278
DELETE FROM t0_aux
 
18279
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18280
        
 
18281
# check trigger-8 success:      1
 
18282
DROP TRIGGER trg_1;
 
18283
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18284
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18285
f_charbig = 'just inserted'
 
18286
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18287
DELETE FROM t0_aux
 
18288
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18289
DELETE FROM t1
 
18290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18291
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18292
BEGIN
 
18293
SET new.f_int1 = old.f_int1 + @max_row,
 
18294
new.f_int2 = old.f_int2 - @max_row,
 
18295
new.f_charbig = '####updated per update trigger####';
 
18296
END|
 
18297
UPDATE t1
 
18298
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18299
f_charbig = '####updated per update statement itself####';
 
18300
        
 
18301
# check trigger-9 success:      1
 
18302
DROP TRIGGER trg_2;
 
18303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18305
f_charbig = CONCAT('===',f_char1,'===');
 
18306
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18307
BEGIN
 
18308
SET new.f_int1 = new.f_int1 + @max_row,
 
18309
new.f_int2 = new.f_int2 - @max_row,
 
18310
new.f_charbig = '####updated per update trigger####';
 
18311
END|
 
18312
UPDATE t1
 
18313
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18314
f_charbig = '####updated per update statement itself####';
 
18315
        
 
18316
# check trigger-10 success:     1
 
18317
DROP TRIGGER trg_2;
 
18318
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18319
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18320
f_charbig = CONCAT('===',f_char1,'===');
 
18321
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18322
BEGIN
 
18323
SET new.f_int1 = @my_max1 + @counter,
 
18324
new.f_int2 = @my_min2 - @counter,
 
18325
new.f_charbig = '####updated per insert trigger####';
 
18326
SET @counter = @counter + 1;
 
18327
END|
 
18328
SET @counter = 1;
 
18329
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18330
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18331
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18332
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18334
ORDER BY f_int1;
 
18335
DROP TRIGGER trg_3;
 
18336
        
 
18337
# check trigger-11 success:     1
 
18338
DELETE FROM t1
 
18339
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18340
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18341
AND f_charbig = '####updated per insert trigger####';
 
18342
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18343
BEGIN
 
18344
SET new.f_int1 = @my_max1 + @counter,
 
18345
new.f_int2 = @my_min2 - @counter,
 
18346
new.f_charbig = '####updated per insert trigger####';
 
18347
SET @counter = @counter + 1;
 
18348
END|
 
18349
SET @counter = 1;
 
18350
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18351
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18352
SELECT CAST(f_int1 AS CHAR),
 
18353
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18354
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18355
ORDER BY f_int1;
 
18356
DROP TRIGGER trg_3;
 
18357
        
 
18358
# check trigger-12 success:     1
 
18359
DELETE FROM t1
 
18360
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18361
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18362
AND f_charbig = '####updated per insert trigger####';
 
18363
ANALYZE  TABLE t1;
 
18364
Table   Op      Msg_type        Msg_text
 
18365
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
18366
CHECK    TABLE t1 EXTENDED;
 
18367
Table   Op      Msg_type        Msg_text
 
18368
test.t1 check   note    The storage engine for the table doesn't support check
 
18369
CHECKSUM TABLE t1 EXTENDED;
 
18370
Table   Checksum
 
18371
test.t1 <some_value>
 
18372
OPTIMIZE TABLE t1;
 
18373
Table   Op      Msg_type        Msg_text
 
18374
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
18375
# check layout success:    1
 
18376
REPAIR   TABLE t1 EXTENDED;
 
18377
Table   Op      Msg_type        Msg_text
 
18378
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18379
# check layout success:    1
 
18380
TRUNCATE t1;
 
18381
        
 
18382
# check TRUNCATE success:       1
 
18383
# check layout success:    1
 
18384
# End usability test (inc/partition_check.inc)
 
18385
DROP TABLE t1;
 
18386
CREATE TABLE t1 (
 
18387
f_int1 INTEGER,
 
18388
f_int2 INTEGER,
 
18389
f_char1 CHAR(20),
 
18390
f_char2 CHAR(20),
 
18391
f_charbig VARCHAR(1000)
 
18392
 
 
18393
)
 
18394
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
18395
(PARTITION parta VALUES LESS THAN (0),
 
18396
PARTITION partb VALUES LESS THAN (5),
 
18397
PARTITION partc VALUES LESS THAN (10),
 
18398
PARTITION partd VALUES LESS THAN (2147483646));
 
18399
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18400
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18401
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18402
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
18403
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18404
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18405
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18406
# Start usability test (inc/partition_check.inc)
 
18407
create_command
 
18408
SHOW CREATE TABLE t1;
 
18409
Table   Create Table
 
18410
t1      CREATE TABLE `t1` (
 
18411
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
18412
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
18413
  `f_char1` char(20) DEFAULT NULL,
 
18414
  `f_char2` char(20) DEFAULT NULL,
 
18415
  `f_charbig` varchar(1000) DEFAULT NULL,
 
18416
  PRIMARY KEY (`f_int1`,`f_int2`)
 
18417
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
18418
 
 
18419
# check prerequisites-1 success:    1
 
18420
# check COUNT(*) success:    1
 
18421
# check MIN/MAX(f_int1) success:    1
 
18422
# check MIN/MAX(f_int2) success:    1
 
18423
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18424
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18425
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18426
WHERE f_int1 IN (2,3);
 
18427
ERROR 23000: Can't write; duplicate key in table 't1'
 
18428
# check prerequisites-3 success:    1
 
18429
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
18430
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18431
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18432
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18433
WHERE f_int1 IN (2,3);
 
18434
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18435
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18436
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18437
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18438
WHERE f_int1 IN (2,3);
 
18439
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18440
# check read via f_int1 success: 1
 
18441
# check read via f_int2 success: 1
 
18442
        
 
18443
# check multiple-1 success:     1
 
18444
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18445
        
 
18446
# check multiple-2 success:     1
 
18447
INSERT INTO t1 SELECT * FROM t0_template
 
18448
WHERE MOD(f_int1,3) = 0;
 
18449
        
 
18450
# check multiple-3 success:     1
 
18451
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18452
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18453
AND @max_row_div2 + @max_row_div4;
 
18454
        
 
18455
# check multiple-4 success:     1
 
18456
DELETE FROM t1
 
18457
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18458
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18459
        
 
18460
# check multiple-5 success:     1
 
18461
SELECT COUNT(*) INTO @try_count FROM t0_template
 
18462
WHERE MOD(f_int1,3) = 0
 
18463
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18464
SELECT COUNT(*) INTO @clash_count
 
18465
FROM t1 INNER JOIN t0_template USING(f_int1)
 
18466
WHERE MOD(f_int1,3) = 0
 
18467
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18468
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18469
INSERT INTO t1
 
18470
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18471
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18472
f_charbig = '#SINGLE#';
 
18473
        
 
18474
# check single-1 success:       1
 
18475
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18476
INSERT INTO t1
 
18477
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18478
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18479
f_charbig = '#SINGLE#';
 
18480
        
 
18481
# check single-2 success:       1
 
18482
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18483
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18484
UPDATE t1 SET f_int1 = @cur_value2
 
18485
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18486
        
 
18487
# check single-3 success:       1
 
18488
SET @cur_value1= -1;
 
18489
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18490
UPDATE t1 SET f_int1 = @cur_value1
 
18491
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18492
        
 
18493
# check single-4 success:       1
 
18494
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18495
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18496
        
 
18497
# check single-5 success:       1
 
18498
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18499
        
 
18500
# check single-6 success:       1
 
18501
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18502
ERROR HY000: Table has no partition for value 2147483647
 
18503
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18504
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18505
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18506
f_charbig = '#NULL#';
 
18507
INSERT INTO t1
 
18508
SET f_int1 = NULL , f_int2 = -@max_row,
 
18509
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18510
f_charbig = '#NULL#';
 
18511
ERROR 23000: Column 'f_int1' cannot be null
 
18512
# check null success:    1
 
18513
DELETE FROM t1
 
18514
WHERE f_int1 = 0 AND f_int2 = 0
 
18515
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18516
AND f_charbig = '#NULL#';
 
18517
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18518
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18519
   FROM t0_template source_tab
 
18520
WHERE MOD(f_int1,3) = 0
 
18521
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
18522
ON DUPLICATE KEY
 
18523
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
18524
f_int2 = 2 * @max_row + source_tab.f_int1,
 
18525
f_charbig = 'was updated';
 
18526
        
 
18527
# check unique-1-a success:     1
 
18528
        
 
18529
# check unique-1-b success:     1
 
18530
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18531
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18532
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18533
f_charbig = CONCAT('===',f_char1,'===')
 
18534
WHERE f_charbig = 'was updated';
 
18535
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18536
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
18537
   FROM t0_template source_tab
 
18538
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18539
        
 
18540
# check replace success:        1
 
18541
DELETE FROM t1
 
18542
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
18543
DELETE FROM t1
 
18544
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
18545
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
18546
UPDATE t1 SET f_int2 = f_int1,
 
18547
f_char1 = CAST(f_int1 AS CHAR),
 
18548
f_char2 = CAST(f_int1 AS CHAR),
 
18549
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
18550
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
18551
SET AUTOCOMMIT= 0;
 
18552
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18553
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18554
FROM t0_template source_tab
 
18555
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18556
        
 
18557
# check transactions-1 success:         1
 
18558
COMMIT WORK;
 
18559
        
 
18560
# check transactions-2 success:         1
 
18561
ROLLBACK WORK;
 
18562
        
 
18563
# check transactions-3 success:         1
 
18564
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18565
COMMIT WORK;
 
18566
ROLLBACK WORK;
 
18567
        
 
18568
# check transactions-4 success:         1
 
18569
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18570
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18571
FROM t0_template source_tab
 
18572
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18573
        
 
18574
# check transactions-5 success:         1
 
18575
ROLLBACK WORK;
 
18576
        
 
18577
# check transactions-6 success:         1
 
18578
# INFO: Storage engine used for t1 seems to be transactional.
 
18579
COMMIT;
 
18580
        
 
18581
# check transactions-7 success:         1
 
18582
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18583
COMMIT WORK;
 
18584
SET @@session.sql_mode = 'traditional';
 
18585
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18586
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18587
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18588
'', '', 'was inserted' FROM t0_template
 
18589
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18590
ERROR 22012: Division by 0
 
18591
COMMIT;
 
18592
        
 
18593
# check transactions-8 success:         1
 
18594
# INFO: Storage engine used for t1 seems to be able to revert
 
18595
#       changes made by the failing statement.
 
18596
SET @@session.sql_mode = '';
 
18597
SET AUTOCOMMIT= 1;
 
18598
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18599
COMMIT WORK;
 
18600
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18601
        
 
18602
# check special-1 success:      1
 
18603
UPDATE t1 SET f_charbig = '';
 
18604
        
 
18605
# check special-2 success:      1
 
18606
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18607
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18608
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18611
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18612
'just inserted' FROM t0_template
 
18613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18614
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18615
BEGIN
 
18616
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18617
f_charbig = 'updated by trigger'
 
18618
      WHERE f_int1 = new.f_int1;
 
18619
END|
 
18620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18621
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18622
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18623
        
 
18624
# check trigger-1 success:      1
 
18625
DROP TRIGGER trg_1;
 
18626
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18627
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18628
f_charbig = 'just inserted'
 
18629
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18630
DELETE FROM t0_aux
 
18631
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18632
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18633
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18634
'just inserted' FROM t0_template
 
18635
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18636
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18637
BEGIN
 
18638
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18639
f_charbig = 'updated by trigger'
 
18640
      WHERE f_int1 = new.f_int1;
 
18641
END|
 
18642
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18643
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18645
        
 
18646
# check trigger-2 success:      1
 
18647
DROP TRIGGER trg_1;
 
18648
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18649
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18650
f_charbig = 'just inserted'
 
18651
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18652
DELETE FROM t0_aux
 
18653
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18654
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18655
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18656
'just inserted' FROM t0_template
 
18657
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18658
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18659
BEGIN
 
18660
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18661
f_charbig = 'updated by trigger'
 
18662
      WHERE f_int1 = new.f_int1;
 
18663
END|
 
18664
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18665
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18666
        
 
18667
# check trigger-3 success:      1
 
18668
DROP TRIGGER trg_1;
 
18669
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18670
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18671
f_charbig = 'just inserted'
 
18672
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18673
DELETE FROM t0_aux
 
18674
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18675
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18676
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18677
'just inserted' FROM t0_template
 
18678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18679
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18680
BEGIN
 
18681
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18682
f_charbig = 'updated by trigger'
 
18683
      WHERE f_int1 = - old.f_int1;
 
18684
END|
 
18685
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18686
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18687
        
 
18688
# check trigger-4 success:      1
 
18689
DROP TRIGGER trg_1;
 
18690
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18691
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18692
f_charbig = 'just inserted'
 
18693
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18694
DELETE FROM t0_aux
 
18695
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18697
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18698
'just inserted' FROM t0_template
 
18699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18700
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18701
BEGIN
 
18702
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18703
f_charbig = 'updated by trigger'
 
18704
      WHERE f_int1 = new.f_int1;
 
18705
END|
 
18706
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18707
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18708
        
 
18709
# check trigger-5 success:      1
 
18710
DROP TRIGGER trg_1;
 
18711
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18712
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18713
f_charbig = 'just inserted'
 
18714
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18715
DELETE FROM t0_aux
 
18716
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18717
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18718
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18719
'just inserted' FROM t0_template
 
18720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18721
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18722
BEGIN
 
18723
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18724
f_charbig = 'updated by trigger'
 
18725
      WHERE f_int1 = - old.f_int1;
 
18726
END|
 
18727
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18728
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18729
        
 
18730
# check trigger-6 success:      1
 
18731
DROP TRIGGER trg_1;
 
18732
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18733
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18734
f_charbig = 'just inserted'
 
18735
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18736
DELETE FROM t0_aux
 
18737
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18738
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18739
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18740
'just inserted' FROM t0_template
 
18741
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18742
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18743
BEGIN
 
18744
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18745
f_charbig = 'updated by trigger'
 
18746
      WHERE f_int1 = - old.f_int1;
 
18747
END|
 
18748
DELETE FROM t0_aux
 
18749
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18750
        
 
18751
# check trigger-7 success:      1
 
18752
DROP TRIGGER trg_1;
 
18753
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18754
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18755
f_charbig = 'just inserted'
 
18756
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18757
DELETE FROM t0_aux
 
18758
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18759
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18760
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18761
'just inserted' FROM t0_template
 
18762
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18763
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18764
BEGIN
 
18765
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18766
f_charbig = 'updated by trigger'
 
18767
      WHERE f_int1 = - old.f_int1;
 
18768
END|
 
18769
DELETE FROM t0_aux
 
18770
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18771
        
 
18772
# check trigger-8 success:      1
 
18773
DROP TRIGGER trg_1;
 
18774
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18775
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18776
f_charbig = 'just inserted'
 
18777
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18778
DELETE FROM t0_aux
 
18779
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18780
DELETE FROM t1
 
18781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18782
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18783
BEGIN
 
18784
SET new.f_int1 = old.f_int1 + @max_row,
 
18785
new.f_int2 = old.f_int2 - @max_row,
 
18786
new.f_charbig = '####updated per update trigger####';
 
18787
END|
 
18788
UPDATE t1
 
18789
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18790
f_charbig = '####updated per update statement itself####';
 
18791
        
 
18792
# check trigger-9 success:      1
 
18793
DROP TRIGGER trg_2;
 
18794
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18795
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18796
f_charbig = CONCAT('===',f_char1,'===');
 
18797
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18798
BEGIN
 
18799
SET new.f_int1 = new.f_int1 + @max_row,
 
18800
new.f_int2 = new.f_int2 - @max_row,
 
18801
new.f_charbig = '####updated per update trigger####';
 
18802
END|
 
18803
UPDATE t1
 
18804
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18805
f_charbig = '####updated per update statement itself####';
 
18806
        
 
18807
# check trigger-10 success:     1
 
18808
DROP TRIGGER trg_2;
 
18809
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18810
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18811
f_charbig = CONCAT('===',f_char1,'===');
 
18812
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18813
BEGIN
 
18814
SET new.f_int1 = @my_max1 + @counter,
 
18815
new.f_int2 = @my_min2 - @counter,
 
18816
new.f_charbig = '####updated per insert trigger####';
 
18817
SET @counter = @counter + 1;
 
18818
END|
 
18819
SET @counter = 1;
 
18820
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18821
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18822
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18823
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18825
ORDER BY f_int1;
 
18826
DROP TRIGGER trg_3;
 
18827
        
 
18828
# check trigger-11 success:     1
 
18829
DELETE FROM t1
 
18830
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18831
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18832
AND f_charbig = '####updated per insert trigger####';
 
18833
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18834
BEGIN
 
18835
SET new.f_int1 = @my_max1 + @counter,
 
18836
new.f_int2 = @my_min2 - @counter,
 
18837
new.f_charbig = '####updated per insert trigger####';
 
18838
SET @counter = @counter + 1;
 
18839
END|
 
18840
SET @counter = 1;
 
18841
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18842
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18843
SELECT CAST(f_int1 AS CHAR),
 
18844
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18845
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18846
ORDER BY f_int1;
 
18847
DROP TRIGGER trg_3;
 
18848
        
 
18849
# check trigger-12 success:     1
 
18850
DELETE FROM t1
 
18851
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18852
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18853
AND f_charbig = '####updated per insert trigger####';
 
18854
ANALYZE  TABLE t1;
 
18855
Table   Op      Msg_type        Msg_text
 
18856
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
18857
CHECK    TABLE t1 EXTENDED;
 
18858
Table   Op      Msg_type        Msg_text
 
18859
test.t1 check   note    The storage engine for the table doesn't support check
 
18860
CHECKSUM TABLE t1 EXTENDED;
 
18861
Table   Checksum
 
18862
test.t1 <some_value>
 
18863
OPTIMIZE TABLE t1;
 
18864
Table   Op      Msg_type        Msg_text
 
18865
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
18866
# check layout success:    1
 
18867
REPAIR   TABLE t1 EXTENDED;
 
18868
Table   Op      Msg_type        Msg_text
 
18869
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18870
# check layout success:    1
 
18871
TRUNCATE t1;
 
18872
        
 
18873
# check TRUNCATE success:       1
 
18874
# check layout success:    1
 
18875
# End usability test (inc/partition_check.inc)
 
18876
DROP TABLE t1;
 
18877
CREATE TABLE t1 (
 
18878
f_int1 INTEGER,
 
18879
f_int2 INTEGER,
 
18880
f_char1 CHAR(20),
 
18881
f_char2 CHAR(20),
 
18882
f_charbig VARCHAR(1000)
 
18883
 
 
18884
)
 
18885
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
18886
(PARTITION part1 VALUES LESS THAN (0)
 
18887
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
18888
PARTITION part2 VALUES LESS THAN (5)
 
18889
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
18890
PARTITION part3 VALUES LESS THAN (10)
 
18891
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
18892
PARTITION part4 VALUES LESS THAN (2147483646)
 
18893
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
18894
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18895
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18896
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18897
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
18898
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18899
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18900
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18901
# Start usability test (inc/partition_check.inc)
 
18902
create_command
 
18903
SHOW CREATE TABLE t1;
 
18904
Table   Create Table
 
18905
t1      CREATE TABLE `t1` (
 
18906
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
18907
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
18908
  `f_char1` char(20) DEFAULT NULL,
 
18909
  `f_char2` char(20) DEFAULT NULL,
 
18910
  `f_charbig` varchar(1000) DEFAULT NULL,
 
18911
  PRIMARY KEY (`f_int1`,`f_int2`)
 
18912
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
18913
 
 
18914
# check prerequisites-1 success:    1
 
18915
# check COUNT(*) success:    1
 
18916
# check MIN/MAX(f_int1) success:    1
 
18917
# check MIN/MAX(f_int2) success:    1
 
18918
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18919
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18920
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18921
WHERE f_int1 IN (2,3);
 
18922
ERROR 23000: Can't write; duplicate key in table 't1'
 
18923
# check prerequisites-3 success:    1
 
18924
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
18925
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18926
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18927
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18928
WHERE f_int1 IN (2,3);
 
18929
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18930
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18931
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18932
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18933
WHERE f_int1 IN (2,3);
 
18934
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18935
# check read via f_int1 success: 1
 
18936
# check read via f_int2 success: 1
 
18937
        
 
18938
# check multiple-1 success:     1
 
18939
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18940
        
 
18941
# check multiple-2 success:     1
 
18942
INSERT INTO t1 SELECT * FROM t0_template
 
18943
WHERE MOD(f_int1,3) = 0;
 
18944
        
 
18945
# check multiple-3 success:     1
 
18946
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18947
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18948
AND @max_row_div2 + @max_row_div4;
 
18949
        
 
18950
# check multiple-4 success:     1
 
18951
DELETE FROM t1
 
18952
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18953
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18954
        
 
18955
# check multiple-5 success:     1
 
18956
SELECT COUNT(*) INTO @try_count FROM t0_template
 
18957
WHERE MOD(f_int1,3) = 0
 
18958
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18959
SELECT COUNT(*) INTO @clash_count
 
18960
FROM t1 INNER JOIN t0_template USING(f_int1)
 
18961
WHERE MOD(f_int1,3) = 0
 
18962
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18963
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18964
INSERT INTO t1
 
18965
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18966
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18967
f_charbig = '#SINGLE#';
 
18968
        
 
18969
# check single-1 success:       1
 
18970
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18971
INSERT INTO t1
 
18972
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18973
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18974
f_charbig = '#SINGLE#';
 
18975
        
 
18976
# check single-2 success:       1
 
18977
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18978
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18979
UPDATE t1 SET f_int1 = @cur_value2
 
18980
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18981
        
 
18982
# check single-3 success:       1
 
18983
SET @cur_value1= -1;
 
18984
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18985
UPDATE t1 SET f_int1 = @cur_value1
 
18986
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18987
        
 
18988
# check single-4 success:       1
 
18989
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18990
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18991
        
 
18992
# check single-5 success:       1
 
18993
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18994
        
 
18995
# check single-6 success:       1
 
18996
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18997
ERROR HY000: Table has no partition for value 2147483647
 
18998
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18999
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19000
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19001
f_charbig = '#NULL#';
 
19002
INSERT INTO t1
 
19003
SET f_int1 = NULL , f_int2 = -@max_row,
 
19004
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19005
f_charbig = '#NULL#';
 
19006
ERROR 23000: Column 'f_int1' cannot be null
 
19007
# check null success:    1
 
19008
DELETE FROM t1
 
19009
WHERE f_int1 = 0 AND f_int2 = 0
 
19010
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19011
AND f_charbig = '#NULL#';
 
19012
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19013
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19014
   FROM t0_template source_tab
 
19015
WHERE MOD(f_int1,3) = 0
 
19016
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
19017
ON DUPLICATE KEY
 
19018
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
19019
f_int2 = 2 * @max_row + source_tab.f_int1,
 
19020
f_charbig = 'was updated';
 
19021
        
 
19022
# check unique-1-a success:     1
 
19023
        
 
19024
# check unique-1-b success:     1
 
19025
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19026
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19027
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19028
f_charbig = CONCAT('===',f_char1,'===')
 
19029
WHERE f_charbig = 'was updated';
 
19030
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19031
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
19032
   FROM t0_template source_tab
 
19033
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19034
        
 
19035
# check replace success:        1
 
19036
DELETE FROM t1
 
19037
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
19038
DELETE FROM t1
 
19039
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
19040
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
19041
UPDATE t1 SET f_int2 = f_int1,
 
19042
f_char1 = CAST(f_int1 AS CHAR),
 
19043
f_char2 = CAST(f_int1 AS CHAR),
 
19044
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
19045
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
19046
SET AUTOCOMMIT= 0;
 
19047
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19048
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19049
FROM t0_template source_tab
 
19050
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19051
        
 
19052
# check transactions-1 success:         1
 
19053
COMMIT WORK;
 
19054
        
 
19055
# check transactions-2 success:         1
 
19056
ROLLBACK WORK;
 
19057
        
 
19058
# check transactions-3 success:         1
 
19059
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19060
COMMIT WORK;
 
19061
ROLLBACK WORK;
 
19062
        
 
19063
# check transactions-4 success:         1
 
19064
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19065
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19066
FROM t0_template source_tab
 
19067
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19068
        
 
19069
# check transactions-5 success:         1
 
19070
ROLLBACK WORK;
 
19071
        
 
19072
# check transactions-6 success:         1
 
19073
# INFO: Storage engine used for t1 seems to be transactional.
 
19074
COMMIT;
 
19075
        
 
19076
# check transactions-7 success:         1
 
19077
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19078
COMMIT WORK;
 
19079
SET @@session.sql_mode = 'traditional';
 
19080
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19081
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19082
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19083
'', '', 'was inserted' FROM t0_template
 
19084
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19085
ERROR 22012: Division by 0
 
19086
COMMIT;
 
19087
        
 
19088
# check transactions-8 success:         1
 
19089
# INFO: Storage engine used for t1 seems to be able to revert
 
19090
#       changes made by the failing statement.
 
19091
SET @@session.sql_mode = '';
 
19092
SET AUTOCOMMIT= 1;
 
19093
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19094
COMMIT WORK;
 
19095
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19096
        
 
19097
# check special-1 success:      1
 
19098
UPDATE t1 SET f_charbig = '';
 
19099
        
 
19100
# check special-2 success:      1
 
19101
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19102
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19103
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19107
'just inserted' FROM t0_template
 
19108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19109
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19110
BEGIN
 
19111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19112
f_charbig = 'updated by trigger'
 
19113
      WHERE f_int1 = new.f_int1;
 
19114
END|
 
19115
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19116
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19118
        
 
19119
# check trigger-1 success:      1
 
19120
DROP TRIGGER trg_1;
 
19121
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19122
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19123
f_charbig = 'just inserted'
 
19124
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19125
DELETE FROM t0_aux
 
19126
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19128
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19129
'just inserted' FROM t0_template
 
19130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19131
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19132
BEGIN
 
19133
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19134
f_charbig = 'updated by trigger'
 
19135
      WHERE f_int1 = new.f_int1;
 
19136
END|
 
19137
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19138
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19140
        
 
19141
# check trigger-2 success:      1
 
19142
DROP TRIGGER trg_1;
 
19143
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19144
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19145
f_charbig = 'just inserted'
 
19146
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19147
DELETE FROM t0_aux
 
19148
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19149
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19150
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19151
'just inserted' FROM t0_template
 
19152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19153
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19154
BEGIN
 
19155
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19156
f_charbig = 'updated by trigger'
 
19157
      WHERE f_int1 = new.f_int1;
 
19158
END|
 
19159
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19160
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19161
        
 
19162
# check trigger-3 success:      1
 
19163
DROP TRIGGER trg_1;
 
19164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19166
f_charbig = 'just inserted'
 
19167
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19168
DELETE FROM t0_aux
 
19169
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19170
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19171
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19172
'just inserted' FROM t0_template
 
19173
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19174
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19175
BEGIN
 
19176
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19177
f_charbig = 'updated by trigger'
 
19178
      WHERE f_int1 = - old.f_int1;
 
19179
END|
 
19180
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19181
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19182
        
 
19183
# check trigger-4 success:      1
 
19184
DROP TRIGGER trg_1;
 
19185
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19186
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19187
f_charbig = 'just inserted'
 
19188
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19189
DELETE FROM t0_aux
 
19190
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19193
'just inserted' FROM t0_template
 
19194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19195
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19196
BEGIN
 
19197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19198
f_charbig = 'updated by trigger'
 
19199
      WHERE f_int1 = new.f_int1;
 
19200
END|
 
19201
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19202
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19203
        
 
19204
# check trigger-5 success:      1
 
19205
DROP TRIGGER trg_1;
 
19206
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19207
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19208
f_charbig = 'just inserted'
 
19209
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19210
DELETE FROM t0_aux
 
19211
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19212
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19213
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19214
'just inserted' FROM t0_template
 
19215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19216
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19217
BEGIN
 
19218
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19219
f_charbig = 'updated by trigger'
 
19220
      WHERE f_int1 = - old.f_int1;
 
19221
END|
 
19222
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19223
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19224
        
 
19225
# check trigger-6 success:      1
 
19226
DROP TRIGGER trg_1;
 
19227
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19228
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19229
f_charbig = 'just inserted'
 
19230
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19231
DELETE FROM t0_aux
 
19232
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19233
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19234
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19235
'just inserted' FROM t0_template
 
19236
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19237
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19238
BEGIN
 
19239
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19240
f_charbig = 'updated by trigger'
 
19241
      WHERE f_int1 = - old.f_int1;
 
19242
END|
 
19243
DELETE FROM t0_aux
 
19244
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19245
        
 
19246
# check trigger-7 success:      1
 
19247
DROP TRIGGER trg_1;
 
19248
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19249
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19250
f_charbig = 'just inserted'
 
19251
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19252
DELETE FROM t0_aux
 
19253
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19254
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19255
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19256
'just inserted' FROM t0_template
 
19257
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19258
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19259
BEGIN
 
19260
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19261
f_charbig = 'updated by trigger'
 
19262
      WHERE f_int1 = - old.f_int1;
 
19263
END|
 
19264
DELETE FROM t0_aux
 
19265
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19266
        
 
19267
# check trigger-8 success:      1
 
19268
DROP TRIGGER trg_1;
 
19269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19271
f_charbig = 'just inserted'
 
19272
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19273
DELETE FROM t0_aux
 
19274
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19275
DELETE FROM t1
 
19276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19277
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19278
BEGIN
 
19279
SET new.f_int1 = old.f_int1 + @max_row,
 
19280
new.f_int2 = old.f_int2 - @max_row,
 
19281
new.f_charbig = '####updated per update trigger####';
 
19282
END|
 
19283
UPDATE t1
 
19284
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19285
f_charbig = '####updated per update statement itself####';
 
19286
        
 
19287
# check trigger-9 success:      1
 
19288
DROP TRIGGER trg_2;
 
19289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19291
f_charbig = CONCAT('===',f_char1,'===');
 
19292
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19293
BEGIN
 
19294
SET new.f_int1 = new.f_int1 + @max_row,
 
19295
new.f_int2 = new.f_int2 - @max_row,
 
19296
new.f_charbig = '####updated per update trigger####';
 
19297
END|
 
19298
UPDATE t1
 
19299
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19300
f_charbig = '####updated per update statement itself####';
 
19301
        
 
19302
# check trigger-10 success:     1
 
19303
DROP TRIGGER trg_2;
 
19304
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19305
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19306
f_charbig = CONCAT('===',f_char1,'===');
 
19307
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19308
BEGIN
 
19309
SET new.f_int1 = @my_max1 + @counter,
 
19310
new.f_int2 = @my_min2 - @counter,
 
19311
new.f_charbig = '####updated per insert trigger####';
 
19312
SET @counter = @counter + 1;
 
19313
END|
 
19314
SET @counter = 1;
 
19315
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19316
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19317
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19318
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19320
ORDER BY f_int1;
 
19321
DROP TRIGGER trg_3;
 
19322
        
 
19323
# check trigger-11 success:     1
 
19324
DELETE FROM t1
 
19325
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19326
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19327
AND f_charbig = '####updated per insert trigger####';
 
19328
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19329
BEGIN
 
19330
SET new.f_int1 = @my_max1 + @counter,
 
19331
new.f_int2 = @my_min2 - @counter,
 
19332
new.f_charbig = '####updated per insert trigger####';
 
19333
SET @counter = @counter + 1;
 
19334
END|
 
19335
SET @counter = 1;
 
19336
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19337
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19338
SELECT CAST(f_int1 AS CHAR),
 
19339
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19341
ORDER BY f_int1;
 
19342
DROP TRIGGER trg_3;
 
19343
        
 
19344
# check trigger-12 success:     1
 
19345
DELETE FROM t1
 
19346
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19347
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19348
AND f_charbig = '####updated per insert trigger####';
 
19349
ANALYZE  TABLE t1;
 
19350
Table   Op      Msg_type        Msg_text
 
19351
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
19352
CHECK    TABLE t1 EXTENDED;
 
19353
Table   Op      Msg_type        Msg_text
 
19354
test.t1 check   note    The storage engine for the table doesn't support check
 
19355
CHECKSUM TABLE t1 EXTENDED;
 
19356
Table   Checksum
 
19357
test.t1 <some_value>
 
19358
OPTIMIZE TABLE t1;
 
19359
Table   Op      Msg_type        Msg_text
 
19360
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
19361
# check layout success:    1
 
19362
REPAIR   TABLE t1 EXTENDED;
 
19363
Table   Op      Msg_type        Msg_text
 
19364
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19365
# check layout success:    1
 
19366
TRUNCATE t1;
 
19367
        
 
19368
# check TRUNCATE success:       1
 
19369
# check layout success:    1
 
19370
# End usability test (inc/partition_check.inc)
 
19371
DROP TABLE t1;
 
19372
CREATE TABLE t1 (
 
19373
f_int1 INTEGER,
 
19374
f_int2 INTEGER,
 
19375
f_char1 CHAR(20),
 
19376
f_char2 CHAR(20),
 
19377
f_charbig VARCHAR(1000)
 
19378
 
 
19379
)
 
19380
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
19381
(PARTITION part1 VALUES IN (0)
 
19382
(SUBPARTITION sp11, SUBPARTITION sp12),
 
19383
PARTITION part2 VALUES IN (1)
 
19384
(SUBPARTITION sp21, SUBPARTITION sp22),
 
19385
PARTITION part3 VALUES IN (2)
 
19386
(SUBPARTITION sp31, SUBPARTITION sp32),
 
19387
PARTITION part4 VALUES IN (NULL)
 
19388
(SUBPARTITION sp41, SUBPARTITION sp42));
 
19389
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19390
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19391
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19392
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
19393
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19394
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19395
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19396
# Start usability test (inc/partition_check.inc)
 
19397
create_command
 
19398
SHOW CREATE TABLE t1;
 
19399
Table   Create Table
 
19400
t1      CREATE TABLE `t1` (
 
19401
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
19402
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
19403
  `f_char1` char(20) DEFAULT NULL,
 
19404
  `f_char2` char(20) DEFAULT NULL,
 
19405
  `f_charbig` varchar(1000) DEFAULT NULL,
 
19406
  PRIMARY KEY (`f_int1`,`f_int2`)
 
19407
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
19408
 
 
19409
# check prerequisites-1 success:    1
 
19410
# check COUNT(*) success:    1
 
19411
# check MIN/MAX(f_int1) success:    1
 
19412
# check MIN/MAX(f_int2) success:    1
 
19413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19414
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19415
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19416
WHERE f_int1 IN (2,3);
 
19417
ERROR 23000: Can't write; duplicate key in table 't1'
 
19418
# check prerequisites-3 success:    1
 
19419
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
19420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19421
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
19422
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
19423
WHERE f_int1 IN (2,3);
 
19424
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19425
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19426
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
19427
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
19428
WHERE f_int1 IN (2,3);
 
19429
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19430
# check read via f_int1 success: 1
 
19431
# check read via f_int2 success: 1
 
19432
        
 
19433
# check multiple-1 success:     1
 
19434
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19435
        
 
19436
# check multiple-2 success:     1
 
19437
INSERT INTO t1 SELECT * FROM t0_template
 
19438
WHERE MOD(f_int1,3) = 0;
 
19439
        
 
19440
# check multiple-3 success:     1
 
19441
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19442
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19443
AND @max_row_div2 + @max_row_div4;
 
19444
        
 
19445
# check multiple-4 success:     1
 
19446
DELETE FROM t1
 
19447
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19448
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19449
        
 
19450
# check multiple-5 success:     1
 
19451
SELECT COUNT(*) INTO @try_count FROM t0_template
 
19452
WHERE MOD(f_int1,3) = 0
 
19453
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19454
SELECT COUNT(*) INTO @clash_count
 
19455
FROM t1 INNER JOIN t0_template USING(f_int1)
 
19456
WHERE MOD(f_int1,3) = 0
 
19457
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19458
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19459
INSERT INTO t1
 
19460
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19461
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19462
f_charbig = '#SINGLE#';
 
19463
        
 
19464
# check single-1 success:       1
 
19465
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19466
INSERT INTO t1
 
19467
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19468
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19469
f_charbig = '#SINGLE#';
 
19470
        
 
19471
# check single-2 success:       1
 
19472
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19473
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19474
UPDATE t1 SET f_int1 = @cur_value2
 
19475
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19476
        
 
19477
# check single-3 success:       1
 
19478
SET @cur_value1= -1;
 
19479
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19480
UPDATE t1 SET f_int1 = @cur_value1
 
19481
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19482
        
 
19483
# check single-4 success:       1
 
19484
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19485
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19486
        
 
19487
# check single-5 success:       1
 
19488
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19489
        
 
19490
# check single-6 success:       1
 
19491
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19492
        
 
19493
# check single-7 success:       1
 
19494
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19495
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19496
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19497
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19498
f_charbig = '#NULL#';
 
19499
INSERT INTO t1
 
19500
SET f_int1 = NULL , f_int2 = -@max_row,
 
19501
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19502
f_charbig = '#NULL#';
 
19503
ERROR 23000: Column 'f_int1' cannot be null
 
19504
# check null success:    1
 
19505
DELETE FROM t1
 
19506
WHERE f_int1 = 0 AND f_int2 = 0
 
19507
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19508
AND f_charbig = '#NULL#';
 
19509
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19510
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19511
   FROM t0_template source_tab
 
19512
WHERE MOD(f_int1,3) = 0
 
19513
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
19514
ON DUPLICATE KEY
 
19515
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
19516
f_int2 = 2 * @max_row + source_tab.f_int1,
 
19517
f_charbig = 'was updated';
 
19518
        
 
19519
# check unique-1-a success:     1
 
19520
        
 
19521
# check unique-1-b success:     1
 
19522
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19523
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19524
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19525
f_charbig = CONCAT('===',f_char1,'===')
 
19526
WHERE f_charbig = 'was updated';
 
19527
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19528
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
19529
   FROM t0_template source_tab
 
19530
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19531
        
 
19532
# check replace success:        1
 
19533
DELETE FROM t1
 
19534
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
19535
DELETE FROM t1
 
19536
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
19537
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
19538
UPDATE t1 SET f_int2 = f_int1,
 
19539
f_char1 = CAST(f_int1 AS CHAR),
 
19540
f_char2 = CAST(f_int1 AS CHAR),
 
19541
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
19542
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
19543
SET AUTOCOMMIT= 0;
 
19544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19545
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19546
FROM t0_template source_tab
 
19547
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19548
        
 
19549
# check transactions-1 success:         1
 
19550
COMMIT WORK;
 
19551
        
 
19552
# check transactions-2 success:         1
 
19553
ROLLBACK WORK;
 
19554
        
 
19555
# check transactions-3 success:         1
 
19556
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19557
COMMIT WORK;
 
19558
ROLLBACK WORK;
 
19559
        
 
19560
# check transactions-4 success:         1
 
19561
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19562
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19563
FROM t0_template source_tab
 
19564
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19565
        
 
19566
# check transactions-5 success:         1
 
19567
ROLLBACK WORK;
 
19568
        
 
19569
# check transactions-6 success:         1
 
19570
# INFO: Storage engine used for t1 seems to be transactional.
 
19571
COMMIT;
 
19572
        
 
19573
# check transactions-7 success:         1
 
19574
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19575
COMMIT WORK;
 
19576
SET @@session.sql_mode = 'traditional';
 
19577
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19578
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19579
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19580
'', '', 'was inserted' FROM t0_template
 
19581
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19582
ERROR 22012: Division by 0
 
19583
COMMIT;
 
19584
        
 
19585
# check transactions-8 success:         1
 
19586
# INFO: Storage engine used for t1 seems to be able to revert
 
19587
#       changes made by the failing statement.
 
19588
SET @@session.sql_mode = '';
 
19589
SET AUTOCOMMIT= 1;
 
19590
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19591
COMMIT WORK;
 
19592
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19593
        
 
19594
# check special-1 success:      1
 
19595
UPDATE t1 SET f_charbig = '';
 
19596
        
 
19597
# check special-2 success:      1
 
19598
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19599
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19600
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19604
'just inserted' FROM t0_template
 
19605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19606
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19607
BEGIN
 
19608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19609
f_charbig = 'updated by trigger'
 
19610
      WHERE f_int1 = new.f_int1;
 
19611
END|
 
19612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19613
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19614
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19615
        
 
19616
# check trigger-1 success:      1
 
19617
DROP TRIGGER trg_1;
 
19618
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19619
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19620
f_charbig = 'just inserted'
 
19621
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19622
DELETE FROM t0_aux
 
19623
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19625
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19626
'just inserted' FROM t0_template
 
19627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19628
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19629
BEGIN
 
19630
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19631
f_charbig = 'updated by trigger'
 
19632
      WHERE f_int1 = new.f_int1;
 
19633
END|
 
19634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19635
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19636
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19637
        
 
19638
# check trigger-2 success:      1
 
19639
DROP TRIGGER trg_1;
 
19640
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19641
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19642
f_charbig = 'just inserted'
 
19643
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19644
DELETE FROM t0_aux
 
19645
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19648
'just inserted' FROM t0_template
 
19649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19650
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19651
BEGIN
 
19652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19653
f_charbig = 'updated by trigger'
 
19654
      WHERE f_int1 = new.f_int1;
 
19655
END|
 
19656
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19657
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19658
        
 
19659
# check trigger-3 success:      1
 
19660
DROP TRIGGER trg_1;
 
19661
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19662
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19663
f_charbig = 'just inserted'
 
19664
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19665
DELETE FROM t0_aux
 
19666
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19667
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19668
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19669
'just inserted' FROM t0_template
 
19670
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19671
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19672
BEGIN
 
19673
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19674
f_charbig = 'updated by trigger'
 
19675
      WHERE f_int1 = - old.f_int1;
 
19676
END|
 
19677
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19678
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19679
        
 
19680
# check trigger-4 success:      1
 
19681
DROP TRIGGER trg_1;
 
19682
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19683
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19684
f_charbig = 'just inserted'
 
19685
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19686
DELETE FROM t0_aux
 
19687
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19689
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19690
'just inserted' FROM t0_template
 
19691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19692
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19693
BEGIN
 
19694
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19695
f_charbig = 'updated by trigger'
 
19696
      WHERE f_int1 = new.f_int1;
 
19697
END|
 
19698
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19699
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19700
        
 
19701
# check trigger-5 success:      1
 
19702
DROP TRIGGER trg_1;
 
19703
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19704
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19705
f_charbig = 'just inserted'
 
19706
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19707
DELETE FROM t0_aux
 
19708
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19709
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19710
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19711
'just inserted' FROM t0_template
 
19712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19713
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19714
BEGIN
 
19715
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19716
f_charbig = 'updated by trigger'
 
19717
      WHERE f_int1 = - old.f_int1;
 
19718
END|
 
19719
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19720
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19721
        
 
19722
# check trigger-6 success:      1
 
19723
DROP TRIGGER trg_1;
 
19724
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19725
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19726
f_charbig = 'just inserted'
 
19727
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19728
DELETE FROM t0_aux
 
19729
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19730
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19731
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19732
'just inserted' FROM t0_template
 
19733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19734
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19735
BEGIN
 
19736
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19737
f_charbig = 'updated by trigger'
 
19738
      WHERE f_int1 = - old.f_int1;
 
19739
END|
 
19740
DELETE FROM t0_aux
 
19741
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19742
        
 
19743
# check trigger-7 success:      1
 
19744
DROP TRIGGER trg_1;
 
19745
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19746
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19747
f_charbig = 'just inserted'
 
19748
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19749
DELETE FROM t0_aux
 
19750
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19751
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19752
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19753
'just inserted' FROM t0_template
 
19754
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19755
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19756
BEGIN
 
19757
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19758
f_charbig = 'updated by trigger'
 
19759
      WHERE f_int1 = - old.f_int1;
 
19760
END|
 
19761
DELETE FROM t0_aux
 
19762
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19763
        
 
19764
# check trigger-8 success:      1
 
19765
DROP TRIGGER trg_1;
 
19766
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19767
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19768
f_charbig = 'just inserted'
 
19769
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19770
DELETE FROM t0_aux
 
19771
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19772
DELETE FROM t1
 
19773
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19774
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19775
BEGIN
 
19776
SET new.f_int1 = old.f_int1 + @max_row,
 
19777
new.f_int2 = old.f_int2 - @max_row,
 
19778
new.f_charbig = '####updated per update trigger####';
 
19779
END|
 
19780
UPDATE t1
 
19781
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19782
f_charbig = '####updated per update statement itself####';
 
19783
        
 
19784
# check trigger-9 success:      1
 
19785
DROP TRIGGER trg_2;
 
19786
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19787
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19788
f_charbig = CONCAT('===',f_char1,'===');
 
19789
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19790
BEGIN
 
19791
SET new.f_int1 = new.f_int1 + @max_row,
 
19792
new.f_int2 = new.f_int2 - @max_row,
 
19793
new.f_charbig = '####updated per update trigger####';
 
19794
END|
 
19795
UPDATE t1
 
19796
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19797
f_charbig = '####updated per update statement itself####';
 
19798
        
 
19799
# check trigger-10 success:     1
 
19800
DROP TRIGGER trg_2;
 
19801
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19802
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19803
f_charbig = CONCAT('===',f_char1,'===');
 
19804
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19805
BEGIN
 
19806
SET new.f_int1 = @my_max1 + @counter,
 
19807
new.f_int2 = @my_min2 - @counter,
 
19808
new.f_charbig = '####updated per insert trigger####';
 
19809
SET @counter = @counter + 1;
 
19810
END|
 
19811
SET @counter = 1;
 
19812
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19813
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19814
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19815
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19817
ORDER BY f_int1;
 
19818
DROP TRIGGER trg_3;
 
19819
        
 
19820
# check trigger-11 success:     1
 
19821
DELETE FROM t1
 
19822
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19823
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19824
AND f_charbig = '####updated per insert trigger####';
 
19825
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19826
BEGIN
 
19827
SET new.f_int1 = @my_max1 + @counter,
 
19828
new.f_int2 = @my_min2 - @counter,
 
19829
new.f_charbig = '####updated per insert trigger####';
 
19830
SET @counter = @counter + 1;
 
19831
END|
 
19832
SET @counter = 1;
 
19833
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19834
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19835
SELECT CAST(f_int1 AS CHAR),
 
19836
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19838
ORDER BY f_int1;
 
19839
DROP TRIGGER trg_3;
 
19840
        
 
19841
# check trigger-12 success:     1
 
19842
DELETE FROM t1
 
19843
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19844
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19845
AND f_charbig = '####updated per insert trigger####';
 
19846
ANALYZE  TABLE t1;
 
19847
Table   Op      Msg_type        Msg_text
 
19848
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
19849
CHECK    TABLE t1 EXTENDED;
 
19850
Table   Op      Msg_type        Msg_text
 
19851
test.t1 check   note    The storage engine for the table doesn't support check
 
19852
CHECKSUM TABLE t1 EXTENDED;
 
19853
Table   Checksum
 
19854
test.t1 <some_value>
 
19855
OPTIMIZE TABLE t1;
 
19856
Table   Op      Msg_type        Msg_text
 
19857
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
19858
# check layout success:    1
 
19859
REPAIR   TABLE t1 EXTENDED;
 
19860
Table   Op      Msg_type        Msg_text
 
19861
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19862
# check layout success:    1
 
19863
TRUNCATE t1;
 
19864
        
 
19865
# check TRUNCATE success:       1
 
19866
# check layout success:    1
 
19867
# End usability test (inc/partition_check.inc)
 
19868
DROP TABLE t1;
 
19869
CREATE TABLE t1 (
 
19870
f_int1 INTEGER,
 
19871
f_int2 INTEGER,
 
19872
f_char1 CHAR(20),
 
19873
f_char2 CHAR(20),
 
19874
f_charbig VARCHAR(1000)
 
19875
 
 
19876
)
 
19877
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
19878
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
19879
(PARTITION part1 VALUES IN (0),
 
19880
 PARTITION part2 VALUES IN (1),
 
19881
 PARTITION part3 VALUES IN (NULL));
 
19882
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19883
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19884
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19885
ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
 
19886
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19887
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19888
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19889
# Start usability test (inc/partition_check.inc)
 
19890
create_command
 
19891
SHOW CREATE TABLE t1;
 
19892
Table   Create Table
 
19893
t1      CREATE TABLE `t1` (
 
19894
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
19895
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
19896
  `f_char1` char(20) DEFAULT NULL,
 
19897
  `f_char2` char(20) DEFAULT NULL,
 
19898
  `f_charbig` varchar(1000) DEFAULT NULL,
 
19899
  PRIMARY KEY (`f_int1`,`f_int2`)
 
19900
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
19901
 
 
19902
# check prerequisites-1 success:    1
 
19903
# check COUNT(*) success:    1
 
19904
# check MIN/MAX(f_int1) success:    1
 
19905
# check MIN/MAX(f_int2) success:    1
 
19906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19907
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19908
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19909
WHERE f_int1 IN (2,3);
 
19910
ERROR 23000: Can't write; duplicate key in table 't1'
 
19911
# check prerequisites-3 success:    1
 
19912
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
19913
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19914
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
19915
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
19916
WHERE f_int1 IN (2,3);
 
19917
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19918
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19919
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
19920
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
19921
WHERE f_int1 IN (2,3);
 
19922
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19923
# check read via f_int1 success: 1
 
19924
# check read via f_int2 success: 1
 
19925
        
 
19926
# check multiple-1 success:     1
 
19927
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19928
        
 
19929
# check multiple-2 success:     1
 
19930
INSERT INTO t1 SELECT * FROM t0_template
 
19931
WHERE MOD(f_int1,3) = 0;
 
19932
        
 
19933
# check multiple-3 success:     1
 
19934
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19935
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19936
AND @max_row_div2 + @max_row_div4;
 
19937
        
 
19938
# check multiple-4 success:     1
 
19939
DELETE FROM t1
 
19940
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19941
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19942
        
 
19943
# check multiple-5 success:     1
 
19944
SELECT COUNT(*) INTO @try_count FROM t0_template
 
19945
WHERE MOD(f_int1,3) = 0
 
19946
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19947
SELECT COUNT(*) INTO @clash_count
 
19948
FROM t1 INNER JOIN t0_template USING(f_int1)
 
19949
WHERE MOD(f_int1,3) = 0
 
19950
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19951
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19952
INSERT INTO t1
 
19953
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19954
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19955
f_charbig = '#SINGLE#';
 
19956
        
 
19957
# check single-1 success:       1
 
19958
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19959
INSERT INTO t1
 
19960
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19961
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19962
f_charbig = '#SINGLE#';
 
19963
        
 
19964
# check single-2 success:       1
 
19965
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19966
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19967
UPDATE t1 SET f_int1 = @cur_value2
 
19968
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19969
        
 
19970
# check single-3 success:       1
 
19971
SET @cur_value1= -1;
 
19972
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19973
UPDATE t1 SET f_int1 = @cur_value1
 
19974
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19975
        
 
19976
# check single-4 success:       1
 
19977
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19978
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19979
        
 
19980
# check single-5 success:       1
 
19981
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19982
        
 
19983
# check single-6 success:       1
 
19984
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19985
        
 
19986
# check single-7 success:       1
 
19987
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19988
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19989
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19990
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19991
f_charbig = '#NULL#';
 
19992
INSERT INTO t1
 
19993
SET f_int1 = NULL , f_int2 = -@max_row,
 
19994
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19995
f_charbig = '#NULL#';
 
19996
ERROR 23000: Column 'f_int1' cannot be null
 
19997
# check null success:    1
 
19998
DELETE FROM t1
 
19999
WHERE f_int1 = 0 AND f_int2 = 0
 
20000
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20001
AND f_charbig = '#NULL#';
 
20002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20003
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20004
   FROM t0_template source_tab
 
20005
WHERE MOD(f_int1,3) = 0
 
20006
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
20007
ON DUPLICATE KEY
 
20008
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
20009
f_int2 = 2 * @max_row + source_tab.f_int1,
 
20010
f_charbig = 'was updated';
 
20011
        
 
20012
# check unique-1-a success:     1
 
20013
        
 
20014
# check unique-1-b success:     1
 
20015
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20018
f_charbig = CONCAT('===',f_char1,'===')
 
20019
WHERE f_charbig = 'was updated';
 
20020
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20021
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
20022
   FROM t0_template source_tab
 
20023
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20024
        
 
20025
# check replace success:        1
 
20026
DELETE FROM t1
 
20027
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
20028
DELETE FROM t1
 
20029
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
20030
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
20031
UPDATE t1 SET f_int2 = f_int1,
 
20032
f_char1 = CAST(f_int1 AS CHAR),
 
20033
f_char2 = CAST(f_int1 AS CHAR),
 
20034
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
20035
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
20036
SET AUTOCOMMIT= 0;
 
20037
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20038
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20039
FROM t0_template source_tab
 
20040
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20041
        
 
20042
# check transactions-1 success:         1
 
20043
COMMIT WORK;
 
20044
        
 
20045
# check transactions-2 success:         1
 
20046
ROLLBACK WORK;
 
20047
        
 
20048
# check transactions-3 success:         1
 
20049
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20050
COMMIT WORK;
 
20051
ROLLBACK WORK;
 
20052
        
 
20053
# check transactions-4 success:         1
 
20054
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20055
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20056
FROM t0_template source_tab
 
20057
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20058
        
 
20059
# check transactions-5 success:         1
 
20060
ROLLBACK WORK;
 
20061
        
 
20062
# check transactions-6 success:         1
 
20063
# INFO: Storage engine used for t1 seems to be transactional.
 
20064
COMMIT;
 
20065
        
 
20066
# check transactions-7 success:         1
 
20067
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20068
COMMIT WORK;
 
20069
SET @@session.sql_mode = 'traditional';
 
20070
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20071
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20072
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20073
'', '', 'was inserted' FROM t0_template
 
20074
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20075
ERROR 22012: Division by 0
 
20076
COMMIT;
 
20077
        
 
20078
# check transactions-8 success:         1
 
20079
# INFO: Storage engine used for t1 seems to be able to revert
 
20080
#       changes made by the failing statement.
 
20081
SET @@session.sql_mode = '';
 
20082
SET AUTOCOMMIT= 1;
 
20083
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20084
COMMIT WORK;
 
20085
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20086
        
 
20087
# check special-1 success:      1
 
20088
UPDATE t1 SET f_charbig = '';
 
20089
        
 
20090
# check special-2 success:      1
 
20091
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20092
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20093
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20095
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20096
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20097
'just inserted' FROM t0_template
 
20098
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20099
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20100
BEGIN
 
20101
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20102
f_charbig = 'updated by trigger'
 
20103
      WHERE f_int1 = new.f_int1;
 
20104
END|
 
20105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20106
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20108
        
 
20109
# check trigger-1 success:      1
 
20110
DROP TRIGGER trg_1;
 
20111
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20112
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20113
f_charbig = 'just inserted'
 
20114
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20115
DELETE FROM t0_aux
 
20116
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20117
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20118
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20119
'just inserted' FROM t0_template
 
20120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20121
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20122
BEGIN
 
20123
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20124
f_charbig = 'updated by trigger'
 
20125
      WHERE f_int1 = new.f_int1;
 
20126
END|
 
20127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20128
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20130
        
 
20131
# check trigger-2 success:      1
 
20132
DROP TRIGGER trg_1;
 
20133
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20134
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20135
f_charbig = 'just inserted'
 
20136
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20137
DELETE FROM t0_aux
 
20138
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20139
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20140
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20141
'just inserted' FROM t0_template
 
20142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20143
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20144
BEGIN
 
20145
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20146
f_charbig = 'updated by trigger'
 
20147
      WHERE f_int1 = new.f_int1;
 
20148
END|
 
20149
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20150
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20151
        
 
20152
# check trigger-3 success:      1
 
20153
DROP TRIGGER trg_1;
 
20154
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20155
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20156
f_charbig = 'just inserted'
 
20157
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20158
DELETE FROM t0_aux
 
20159
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20160
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20161
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20162
'just inserted' FROM t0_template
 
20163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20164
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20165
BEGIN
 
20166
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20167
f_charbig = 'updated by trigger'
 
20168
      WHERE f_int1 = - old.f_int1;
 
20169
END|
 
20170
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20171
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20172
        
 
20173
# check trigger-4 success:      1
 
20174
DROP TRIGGER trg_1;
 
20175
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20176
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20177
f_charbig = 'just inserted'
 
20178
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20179
DELETE FROM t0_aux
 
20180
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20182
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20183
'just inserted' FROM t0_template
 
20184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20185
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20186
BEGIN
 
20187
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20188
f_charbig = 'updated by trigger'
 
20189
      WHERE f_int1 = new.f_int1;
 
20190
END|
 
20191
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20192
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20193
        
 
20194
# check trigger-5 success:      1
 
20195
DROP TRIGGER trg_1;
 
20196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20198
f_charbig = 'just inserted'
 
20199
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20200
DELETE FROM t0_aux
 
20201
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20203
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20204
'just inserted' FROM t0_template
 
20205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20206
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20207
BEGIN
 
20208
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20209
f_charbig = 'updated by trigger'
 
20210
      WHERE f_int1 = - old.f_int1;
 
20211
END|
 
20212
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20213
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20214
        
 
20215
# check trigger-6 success:      1
 
20216
DROP TRIGGER trg_1;
 
20217
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20218
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20219
f_charbig = 'just inserted'
 
20220
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20221
DELETE FROM t0_aux
 
20222
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20224
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20225
'just inserted' FROM t0_template
 
20226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20227
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20228
BEGIN
 
20229
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20230
f_charbig = 'updated by trigger'
 
20231
      WHERE f_int1 = - old.f_int1;
 
20232
END|
 
20233
DELETE FROM t0_aux
 
20234
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20235
        
 
20236
# check trigger-7 success:      1
 
20237
DROP TRIGGER trg_1;
 
20238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20240
f_charbig = 'just inserted'
 
20241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20242
DELETE FROM t0_aux
 
20243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20245
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20246
'just inserted' FROM t0_template
 
20247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20248
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20249
BEGIN
 
20250
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20251
f_charbig = 'updated by trigger'
 
20252
      WHERE f_int1 = - old.f_int1;
 
20253
END|
 
20254
DELETE FROM t0_aux
 
20255
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20256
        
 
20257
# check trigger-8 success:      1
 
20258
DROP TRIGGER trg_1;
 
20259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20261
f_charbig = 'just inserted'
 
20262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20263
DELETE FROM t0_aux
 
20264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20265
DELETE FROM t1
 
20266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20267
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20268
BEGIN
 
20269
SET new.f_int1 = old.f_int1 + @max_row,
 
20270
new.f_int2 = old.f_int2 - @max_row,
 
20271
new.f_charbig = '####updated per update trigger####';
 
20272
END|
 
20273
UPDATE t1
 
20274
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20275
f_charbig = '####updated per update statement itself####';
 
20276
        
 
20277
# check trigger-9 success:      1
 
20278
DROP TRIGGER trg_2;
 
20279
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20280
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20281
f_charbig = CONCAT('===',f_char1,'===');
 
20282
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20283
BEGIN
 
20284
SET new.f_int1 = new.f_int1 + @max_row,
 
20285
new.f_int2 = new.f_int2 - @max_row,
 
20286
new.f_charbig = '####updated per update trigger####';
 
20287
END|
 
20288
UPDATE t1
 
20289
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20290
f_charbig = '####updated per update statement itself####';
 
20291
        
 
20292
# check trigger-10 success:     1
 
20293
DROP TRIGGER trg_2;
 
20294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20296
f_charbig = CONCAT('===',f_char1,'===');
 
20297
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20298
BEGIN
 
20299
SET new.f_int1 = @my_max1 + @counter,
 
20300
new.f_int2 = @my_min2 - @counter,
 
20301
new.f_charbig = '####updated per insert trigger####';
 
20302
SET @counter = @counter + 1;
 
20303
END|
 
20304
SET @counter = 1;
 
20305
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20307
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20308
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20310
ORDER BY f_int1;
 
20311
DROP TRIGGER trg_3;
 
20312
        
 
20313
# check trigger-11 success:     1
 
20314
DELETE FROM t1
 
20315
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20316
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20317
AND f_charbig = '####updated per insert trigger####';
 
20318
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20319
BEGIN
 
20320
SET new.f_int1 = @my_max1 + @counter,
 
20321
new.f_int2 = @my_min2 - @counter,
 
20322
new.f_charbig = '####updated per insert trigger####';
 
20323
SET @counter = @counter + 1;
 
20324
END|
 
20325
SET @counter = 1;
 
20326
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20327
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20328
SELECT CAST(f_int1 AS CHAR),
 
20329
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20330
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20331
ORDER BY f_int1;
 
20332
DROP TRIGGER trg_3;
 
20333
        
 
20334
# check trigger-12 success:     1
 
20335
DELETE FROM t1
 
20336
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20337
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20338
AND f_charbig = '####updated per insert trigger####';
 
20339
ANALYZE  TABLE t1;
 
20340
Table   Op      Msg_type        Msg_text
 
20341
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
20342
CHECK    TABLE t1 EXTENDED;
 
20343
Table   Op      Msg_type        Msg_text
 
20344
test.t1 check   note    The storage engine for the table doesn't support check
 
20345
CHECKSUM TABLE t1 EXTENDED;
 
20346
Table   Checksum
 
20347
test.t1 <some_value>
 
20348
OPTIMIZE TABLE t1;
 
20349
Table   Op      Msg_type        Msg_text
 
20350
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
20351
# check layout success:    1
 
20352
REPAIR   TABLE t1 EXTENDED;
 
20353
Table   Op      Msg_type        Msg_text
 
20354
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20355
# check layout success:    1
 
20356
TRUNCATE t1;
 
20357
        
 
20358
# check TRUNCATE success:       1
 
20359
# check layout success:    1
 
20360
# End usability test (inc/partition_check.inc)
 
20361
DROP TABLE t1;
 
20362
DROP TABLE IF EXISTS t1;
 
20363
CREATE TABLE t1 (
 
20364
f_int1 INTEGER,
 
20365
f_int2 INTEGER,
 
20366
f_char1 CHAR(20),
 
20367
f_char2 CHAR(20),
 
20368
f_charbig VARCHAR(1000)
 
20369
 
 
20370
)
 
20371
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
20372
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20373
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20374
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20375
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
20376
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20377
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20378
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20379
# Start usability test (inc/partition_check.inc)
 
20380
create_command
 
20381
SHOW CREATE TABLE t1;
 
20382
Table   Create Table
 
20383
t1      CREATE TABLE `t1` (
 
20384
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
20385
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
20386
  `f_char1` char(20) DEFAULT NULL,
 
20387
  `f_char2` char(20) DEFAULT NULL,
 
20388
  `f_charbig` varchar(1000) DEFAULT NULL,
 
20389
  PRIMARY KEY (`f_int2`,`f_int1`)
 
20390
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
20391
 
 
20392
# check prerequisites-1 success:    1
 
20393
# check COUNT(*) success:    1
 
20394
# check MIN/MAX(f_int1) success:    1
 
20395
# check MIN/MAX(f_int2) success:    1
 
20396
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20397
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20398
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20399
WHERE f_int1 IN (2,3);
 
20400
ERROR 23000: Can't write; duplicate key in table 't1'
 
20401
# check prerequisites-3 success:    1
 
20402
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
20403
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20404
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20405
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20406
WHERE f_int1 IN (2,3);
 
20407
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20408
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20409
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20410
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20411
WHERE f_int1 IN (2,3);
 
20412
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20413
# check read via f_int1 success: 1
 
20414
# check read via f_int2 success: 1
 
20415
        
 
20416
# check multiple-1 success:     1
 
20417
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20418
        
 
20419
# check multiple-2 success:     1
 
20420
INSERT INTO t1 SELECT * FROM t0_template
 
20421
WHERE MOD(f_int1,3) = 0;
 
20422
        
 
20423
# check multiple-3 success:     1
 
20424
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20425
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20426
AND @max_row_div2 + @max_row_div4;
 
20427
        
 
20428
# check multiple-4 success:     1
 
20429
DELETE FROM t1
 
20430
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20431
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20432
        
 
20433
# check multiple-5 success:     1
 
20434
SELECT COUNT(*) INTO @try_count FROM t0_template
 
20435
WHERE MOD(f_int1,3) = 0
 
20436
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20437
SELECT COUNT(*) INTO @clash_count
 
20438
FROM t1 INNER JOIN t0_template USING(f_int1)
 
20439
WHERE MOD(f_int1,3) = 0
 
20440
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20441
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20442
INSERT INTO t1
 
20443
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20444
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20445
f_charbig = '#SINGLE#';
 
20446
        
 
20447
# check single-1 success:       1
 
20448
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20449
INSERT INTO t1
 
20450
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20451
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20452
f_charbig = '#SINGLE#';
 
20453
        
 
20454
# check single-2 success:       1
 
20455
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20456
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20457
UPDATE t1 SET f_int1 = @cur_value2
 
20458
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20459
        
 
20460
# check single-3 success:       1
 
20461
SET @cur_value1= -1;
 
20462
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20463
UPDATE t1 SET f_int1 = @cur_value1
 
20464
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20465
        
 
20466
# check single-4 success:       1
 
20467
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20468
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20469
        
 
20470
# check single-5 success:       1
 
20471
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20472
        
 
20473
# check single-6 success:       1
 
20474
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20475
        
 
20476
# check single-7 success:       1
 
20477
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20478
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20479
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20480
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20481
f_charbig = '#NULL#';
 
20482
INSERT INTO t1
 
20483
SET f_int1 = NULL , f_int2 = -@max_row,
 
20484
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20485
f_charbig = '#NULL#';
 
20486
ERROR 23000: Column 'f_int1' cannot be null
 
20487
# check null success:    1
 
20488
DELETE FROM t1
 
20489
WHERE f_int1 = 0 AND f_int2 = 0
 
20490
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20491
AND f_charbig = '#NULL#';
 
20492
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20493
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20494
   FROM t0_template source_tab
 
20495
WHERE MOD(f_int1,3) = 0
 
20496
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
20497
ON DUPLICATE KEY
 
20498
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
20499
f_int2 = 2 * @max_row + source_tab.f_int1,
 
20500
f_charbig = 'was updated';
 
20501
        
 
20502
# check unique-1-a success:     1
 
20503
        
 
20504
# check unique-1-b success:     1
 
20505
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20506
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20507
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20508
f_charbig = CONCAT('===',f_char1,'===')
 
20509
WHERE f_charbig = 'was updated';
 
20510
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20511
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
20512
   FROM t0_template source_tab
 
20513
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20514
        
 
20515
# check replace success:        1
 
20516
DELETE FROM t1
 
20517
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
20518
DELETE FROM t1
 
20519
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
20520
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
20521
UPDATE t1 SET f_int2 = f_int1,
 
20522
f_char1 = CAST(f_int1 AS CHAR),
 
20523
f_char2 = CAST(f_int1 AS CHAR),
 
20524
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
20525
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
20526
SET AUTOCOMMIT= 0;
 
20527
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20528
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20529
FROM t0_template source_tab
 
20530
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20531
        
 
20532
# check transactions-1 success:         1
 
20533
COMMIT WORK;
 
20534
        
 
20535
# check transactions-2 success:         1
 
20536
ROLLBACK WORK;
 
20537
        
 
20538
# check transactions-3 success:         1
 
20539
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20540
COMMIT WORK;
 
20541
ROLLBACK WORK;
 
20542
        
 
20543
# check transactions-4 success:         1
 
20544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20545
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20546
FROM t0_template source_tab
 
20547
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20548
        
 
20549
# check transactions-5 success:         1
 
20550
ROLLBACK WORK;
 
20551
        
 
20552
# check transactions-6 success:         1
 
20553
# INFO: Storage engine used for t1 seems to be transactional.
 
20554
COMMIT;
 
20555
        
 
20556
# check transactions-7 success:         1
 
20557
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20558
COMMIT WORK;
 
20559
SET @@session.sql_mode = 'traditional';
 
20560
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20561
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20562
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20563
'', '', 'was inserted' FROM t0_template
 
20564
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20565
ERROR 22012: Division by 0
 
20566
COMMIT;
 
20567
        
 
20568
# check transactions-8 success:         1
 
20569
# INFO: Storage engine used for t1 seems to be able to revert
 
20570
#       changes made by the failing statement.
 
20571
SET @@session.sql_mode = '';
 
20572
SET AUTOCOMMIT= 1;
 
20573
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20574
COMMIT WORK;
 
20575
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20576
        
 
20577
# check special-1 success:      1
 
20578
UPDATE t1 SET f_charbig = '';
 
20579
        
 
20580
# check special-2 success:      1
 
20581
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20582
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20583
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20586
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20587
'just inserted' FROM t0_template
 
20588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20589
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20590
BEGIN
 
20591
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20592
f_charbig = 'updated by trigger'
 
20593
      WHERE f_int1 = new.f_int1;
 
20594
END|
 
20595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20596
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20598
        
 
20599
# check trigger-1 success:      1
 
20600
DROP TRIGGER trg_1;
 
20601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20602
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20603
f_charbig = 'just inserted'
 
20604
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20605
DELETE FROM t0_aux
 
20606
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20607
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20608
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20609
'just inserted' FROM t0_template
 
20610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20611
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20612
BEGIN
 
20613
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20614
f_charbig = 'updated by trigger'
 
20615
      WHERE f_int1 = new.f_int1;
 
20616
END|
 
20617
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20618
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20620
        
 
20621
# check trigger-2 success:      1
 
20622
DROP TRIGGER trg_1;
 
20623
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20624
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20625
f_charbig = 'just inserted'
 
20626
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20627
DELETE FROM t0_aux
 
20628
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20629
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20630
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20631
'just inserted' FROM t0_template
 
20632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20633
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20634
BEGIN
 
20635
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20636
f_charbig = 'updated by trigger'
 
20637
      WHERE f_int1 = new.f_int1;
 
20638
END|
 
20639
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20640
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20641
        
 
20642
# check trigger-3 success:      1
 
20643
DROP TRIGGER trg_1;
 
20644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20646
f_charbig = 'just inserted'
 
20647
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20648
DELETE FROM t0_aux
 
20649
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20652
'just inserted' FROM t0_template
 
20653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20654
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20655
BEGIN
 
20656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20657
f_charbig = 'updated by trigger'
 
20658
      WHERE f_int1 = - old.f_int1;
 
20659
END|
 
20660
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20661
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20662
        
 
20663
# check trigger-4 success:      1
 
20664
DROP TRIGGER trg_1;
 
20665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20667
f_charbig = 'just inserted'
 
20668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20669
DELETE FROM t0_aux
 
20670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20672
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20673
'just inserted' FROM t0_template
 
20674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20675
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20676
BEGIN
 
20677
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20678
f_charbig = 'updated by trigger'
 
20679
      WHERE f_int1 = new.f_int1;
 
20680
END|
 
20681
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20682
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20683
        
 
20684
# check trigger-5 success:      1
 
20685
DROP TRIGGER trg_1;
 
20686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20688
f_charbig = 'just inserted'
 
20689
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20690
DELETE FROM t0_aux
 
20691
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20692
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20693
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20694
'just inserted' FROM t0_template
 
20695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20696
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20697
BEGIN
 
20698
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20699
f_charbig = 'updated by trigger'
 
20700
      WHERE f_int1 = - old.f_int1;
 
20701
END|
 
20702
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20703
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20704
        
 
20705
# check trigger-6 success:      1
 
20706
DROP TRIGGER trg_1;
 
20707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20709
f_charbig = 'just inserted'
 
20710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20711
DELETE FROM t0_aux
 
20712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20715
'just inserted' FROM t0_template
 
20716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20717
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20718
BEGIN
 
20719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20720
f_charbig = 'updated by trigger'
 
20721
      WHERE f_int1 = - old.f_int1;
 
20722
END|
 
20723
DELETE FROM t0_aux
 
20724
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20725
        
 
20726
# check trigger-7 success:      1
 
20727
DROP TRIGGER trg_1;
 
20728
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20729
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20730
f_charbig = 'just inserted'
 
20731
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20732
DELETE FROM t0_aux
 
20733
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20736
'just inserted' FROM t0_template
 
20737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20738
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20739
BEGIN
 
20740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20741
f_charbig = 'updated by trigger'
 
20742
      WHERE f_int1 = - old.f_int1;
 
20743
END|
 
20744
DELETE FROM t0_aux
 
20745
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20746
        
 
20747
# check trigger-8 success:      1
 
20748
DROP TRIGGER trg_1;
 
20749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20751
f_charbig = 'just inserted'
 
20752
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20753
DELETE FROM t0_aux
 
20754
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20755
DELETE FROM t1
 
20756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20757
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20758
BEGIN
 
20759
SET new.f_int1 = old.f_int1 + @max_row,
 
20760
new.f_int2 = old.f_int2 - @max_row,
 
20761
new.f_charbig = '####updated per update trigger####';
 
20762
END|
 
20763
UPDATE t1
 
20764
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20765
f_charbig = '####updated per update statement itself####';
 
20766
        
 
20767
# check trigger-9 success:      1
 
20768
DROP TRIGGER trg_2;
 
20769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20771
f_charbig = CONCAT('===',f_char1,'===');
 
20772
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20773
BEGIN
 
20774
SET new.f_int1 = new.f_int1 + @max_row,
 
20775
new.f_int2 = new.f_int2 - @max_row,
 
20776
new.f_charbig = '####updated per update trigger####';
 
20777
END|
 
20778
UPDATE t1
 
20779
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20780
f_charbig = '####updated per update statement itself####';
 
20781
        
 
20782
# check trigger-10 success:     1
 
20783
DROP TRIGGER trg_2;
 
20784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20786
f_charbig = CONCAT('===',f_char1,'===');
 
20787
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20788
BEGIN
 
20789
SET new.f_int1 = @my_max1 + @counter,
 
20790
new.f_int2 = @my_min2 - @counter,
 
20791
new.f_charbig = '####updated per insert trigger####';
 
20792
SET @counter = @counter + 1;
 
20793
END|
 
20794
SET @counter = 1;
 
20795
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20796
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20797
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20798
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20799
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20800
ORDER BY f_int1;
 
20801
DROP TRIGGER trg_3;
 
20802
        
 
20803
# check trigger-11 success:     1
 
20804
DELETE FROM t1
 
20805
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20806
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20807
AND f_charbig = '####updated per insert trigger####';
 
20808
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20809
BEGIN
 
20810
SET new.f_int1 = @my_max1 + @counter,
 
20811
new.f_int2 = @my_min2 - @counter,
 
20812
new.f_charbig = '####updated per insert trigger####';
 
20813
SET @counter = @counter + 1;
 
20814
END|
 
20815
SET @counter = 1;
 
20816
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20817
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20818
SELECT CAST(f_int1 AS CHAR),
 
20819
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20820
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20821
ORDER BY f_int1;
 
20822
DROP TRIGGER trg_3;
 
20823
        
 
20824
# check trigger-12 success:     1
 
20825
DELETE FROM t1
 
20826
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20827
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20828
AND f_charbig = '####updated per insert trigger####';
 
20829
ANALYZE  TABLE t1;
 
20830
Table   Op      Msg_type        Msg_text
 
20831
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
20832
CHECK    TABLE t1 EXTENDED;
 
20833
Table   Op      Msg_type        Msg_text
 
20834
test.t1 check   note    The storage engine for the table doesn't support check
 
20835
CHECKSUM TABLE t1 EXTENDED;
 
20836
Table   Checksum
 
20837
test.t1 <some_value>
 
20838
OPTIMIZE TABLE t1;
 
20839
Table   Op      Msg_type        Msg_text
 
20840
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
20841
# check layout success:    1
 
20842
REPAIR   TABLE t1 EXTENDED;
 
20843
Table   Op      Msg_type        Msg_text
 
20844
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20845
# check layout success:    1
 
20846
TRUNCATE t1;
 
20847
        
 
20848
# check TRUNCATE success:       1
 
20849
# check layout success:    1
 
20850
# End usability test (inc/partition_check.inc)
 
20851
DROP TABLE t1;
 
20852
CREATE TABLE t1 (
 
20853
f_int1 INTEGER,
 
20854
f_int2 INTEGER,
 
20855
f_char1 CHAR(20),
 
20856
f_char2 CHAR(20),
 
20857
f_charbig VARCHAR(1000)
 
20858
 
 
20859
)
 
20860
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
20861
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20862
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20863
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20864
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
20865
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20866
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20867
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20868
# Start usability test (inc/partition_check.inc)
 
20869
create_command
 
20870
SHOW CREATE TABLE t1;
 
20871
Table   Create Table
 
20872
t1      CREATE TABLE `t1` (
 
20873
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
20874
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
20875
  `f_char1` char(20) DEFAULT NULL,
 
20876
  `f_char2` char(20) DEFAULT NULL,
 
20877
  `f_charbig` varchar(1000) DEFAULT NULL,
 
20878
  PRIMARY KEY (`f_int2`,`f_int1`)
 
20879
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
20880
 
 
20881
# check prerequisites-1 success:    1
 
20882
# check COUNT(*) success:    1
 
20883
# check MIN/MAX(f_int1) success:    1
 
20884
# check MIN/MAX(f_int2) success:    1
 
20885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20886
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20887
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20888
WHERE f_int1 IN (2,3);
 
20889
ERROR 23000: Can't write; duplicate key in table 't1'
 
20890
# check prerequisites-3 success:    1
 
20891
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
20892
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20893
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20894
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20895
WHERE f_int1 IN (2,3);
 
20896
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20897
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20898
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20899
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20900
WHERE f_int1 IN (2,3);
 
20901
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20902
# check read via f_int1 success: 1
 
20903
# check read via f_int2 success: 1
 
20904
        
 
20905
# check multiple-1 success:     1
 
20906
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20907
        
 
20908
# check multiple-2 success:     1
 
20909
INSERT INTO t1 SELECT * FROM t0_template
 
20910
WHERE MOD(f_int1,3) = 0;
 
20911
        
 
20912
# check multiple-3 success:     1
 
20913
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20914
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20915
AND @max_row_div2 + @max_row_div4;
 
20916
        
 
20917
# check multiple-4 success:     1
 
20918
DELETE FROM t1
 
20919
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20920
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20921
        
 
20922
# check multiple-5 success:     1
 
20923
SELECT COUNT(*) INTO @try_count FROM t0_template
 
20924
WHERE MOD(f_int1,3) = 0
 
20925
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20926
SELECT COUNT(*) INTO @clash_count
 
20927
FROM t1 INNER JOIN t0_template USING(f_int1)
 
20928
WHERE MOD(f_int1,3) = 0
 
20929
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20930
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20931
INSERT INTO t1
 
20932
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20933
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20934
f_charbig = '#SINGLE#';
 
20935
        
 
20936
# check single-1 success:       1
 
20937
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20938
INSERT INTO t1
 
20939
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20940
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20941
f_charbig = '#SINGLE#';
 
20942
        
 
20943
# check single-2 success:       1
 
20944
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20945
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20946
UPDATE t1 SET f_int1 = @cur_value2
 
20947
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20948
        
 
20949
# check single-3 success:       1
 
20950
SET @cur_value1= -1;
 
20951
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20952
UPDATE t1 SET f_int1 = @cur_value1
 
20953
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20954
        
 
20955
# check single-4 success:       1
 
20956
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20957
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20958
        
 
20959
# check single-5 success:       1
 
20960
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20961
        
 
20962
# check single-6 success:       1
 
20963
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20964
        
 
20965
# check single-7 success:       1
 
20966
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20967
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20968
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20969
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20970
f_charbig = '#NULL#';
 
20971
INSERT INTO t1
 
20972
SET f_int1 = NULL , f_int2 = -@max_row,
 
20973
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20974
f_charbig = '#NULL#';
 
20975
ERROR 23000: Column 'f_int1' cannot be null
 
20976
# check null success:    1
 
20977
DELETE FROM t1
 
20978
WHERE f_int1 = 0 AND f_int2 = 0
 
20979
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20980
AND f_charbig = '#NULL#';
 
20981
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20982
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20983
   FROM t0_template source_tab
 
20984
WHERE MOD(f_int1,3) = 0
 
20985
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
20986
ON DUPLICATE KEY
 
20987
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
20988
f_int2 = 2 * @max_row + source_tab.f_int1,
 
20989
f_charbig = 'was updated';
 
20990
        
 
20991
# check unique-1-a success:     1
 
20992
        
 
20993
# check unique-1-b success:     1
 
20994
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20995
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20996
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20997
f_charbig = CONCAT('===',f_char1,'===')
 
20998
WHERE f_charbig = 'was updated';
 
20999
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21000
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
21001
   FROM t0_template source_tab
 
21002
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21003
        
 
21004
# check replace success:        1
 
21005
DELETE FROM t1
 
21006
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
21007
DELETE FROM t1
 
21008
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
21009
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
21010
UPDATE t1 SET f_int2 = f_int1,
 
21011
f_char1 = CAST(f_int1 AS CHAR),
 
21012
f_char2 = CAST(f_int1 AS CHAR),
 
21013
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
21014
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
21015
SET AUTOCOMMIT= 0;
 
21016
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21017
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21018
FROM t0_template source_tab
 
21019
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21020
        
 
21021
# check transactions-1 success:         1
 
21022
COMMIT WORK;
 
21023
        
 
21024
# check transactions-2 success:         1
 
21025
ROLLBACK WORK;
 
21026
        
 
21027
# check transactions-3 success:         1
 
21028
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21029
COMMIT WORK;
 
21030
ROLLBACK WORK;
 
21031
        
 
21032
# check transactions-4 success:         1
 
21033
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21034
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21035
FROM t0_template source_tab
 
21036
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21037
        
 
21038
# check transactions-5 success:         1
 
21039
ROLLBACK WORK;
 
21040
        
 
21041
# check transactions-6 success:         1
 
21042
# INFO: Storage engine used for t1 seems to be transactional.
 
21043
COMMIT;
 
21044
        
 
21045
# check transactions-7 success:         1
 
21046
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21047
COMMIT WORK;
 
21048
SET @@session.sql_mode = 'traditional';
 
21049
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21050
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21051
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21052
'', '', 'was inserted' FROM t0_template
 
21053
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21054
ERROR 22012: Division by 0
 
21055
COMMIT;
 
21056
        
 
21057
# check transactions-8 success:         1
 
21058
# INFO: Storage engine used for t1 seems to be able to revert
 
21059
#       changes made by the failing statement.
 
21060
SET @@session.sql_mode = '';
 
21061
SET AUTOCOMMIT= 1;
 
21062
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21063
COMMIT WORK;
 
21064
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21065
        
 
21066
# check special-1 success:      1
 
21067
UPDATE t1 SET f_charbig = '';
 
21068
        
 
21069
# check special-2 success:      1
 
21070
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21071
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21072
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21074
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21075
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21076
'just inserted' FROM t0_template
 
21077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21078
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21079
BEGIN
 
21080
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21081
f_charbig = 'updated by trigger'
 
21082
      WHERE f_int1 = new.f_int1;
 
21083
END|
 
21084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21085
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21087
        
 
21088
# check trigger-1 success:      1
 
21089
DROP TRIGGER trg_1;
 
21090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21092
f_charbig = 'just inserted'
 
21093
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21094
DELETE FROM t0_aux
 
21095
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21096
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21097
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21098
'just inserted' FROM t0_template
 
21099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21100
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21101
BEGIN
 
21102
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21103
f_charbig = 'updated by trigger'
 
21104
      WHERE f_int1 = new.f_int1;
 
21105
END|
 
21106
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21107
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21109
        
 
21110
# check trigger-2 success:      1
 
21111
DROP TRIGGER trg_1;
 
21112
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21113
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21114
f_charbig = 'just inserted'
 
21115
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21116
DELETE FROM t0_aux
 
21117
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21118
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21119
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21120
'just inserted' FROM t0_template
 
21121
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21122
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21123
BEGIN
 
21124
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21125
f_charbig = 'updated by trigger'
 
21126
      WHERE f_int1 = new.f_int1;
 
21127
END|
 
21128
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21129
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21130
        
 
21131
# check trigger-3 success:      1
 
21132
DROP TRIGGER trg_1;
 
21133
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21134
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21135
f_charbig = 'just inserted'
 
21136
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21137
DELETE FROM t0_aux
 
21138
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21139
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21140
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21141
'just inserted' FROM t0_template
 
21142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21143
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21144
BEGIN
 
21145
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21146
f_charbig = 'updated by trigger'
 
21147
      WHERE f_int1 = - old.f_int1;
 
21148
END|
 
21149
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21150
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21151
        
 
21152
# check trigger-4 success:      1
 
21153
DROP TRIGGER trg_1;
 
21154
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21155
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21156
f_charbig = 'just inserted'
 
21157
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21158
DELETE FROM t0_aux
 
21159
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21160
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21161
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21162
'just inserted' FROM t0_template
 
21163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21164
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21165
BEGIN
 
21166
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21167
f_charbig = 'updated by trigger'
 
21168
      WHERE f_int1 = new.f_int1;
 
21169
END|
 
21170
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21171
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21172
        
 
21173
# check trigger-5 success:      1
 
21174
DROP TRIGGER trg_1;
 
21175
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21176
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21177
f_charbig = 'just inserted'
 
21178
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21179
DELETE FROM t0_aux
 
21180
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21182
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21183
'just inserted' FROM t0_template
 
21184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21185
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21186
BEGIN
 
21187
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21188
f_charbig = 'updated by trigger'
 
21189
      WHERE f_int1 = - old.f_int1;
 
21190
END|
 
21191
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21192
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21193
        
 
21194
# check trigger-6 success:      1
 
21195
DROP TRIGGER trg_1;
 
21196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21198
f_charbig = 'just inserted'
 
21199
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21200
DELETE FROM t0_aux
 
21201
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21203
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21204
'just inserted' FROM t0_template
 
21205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21206
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21207
BEGIN
 
21208
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21209
f_charbig = 'updated by trigger'
 
21210
      WHERE f_int1 = - old.f_int1;
 
21211
END|
 
21212
DELETE FROM t0_aux
 
21213
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21214
        
 
21215
# check trigger-7 success:      1
 
21216
DROP TRIGGER trg_1;
 
21217
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21218
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21219
f_charbig = 'just inserted'
 
21220
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21221
DELETE FROM t0_aux
 
21222
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21224
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21225
'just inserted' FROM t0_template
 
21226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21227
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21228
BEGIN
 
21229
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21230
f_charbig = 'updated by trigger'
 
21231
      WHERE f_int1 = - old.f_int1;
 
21232
END|
 
21233
DELETE FROM t0_aux
 
21234
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21235
        
 
21236
# check trigger-8 success:      1
 
21237
DROP TRIGGER trg_1;
 
21238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21240
f_charbig = 'just inserted'
 
21241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21242
DELETE FROM t0_aux
 
21243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21244
DELETE FROM t1
 
21245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21246
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21247
BEGIN
 
21248
SET new.f_int1 = old.f_int1 + @max_row,
 
21249
new.f_int2 = old.f_int2 - @max_row,
 
21250
new.f_charbig = '####updated per update trigger####';
 
21251
END|
 
21252
UPDATE t1
 
21253
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21254
f_charbig = '####updated per update statement itself####';
 
21255
        
 
21256
# check trigger-9 success:      1
 
21257
DROP TRIGGER trg_2;
 
21258
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21259
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21260
f_charbig = CONCAT('===',f_char1,'===');
 
21261
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21262
BEGIN
 
21263
SET new.f_int1 = new.f_int1 + @max_row,
 
21264
new.f_int2 = new.f_int2 - @max_row,
 
21265
new.f_charbig = '####updated per update trigger####';
 
21266
END|
 
21267
UPDATE t1
 
21268
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21269
f_charbig = '####updated per update statement itself####';
 
21270
        
 
21271
# check trigger-10 success:     1
 
21272
DROP TRIGGER trg_2;
 
21273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21275
f_charbig = CONCAT('===',f_char1,'===');
 
21276
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21277
BEGIN
 
21278
SET new.f_int1 = @my_max1 + @counter,
 
21279
new.f_int2 = @my_min2 - @counter,
 
21280
new.f_charbig = '####updated per insert trigger####';
 
21281
SET @counter = @counter + 1;
 
21282
END|
 
21283
SET @counter = 1;
 
21284
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21285
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21286
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21287
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21288
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21289
ORDER BY f_int1;
 
21290
DROP TRIGGER trg_3;
 
21291
        
 
21292
# check trigger-11 success:     1
 
21293
DELETE FROM t1
 
21294
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21295
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21296
AND f_charbig = '####updated per insert trigger####';
 
21297
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21298
BEGIN
 
21299
SET new.f_int1 = @my_max1 + @counter,
 
21300
new.f_int2 = @my_min2 - @counter,
 
21301
new.f_charbig = '####updated per insert trigger####';
 
21302
SET @counter = @counter + 1;
 
21303
END|
 
21304
SET @counter = 1;
 
21305
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21306
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21307
SELECT CAST(f_int1 AS CHAR),
 
21308
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21310
ORDER BY f_int1;
 
21311
DROP TRIGGER trg_3;
 
21312
        
 
21313
# check trigger-12 success:     1
 
21314
DELETE FROM t1
 
21315
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21316
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21317
AND f_charbig = '####updated per insert trigger####';
 
21318
ANALYZE  TABLE t1;
 
21319
Table   Op      Msg_type        Msg_text
 
21320
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
21321
CHECK    TABLE t1 EXTENDED;
 
21322
Table   Op      Msg_type        Msg_text
 
21323
test.t1 check   note    The storage engine for the table doesn't support check
 
21324
CHECKSUM TABLE t1 EXTENDED;
 
21325
Table   Checksum
 
21326
test.t1 <some_value>
 
21327
OPTIMIZE TABLE t1;
 
21328
Table   Op      Msg_type        Msg_text
 
21329
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
21330
# check layout success:    1
 
21331
REPAIR   TABLE t1 EXTENDED;
 
21332
Table   Op      Msg_type        Msg_text
 
21333
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21334
# check layout success:    1
 
21335
TRUNCATE t1;
 
21336
        
 
21337
# check TRUNCATE success:       1
 
21338
# check layout success:    1
 
21339
# End usability test (inc/partition_check.inc)
 
21340
DROP TABLE t1;
 
21341
CREATE TABLE t1 (
 
21342
f_int1 INTEGER,
 
21343
f_int2 INTEGER,
 
21344
f_char1 CHAR(20),
 
21345
f_char2 CHAR(20),
 
21346
f_charbig VARCHAR(1000)
 
21347
 
 
21348
)
 
21349
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
21350
(PARTITION part_3 VALUES IN (-3),
 
21351
PARTITION part_2 VALUES IN (-2),
 
21352
PARTITION part_1 VALUES IN (-1),
 
21353
PARTITION part_N VALUES IN (NULL),
 
21354
PARTITION part0 VALUES IN (0),
 
21355
PARTITION part1 VALUES IN (1),
 
21356
PARTITION part2 VALUES IN (2),
 
21357
PARTITION part3 VALUES IN (3));
 
21358
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21359
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21360
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21361
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
21362
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21363
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21364
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21365
# Start usability test (inc/partition_check.inc)
 
21366
create_command
 
21367
SHOW CREATE TABLE t1;
 
21368
Table   Create Table
 
21369
t1      CREATE TABLE `t1` (
 
21370
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
21371
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
21372
  `f_char1` char(20) DEFAULT NULL,
 
21373
  `f_char2` char(20) DEFAULT NULL,
 
21374
  `f_charbig` varchar(1000) DEFAULT NULL,
 
21375
  PRIMARY KEY (`f_int2`,`f_int1`)
 
21376
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
21377
 
 
21378
# check prerequisites-1 success:    1
 
21379
# check COUNT(*) success:    1
 
21380
# check MIN/MAX(f_int1) success:    1
 
21381
# check MIN/MAX(f_int2) success:    1
 
21382
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21383
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21384
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21385
WHERE f_int1 IN (2,3);
 
21386
ERROR 23000: Can't write; duplicate key in table 't1'
 
21387
# check prerequisites-3 success:    1
 
21388
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
21389
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21390
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21391
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21392
WHERE f_int1 IN (2,3);
 
21393
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21394
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21395
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21396
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21397
WHERE f_int1 IN (2,3);
 
21398
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21399
# check read via f_int1 success: 1
 
21400
# check read via f_int2 success: 1
 
21401
        
 
21402
# check multiple-1 success:     1
 
21403
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21404
        
 
21405
# check multiple-2 success:     1
 
21406
INSERT INTO t1 SELECT * FROM t0_template
 
21407
WHERE MOD(f_int1,3) = 0;
 
21408
        
 
21409
# check multiple-3 success:     1
 
21410
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21411
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21412
AND @max_row_div2 + @max_row_div4;
 
21413
        
 
21414
# check multiple-4 success:     1
 
21415
DELETE FROM t1
 
21416
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21417
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21418
        
 
21419
# check multiple-5 success:     1
 
21420
SELECT COUNT(*) INTO @try_count FROM t0_template
 
21421
WHERE MOD(f_int1,3) = 0
 
21422
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21423
SELECT COUNT(*) INTO @clash_count
 
21424
FROM t1 INNER JOIN t0_template USING(f_int1)
 
21425
WHERE MOD(f_int1,3) = 0
 
21426
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21427
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21428
INSERT INTO t1
 
21429
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21430
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21431
f_charbig = '#SINGLE#';
 
21432
        
 
21433
# check single-1 success:       1
 
21434
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21435
INSERT INTO t1
 
21436
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21437
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21438
f_charbig = '#SINGLE#';
 
21439
        
 
21440
# check single-2 success:       1
 
21441
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21442
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21443
UPDATE t1 SET f_int1 = @cur_value2
 
21444
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21445
        
 
21446
# check single-3 success:       1
 
21447
SET @cur_value1= -1;
 
21448
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21449
UPDATE t1 SET f_int1 = @cur_value1
 
21450
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21451
        
 
21452
# check single-4 success:       1
 
21453
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21454
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21455
        
 
21456
# check single-5 success:       1
 
21457
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21458
        
 
21459
# check single-6 success:       1
 
21460
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21461
        
 
21462
# check single-7 success:       1
 
21463
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
21464
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21465
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21466
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21467
f_charbig = '#NULL#';
 
21468
INSERT INTO t1
 
21469
SET f_int1 = NULL , f_int2 = -@max_row,
 
21470
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21471
f_charbig = '#NULL#';
 
21472
ERROR 23000: Column 'f_int1' cannot be null
 
21473
# check null success:    1
 
21474
DELETE FROM t1
 
21475
WHERE f_int1 = 0 AND f_int2 = 0
 
21476
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21477
AND f_charbig = '#NULL#';
 
21478
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21479
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21480
   FROM t0_template source_tab
 
21481
WHERE MOD(f_int1,3) = 0
 
21482
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
21483
ON DUPLICATE KEY
 
21484
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
21485
f_int2 = 2 * @max_row + source_tab.f_int1,
 
21486
f_charbig = 'was updated';
 
21487
        
 
21488
# check unique-1-a success:     1
 
21489
        
 
21490
# check unique-1-b success:     1
 
21491
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21494
f_charbig = CONCAT('===',f_char1,'===')
 
21495
WHERE f_charbig = 'was updated';
 
21496
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21497
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
21498
   FROM t0_template source_tab
 
21499
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21500
        
 
21501
# check replace success:        1
 
21502
DELETE FROM t1
 
21503
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
21504
DELETE FROM t1
 
21505
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
21506
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
21507
UPDATE t1 SET f_int2 = f_int1,
 
21508
f_char1 = CAST(f_int1 AS CHAR),
 
21509
f_char2 = CAST(f_int1 AS CHAR),
 
21510
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
21511
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
21512
SET AUTOCOMMIT= 0;
 
21513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21514
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21515
FROM t0_template source_tab
 
21516
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21517
        
 
21518
# check transactions-1 success:         1
 
21519
COMMIT WORK;
 
21520
        
 
21521
# check transactions-2 success:         1
 
21522
ROLLBACK WORK;
 
21523
        
 
21524
# check transactions-3 success:         1
 
21525
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21526
COMMIT WORK;
 
21527
ROLLBACK WORK;
 
21528
        
 
21529
# check transactions-4 success:         1
 
21530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21531
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21532
FROM t0_template source_tab
 
21533
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21534
        
 
21535
# check transactions-5 success:         1
 
21536
ROLLBACK WORK;
 
21537
        
 
21538
# check transactions-6 success:         1
 
21539
# INFO: Storage engine used for t1 seems to be transactional.
 
21540
COMMIT;
 
21541
        
 
21542
# check transactions-7 success:         1
 
21543
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21544
COMMIT WORK;
 
21545
SET @@session.sql_mode = 'traditional';
 
21546
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21548
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21549
'', '', 'was inserted' FROM t0_template
 
21550
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21551
ERROR 22012: Division by 0
 
21552
COMMIT;
 
21553
        
 
21554
# check transactions-8 success:         1
 
21555
# INFO: Storage engine used for t1 seems to be able to revert
 
21556
#       changes made by the failing statement.
 
21557
SET @@session.sql_mode = '';
 
21558
SET AUTOCOMMIT= 1;
 
21559
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21560
COMMIT WORK;
 
21561
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21562
        
 
21563
# check special-1 success:      1
 
21564
UPDATE t1 SET f_charbig = '';
 
21565
        
 
21566
# check special-2 success:      1
 
21567
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21568
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21569
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21573
'just inserted' FROM t0_template
 
21574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21575
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21576
BEGIN
 
21577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21578
f_charbig = 'updated by trigger'
 
21579
      WHERE f_int1 = new.f_int1;
 
21580
END|
 
21581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21582
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21584
        
 
21585
# check trigger-1 success:      1
 
21586
DROP TRIGGER trg_1;
 
21587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21589
f_charbig = 'just inserted'
 
21590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21591
DELETE FROM t0_aux
 
21592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21595
'just inserted' FROM t0_template
 
21596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21597
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21598
BEGIN
 
21599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21600
f_charbig = 'updated by trigger'
 
21601
      WHERE f_int1 = new.f_int1;
 
21602
END|
 
21603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21604
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21606
        
 
21607
# check trigger-2 success:      1
 
21608
DROP TRIGGER trg_1;
 
21609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21611
f_charbig = 'just inserted'
 
21612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21613
DELETE FROM t0_aux
 
21614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21616
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21617
'just inserted' FROM t0_template
 
21618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21619
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21620
BEGIN
 
21621
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21622
f_charbig = 'updated by trigger'
 
21623
      WHERE f_int1 = new.f_int1;
 
21624
END|
 
21625
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21626
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21627
        
 
21628
# check trigger-3 success:      1
 
21629
DROP TRIGGER trg_1;
 
21630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21632
f_charbig = 'just inserted'
 
21633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21634
DELETE FROM t0_aux
 
21635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21638
'just inserted' FROM t0_template
 
21639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21640
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21641
BEGIN
 
21642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21643
f_charbig = 'updated by trigger'
 
21644
      WHERE f_int1 = - old.f_int1;
 
21645
END|
 
21646
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21648
        
 
21649
# check trigger-4 success:      1
 
21650
DROP TRIGGER trg_1;
 
21651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21653
f_charbig = 'just inserted'
 
21654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21655
DELETE FROM t0_aux
 
21656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21659
'just inserted' FROM t0_template
 
21660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21661
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21662
BEGIN
 
21663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21664
f_charbig = 'updated by trigger'
 
21665
      WHERE f_int1 = new.f_int1;
 
21666
END|
 
21667
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21668
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21669
        
 
21670
# check trigger-5 success:      1
 
21671
DROP TRIGGER trg_1;
 
21672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21674
f_charbig = 'just inserted'
 
21675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21676
DELETE FROM t0_aux
 
21677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21680
'just inserted' FROM t0_template
 
21681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21682
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21683
BEGIN
 
21684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21685
f_charbig = 'updated by trigger'
 
21686
      WHERE f_int1 = - old.f_int1;
 
21687
END|
 
21688
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21689
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21690
        
 
21691
# check trigger-6 success:      1
 
21692
DROP TRIGGER trg_1;
 
21693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21695
f_charbig = 'just inserted'
 
21696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21697
DELETE FROM t0_aux
 
21698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21701
'just inserted' FROM t0_template
 
21702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21703
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21704
BEGIN
 
21705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21706
f_charbig = 'updated by trigger'
 
21707
      WHERE f_int1 = - old.f_int1;
 
21708
END|
 
21709
DELETE FROM t0_aux
 
21710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21711
        
 
21712
# check trigger-7 success:      1
 
21713
DROP TRIGGER trg_1;
 
21714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21716
f_charbig = 'just inserted'
 
21717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21718
DELETE FROM t0_aux
 
21719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21722
'just inserted' FROM t0_template
 
21723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21724
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21725
BEGIN
 
21726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21727
f_charbig = 'updated by trigger'
 
21728
      WHERE f_int1 = - old.f_int1;
 
21729
END|
 
21730
DELETE FROM t0_aux
 
21731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21732
        
 
21733
# check trigger-8 success:      1
 
21734
DROP TRIGGER trg_1;
 
21735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21737
f_charbig = 'just inserted'
 
21738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21739
DELETE FROM t0_aux
 
21740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21741
DELETE FROM t1
 
21742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21743
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21744
BEGIN
 
21745
SET new.f_int1 = old.f_int1 + @max_row,
 
21746
new.f_int2 = old.f_int2 - @max_row,
 
21747
new.f_charbig = '####updated per update trigger####';
 
21748
END|
 
21749
UPDATE t1
 
21750
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21751
f_charbig = '####updated per update statement itself####';
 
21752
        
 
21753
# check trigger-9 success:      1
 
21754
DROP TRIGGER trg_2;
 
21755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21757
f_charbig = CONCAT('===',f_char1,'===');
 
21758
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21759
BEGIN
 
21760
SET new.f_int1 = new.f_int1 + @max_row,
 
21761
new.f_int2 = new.f_int2 - @max_row,
 
21762
new.f_charbig = '####updated per update trigger####';
 
21763
END|
 
21764
UPDATE t1
 
21765
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21766
f_charbig = '####updated per update statement itself####';
 
21767
        
 
21768
# check trigger-10 success:     1
 
21769
DROP TRIGGER trg_2;
 
21770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21772
f_charbig = CONCAT('===',f_char1,'===');
 
21773
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21774
BEGIN
 
21775
SET new.f_int1 = @my_max1 + @counter,
 
21776
new.f_int2 = @my_min2 - @counter,
 
21777
new.f_charbig = '####updated per insert trigger####';
 
21778
SET @counter = @counter + 1;
 
21779
END|
 
21780
SET @counter = 1;
 
21781
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21782
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21783
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21784
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21786
ORDER BY f_int1;
 
21787
DROP TRIGGER trg_3;
 
21788
        
 
21789
# check trigger-11 success:     1
 
21790
DELETE FROM t1
 
21791
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21792
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21793
AND f_charbig = '####updated per insert trigger####';
 
21794
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21795
BEGIN
 
21796
SET new.f_int1 = @my_max1 + @counter,
 
21797
new.f_int2 = @my_min2 - @counter,
 
21798
new.f_charbig = '####updated per insert trigger####';
 
21799
SET @counter = @counter + 1;
 
21800
END|
 
21801
SET @counter = 1;
 
21802
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21803
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21804
SELECT CAST(f_int1 AS CHAR),
 
21805
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21807
ORDER BY f_int1;
 
21808
DROP TRIGGER trg_3;
 
21809
        
 
21810
# check trigger-12 success:     1
 
21811
DELETE FROM t1
 
21812
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21813
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21814
AND f_charbig = '####updated per insert trigger####';
 
21815
ANALYZE  TABLE t1;
 
21816
Table   Op      Msg_type        Msg_text
 
21817
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
21818
CHECK    TABLE t1 EXTENDED;
 
21819
Table   Op      Msg_type        Msg_text
 
21820
test.t1 check   note    The storage engine for the table doesn't support check
 
21821
CHECKSUM TABLE t1 EXTENDED;
 
21822
Table   Checksum
 
21823
test.t1 <some_value>
 
21824
OPTIMIZE TABLE t1;
 
21825
Table   Op      Msg_type        Msg_text
 
21826
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
21827
# check layout success:    1
 
21828
REPAIR   TABLE t1 EXTENDED;
 
21829
Table   Op      Msg_type        Msg_text
 
21830
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21831
# check layout success:    1
 
21832
TRUNCATE t1;
 
21833
        
 
21834
# check TRUNCATE success:       1
 
21835
# check layout success:    1
 
21836
# End usability test (inc/partition_check.inc)
 
21837
DROP TABLE t1;
 
21838
CREATE TABLE t1 (
 
21839
f_int1 INTEGER,
 
21840
f_int2 INTEGER,
 
21841
f_char1 CHAR(20),
 
21842
f_char2 CHAR(20),
 
21843
f_charbig VARCHAR(1000)
 
21844
 
 
21845
)
 
21846
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
21847
(PARTITION parta VALUES LESS THAN (0),
 
21848
PARTITION partb VALUES LESS THAN (5),
 
21849
PARTITION partc VALUES LESS THAN (10),
 
21850
PARTITION partd VALUES LESS THAN (10 + 5),
 
21851
PARTITION parte VALUES LESS THAN (20),
 
21852
PARTITION partf VALUES LESS THAN (2147483646));
 
21853
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21854
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21855
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21856
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
21857
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21858
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21859
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21860
# Start usability test (inc/partition_check.inc)
 
21861
create_command
 
21862
SHOW CREATE TABLE t1;
 
21863
Table   Create Table
 
21864
t1      CREATE TABLE `t1` (
 
21865
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
21866
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
21867
  `f_char1` char(20) DEFAULT NULL,
 
21868
  `f_char2` char(20) DEFAULT NULL,
 
21869
  `f_charbig` varchar(1000) DEFAULT NULL,
 
21870
  PRIMARY KEY (`f_int2`,`f_int1`)
 
21871
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
21872
 
 
21873
# check prerequisites-1 success:    1
 
21874
# check COUNT(*) success:    1
 
21875
# check MIN/MAX(f_int1) success:    1
 
21876
# check MIN/MAX(f_int2) success:    1
 
21877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21878
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21879
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21880
WHERE f_int1 IN (2,3);
 
21881
ERROR 23000: Can't write; duplicate key in table 't1'
 
21882
# check prerequisites-3 success:    1
 
21883
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
21884
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21885
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21886
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21887
WHERE f_int1 IN (2,3);
 
21888
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21890
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21891
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21892
WHERE f_int1 IN (2,3);
 
21893
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21894
# check read via f_int1 success: 1
 
21895
# check read via f_int2 success: 1
 
21896
        
 
21897
# check multiple-1 success:     1
 
21898
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21899
        
 
21900
# check multiple-2 success:     1
 
21901
INSERT INTO t1 SELECT * FROM t0_template
 
21902
WHERE MOD(f_int1,3) = 0;
 
21903
        
 
21904
# check multiple-3 success:     1
 
21905
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21906
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21907
AND @max_row_div2 + @max_row_div4;
 
21908
        
 
21909
# check multiple-4 success:     1
 
21910
DELETE FROM t1
 
21911
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21912
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21913
        
 
21914
# check multiple-5 success:     1
 
21915
SELECT COUNT(*) INTO @try_count FROM t0_template
 
21916
WHERE MOD(f_int1,3) = 0
 
21917
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21918
SELECT COUNT(*) INTO @clash_count
 
21919
FROM t1 INNER JOIN t0_template USING(f_int1)
 
21920
WHERE MOD(f_int1,3) = 0
 
21921
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21922
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21923
INSERT INTO t1
 
21924
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21925
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21926
f_charbig = '#SINGLE#';
 
21927
        
 
21928
# check single-1 success:       1
 
21929
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21930
INSERT INTO t1
 
21931
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21932
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21933
f_charbig = '#SINGLE#';
 
21934
        
 
21935
# check single-2 success:       1
 
21936
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21937
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21938
UPDATE t1 SET f_int1 = @cur_value2
 
21939
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21940
        
 
21941
# check single-3 success:       1
 
21942
SET @cur_value1= -1;
 
21943
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21944
UPDATE t1 SET f_int1 = @cur_value1
 
21945
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21946
        
 
21947
# check single-4 success:       1
 
21948
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21949
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21950
        
 
21951
# check single-5 success:       1
 
21952
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21953
        
 
21954
# check single-6 success:       1
 
21955
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21956
ERROR HY000: Table has no partition for value 2147483647
 
21957
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21958
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21959
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21960
f_charbig = '#NULL#';
 
21961
INSERT INTO t1
 
21962
SET f_int1 = NULL , f_int2 = -@max_row,
 
21963
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21964
f_charbig = '#NULL#';
 
21965
ERROR 23000: Column 'f_int1' cannot be null
 
21966
# check null success:    1
 
21967
DELETE FROM t1
 
21968
WHERE f_int1 = 0 AND f_int2 = 0
 
21969
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21970
AND f_charbig = '#NULL#';
 
21971
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21972
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21973
   FROM t0_template source_tab
 
21974
WHERE MOD(f_int1,3) = 0
 
21975
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
21976
ON DUPLICATE KEY
 
21977
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
21978
f_int2 = 2 * @max_row + source_tab.f_int1,
 
21979
f_charbig = 'was updated';
 
21980
        
 
21981
# check unique-1-a success:     1
 
21982
        
 
21983
# check unique-1-b success:     1
 
21984
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21985
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21986
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21987
f_charbig = CONCAT('===',f_char1,'===')
 
21988
WHERE f_charbig = 'was updated';
 
21989
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21990
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
21991
   FROM t0_template source_tab
 
21992
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21993
        
 
21994
# check replace success:        1
 
21995
DELETE FROM t1
 
21996
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
21997
DELETE FROM t1
 
21998
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
21999
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
22000
UPDATE t1 SET f_int2 = f_int1,
 
22001
f_char1 = CAST(f_int1 AS CHAR),
 
22002
f_char2 = CAST(f_int1 AS CHAR),
 
22003
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
22004
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
22005
SET AUTOCOMMIT= 0;
 
22006
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22007
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22008
FROM t0_template source_tab
 
22009
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22010
        
 
22011
# check transactions-1 success:         1
 
22012
COMMIT WORK;
 
22013
        
 
22014
# check transactions-2 success:         1
 
22015
ROLLBACK WORK;
 
22016
        
 
22017
# check transactions-3 success:         1
 
22018
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22019
COMMIT WORK;
 
22020
ROLLBACK WORK;
 
22021
        
 
22022
# check transactions-4 success:         1
 
22023
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22024
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22025
FROM t0_template source_tab
 
22026
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22027
        
 
22028
# check transactions-5 success:         1
 
22029
ROLLBACK WORK;
 
22030
        
 
22031
# check transactions-6 success:         1
 
22032
# INFO: Storage engine used for t1 seems to be transactional.
 
22033
COMMIT;
 
22034
        
 
22035
# check transactions-7 success:         1
 
22036
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22037
COMMIT WORK;
 
22038
SET @@session.sql_mode = 'traditional';
 
22039
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22040
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22041
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22042
'', '', 'was inserted' FROM t0_template
 
22043
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22044
ERROR 22012: Division by 0
 
22045
COMMIT;
 
22046
        
 
22047
# check transactions-8 success:         1
 
22048
# INFO: Storage engine used for t1 seems to be able to revert
 
22049
#       changes made by the failing statement.
 
22050
SET @@session.sql_mode = '';
 
22051
SET AUTOCOMMIT= 1;
 
22052
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22053
COMMIT WORK;
 
22054
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22055
        
 
22056
# check special-1 success:      1
 
22057
UPDATE t1 SET f_charbig = '';
 
22058
        
 
22059
# check special-2 success:      1
 
22060
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22061
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22062
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22064
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22065
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22066
'just inserted' FROM t0_template
 
22067
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22068
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22069
BEGIN
 
22070
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22071
f_charbig = 'updated by trigger'
 
22072
      WHERE f_int1 = new.f_int1;
 
22073
END|
 
22074
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22075
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22077
        
 
22078
# check trigger-1 success:      1
 
22079
DROP TRIGGER trg_1;
 
22080
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22081
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22082
f_charbig = 'just inserted'
 
22083
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22084
DELETE FROM t0_aux
 
22085
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22086
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22087
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22088
'just inserted' FROM t0_template
 
22089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22090
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22091
BEGIN
 
22092
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22093
f_charbig = 'updated by trigger'
 
22094
      WHERE f_int1 = new.f_int1;
 
22095
END|
 
22096
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22097
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22098
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22099
        
 
22100
# check trigger-2 success:      1
 
22101
DROP TRIGGER trg_1;
 
22102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22104
f_charbig = 'just inserted'
 
22105
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22106
DELETE FROM t0_aux
 
22107
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22108
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22109
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22110
'just inserted' FROM t0_template
 
22111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22112
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22113
BEGIN
 
22114
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22115
f_charbig = 'updated by trigger'
 
22116
      WHERE f_int1 = new.f_int1;
 
22117
END|
 
22118
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22119
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22120
        
 
22121
# check trigger-3 success:      1
 
22122
DROP TRIGGER trg_1;
 
22123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22125
f_charbig = 'just inserted'
 
22126
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22127
DELETE FROM t0_aux
 
22128
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22131
'just inserted' FROM t0_template
 
22132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22133
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22134
BEGIN
 
22135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22136
f_charbig = 'updated by trigger'
 
22137
      WHERE f_int1 = - old.f_int1;
 
22138
END|
 
22139
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22140
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22141
        
 
22142
# check trigger-4 success:      1
 
22143
DROP TRIGGER trg_1;
 
22144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22146
f_charbig = 'just inserted'
 
22147
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22148
DELETE FROM t0_aux
 
22149
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22150
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22151
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22152
'just inserted' FROM t0_template
 
22153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22154
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22155
BEGIN
 
22156
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22157
f_charbig = 'updated by trigger'
 
22158
      WHERE f_int1 = new.f_int1;
 
22159
END|
 
22160
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22161
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22162
        
 
22163
# check trigger-5 success:      1
 
22164
DROP TRIGGER trg_1;
 
22165
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22166
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22167
f_charbig = 'just inserted'
 
22168
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22169
DELETE FROM t0_aux
 
22170
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22171
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22172
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22173
'just inserted' FROM t0_template
 
22174
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22175
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22176
BEGIN
 
22177
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22178
f_charbig = 'updated by trigger'
 
22179
      WHERE f_int1 = - old.f_int1;
 
22180
END|
 
22181
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22182
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22183
        
 
22184
# check trigger-6 success:      1
 
22185
DROP TRIGGER trg_1;
 
22186
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22187
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22188
f_charbig = 'just inserted'
 
22189
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22190
DELETE FROM t0_aux
 
22191
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22192
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22193
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22194
'just inserted' FROM t0_template
 
22195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22196
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22197
BEGIN
 
22198
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22199
f_charbig = 'updated by trigger'
 
22200
      WHERE f_int1 = - old.f_int1;
 
22201
END|
 
22202
DELETE FROM t0_aux
 
22203
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22204
        
 
22205
# check trigger-7 success:      1
 
22206
DROP TRIGGER trg_1;
 
22207
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22208
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22209
f_charbig = 'just inserted'
 
22210
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22211
DELETE FROM t0_aux
 
22212
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22213
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22214
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22215
'just inserted' FROM t0_template
 
22216
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22217
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22218
BEGIN
 
22219
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22220
f_charbig = 'updated by trigger'
 
22221
      WHERE f_int1 = - old.f_int1;
 
22222
END|
 
22223
DELETE FROM t0_aux
 
22224
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22225
        
 
22226
# check trigger-8 success:      1
 
22227
DROP TRIGGER trg_1;
 
22228
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22229
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22230
f_charbig = 'just inserted'
 
22231
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22232
DELETE FROM t0_aux
 
22233
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22234
DELETE FROM t1
 
22235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22236
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22237
BEGIN
 
22238
SET new.f_int1 = old.f_int1 + @max_row,
 
22239
new.f_int2 = old.f_int2 - @max_row,
 
22240
new.f_charbig = '####updated per update trigger####';
 
22241
END|
 
22242
UPDATE t1
 
22243
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22244
f_charbig = '####updated per update statement itself####';
 
22245
        
 
22246
# check trigger-9 success:      1
 
22247
DROP TRIGGER trg_2;
 
22248
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22249
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22250
f_charbig = CONCAT('===',f_char1,'===');
 
22251
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22252
BEGIN
 
22253
SET new.f_int1 = new.f_int1 + @max_row,
 
22254
new.f_int2 = new.f_int2 - @max_row,
 
22255
new.f_charbig = '####updated per update trigger####';
 
22256
END|
 
22257
UPDATE t1
 
22258
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22259
f_charbig = '####updated per update statement itself####';
 
22260
        
 
22261
# check trigger-10 success:     1
 
22262
DROP TRIGGER trg_2;
 
22263
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22264
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22265
f_charbig = CONCAT('===',f_char1,'===');
 
22266
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22267
BEGIN
 
22268
SET new.f_int1 = @my_max1 + @counter,
 
22269
new.f_int2 = @my_min2 - @counter,
 
22270
new.f_charbig = '####updated per insert trigger####';
 
22271
SET @counter = @counter + 1;
 
22272
END|
 
22273
SET @counter = 1;
 
22274
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22275
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22276
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22277
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22279
ORDER BY f_int1;
 
22280
DROP TRIGGER trg_3;
 
22281
        
 
22282
# check trigger-11 success:     1
 
22283
DELETE FROM t1
 
22284
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22285
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22286
AND f_charbig = '####updated per insert trigger####';
 
22287
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22288
BEGIN
 
22289
SET new.f_int1 = @my_max1 + @counter,
 
22290
new.f_int2 = @my_min2 - @counter,
 
22291
new.f_charbig = '####updated per insert trigger####';
 
22292
SET @counter = @counter + 1;
 
22293
END|
 
22294
SET @counter = 1;
 
22295
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22296
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22297
SELECT CAST(f_int1 AS CHAR),
 
22298
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22300
ORDER BY f_int1;
 
22301
DROP TRIGGER trg_3;
 
22302
        
 
22303
# check trigger-12 success:     1
 
22304
DELETE FROM t1
 
22305
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22306
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22307
AND f_charbig = '####updated per insert trigger####';
 
22308
ANALYZE  TABLE t1;
 
22309
Table   Op      Msg_type        Msg_text
 
22310
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
22311
CHECK    TABLE t1 EXTENDED;
 
22312
Table   Op      Msg_type        Msg_text
 
22313
test.t1 check   note    The storage engine for the table doesn't support check
 
22314
CHECKSUM TABLE t1 EXTENDED;
 
22315
Table   Checksum
 
22316
test.t1 <some_value>
 
22317
OPTIMIZE TABLE t1;
 
22318
Table   Op      Msg_type        Msg_text
 
22319
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
22320
# check layout success:    1
 
22321
REPAIR   TABLE t1 EXTENDED;
 
22322
Table   Op      Msg_type        Msg_text
 
22323
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22324
# check layout success:    1
 
22325
TRUNCATE t1;
 
22326
        
 
22327
# check TRUNCATE success:       1
 
22328
# check layout success:    1
 
22329
# End usability test (inc/partition_check.inc)
 
22330
DROP TABLE t1;
 
22331
CREATE TABLE t1 (
 
22332
f_int1 INTEGER,
 
22333
f_int2 INTEGER,
 
22334
f_char1 CHAR(20),
 
22335
f_char2 CHAR(20),
 
22336
f_charbig VARCHAR(1000)
 
22337
 
 
22338
)
 
22339
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
22340
(PARTITION parta VALUES LESS THAN (0),
 
22341
PARTITION partb VALUES LESS THAN (5),
 
22342
PARTITION partc VALUES LESS THAN (10),
 
22343
PARTITION partd VALUES LESS THAN (2147483646));
 
22344
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22345
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22346
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22347
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
22348
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22349
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22350
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22351
# Start usability test (inc/partition_check.inc)
 
22352
create_command
 
22353
SHOW CREATE TABLE t1;
 
22354
Table   Create Table
 
22355
t1      CREATE TABLE `t1` (
 
22356
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
22357
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
22358
  `f_char1` char(20) DEFAULT NULL,
 
22359
  `f_char2` char(20) DEFAULT NULL,
 
22360
  `f_charbig` varchar(1000) DEFAULT NULL,
 
22361
  PRIMARY KEY (`f_int2`,`f_int1`)
 
22362
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
22363
 
 
22364
# check prerequisites-1 success:    1
 
22365
# check COUNT(*) success:    1
 
22366
# check MIN/MAX(f_int1) success:    1
 
22367
# check MIN/MAX(f_int2) success:    1
 
22368
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22369
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22370
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22371
WHERE f_int1 IN (2,3);
 
22372
ERROR 23000: Can't write; duplicate key in table 't1'
 
22373
# check prerequisites-3 success:    1
 
22374
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
22375
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22376
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22377
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22378
WHERE f_int1 IN (2,3);
 
22379
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22380
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22381
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22382
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22383
WHERE f_int1 IN (2,3);
 
22384
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22385
# check read via f_int1 success: 1
 
22386
# check read via f_int2 success: 1
 
22387
        
 
22388
# check multiple-1 success:     1
 
22389
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22390
        
 
22391
# check multiple-2 success:     1
 
22392
INSERT INTO t1 SELECT * FROM t0_template
 
22393
WHERE MOD(f_int1,3) = 0;
 
22394
        
 
22395
# check multiple-3 success:     1
 
22396
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22397
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22398
AND @max_row_div2 + @max_row_div4;
 
22399
        
 
22400
# check multiple-4 success:     1
 
22401
DELETE FROM t1
 
22402
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22403
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22404
        
 
22405
# check multiple-5 success:     1
 
22406
SELECT COUNT(*) INTO @try_count FROM t0_template
 
22407
WHERE MOD(f_int1,3) = 0
 
22408
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22409
SELECT COUNT(*) INTO @clash_count
 
22410
FROM t1 INNER JOIN t0_template USING(f_int1)
 
22411
WHERE MOD(f_int1,3) = 0
 
22412
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22413
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22414
INSERT INTO t1
 
22415
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22416
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22417
f_charbig = '#SINGLE#';
 
22418
        
 
22419
# check single-1 success:       1
 
22420
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22421
INSERT INTO t1
 
22422
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22423
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22424
f_charbig = '#SINGLE#';
 
22425
        
 
22426
# check single-2 success:       1
 
22427
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22428
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22429
UPDATE t1 SET f_int1 = @cur_value2
 
22430
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22431
        
 
22432
# check single-3 success:       1
 
22433
SET @cur_value1= -1;
 
22434
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22435
UPDATE t1 SET f_int1 = @cur_value1
 
22436
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22437
        
 
22438
# check single-4 success:       1
 
22439
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22440
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22441
        
 
22442
# check single-5 success:       1
 
22443
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22444
        
 
22445
# check single-6 success:       1
 
22446
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22447
ERROR HY000: Table has no partition for value 2147483647
 
22448
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22449
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22450
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22451
f_charbig = '#NULL#';
 
22452
INSERT INTO t1
 
22453
SET f_int1 = NULL , f_int2 = -@max_row,
 
22454
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22455
f_charbig = '#NULL#';
 
22456
ERROR 23000: Column 'f_int1' cannot be null
 
22457
# check null success:    1
 
22458
DELETE FROM t1
 
22459
WHERE f_int1 = 0 AND f_int2 = 0
 
22460
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22461
AND f_charbig = '#NULL#';
 
22462
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22463
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22464
   FROM t0_template source_tab
 
22465
WHERE MOD(f_int1,3) = 0
 
22466
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
22467
ON DUPLICATE KEY
 
22468
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
22469
f_int2 = 2 * @max_row + source_tab.f_int1,
 
22470
f_charbig = 'was updated';
 
22471
        
 
22472
# check unique-1-a success:     1
 
22473
        
 
22474
# check unique-1-b success:     1
 
22475
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22478
f_charbig = CONCAT('===',f_char1,'===')
 
22479
WHERE f_charbig = 'was updated';
 
22480
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22481
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
22482
   FROM t0_template source_tab
 
22483
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22484
        
 
22485
# check replace success:        1
 
22486
DELETE FROM t1
 
22487
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
22488
DELETE FROM t1
 
22489
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
22490
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
22491
UPDATE t1 SET f_int2 = f_int1,
 
22492
f_char1 = CAST(f_int1 AS CHAR),
 
22493
f_char2 = CAST(f_int1 AS CHAR),
 
22494
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
22495
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
22496
SET AUTOCOMMIT= 0;
 
22497
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22498
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22499
FROM t0_template source_tab
 
22500
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22501
        
 
22502
# check transactions-1 success:         1
 
22503
COMMIT WORK;
 
22504
        
 
22505
# check transactions-2 success:         1
 
22506
ROLLBACK WORK;
 
22507
        
 
22508
# check transactions-3 success:         1
 
22509
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22510
COMMIT WORK;
 
22511
ROLLBACK WORK;
 
22512
        
 
22513
# check transactions-4 success:         1
 
22514
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22515
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22516
FROM t0_template source_tab
 
22517
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22518
        
 
22519
# check transactions-5 success:         1
 
22520
ROLLBACK WORK;
 
22521
        
 
22522
# check transactions-6 success:         1
 
22523
# INFO: Storage engine used for t1 seems to be transactional.
 
22524
COMMIT;
 
22525
        
 
22526
# check transactions-7 success:         1
 
22527
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22528
COMMIT WORK;
 
22529
SET @@session.sql_mode = 'traditional';
 
22530
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22531
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22532
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22533
'', '', 'was inserted' FROM t0_template
 
22534
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22535
ERROR 22012: Division by 0
 
22536
COMMIT;
 
22537
        
 
22538
# check transactions-8 success:         1
 
22539
# INFO: Storage engine used for t1 seems to be able to revert
 
22540
#       changes made by the failing statement.
 
22541
SET @@session.sql_mode = '';
 
22542
SET AUTOCOMMIT= 1;
 
22543
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22544
COMMIT WORK;
 
22545
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22546
        
 
22547
# check special-1 success:      1
 
22548
UPDATE t1 SET f_charbig = '';
 
22549
        
 
22550
# check special-2 success:      1
 
22551
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22552
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22553
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22555
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22556
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22557
'just inserted' FROM t0_template
 
22558
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22559
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22560
BEGIN
 
22561
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22562
f_charbig = 'updated by trigger'
 
22563
      WHERE f_int1 = new.f_int1;
 
22564
END|
 
22565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22566
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22568
        
 
22569
# check trigger-1 success:      1
 
22570
DROP TRIGGER trg_1;
 
22571
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22572
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22573
f_charbig = 'just inserted'
 
22574
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22575
DELETE FROM t0_aux
 
22576
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22577
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22578
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22579
'just inserted' FROM t0_template
 
22580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22581
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22582
BEGIN
 
22583
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22584
f_charbig = 'updated by trigger'
 
22585
      WHERE f_int1 = new.f_int1;
 
22586
END|
 
22587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22588
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22590
        
 
22591
# check trigger-2 success:      1
 
22592
DROP TRIGGER trg_1;
 
22593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22595
f_charbig = 'just inserted'
 
22596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22597
DELETE FROM t0_aux
 
22598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22601
'just inserted' FROM t0_template
 
22602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22603
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22604
BEGIN
 
22605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22606
f_charbig = 'updated by trigger'
 
22607
      WHERE f_int1 = new.f_int1;
 
22608
END|
 
22609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22611
        
 
22612
# check trigger-3 success:      1
 
22613
DROP TRIGGER trg_1;
 
22614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22616
f_charbig = 'just inserted'
 
22617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22618
DELETE FROM t0_aux
 
22619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22622
'just inserted' FROM t0_template
 
22623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22624
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22625
BEGIN
 
22626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22627
f_charbig = 'updated by trigger'
 
22628
      WHERE f_int1 = - old.f_int1;
 
22629
END|
 
22630
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22632
        
 
22633
# check trigger-4 success:      1
 
22634
DROP TRIGGER trg_1;
 
22635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22637
f_charbig = 'just inserted'
 
22638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22639
DELETE FROM t0_aux
 
22640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22643
'just inserted' FROM t0_template
 
22644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22645
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22646
BEGIN
 
22647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22648
f_charbig = 'updated by trigger'
 
22649
      WHERE f_int1 = new.f_int1;
 
22650
END|
 
22651
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22653
        
 
22654
# check trigger-5 success:      1
 
22655
DROP TRIGGER trg_1;
 
22656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22658
f_charbig = 'just inserted'
 
22659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22660
DELETE FROM t0_aux
 
22661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22664
'just inserted' FROM t0_template
 
22665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22666
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22667
BEGIN
 
22668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22669
f_charbig = 'updated by trigger'
 
22670
      WHERE f_int1 = - old.f_int1;
 
22671
END|
 
22672
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22674
        
 
22675
# check trigger-6 success:      1
 
22676
DROP TRIGGER trg_1;
 
22677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22679
f_charbig = 'just inserted'
 
22680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22681
DELETE FROM t0_aux
 
22682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22685
'just inserted' FROM t0_template
 
22686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22687
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22688
BEGIN
 
22689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22690
f_charbig = 'updated by trigger'
 
22691
      WHERE f_int1 = - old.f_int1;
 
22692
END|
 
22693
DELETE FROM t0_aux
 
22694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22695
        
 
22696
# check trigger-7 success:      1
 
22697
DROP TRIGGER trg_1;
 
22698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22700
f_charbig = 'just inserted'
 
22701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22702
DELETE FROM t0_aux
 
22703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22706
'just inserted' FROM t0_template
 
22707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22708
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22709
BEGIN
 
22710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22711
f_charbig = 'updated by trigger'
 
22712
      WHERE f_int1 = - old.f_int1;
 
22713
END|
 
22714
DELETE FROM t0_aux
 
22715
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22716
        
 
22717
# check trigger-8 success:      1
 
22718
DROP TRIGGER trg_1;
 
22719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22721
f_charbig = 'just inserted'
 
22722
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22723
DELETE FROM t0_aux
 
22724
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22725
DELETE FROM t1
 
22726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22727
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22728
BEGIN
 
22729
SET new.f_int1 = old.f_int1 + @max_row,
 
22730
new.f_int2 = old.f_int2 - @max_row,
 
22731
new.f_charbig = '####updated per update trigger####';
 
22732
END|
 
22733
UPDATE t1
 
22734
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22735
f_charbig = '####updated per update statement itself####';
 
22736
        
 
22737
# check trigger-9 success:      1
 
22738
DROP TRIGGER trg_2;
 
22739
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22740
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22741
f_charbig = CONCAT('===',f_char1,'===');
 
22742
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22743
BEGIN
 
22744
SET new.f_int1 = new.f_int1 + @max_row,
 
22745
new.f_int2 = new.f_int2 - @max_row,
 
22746
new.f_charbig = '####updated per update trigger####';
 
22747
END|
 
22748
UPDATE t1
 
22749
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22750
f_charbig = '####updated per update statement itself####';
 
22751
        
 
22752
# check trigger-10 success:     1
 
22753
DROP TRIGGER trg_2;
 
22754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22756
f_charbig = CONCAT('===',f_char1,'===');
 
22757
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22758
BEGIN
 
22759
SET new.f_int1 = @my_max1 + @counter,
 
22760
new.f_int2 = @my_min2 - @counter,
 
22761
new.f_charbig = '####updated per insert trigger####';
 
22762
SET @counter = @counter + 1;
 
22763
END|
 
22764
SET @counter = 1;
 
22765
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22766
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22767
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22768
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22770
ORDER BY f_int1;
 
22771
DROP TRIGGER trg_3;
 
22772
        
 
22773
# check trigger-11 success:     1
 
22774
DELETE FROM t1
 
22775
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22776
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22777
AND f_charbig = '####updated per insert trigger####';
 
22778
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22779
BEGIN
 
22780
SET new.f_int1 = @my_max1 + @counter,
 
22781
new.f_int2 = @my_min2 - @counter,
 
22782
new.f_charbig = '####updated per insert trigger####';
 
22783
SET @counter = @counter + 1;
 
22784
END|
 
22785
SET @counter = 1;
 
22786
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22787
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22788
SELECT CAST(f_int1 AS CHAR),
 
22789
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22791
ORDER BY f_int1;
 
22792
DROP TRIGGER trg_3;
 
22793
        
 
22794
# check trigger-12 success:     1
 
22795
DELETE FROM t1
 
22796
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22797
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22798
AND f_charbig = '####updated per insert trigger####';
 
22799
ANALYZE  TABLE t1;
 
22800
Table   Op      Msg_type        Msg_text
 
22801
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
22802
CHECK    TABLE t1 EXTENDED;
 
22803
Table   Op      Msg_type        Msg_text
 
22804
test.t1 check   note    The storage engine for the table doesn't support check
 
22805
CHECKSUM TABLE t1 EXTENDED;
 
22806
Table   Checksum
 
22807
test.t1 <some_value>
 
22808
OPTIMIZE TABLE t1;
 
22809
Table   Op      Msg_type        Msg_text
 
22810
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
22811
# check layout success:    1
 
22812
REPAIR   TABLE t1 EXTENDED;
 
22813
Table   Op      Msg_type        Msg_text
 
22814
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22815
# check layout success:    1
 
22816
TRUNCATE t1;
 
22817
        
 
22818
# check TRUNCATE success:       1
 
22819
# check layout success:    1
 
22820
# End usability test (inc/partition_check.inc)
 
22821
DROP TABLE t1;
 
22822
CREATE TABLE t1 (
 
22823
f_int1 INTEGER,
 
22824
f_int2 INTEGER,
 
22825
f_char1 CHAR(20),
 
22826
f_char2 CHAR(20),
 
22827
f_charbig VARCHAR(1000)
 
22828
 
 
22829
)
 
22830
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
22831
(PARTITION part1 VALUES LESS THAN (0)
 
22832
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
22833
PARTITION part2 VALUES LESS THAN (5)
 
22834
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
22835
PARTITION part3 VALUES LESS THAN (10)
 
22836
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
22837
PARTITION part4 VALUES LESS THAN (2147483646)
 
22838
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
22839
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22840
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22841
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22842
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
22843
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22844
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22845
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22846
# Start usability test (inc/partition_check.inc)
 
22847
create_command
 
22848
SHOW CREATE TABLE t1;
 
22849
Table   Create Table
 
22850
t1      CREATE TABLE `t1` (
 
22851
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
22852
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
22853
  `f_char1` char(20) DEFAULT NULL,
 
22854
  `f_char2` char(20) DEFAULT NULL,
 
22855
  `f_charbig` varchar(1000) DEFAULT NULL,
 
22856
  PRIMARY KEY (`f_int2`,`f_int1`)
 
22857
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
22858
 
 
22859
# check prerequisites-1 success:    1
 
22860
# check COUNT(*) success:    1
 
22861
# check MIN/MAX(f_int1) success:    1
 
22862
# check MIN/MAX(f_int2) success:    1
 
22863
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22864
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22865
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22866
WHERE f_int1 IN (2,3);
 
22867
ERROR 23000: Can't write; duplicate key in table 't1'
 
22868
# check prerequisites-3 success:    1
 
22869
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
22870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22871
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22872
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22873
WHERE f_int1 IN (2,3);
 
22874
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22875
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22876
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22877
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22878
WHERE f_int1 IN (2,3);
 
22879
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22880
# check read via f_int1 success: 1
 
22881
# check read via f_int2 success: 1
 
22882
        
 
22883
# check multiple-1 success:     1
 
22884
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22885
        
 
22886
# check multiple-2 success:     1
 
22887
INSERT INTO t1 SELECT * FROM t0_template
 
22888
WHERE MOD(f_int1,3) = 0;
 
22889
        
 
22890
# check multiple-3 success:     1
 
22891
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22892
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22893
AND @max_row_div2 + @max_row_div4;
 
22894
        
 
22895
# check multiple-4 success:     1
 
22896
DELETE FROM t1
 
22897
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22898
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22899
        
 
22900
# check multiple-5 success:     1
 
22901
SELECT COUNT(*) INTO @try_count FROM t0_template
 
22902
WHERE MOD(f_int1,3) = 0
 
22903
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22904
SELECT COUNT(*) INTO @clash_count
 
22905
FROM t1 INNER JOIN t0_template USING(f_int1)
 
22906
WHERE MOD(f_int1,3) = 0
 
22907
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22908
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22909
INSERT INTO t1
 
22910
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22911
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22912
f_charbig = '#SINGLE#';
 
22913
        
 
22914
# check single-1 success:       1
 
22915
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22916
INSERT INTO t1
 
22917
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22918
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22919
f_charbig = '#SINGLE#';
 
22920
        
 
22921
# check single-2 success:       1
 
22922
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22923
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22924
UPDATE t1 SET f_int1 = @cur_value2
 
22925
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22926
        
 
22927
# check single-3 success:       1
 
22928
SET @cur_value1= -1;
 
22929
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22930
UPDATE t1 SET f_int1 = @cur_value1
 
22931
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22932
        
 
22933
# check single-4 success:       1
 
22934
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22935
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22936
        
 
22937
# check single-5 success:       1
 
22938
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22939
        
 
22940
# check single-6 success:       1
 
22941
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22942
ERROR HY000: Table has no partition for value 2147483647
 
22943
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22944
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22945
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22946
f_charbig = '#NULL#';
 
22947
INSERT INTO t1
 
22948
SET f_int1 = NULL , f_int2 = -@max_row,
 
22949
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22950
f_charbig = '#NULL#';
 
22951
ERROR 23000: Column 'f_int1' cannot be null
 
22952
# check null success:    1
 
22953
DELETE FROM t1
 
22954
WHERE f_int1 = 0 AND f_int2 = 0
 
22955
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22956
AND f_charbig = '#NULL#';
 
22957
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22958
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22959
   FROM t0_template source_tab
 
22960
WHERE MOD(f_int1,3) = 0
 
22961
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
22962
ON DUPLICATE KEY
 
22963
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
22964
f_int2 = 2 * @max_row + source_tab.f_int1,
 
22965
f_charbig = 'was updated';
 
22966
        
 
22967
# check unique-1-a success:     1
 
22968
        
 
22969
# check unique-1-b success:     1
 
22970
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22973
f_charbig = CONCAT('===',f_char1,'===')
 
22974
WHERE f_charbig = 'was updated';
 
22975
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22976
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
22977
   FROM t0_template source_tab
 
22978
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22979
        
 
22980
# check replace success:        1
 
22981
DELETE FROM t1
 
22982
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
22983
DELETE FROM t1
 
22984
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
22985
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
22986
UPDATE t1 SET f_int2 = f_int1,
 
22987
f_char1 = CAST(f_int1 AS CHAR),
 
22988
f_char2 = CAST(f_int1 AS CHAR),
 
22989
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
22990
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
22991
SET AUTOCOMMIT= 0;
 
22992
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22993
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22994
FROM t0_template source_tab
 
22995
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22996
        
 
22997
# check transactions-1 success:         1
 
22998
COMMIT WORK;
 
22999
        
 
23000
# check transactions-2 success:         1
 
23001
ROLLBACK WORK;
 
23002
        
 
23003
# check transactions-3 success:         1
 
23004
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23005
COMMIT WORK;
 
23006
ROLLBACK WORK;
 
23007
        
 
23008
# check transactions-4 success:         1
 
23009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23010
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23011
FROM t0_template source_tab
 
23012
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23013
        
 
23014
# check transactions-5 success:         1
 
23015
ROLLBACK WORK;
 
23016
        
 
23017
# check transactions-6 success:         1
 
23018
# INFO: Storage engine used for t1 seems to be transactional.
 
23019
COMMIT;
 
23020
        
 
23021
# check transactions-7 success:         1
 
23022
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23023
COMMIT WORK;
 
23024
SET @@session.sql_mode = 'traditional';
 
23025
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23026
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23027
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23028
'', '', 'was inserted' FROM t0_template
 
23029
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23030
ERROR 22012: Division by 0
 
23031
COMMIT;
 
23032
        
 
23033
# check transactions-8 success:         1
 
23034
# INFO: Storage engine used for t1 seems to be able to revert
 
23035
#       changes made by the failing statement.
 
23036
SET @@session.sql_mode = '';
 
23037
SET AUTOCOMMIT= 1;
 
23038
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23039
COMMIT WORK;
 
23040
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23041
        
 
23042
# check special-1 success:      1
 
23043
UPDATE t1 SET f_charbig = '';
 
23044
        
 
23045
# check special-2 success:      1
 
23046
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23047
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23048
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23051
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23052
'just inserted' FROM t0_template
 
23053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23054
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23055
BEGIN
 
23056
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23057
f_charbig = 'updated by trigger'
 
23058
      WHERE f_int1 = new.f_int1;
 
23059
END|
 
23060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23061
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23063
        
 
23064
# check trigger-1 success:      1
 
23065
DROP TRIGGER trg_1;
 
23066
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23067
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23068
f_charbig = 'just inserted'
 
23069
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23070
DELETE FROM t0_aux
 
23071
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23073
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23074
'just inserted' FROM t0_template
 
23075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23076
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23077
BEGIN
 
23078
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23079
f_charbig = 'updated by trigger'
 
23080
      WHERE f_int1 = new.f_int1;
 
23081
END|
 
23082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23083
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23085
        
 
23086
# check trigger-2 success:      1
 
23087
DROP TRIGGER trg_1;
 
23088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23089
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23090
f_charbig = 'just inserted'
 
23091
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23092
DELETE FROM t0_aux
 
23093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23096
'just inserted' FROM t0_template
 
23097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23098
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23099
BEGIN
 
23100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23101
f_charbig = 'updated by trigger'
 
23102
      WHERE f_int1 = new.f_int1;
 
23103
END|
 
23104
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23105
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23106
        
 
23107
# check trigger-3 success:      1
 
23108
DROP TRIGGER trg_1;
 
23109
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23110
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23111
f_charbig = 'just inserted'
 
23112
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23113
DELETE FROM t0_aux
 
23114
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23115
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23116
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23117
'just inserted' FROM t0_template
 
23118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23119
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23120
BEGIN
 
23121
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23122
f_charbig = 'updated by trigger'
 
23123
      WHERE f_int1 = - old.f_int1;
 
23124
END|
 
23125
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23126
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23127
        
 
23128
# check trigger-4 success:      1
 
23129
DROP TRIGGER trg_1;
 
23130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23132
f_charbig = 'just inserted'
 
23133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23134
DELETE FROM t0_aux
 
23135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23138
'just inserted' FROM t0_template
 
23139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23140
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23141
BEGIN
 
23142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23143
f_charbig = 'updated by trigger'
 
23144
      WHERE f_int1 = new.f_int1;
 
23145
END|
 
23146
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23147
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23148
        
 
23149
# check trigger-5 success:      1
 
23150
DROP TRIGGER trg_1;
 
23151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23153
f_charbig = 'just inserted'
 
23154
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23155
DELETE FROM t0_aux
 
23156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23159
'just inserted' FROM t0_template
 
23160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23161
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23162
BEGIN
 
23163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23164
f_charbig = 'updated by trigger'
 
23165
      WHERE f_int1 = - old.f_int1;
 
23166
END|
 
23167
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23168
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23169
        
 
23170
# check trigger-6 success:      1
 
23171
DROP TRIGGER trg_1;
 
23172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23173
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23174
f_charbig = 'just inserted'
 
23175
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23176
DELETE FROM t0_aux
 
23177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23180
'just inserted' FROM t0_template
 
23181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23182
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23183
BEGIN
 
23184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23185
f_charbig = 'updated by trigger'
 
23186
      WHERE f_int1 = - old.f_int1;
 
23187
END|
 
23188
DELETE FROM t0_aux
 
23189
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23190
        
 
23191
# check trigger-7 success:      1
 
23192
DROP TRIGGER trg_1;
 
23193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23195
f_charbig = 'just inserted'
 
23196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23197
DELETE FROM t0_aux
 
23198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23200
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23201
'just inserted' FROM t0_template
 
23202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23203
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23204
BEGIN
 
23205
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23206
f_charbig = 'updated by trigger'
 
23207
      WHERE f_int1 = - old.f_int1;
 
23208
END|
 
23209
DELETE FROM t0_aux
 
23210
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23211
        
 
23212
# check trigger-8 success:      1
 
23213
DROP TRIGGER trg_1;
 
23214
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23215
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23216
f_charbig = 'just inserted'
 
23217
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23218
DELETE FROM t0_aux
 
23219
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23220
DELETE FROM t1
 
23221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23222
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23223
BEGIN
 
23224
SET new.f_int1 = old.f_int1 + @max_row,
 
23225
new.f_int2 = old.f_int2 - @max_row,
 
23226
new.f_charbig = '####updated per update trigger####';
 
23227
END|
 
23228
UPDATE t1
 
23229
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23230
f_charbig = '####updated per update statement itself####';
 
23231
        
 
23232
# check trigger-9 success:      1
 
23233
DROP TRIGGER trg_2;
 
23234
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23235
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23236
f_charbig = CONCAT('===',f_char1,'===');
 
23237
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23238
BEGIN
 
23239
SET new.f_int1 = new.f_int1 + @max_row,
 
23240
new.f_int2 = new.f_int2 - @max_row,
 
23241
new.f_charbig = '####updated per update trigger####';
 
23242
END|
 
23243
UPDATE t1
 
23244
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23245
f_charbig = '####updated per update statement itself####';
 
23246
        
 
23247
# check trigger-10 success:     1
 
23248
DROP TRIGGER trg_2;
 
23249
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23250
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23251
f_charbig = CONCAT('===',f_char1,'===');
 
23252
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23253
BEGIN
 
23254
SET new.f_int1 = @my_max1 + @counter,
 
23255
new.f_int2 = @my_min2 - @counter,
 
23256
new.f_charbig = '####updated per insert trigger####';
 
23257
SET @counter = @counter + 1;
 
23258
END|
 
23259
SET @counter = 1;
 
23260
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23261
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23262
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23263
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23264
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23265
ORDER BY f_int1;
 
23266
DROP TRIGGER trg_3;
 
23267
        
 
23268
# check trigger-11 success:     1
 
23269
DELETE FROM t1
 
23270
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23271
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23272
AND f_charbig = '####updated per insert trigger####';
 
23273
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23274
BEGIN
 
23275
SET new.f_int1 = @my_max1 + @counter,
 
23276
new.f_int2 = @my_min2 - @counter,
 
23277
new.f_charbig = '####updated per insert trigger####';
 
23278
SET @counter = @counter + 1;
 
23279
END|
 
23280
SET @counter = 1;
 
23281
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23282
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23283
SELECT CAST(f_int1 AS CHAR),
 
23284
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23286
ORDER BY f_int1;
 
23287
DROP TRIGGER trg_3;
 
23288
        
 
23289
# check trigger-12 success:     1
 
23290
DELETE FROM t1
 
23291
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23292
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23293
AND f_charbig = '####updated per insert trigger####';
 
23294
ANALYZE  TABLE t1;
 
23295
Table   Op      Msg_type        Msg_text
 
23296
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
23297
CHECK    TABLE t1 EXTENDED;
 
23298
Table   Op      Msg_type        Msg_text
 
23299
test.t1 check   note    The storage engine for the table doesn't support check
 
23300
CHECKSUM TABLE t1 EXTENDED;
 
23301
Table   Checksum
 
23302
test.t1 <some_value>
 
23303
OPTIMIZE TABLE t1;
 
23304
Table   Op      Msg_type        Msg_text
 
23305
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
23306
# check layout success:    1
 
23307
REPAIR   TABLE t1 EXTENDED;
 
23308
Table   Op      Msg_type        Msg_text
 
23309
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23310
# check layout success:    1
 
23311
TRUNCATE t1;
 
23312
        
 
23313
# check TRUNCATE success:       1
 
23314
# check layout success:    1
 
23315
# End usability test (inc/partition_check.inc)
 
23316
DROP TABLE t1;
 
23317
CREATE TABLE t1 (
 
23318
f_int1 INTEGER,
 
23319
f_int2 INTEGER,
 
23320
f_char1 CHAR(20),
 
23321
f_char2 CHAR(20),
 
23322
f_charbig VARCHAR(1000)
 
23323
 
 
23324
)
 
23325
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
23326
(PARTITION part1 VALUES IN (0)
 
23327
(SUBPARTITION sp11, SUBPARTITION sp12),
 
23328
PARTITION part2 VALUES IN (1)
 
23329
(SUBPARTITION sp21, SUBPARTITION sp22),
 
23330
PARTITION part3 VALUES IN (2)
 
23331
(SUBPARTITION sp31, SUBPARTITION sp32),
 
23332
PARTITION part4 VALUES IN (NULL)
 
23333
(SUBPARTITION sp41, SUBPARTITION sp42));
 
23334
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23335
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23336
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23337
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
23338
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23339
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23340
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23341
# Start usability test (inc/partition_check.inc)
 
23342
create_command
 
23343
SHOW CREATE TABLE t1;
 
23344
Table   Create Table
 
23345
t1      CREATE TABLE `t1` (
 
23346
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
23347
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
23348
  `f_char1` char(20) DEFAULT NULL,
 
23349
  `f_char2` char(20) DEFAULT NULL,
 
23350
  `f_charbig` varchar(1000) DEFAULT NULL,
 
23351
  PRIMARY KEY (`f_int2`,`f_int1`)
 
23352
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
23353
 
 
23354
# check prerequisites-1 success:    1
 
23355
# check COUNT(*) success:    1
 
23356
# check MIN/MAX(f_int1) success:    1
 
23357
# check MIN/MAX(f_int2) success:    1
 
23358
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23359
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23360
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23361
WHERE f_int1 IN (2,3);
 
23362
ERROR 23000: Can't write; duplicate key in table 't1'
 
23363
# check prerequisites-3 success:    1
 
23364
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
23365
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23366
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23367
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23368
WHERE f_int1 IN (2,3);
 
23369
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23370
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23371
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23372
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23373
WHERE f_int1 IN (2,3);
 
23374
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23375
# check read via f_int1 success: 1
 
23376
# check read via f_int2 success: 1
 
23377
        
 
23378
# check multiple-1 success:     1
 
23379
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23380
        
 
23381
# check multiple-2 success:     1
 
23382
INSERT INTO t1 SELECT * FROM t0_template
 
23383
WHERE MOD(f_int1,3) = 0;
 
23384
        
 
23385
# check multiple-3 success:     1
 
23386
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23387
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23388
AND @max_row_div2 + @max_row_div4;
 
23389
        
 
23390
# check multiple-4 success:     1
 
23391
DELETE FROM t1
 
23392
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23393
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23394
        
 
23395
# check multiple-5 success:     1
 
23396
SELECT COUNT(*) INTO @try_count FROM t0_template
 
23397
WHERE MOD(f_int1,3) = 0
 
23398
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23399
SELECT COUNT(*) INTO @clash_count
 
23400
FROM t1 INNER JOIN t0_template USING(f_int1)
 
23401
WHERE MOD(f_int1,3) = 0
 
23402
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23403
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23404
INSERT INTO t1
 
23405
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23406
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23407
f_charbig = '#SINGLE#';
 
23408
        
 
23409
# check single-1 success:       1
 
23410
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23411
INSERT INTO t1
 
23412
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23413
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23414
f_charbig = '#SINGLE#';
 
23415
        
 
23416
# check single-2 success:       1
 
23417
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23418
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23419
UPDATE t1 SET f_int1 = @cur_value2
 
23420
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23421
        
 
23422
# check single-3 success:       1
 
23423
SET @cur_value1= -1;
 
23424
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23425
UPDATE t1 SET f_int1 = @cur_value1
 
23426
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23427
        
 
23428
# check single-4 success:       1
 
23429
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23430
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23431
        
 
23432
# check single-5 success:       1
 
23433
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23434
        
 
23435
# check single-6 success:       1
 
23436
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23437
        
 
23438
# check single-7 success:       1
 
23439
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
23440
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23441
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23442
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23443
f_charbig = '#NULL#';
 
23444
INSERT INTO t1
 
23445
SET f_int1 = NULL , f_int2 = -@max_row,
 
23446
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23447
f_charbig = '#NULL#';
 
23448
ERROR 23000: Column 'f_int1' cannot be null
 
23449
# check null success:    1
 
23450
DELETE FROM t1
 
23451
WHERE f_int1 = 0 AND f_int2 = 0
 
23452
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23453
AND f_charbig = '#NULL#';
 
23454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23455
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23456
   FROM t0_template source_tab
 
23457
WHERE MOD(f_int1,3) = 0
 
23458
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
23459
ON DUPLICATE KEY
 
23460
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
23461
f_int2 = 2 * @max_row + source_tab.f_int1,
 
23462
f_charbig = 'was updated';
 
23463
        
 
23464
# check unique-1-a success:     1
 
23465
        
 
23466
# check unique-1-b success:     1
 
23467
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23468
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23469
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23470
f_charbig = CONCAT('===',f_char1,'===')
 
23471
WHERE f_charbig = 'was updated';
 
23472
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23473
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
23474
   FROM t0_template source_tab
 
23475
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23476
        
 
23477
# check replace success:        1
 
23478
DELETE FROM t1
 
23479
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
23480
DELETE FROM t1
 
23481
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
23482
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
23483
UPDATE t1 SET f_int2 = f_int1,
 
23484
f_char1 = CAST(f_int1 AS CHAR),
 
23485
f_char2 = CAST(f_int1 AS CHAR),
 
23486
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
23487
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
23488
SET AUTOCOMMIT= 0;
 
23489
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23490
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23491
FROM t0_template source_tab
 
23492
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23493
        
 
23494
# check transactions-1 success:         1
 
23495
COMMIT WORK;
 
23496
        
 
23497
# check transactions-2 success:         1
 
23498
ROLLBACK WORK;
 
23499
        
 
23500
# check transactions-3 success:         1
 
23501
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23502
COMMIT WORK;
 
23503
ROLLBACK WORK;
 
23504
        
 
23505
# check transactions-4 success:         1
 
23506
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23507
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23508
FROM t0_template source_tab
 
23509
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23510
        
 
23511
# check transactions-5 success:         1
 
23512
ROLLBACK WORK;
 
23513
        
 
23514
# check transactions-6 success:         1
 
23515
# INFO: Storage engine used for t1 seems to be transactional.
 
23516
COMMIT;
 
23517
        
 
23518
# check transactions-7 success:         1
 
23519
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23520
COMMIT WORK;
 
23521
SET @@session.sql_mode = 'traditional';
 
23522
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23523
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23524
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23525
'', '', 'was inserted' FROM t0_template
 
23526
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23527
ERROR 22012: Division by 0
 
23528
COMMIT;
 
23529
        
 
23530
# check transactions-8 success:         1
 
23531
# INFO: Storage engine used for t1 seems to be able to revert
 
23532
#       changes made by the failing statement.
 
23533
SET @@session.sql_mode = '';
 
23534
SET AUTOCOMMIT= 1;
 
23535
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23536
COMMIT WORK;
 
23537
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23538
        
 
23539
# check special-1 success:      1
 
23540
UPDATE t1 SET f_charbig = '';
 
23541
        
 
23542
# check special-2 success:      1
 
23543
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23544
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23545
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23549
'just inserted' FROM t0_template
 
23550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23551
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23552
BEGIN
 
23553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23554
f_charbig = 'updated by trigger'
 
23555
      WHERE f_int1 = new.f_int1;
 
23556
END|
 
23557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23558
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23560
        
 
23561
# check trigger-1 success:      1
 
23562
DROP TRIGGER trg_1;
 
23563
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23564
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23565
f_charbig = 'just inserted'
 
23566
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23567
DELETE FROM t0_aux
 
23568
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23570
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23571
'just inserted' FROM t0_template
 
23572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23573
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23574
BEGIN
 
23575
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23576
f_charbig = 'updated by trigger'
 
23577
      WHERE f_int1 = new.f_int1;
 
23578
END|
 
23579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23580
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23582
        
 
23583
# check trigger-2 success:      1
 
23584
DROP TRIGGER trg_1;
 
23585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23587
f_charbig = 'just inserted'
 
23588
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23589
DELETE FROM t0_aux
 
23590
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23592
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23593
'just inserted' FROM t0_template
 
23594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23595
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23596
BEGIN
 
23597
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23598
f_charbig = 'updated by trigger'
 
23599
      WHERE f_int1 = new.f_int1;
 
23600
END|
 
23601
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23602
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23603
        
 
23604
# check trigger-3 success:      1
 
23605
DROP TRIGGER trg_1;
 
23606
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23607
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23608
f_charbig = 'just inserted'
 
23609
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23610
DELETE FROM t0_aux
 
23611
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23613
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23614
'just inserted' FROM t0_template
 
23615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23616
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23617
BEGIN
 
23618
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23619
f_charbig = 'updated by trigger'
 
23620
      WHERE f_int1 = - old.f_int1;
 
23621
END|
 
23622
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23623
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23624
        
 
23625
# check trigger-4 success:      1
 
23626
DROP TRIGGER trg_1;
 
23627
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23628
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23629
f_charbig = 'just inserted'
 
23630
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23631
DELETE FROM t0_aux
 
23632
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23633
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23634
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23635
'just inserted' FROM t0_template
 
23636
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23637
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23638
BEGIN
 
23639
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23640
f_charbig = 'updated by trigger'
 
23641
      WHERE f_int1 = new.f_int1;
 
23642
END|
 
23643
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23644
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23645
        
 
23646
# check trigger-5 success:      1
 
23647
DROP TRIGGER trg_1;
 
23648
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23649
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23650
f_charbig = 'just inserted'
 
23651
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23652
DELETE FROM t0_aux
 
23653
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23654
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23655
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23656
'just inserted' FROM t0_template
 
23657
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23658
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23659
BEGIN
 
23660
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23661
f_charbig = 'updated by trigger'
 
23662
      WHERE f_int1 = - old.f_int1;
 
23663
END|
 
23664
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23665
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23666
        
 
23667
# check trigger-6 success:      1
 
23668
DROP TRIGGER trg_1;
 
23669
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23670
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23671
f_charbig = 'just inserted'
 
23672
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23673
DELETE FROM t0_aux
 
23674
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23675
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23676
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23677
'just inserted' FROM t0_template
 
23678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23679
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23680
BEGIN
 
23681
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23682
f_charbig = 'updated by trigger'
 
23683
      WHERE f_int1 = - old.f_int1;
 
23684
END|
 
23685
DELETE FROM t0_aux
 
23686
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23687
        
 
23688
# check trigger-7 success:      1
 
23689
DROP TRIGGER trg_1;
 
23690
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23691
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23692
f_charbig = 'just inserted'
 
23693
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23694
DELETE FROM t0_aux
 
23695
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23697
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23698
'just inserted' FROM t0_template
 
23699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23700
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23701
BEGIN
 
23702
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23703
f_charbig = 'updated by trigger'
 
23704
      WHERE f_int1 = - old.f_int1;
 
23705
END|
 
23706
DELETE FROM t0_aux
 
23707
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23708
        
 
23709
# check trigger-8 success:      1
 
23710
DROP TRIGGER trg_1;
 
23711
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23712
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23713
f_charbig = 'just inserted'
 
23714
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23715
DELETE FROM t0_aux
 
23716
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23717
DELETE FROM t1
 
23718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23719
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23720
BEGIN
 
23721
SET new.f_int1 = old.f_int1 + @max_row,
 
23722
new.f_int2 = old.f_int2 - @max_row,
 
23723
new.f_charbig = '####updated per update trigger####';
 
23724
END|
 
23725
UPDATE t1
 
23726
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23727
f_charbig = '####updated per update statement itself####';
 
23728
        
 
23729
# check trigger-9 success:      1
 
23730
DROP TRIGGER trg_2;
 
23731
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23732
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23733
f_charbig = CONCAT('===',f_char1,'===');
 
23734
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23735
BEGIN
 
23736
SET new.f_int1 = new.f_int1 + @max_row,
 
23737
new.f_int2 = new.f_int2 - @max_row,
 
23738
new.f_charbig = '####updated per update trigger####';
 
23739
END|
 
23740
UPDATE t1
 
23741
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23742
f_charbig = '####updated per update statement itself####';
 
23743
        
 
23744
# check trigger-10 success:     1
 
23745
DROP TRIGGER trg_2;
 
23746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23748
f_charbig = CONCAT('===',f_char1,'===');
 
23749
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23750
BEGIN
 
23751
SET new.f_int1 = @my_max1 + @counter,
 
23752
new.f_int2 = @my_min2 - @counter,
 
23753
new.f_charbig = '####updated per insert trigger####';
 
23754
SET @counter = @counter + 1;
 
23755
END|
 
23756
SET @counter = 1;
 
23757
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23759
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23760
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23762
ORDER BY f_int1;
 
23763
DROP TRIGGER trg_3;
 
23764
        
 
23765
# check trigger-11 success:     1
 
23766
DELETE FROM t1
 
23767
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23768
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23769
AND f_charbig = '####updated per insert trigger####';
 
23770
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23771
BEGIN
 
23772
SET new.f_int1 = @my_max1 + @counter,
 
23773
new.f_int2 = @my_min2 - @counter,
 
23774
new.f_charbig = '####updated per insert trigger####';
 
23775
SET @counter = @counter + 1;
 
23776
END|
 
23777
SET @counter = 1;
 
23778
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23779
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23780
SELECT CAST(f_int1 AS CHAR),
 
23781
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23782
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23783
ORDER BY f_int1;
 
23784
DROP TRIGGER trg_3;
 
23785
        
 
23786
# check trigger-12 success:     1
 
23787
DELETE FROM t1
 
23788
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23789
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23790
AND f_charbig = '####updated per insert trigger####';
 
23791
ANALYZE  TABLE t1;
 
23792
Table   Op      Msg_type        Msg_text
 
23793
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
23794
CHECK    TABLE t1 EXTENDED;
 
23795
Table   Op      Msg_type        Msg_text
 
23796
test.t1 check   note    The storage engine for the table doesn't support check
 
23797
CHECKSUM TABLE t1 EXTENDED;
 
23798
Table   Checksum
 
23799
test.t1 <some_value>
 
23800
OPTIMIZE TABLE t1;
 
23801
Table   Op      Msg_type        Msg_text
 
23802
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
23803
# check layout success:    1
 
23804
REPAIR   TABLE t1 EXTENDED;
 
23805
Table   Op      Msg_type        Msg_text
 
23806
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23807
# check layout success:    1
 
23808
TRUNCATE t1;
 
23809
        
 
23810
# check TRUNCATE success:       1
 
23811
# check layout success:    1
 
23812
# End usability test (inc/partition_check.inc)
 
23813
DROP TABLE t1;
 
23814
CREATE TABLE t1 (
 
23815
f_int1 INTEGER,
 
23816
f_int2 INTEGER,
 
23817
f_char1 CHAR(20),
 
23818
f_char2 CHAR(20),
 
23819
f_charbig VARCHAR(1000)
 
23820
 
 
23821
)
 
23822
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
23823
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
23824
(PARTITION part1 VALUES IN (0),
 
23825
 PARTITION part2 VALUES IN (1),
 
23826
 PARTITION part3 VALUES IN (NULL));
 
23827
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23828
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23829
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23830
ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
 
23831
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23832
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23833
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23834
# Start usability test (inc/partition_check.inc)
 
23835
create_command
 
23836
SHOW CREATE TABLE t1;
 
23837
Table   Create Table
 
23838
t1      CREATE TABLE `t1` (
 
23839
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
23840
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
23841
  `f_char1` char(20) DEFAULT NULL,
 
23842
  `f_char2` char(20) DEFAULT NULL,
 
23843
  `f_charbig` varchar(1000) DEFAULT NULL,
 
23844
  PRIMARY KEY (`f_int2`,`f_int1`)
 
23845
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
23846
 
 
23847
# check prerequisites-1 success:    1
 
23848
# check COUNT(*) success:    1
 
23849
# check MIN/MAX(f_int1) success:    1
 
23850
# check MIN/MAX(f_int2) success:    1
 
23851
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23852
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23853
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23854
WHERE f_int1 IN (2,3);
 
23855
ERROR 23000: Can't write; duplicate key in table 't1'
 
23856
# check prerequisites-3 success:    1
 
23857
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
23858
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23859
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23860
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23861
WHERE f_int1 IN (2,3);
 
23862
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23863
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23864
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23865
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23866
WHERE f_int1 IN (2,3);
 
23867
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23868
# check read via f_int1 success: 1
 
23869
# check read via f_int2 success: 1
 
23870
        
 
23871
# check multiple-1 success:     1
 
23872
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23873
        
 
23874
# check multiple-2 success:     1
 
23875
INSERT INTO t1 SELECT * FROM t0_template
 
23876
WHERE MOD(f_int1,3) = 0;
 
23877
        
 
23878
# check multiple-3 success:     1
 
23879
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23880
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23881
AND @max_row_div2 + @max_row_div4;
 
23882
        
 
23883
# check multiple-4 success:     1
 
23884
DELETE FROM t1
 
23885
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23886
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23887
        
 
23888
# check multiple-5 success:     1
 
23889
SELECT COUNT(*) INTO @try_count FROM t0_template
 
23890
WHERE MOD(f_int1,3) = 0
 
23891
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23892
SELECT COUNT(*) INTO @clash_count
 
23893
FROM t1 INNER JOIN t0_template USING(f_int1)
 
23894
WHERE MOD(f_int1,3) = 0
 
23895
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23896
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23897
INSERT INTO t1
 
23898
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23899
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23900
f_charbig = '#SINGLE#';
 
23901
        
 
23902
# check single-1 success:       1
 
23903
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23904
INSERT INTO t1
 
23905
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23906
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23907
f_charbig = '#SINGLE#';
 
23908
        
 
23909
# check single-2 success:       1
 
23910
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23911
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23912
UPDATE t1 SET f_int1 = @cur_value2
 
23913
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23914
        
 
23915
# check single-3 success:       1
 
23916
SET @cur_value1= -1;
 
23917
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23918
UPDATE t1 SET f_int1 = @cur_value1
 
23919
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23920
        
 
23921
# check single-4 success:       1
 
23922
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23923
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23924
        
 
23925
# check single-5 success:       1
 
23926
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23927
        
 
23928
# check single-6 success:       1
 
23929
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23930
        
 
23931
# check single-7 success:       1
 
23932
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
23933
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23934
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23935
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23936
f_charbig = '#NULL#';
 
23937
INSERT INTO t1
 
23938
SET f_int1 = NULL , f_int2 = -@max_row,
 
23939
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23940
f_charbig = '#NULL#';
 
23941
ERROR 23000: Column 'f_int1' cannot be null
 
23942
# check null success:    1
 
23943
DELETE FROM t1
 
23944
WHERE f_int1 = 0 AND f_int2 = 0
 
23945
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23946
AND f_charbig = '#NULL#';
 
23947
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23948
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23949
   FROM t0_template source_tab
 
23950
WHERE MOD(f_int1,3) = 0
 
23951
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
23952
ON DUPLICATE KEY
 
23953
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
23954
f_int2 = 2 * @max_row + source_tab.f_int1,
 
23955
f_charbig = 'was updated';
 
23956
        
 
23957
# check unique-1-a success:     1
 
23958
        
 
23959
# check unique-1-b success:     1
 
23960
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23961
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23962
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23963
f_charbig = CONCAT('===',f_char1,'===')
 
23964
WHERE f_charbig = 'was updated';
 
23965
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23966
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
23967
   FROM t0_template source_tab
 
23968
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23969
        
 
23970
# check replace success:        1
 
23971
DELETE FROM t1
 
23972
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
23973
DELETE FROM t1
 
23974
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
23975
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
23976
UPDATE t1 SET f_int2 = f_int1,
 
23977
f_char1 = CAST(f_int1 AS CHAR),
 
23978
f_char2 = CAST(f_int1 AS CHAR),
 
23979
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
23980
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
23981
SET AUTOCOMMIT= 0;
 
23982
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23983
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23984
FROM t0_template source_tab
 
23985
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23986
        
 
23987
# check transactions-1 success:         1
 
23988
COMMIT WORK;
 
23989
        
 
23990
# check transactions-2 success:         1
 
23991
ROLLBACK WORK;
 
23992
        
 
23993
# check transactions-3 success:         1
 
23994
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23995
COMMIT WORK;
 
23996
ROLLBACK WORK;
 
23997
        
 
23998
# check transactions-4 success:         1
 
23999
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24000
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24001
FROM t0_template source_tab
 
24002
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24003
        
 
24004
# check transactions-5 success:         1
 
24005
ROLLBACK WORK;
 
24006
        
 
24007
# check transactions-6 success:         1
 
24008
# INFO: Storage engine used for t1 seems to be transactional.
 
24009
COMMIT;
 
24010
        
 
24011
# check transactions-7 success:         1
 
24012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24013
COMMIT WORK;
 
24014
SET @@session.sql_mode = 'traditional';
 
24015
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24016
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24017
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24018
'', '', 'was inserted' FROM t0_template
 
24019
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24020
ERROR 22012: Division by 0
 
24021
COMMIT;
 
24022
        
 
24023
# check transactions-8 success:         1
 
24024
# INFO: Storage engine used for t1 seems to be able to revert
 
24025
#       changes made by the failing statement.
 
24026
SET @@session.sql_mode = '';
 
24027
SET AUTOCOMMIT= 1;
 
24028
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24029
COMMIT WORK;
 
24030
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24031
        
 
24032
# check special-1 success:      1
 
24033
UPDATE t1 SET f_charbig = '';
 
24034
        
 
24035
# check special-2 success:      1
 
24036
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24037
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24038
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24040
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24041
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24042
'just inserted' FROM t0_template
 
24043
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24044
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24045
BEGIN
 
24046
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24047
f_charbig = 'updated by trigger'
 
24048
      WHERE f_int1 = new.f_int1;
 
24049
END|
 
24050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24051
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24053
        
 
24054
# check trigger-1 success:      1
 
24055
DROP TRIGGER trg_1;
 
24056
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24057
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24058
f_charbig = 'just inserted'
 
24059
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24060
DELETE FROM t0_aux
 
24061
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24063
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24064
'just inserted' FROM t0_template
 
24065
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24066
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24067
BEGIN
 
24068
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24069
f_charbig = 'updated by trigger'
 
24070
      WHERE f_int1 = new.f_int1;
 
24071
END|
 
24072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24073
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24075
        
 
24076
# check trigger-2 success:      1
 
24077
DROP TRIGGER trg_1;
 
24078
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24079
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24080
f_charbig = 'just inserted'
 
24081
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24082
DELETE FROM t0_aux
 
24083
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24085
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24086
'just inserted' FROM t0_template
 
24087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24088
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24089
BEGIN
 
24090
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24091
f_charbig = 'updated by trigger'
 
24092
      WHERE f_int1 = new.f_int1;
 
24093
END|
 
24094
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24095
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24096
        
 
24097
# check trigger-3 success:      1
 
24098
DROP TRIGGER trg_1;
 
24099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24101
f_charbig = 'just inserted'
 
24102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24103
DELETE FROM t0_aux
 
24104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24107
'just inserted' FROM t0_template
 
24108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24109
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24110
BEGIN
 
24111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24112
f_charbig = 'updated by trigger'
 
24113
      WHERE f_int1 = - old.f_int1;
 
24114
END|
 
24115
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24116
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24117
        
 
24118
# check trigger-4 success:      1
 
24119
DROP TRIGGER trg_1;
 
24120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24122
f_charbig = 'just inserted'
 
24123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24124
DELETE FROM t0_aux
 
24125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24128
'just inserted' FROM t0_template
 
24129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24130
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24131
BEGIN
 
24132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24133
f_charbig = 'updated by trigger'
 
24134
      WHERE f_int1 = new.f_int1;
 
24135
END|
 
24136
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24137
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24138
        
 
24139
# check trigger-5 success:      1
 
24140
DROP TRIGGER trg_1;
 
24141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24143
f_charbig = 'just inserted'
 
24144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24145
DELETE FROM t0_aux
 
24146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24149
'just inserted' FROM t0_template
 
24150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24151
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24152
BEGIN
 
24153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24154
f_charbig = 'updated by trigger'
 
24155
      WHERE f_int1 = - old.f_int1;
 
24156
END|
 
24157
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24159
        
 
24160
# check trigger-6 success:      1
 
24161
DROP TRIGGER trg_1;
 
24162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24164
f_charbig = 'just inserted'
 
24165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24166
DELETE FROM t0_aux
 
24167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24170
'just inserted' FROM t0_template
 
24171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24172
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24173
BEGIN
 
24174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24175
f_charbig = 'updated by trigger'
 
24176
      WHERE f_int1 = - old.f_int1;
 
24177
END|
 
24178
DELETE FROM t0_aux
 
24179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24180
        
 
24181
# check trigger-7 success:      1
 
24182
DROP TRIGGER trg_1;
 
24183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24185
f_charbig = 'just inserted'
 
24186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24187
DELETE FROM t0_aux
 
24188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24191
'just inserted' FROM t0_template
 
24192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24193
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24194
BEGIN
 
24195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24196
f_charbig = 'updated by trigger'
 
24197
      WHERE f_int1 = - old.f_int1;
 
24198
END|
 
24199
DELETE FROM t0_aux
 
24200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24201
        
 
24202
# check trigger-8 success:      1
 
24203
DROP TRIGGER trg_1;
 
24204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24206
f_charbig = 'just inserted'
 
24207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24208
DELETE FROM t0_aux
 
24209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24210
DELETE FROM t1
 
24211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24212
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24213
BEGIN
 
24214
SET new.f_int1 = old.f_int1 + @max_row,
 
24215
new.f_int2 = old.f_int2 - @max_row,
 
24216
new.f_charbig = '####updated per update trigger####';
 
24217
END|
 
24218
UPDATE t1
 
24219
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24220
f_charbig = '####updated per update statement itself####';
 
24221
        
 
24222
# check trigger-9 success:      1
 
24223
DROP TRIGGER trg_2;
 
24224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24226
f_charbig = CONCAT('===',f_char1,'===');
 
24227
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24228
BEGIN
 
24229
SET new.f_int1 = new.f_int1 + @max_row,
 
24230
new.f_int2 = new.f_int2 - @max_row,
 
24231
new.f_charbig = '####updated per update trigger####';
 
24232
END|
 
24233
UPDATE t1
 
24234
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24235
f_charbig = '####updated per update statement itself####';
 
24236
        
 
24237
# check trigger-10 success:     1
 
24238
DROP TRIGGER trg_2;
 
24239
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24240
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24241
f_charbig = CONCAT('===',f_char1,'===');
 
24242
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24243
BEGIN
 
24244
SET new.f_int1 = @my_max1 + @counter,
 
24245
new.f_int2 = @my_min2 - @counter,
 
24246
new.f_charbig = '####updated per insert trigger####';
 
24247
SET @counter = @counter + 1;
 
24248
END|
 
24249
SET @counter = 1;
 
24250
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24251
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24252
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24253
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24255
ORDER BY f_int1;
 
24256
DROP TRIGGER trg_3;
 
24257
        
 
24258
# check trigger-11 success:     1
 
24259
DELETE FROM t1
 
24260
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24261
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24262
AND f_charbig = '####updated per insert trigger####';
 
24263
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24264
BEGIN
 
24265
SET new.f_int1 = @my_max1 + @counter,
 
24266
new.f_int2 = @my_min2 - @counter,
 
24267
new.f_charbig = '####updated per insert trigger####';
 
24268
SET @counter = @counter + 1;
 
24269
END|
 
24270
SET @counter = 1;
 
24271
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24272
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24273
SELECT CAST(f_int1 AS CHAR),
 
24274
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24276
ORDER BY f_int1;
 
24277
DROP TRIGGER trg_3;
 
24278
        
 
24279
# check trigger-12 success:     1
 
24280
DELETE FROM t1
 
24281
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24282
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24283
AND f_charbig = '####updated per insert trigger####';
 
24284
ANALYZE  TABLE t1;
 
24285
Table   Op      Msg_type        Msg_text
 
24286
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
24287
CHECK    TABLE t1 EXTENDED;
 
24288
Table   Op      Msg_type        Msg_text
 
24289
test.t1 check   note    The storage engine for the table doesn't support check
 
24290
CHECKSUM TABLE t1 EXTENDED;
 
24291
Table   Checksum
 
24292
test.t1 <some_value>
 
24293
OPTIMIZE TABLE t1;
 
24294
Table   Op      Msg_type        Msg_text
 
24295
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
24296
# check layout success:    1
 
24297
REPAIR   TABLE t1 EXTENDED;
 
24298
Table   Op      Msg_type        Msg_text
 
24299
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24300
# check layout success:    1
 
24301
TRUNCATE t1;
 
24302
        
 
24303
# check TRUNCATE success:       1
 
24304
# check layout success:    1
 
24305
# End usability test (inc/partition_check.inc)
 
24306
DROP TABLE t1;
 
24307
#  1.2.2 UNIQUE INDEX consisting of two columns
 
24308
DROP TABLE IF EXISTS t1;
 
24309
CREATE TABLE t1 (
 
24310
f_int1 INTEGER,
 
24311
f_int2 INTEGER,
 
24312
f_char1 CHAR(20),
 
24313
f_char2 CHAR(20),
 
24314
f_charbig VARCHAR(1000)
 
24315
 
 
24316
)
 
24317
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
24318
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24319
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24320
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24321
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
24322
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24323
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24324
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24325
# Start usability test (inc/partition_check.inc)
 
24326
create_command
 
24327
SHOW CREATE TABLE t1;
 
24328
Table   Create Table
 
24329
t1      CREATE TABLE `t1` (
 
24330
  `f_int1` int(11) DEFAULT NULL,
 
24331
  `f_int2` int(11) DEFAULT NULL,
 
24332
  `f_char1` char(20) DEFAULT NULL,
 
24333
  `f_char2` char(20) DEFAULT NULL,
 
24334
  `f_charbig` varchar(1000) DEFAULT NULL,
 
24335
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
24336
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
24337
 
 
24338
# check prerequisites-1 success:    1
 
24339
# check COUNT(*) success:    1
 
24340
# check MIN/MAX(f_int1) success:    1
 
24341
# check MIN/MAX(f_int2) success:    1
 
24342
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24343
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24344
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24345
WHERE f_int1 IN (2,3);
 
24346
ERROR 23000: Can't write; duplicate key in table 't1'
 
24347
# check prerequisites-3 success:    1
 
24348
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
24349
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24350
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24351
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24352
WHERE f_int1 IN (2,3);
 
24353
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24354
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24355
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24356
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24357
WHERE f_int1 IN (2,3);
 
24358
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24359
# check read via f_int1 success: 1
 
24360
# check read via f_int2 success: 1
 
24361
        
 
24362
# check multiple-1 success:     1
 
24363
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24364
        
 
24365
# check multiple-2 success:     1
 
24366
INSERT INTO t1 SELECT * FROM t0_template
 
24367
WHERE MOD(f_int1,3) = 0;
 
24368
        
 
24369
# check multiple-3 success:     1
 
24370
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24371
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24372
AND @max_row_div2 + @max_row_div4;
 
24373
        
 
24374
# check multiple-4 success:     1
 
24375
DELETE FROM t1
 
24376
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24377
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24378
        
 
24379
# check multiple-5 success:     1
 
24380
SELECT COUNT(*) INTO @try_count FROM t0_template
 
24381
WHERE MOD(f_int1,3) = 0
 
24382
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24383
SELECT COUNT(*) INTO @clash_count
 
24384
FROM t1 INNER JOIN t0_template USING(f_int1)
 
24385
WHERE MOD(f_int1,3) = 0
 
24386
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24387
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24388
INSERT INTO t1
 
24389
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24390
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24391
f_charbig = '#SINGLE#';
 
24392
        
 
24393
# check single-1 success:       1
 
24394
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24395
INSERT INTO t1
 
24396
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24397
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24398
f_charbig = '#SINGLE#';
 
24399
        
 
24400
# check single-2 success:       1
 
24401
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24402
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24403
UPDATE t1 SET f_int1 = @cur_value2
 
24404
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24405
        
 
24406
# check single-3 success:       1
 
24407
SET @cur_value1= -1;
 
24408
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24409
UPDATE t1 SET f_int1 = @cur_value1
 
24410
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24411
        
 
24412
# check single-4 success:       1
 
24413
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24414
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24415
        
 
24416
# check single-5 success:       1
 
24417
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24418
        
 
24419
# check single-6 success:       1
 
24420
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24421
        
 
24422
# check single-7 success:       1
 
24423
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24424
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24425
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24426
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24427
f_charbig = '#NULL#';
 
24428
INSERT INTO t1
 
24429
SET f_int1 = NULL , f_int2 = -@max_row,
 
24430
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24431
f_charbig = '#NULL#';
 
24432
# check null success:    1
 
24433
        
 
24434
# check null-1 success:         1
 
24435
UPDATE t1 SET f_int1 = -@max_row
 
24436
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24437
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24438
        
 
24439
# check null-2 success:         1
 
24440
UPDATE t1 SET f_int1 = NULL
 
24441
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24442
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24443
        
 
24444
# check null-3 success:         1
 
24445
DELETE FROM t1
 
24446
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24447
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24448
        
 
24449
# check null-4 success:         1
 
24450
DELETE FROM t1
 
24451
WHERE f_int1 = 0 AND f_int2 = 0
 
24452
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24453
AND f_charbig = '#NULL#';
 
24454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24455
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24456
   FROM t0_template source_tab
 
24457
WHERE MOD(f_int1,3) = 0
 
24458
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
24459
ON DUPLICATE KEY
 
24460
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
24461
f_int2 = 2 * @max_row + source_tab.f_int1,
 
24462
f_charbig = 'was updated';
 
24463
        
 
24464
# check unique-1-a success:     1
 
24465
        
 
24466
# check unique-1-b success:     1
 
24467
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24468
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24469
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24470
f_charbig = CONCAT('===',f_char1,'===')
 
24471
WHERE f_charbig = 'was updated';
 
24472
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24473
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
24474
   FROM t0_template source_tab
 
24475
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24476
        
 
24477
# check replace success:        1
 
24478
DELETE FROM t1
 
24479
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
24480
DELETE FROM t1
 
24481
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
24482
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
24483
UPDATE t1 SET f_int2 = f_int1,
 
24484
f_char1 = CAST(f_int1 AS CHAR),
 
24485
f_char2 = CAST(f_int1 AS CHAR),
 
24486
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
24487
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
24488
SET AUTOCOMMIT= 0;
 
24489
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24490
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24491
FROM t0_template source_tab
 
24492
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24493
        
 
24494
# check transactions-1 success:         1
 
24495
COMMIT WORK;
 
24496
        
 
24497
# check transactions-2 success:         1
 
24498
ROLLBACK WORK;
 
24499
        
 
24500
# check transactions-3 success:         1
 
24501
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24502
COMMIT WORK;
 
24503
ROLLBACK WORK;
 
24504
        
 
24505
# check transactions-4 success:         1
 
24506
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24507
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24508
FROM t0_template source_tab
 
24509
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24510
        
 
24511
# check transactions-5 success:         1
 
24512
ROLLBACK WORK;
 
24513
        
 
24514
# check transactions-6 success:         1
 
24515
# INFO: Storage engine used for t1 seems to be transactional.
 
24516
COMMIT;
 
24517
        
 
24518
# check transactions-7 success:         1
 
24519
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24520
COMMIT WORK;
 
24521
SET @@session.sql_mode = 'traditional';
 
24522
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24523
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24524
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24525
'', '', 'was inserted' FROM t0_template
 
24526
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24527
ERROR 22012: Division by 0
 
24528
COMMIT;
 
24529
        
 
24530
# check transactions-8 success:         1
 
24531
# INFO: Storage engine used for t1 seems to be able to revert
 
24532
#       changes made by the failing statement.
 
24533
SET @@session.sql_mode = '';
 
24534
SET AUTOCOMMIT= 1;
 
24535
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24536
COMMIT WORK;
 
24537
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24538
        
 
24539
# check special-1 success:      1
 
24540
UPDATE t1 SET f_charbig = '';
 
24541
        
 
24542
# check special-2 success:      1
 
24543
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24544
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24545
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24549
'just inserted' FROM t0_template
 
24550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24551
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24552
BEGIN
 
24553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24554
f_charbig = 'updated by trigger'
 
24555
      WHERE f_int1 = new.f_int1;
 
24556
END|
 
24557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24558
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24560
        
 
24561
# check trigger-1 success:      1
 
24562
DROP TRIGGER trg_1;
 
24563
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24564
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24565
f_charbig = 'just inserted'
 
24566
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24567
DELETE FROM t0_aux
 
24568
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24570
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24571
'just inserted' FROM t0_template
 
24572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24573
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24574
BEGIN
 
24575
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24576
f_charbig = 'updated by trigger'
 
24577
      WHERE f_int1 = new.f_int1;
 
24578
END|
 
24579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24580
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24582
        
 
24583
# check trigger-2 success:      1
 
24584
DROP TRIGGER trg_1;
 
24585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24587
f_charbig = 'just inserted'
 
24588
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24589
DELETE FROM t0_aux
 
24590
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24592
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24593
'just inserted' FROM t0_template
 
24594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24595
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24596
BEGIN
 
24597
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24598
f_charbig = 'updated by trigger'
 
24599
      WHERE f_int1 = new.f_int1;
 
24600
END|
 
24601
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24602
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24603
        
 
24604
# check trigger-3 success:      1
 
24605
DROP TRIGGER trg_1;
 
24606
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24607
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24608
f_charbig = 'just inserted'
 
24609
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24610
DELETE FROM t0_aux
 
24611
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24613
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24614
'just inserted' FROM t0_template
 
24615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24616
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24617
BEGIN
 
24618
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24619
f_charbig = 'updated by trigger'
 
24620
      WHERE f_int1 = - old.f_int1;
 
24621
END|
 
24622
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24623
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24624
        
 
24625
# check trigger-4 success:      1
 
24626
DROP TRIGGER trg_1;
 
24627
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24628
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24629
f_charbig = 'just inserted'
 
24630
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24631
DELETE FROM t0_aux
 
24632
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24633
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24634
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24635
'just inserted' FROM t0_template
 
24636
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24637
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24638
BEGIN
 
24639
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24640
f_charbig = 'updated by trigger'
 
24641
      WHERE f_int1 = new.f_int1;
 
24642
END|
 
24643
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24644
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24645
        
 
24646
# check trigger-5 success:      1
 
24647
DROP TRIGGER trg_1;
 
24648
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24649
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24650
f_charbig = 'just inserted'
 
24651
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24652
DELETE FROM t0_aux
 
24653
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24654
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24655
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24656
'just inserted' FROM t0_template
 
24657
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24658
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24659
BEGIN
 
24660
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24661
f_charbig = 'updated by trigger'
 
24662
      WHERE f_int1 = - old.f_int1;
 
24663
END|
 
24664
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24665
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24666
        
 
24667
# check trigger-6 success:      1
 
24668
DROP TRIGGER trg_1;
 
24669
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24670
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24671
f_charbig = 'just inserted'
 
24672
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24673
DELETE FROM t0_aux
 
24674
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24675
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24676
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24677
'just inserted' FROM t0_template
 
24678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24679
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24680
BEGIN
 
24681
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24682
f_charbig = 'updated by trigger'
 
24683
      WHERE f_int1 = - old.f_int1;
 
24684
END|
 
24685
DELETE FROM t0_aux
 
24686
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24687
        
 
24688
# check trigger-7 success:      1
 
24689
DROP TRIGGER trg_1;
 
24690
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24691
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24692
f_charbig = 'just inserted'
 
24693
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24694
DELETE FROM t0_aux
 
24695
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24697
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24698
'just inserted' FROM t0_template
 
24699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24700
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24701
BEGIN
 
24702
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24703
f_charbig = 'updated by trigger'
 
24704
      WHERE f_int1 = - old.f_int1;
 
24705
END|
 
24706
DELETE FROM t0_aux
 
24707
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24708
        
 
24709
# check trigger-8 success:      1
 
24710
DROP TRIGGER trg_1;
 
24711
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24712
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24713
f_charbig = 'just inserted'
 
24714
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24715
DELETE FROM t0_aux
 
24716
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24717
DELETE FROM t1
 
24718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24719
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24720
BEGIN
 
24721
SET new.f_int1 = old.f_int1 + @max_row,
 
24722
new.f_int2 = old.f_int2 - @max_row,
 
24723
new.f_charbig = '####updated per update trigger####';
 
24724
END|
 
24725
UPDATE t1
 
24726
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24727
f_charbig = '####updated per update statement itself####';
 
24728
        
 
24729
# check trigger-9 success:      1
 
24730
DROP TRIGGER trg_2;
 
24731
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24732
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24733
f_charbig = CONCAT('===',f_char1,'===');
 
24734
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24735
BEGIN
 
24736
SET new.f_int1 = new.f_int1 + @max_row,
 
24737
new.f_int2 = new.f_int2 - @max_row,
 
24738
new.f_charbig = '####updated per update trigger####';
 
24739
END|
 
24740
UPDATE t1
 
24741
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24742
f_charbig = '####updated per update statement itself####';
 
24743
        
 
24744
# check trigger-10 success:     1
 
24745
DROP TRIGGER trg_2;
 
24746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24748
f_charbig = CONCAT('===',f_char1,'===');
 
24749
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24750
BEGIN
 
24751
SET new.f_int1 = @my_max1 + @counter,
 
24752
new.f_int2 = @my_min2 - @counter,
 
24753
new.f_charbig = '####updated per insert trigger####';
 
24754
SET @counter = @counter + 1;
 
24755
END|
 
24756
SET @counter = 1;
 
24757
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24759
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24760
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24762
ORDER BY f_int1;
 
24763
DROP TRIGGER trg_3;
 
24764
        
 
24765
# check trigger-11 success:     1
 
24766
DELETE FROM t1
 
24767
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24768
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24769
AND f_charbig = '####updated per insert trigger####';
 
24770
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24771
BEGIN
 
24772
SET new.f_int1 = @my_max1 + @counter,
 
24773
new.f_int2 = @my_min2 - @counter,
 
24774
new.f_charbig = '####updated per insert trigger####';
 
24775
SET @counter = @counter + 1;
 
24776
END|
 
24777
SET @counter = 1;
 
24778
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24779
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24780
SELECT CAST(f_int1 AS CHAR),
 
24781
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24782
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24783
ORDER BY f_int1;
 
24784
DROP TRIGGER trg_3;
 
24785
        
 
24786
# check trigger-12 success:     1
 
24787
DELETE FROM t1
 
24788
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24789
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24790
AND f_charbig = '####updated per insert trigger####';
 
24791
ANALYZE  TABLE t1;
 
24792
Table   Op      Msg_type        Msg_text
 
24793
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
24794
CHECK    TABLE t1 EXTENDED;
 
24795
Table   Op      Msg_type        Msg_text
 
24796
test.t1 check   note    The storage engine for the table doesn't support check
 
24797
CHECKSUM TABLE t1 EXTENDED;
 
24798
Table   Checksum
 
24799
test.t1 <some_value>
 
24800
OPTIMIZE TABLE t1;
 
24801
Table   Op      Msg_type        Msg_text
 
24802
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
24803
# check layout success:    1
 
24804
REPAIR   TABLE t1 EXTENDED;
 
24805
Table   Op      Msg_type        Msg_text
 
24806
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24807
# check layout success:    1
 
24808
TRUNCATE t1;
 
24809
        
 
24810
# check TRUNCATE success:       1
 
24811
# check layout success:    1
 
24812
# End usability test (inc/partition_check.inc)
 
24813
DROP TABLE t1;
 
24814
CREATE TABLE t1 (
 
24815
f_int1 INTEGER,
 
24816
f_int2 INTEGER,
 
24817
f_char1 CHAR(20),
 
24818
f_char2 CHAR(20),
 
24819
f_charbig VARCHAR(1000)
 
24820
 
 
24821
)
 
24822
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
24823
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24824
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24825
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24826
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
24827
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24828
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24829
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24830
# Start usability test (inc/partition_check.inc)
 
24831
create_command
 
24832
SHOW CREATE TABLE t1;
 
24833
Table   Create Table
 
24834
t1      CREATE TABLE `t1` (
 
24835
  `f_int1` int(11) DEFAULT NULL,
 
24836
  `f_int2` int(11) DEFAULT NULL,
 
24837
  `f_char1` char(20) DEFAULT NULL,
 
24838
  `f_char2` char(20) DEFAULT NULL,
 
24839
  `f_charbig` varchar(1000) DEFAULT NULL,
 
24840
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
24841
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
24842
 
 
24843
# check prerequisites-1 success:    1
 
24844
# check COUNT(*) success:    1
 
24845
# check MIN/MAX(f_int1) success:    1
 
24846
# check MIN/MAX(f_int2) success:    1
 
24847
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24848
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24849
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24850
WHERE f_int1 IN (2,3);
 
24851
ERROR 23000: Can't write; duplicate key in table 't1'
 
24852
# check prerequisites-3 success:    1
 
24853
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
24854
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24855
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24856
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24857
WHERE f_int1 IN (2,3);
 
24858
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24859
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24860
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24861
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24862
WHERE f_int1 IN (2,3);
 
24863
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24864
# check read via f_int1 success: 1
 
24865
# check read via f_int2 success: 1
 
24866
        
 
24867
# check multiple-1 success:     1
 
24868
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24869
        
 
24870
# check multiple-2 success:     1
 
24871
INSERT INTO t1 SELECT * FROM t0_template
 
24872
WHERE MOD(f_int1,3) = 0;
 
24873
        
 
24874
# check multiple-3 success:     1
 
24875
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24876
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24877
AND @max_row_div2 + @max_row_div4;
 
24878
        
 
24879
# check multiple-4 success:     1
 
24880
DELETE FROM t1
 
24881
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24882
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24883
        
 
24884
# check multiple-5 success:     1
 
24885
SELECT COUNT(*) INTO @try_count FROM t0_template
 
24886
WHERE MOD(f_int1,3) = 0
 
24887
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24888
SELECT COUNT(*) INTO @clash_count
 
24889
FROM t1 INNER JOIN t0_template USING(f_int1)
 
24890
WHERE MOD(f_int1,3) = 0
 
24891
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24892
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24893
INSERT INTO t1
 
24894
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24895
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24896
f_charbig = '#SINGLE#';
 
24897
        
 
24898
# check single-1 success:       1
 
24899
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24900
INSERT INTO t1
 
24901
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24902
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24903
f_charbig = '#SINGLE#';
 
24904
        
 
24905
# check single-2 success:       1
 
24906
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24907
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24908
UPDATE t1 SET f_int1 = @cur_value2
 
24909
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24910
        
 
24911
# check single-3 success:       1
 
24912
SET @cur_value1= -1;
 
24913
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24914
UPDATE t1 SET f_int1 = @cur_value1
 
24915
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24916
        
 
24917
# check single-4 success:       1
 
24918
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24919
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24920
        
 
24921
# check single-5 success:       1
 
24922
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24923
        
 
24924
# check single-6 success:       1
 
24925
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24926
        
 
24927
# check single-7 success:       1
 
24928
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24929
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24930
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24931
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24932
f_charbig = '#NULL#';
 
24933
INSERT INTO t1
 
24934
SET f_int1 = NULL , f_int2 = -@max_row,
 
24935
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24936
f_charbig = '#NULL#';
 
24937
# check null success:    1
 
24938
        
 
24939
# check null-1 success:         1
 
24940
UPDATE t1 SET f_int1 = -@max_row
 
24941
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24942
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24943
        
 
24944
# check null-2 success:         1
 
24945
UPDATE t1 SET f_int1 = NULL
 
24946
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24947
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24948
        
 
24949
# check null-3 success:         1
 
24950
DELETE FROM t1
 
24951
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24952
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24953
        
 
24954
# check null-4 success:         1
 
24955
DELETE FROM t1
 
24956
WHERE f_int1 = 0 AND f_int2 = 0
 
24957
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24958
AND f_charbig = '#NULL#';
 
24959
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24960
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24961
   FROM t0_template source_tab
 
24962
WHERE MOD(f_int1,3) = 0
 
24963
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
24964
ON DUPLICATE KEY
 
24965
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
24966
f_int2 = 2 * @max_row + source_tab.f_int1,
 
24967
f_charbig = 'was updated';
 
24968
        
 
24969
# check unique-1-a success:     1
 
24970
        
 
24971
# check unique-1-b success:     1
 
24972
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24973
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24974
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24975
f_charbig = CONCAT('===',f_char1,'===')
 
24976
WHERE f_charbig = 'was updated';
 
24977
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24978
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
24979
   FROM t0_template source_tab
 
24980
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24981
        
 
24982
# check replace success:        1
 
24983
DELETE FROM t1
 
24984
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
24985
DELETE FROM t1
 
24986
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
24987
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
24988
UPDATE t1 SET f_int2 = f_int1,
 
24989
f_char1 = CAST(f_int1 AS CHAR),
 
24990
f_char2 = CAST(f_int1 AS CHAR),
 
24991
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
24992
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
24993
SET AUTOCOMMIT= 0;
 
24994
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24995
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24996
FROM t0_template source_tab
 
24997
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24998
        
 
24999
# check transactions-1 success:         1
 
25000
COMMIT WORK;
 
25001
        
 
25002
# check transactions-2 success:         1
 
25003
ROLLBACK WORK;
 
25004
        
 
25005
# check transactions-3 success:         1
 
25006
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25007
COMMIT WORK;
 
25008
ROLLBACK WORK;
 
25009
        
 
25010
# check transactions-4 success:         1
 
25011
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25012
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25013
FROM t0_template source_tab
 
25014
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25015
        
 
25016
# check transactions-5 success:         1
 
25017
ROLLBACK WORK;
 
25018
        
 
25019
# check transactions-6 success:         1
 
25020
# INFO: Storage engine used for t1 seems to be transactional.
 
25021
COMMIT;
 
25022
        
 
25023
# check transactions-7 success:         1
 
25024
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25025
COMMIT WORK;
 
25026
SET @@session.sql_mode = 'traditional';
 
25027
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25028
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25029
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25030
'', '', 'was inserted' FROM t0_template
 
25031
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25032
ERROR 22012: Division by 0
 
25033
COMMIT;
 
25034
        
 
25035
# check transactions-8 success:         1
 
25036
# INFO: Storage engine used for t1 seems to be able to revert
 
25037
#       changes made by the failing statement.
 
25038
SET @@session.sql_mode = '';
 
25039
SET AUTOCOMMIT= 1;
 
25040
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25041
COMMIT WORK;
 
25042
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25043
        
 
25044
# check special-1 success:      1
 
25045
UPDATE t1 SET f_charbig = '';
 
25046
        
 
25047
# check special-2 success:      1
 
25048
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25049
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25050
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25052
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25053
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25054
'just inserted' FROM t0_template
 
25055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25056
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25057
BEGIN
 
25058
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25059
f_charbig = 'updated by trigger'
 
25060
      WHERE f_int1 = new.f_int1;
 
25061
END|
 
25062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25063
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25065
        
 
25066
# check trigger-1 success:      1
 
25067
DROP TRIGGER trg_1;
 
25068
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25069
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25070
f_charbig = 'just inserted'
 
25071
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25072
DELETE FROM t0_aux
 
25073
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25074
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25075
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25076
'just inserted' FROM t0_template
 
25077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25078
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25079
BEGIN
 
25080
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25081
f_charbig = 'updated by trigger'
 
25082
      WHERE f_int1 = new.f_int1;
 
25083
END|
 
25084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25085
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25087
        
 
25088
# check trigger-2 success:      1
 
25089
DROP TRIGGER trg_1;
 
25090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25092
f_charbig = 'just inserted'
 
25093
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25094
DELETE FROM t0_aux
 
25095
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25096
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25097
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25098
'just inserted' FROM t0_template
 
25099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25100
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25101
BEGIN
 
25102
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25103
f_charbig = 'updated by trigger'
 
25104
      WHERE f_int1 = new.f_int1;
 
25105
END|
 
25106
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25107
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25108
        
 
25109
# check trigger-3 success:      1
 
25110
DROP TRIGGER trg_1;
 
25111
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25112
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25113
f_charbig = 'just inserted'
 
25114
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25115
DELETE FROM t0_aux
 
25116
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25117
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25118
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25119
'just inserted' FROM t0_template
 
25120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25121
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25122
BEGIN
 
25123
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25124
f_charbig = 'updated by trigger'
 
25125
      WHERE f_int1 = - old.f_int1;
 
25126
END|
 
25127
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25128
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25129
        
 
25130
# check trigger-4 success:      1
 
25131
DROP TRIGGER trg_1;
 
25132
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25133
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25134
f_charbig = 'just inserted'
 
25135
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25136
DELETE FROM t0_aux
 
25137
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25138
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25139
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25140
'just inserted' FROM t0_template
 
25141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25142
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25143
BEGIN
 
25144
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25145
f_charbig = 'updated by trigger'
 
25146
      WHERE f_int1 = new.f_int1;
 
25147
END|
 
25148
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25149
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25150
        
 
25151
# check trigger-5 success:      1
 
25152
DROP TRIGGER trg_1;
 
25153
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25154
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25155
f_charbig = 'just inserted'
 
25156
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25157
DELETE FROM t0_aux
 
25158
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25159
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25160
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25161
'just inserted' FROM t0_template
 
25162
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25163
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25164
BEGIN
 
25165
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25166
f_charbig = 'updated by trigger'
 
25167
      WHERE f_int1 = - old.f_int1;
 
25168
END|
 
25169
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25170
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25171
        
 
25172
# check trigger-6 success:      1
 
25173
DROP TRIGGER trg_1;
 
25174
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25175
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25176
f_charbig = 'just inserted'
 
25177
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25178
DELETE FROM t0_aux
 
25179
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25180
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25181
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25182
'just inserted' FROM t0_template
 
25183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25184
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25185
BEGIN
 
25186
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25187
f_charbig = 'updated by trigger'
 
25188
      WHERE f_int1 = - old.f_int1;
 
25189
END|
 
25190
DELETE FROM t0_aux
 
25191
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25192
        
 
25193
# check trigger-7 success:      1
 
25194
DROP TRIGGER trg_1;
 
25195
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25196
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25197
f_charbig = 'just inserted'
 
25198
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25199
DELETE FROM t0_aux
 
25200
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25202
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25203
'just inserted' FROM t0_template
 
25204
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25205
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25206
BEGIN
 
25207
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25208
f_charbig = 'updated by trigger'
 
25209
      WHERE f_int1 = - old.f_int1;
 
25210
END|
 
25211
DELETE FROM t0_aux
 
25212
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25213
        
 
25214
# check trigger-8 success:      1
 
25215
DROP TRIGGER trg_1;
 
25216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25218
f_charbig = 'just inserted'
 
25219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25220
DELETE FROM t0_aux
 
25221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25222
DELETE FROM t1
 
25223
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25224
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25225
BEGIN
 
25226
SET new.f_int1 = old.f_int1 + @max_row,
 
25227
new.f_int2 = old.f_int2 - @max_row,
 
25228
new.f_charbig = '####updated per update trigger####';
 
25229
END|
 
25230
UPDATE t1
 
25231
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25232
f_charbig = '####updated per update statement itself####';
 
25233
        
 
25234
# check trigger-9 success:      1
 
25235
DROP TRIGGER trg_2;
 
25236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25238
f_charbig = CONCAT('===',f_char1,'===');
 
25239
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25240
BEGIN
 
25241
SET new.f_int1 = new.f_int1 + @max_row,
 
25242
new.f_int2 = new.f_int2 - @max_row,
 
25243
new.f_charbig = '####updated per update trigger####';
 
25244
END|
 
25245
UPDATE t1
 
25246
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25247
f_charbig = '####updated per update statement itself####';
 
25248
        
 
25249
# check trigger-10 success:     1
 
25250
DROP TRIGGER trg_2;
 
25251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25253
f_charbig = CONCAT('===',f_char1,'===');
 
25254
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25255
BEGIN
 
25256
SET new.f_int1 = @my_max1 + @counter,
 
25257
new.f_int2 = @my_min2 - @counter,
 
25258
new.f_charbig = '####updated per insert trigger####';
 
25259
SET @counter = @counter + 1;
 
25260
END|
 
25261
SET @counter = 1;
 
25262
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25263
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25264
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25265
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25267
ORDER BY f_int1;
 
25268
DROP TRIGGER trg_3;
 
25269
        
 
25270
# check trigger-11 success:     1
 
25271
DELETE FROM t1
 
25272
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25273
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25274
AND f_charbig = '####updated per insert trigger####';
 
25275
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25276
BEGIN
 
25277
SET new.f_int1 = @my_max1 + @counter,
 
25278
new.f_int2 = @my_min2 - @counter,
 
25279
new.f_charbig = '####updated per insert trigger####';
 
25280
SET @counter = @counter + 1;
 
25281
END|
 
25282
SET @counter = 1;
 
25283
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25284
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25285
SELECT CAST(f_int1 AS CHAR),
 
25286
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25288
ORDER BY f_int1;
 
25289
DROP TRIGGER trg_3;
 
25290
        
 
25291
# check trigger-12 success:     1
 
25292
DELETE FROM t1
 
25293
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25294
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25295
AND f_charbig = '####updated per insert trigger####';
 
25296
ANALYZE  TABLE t1;
 
25297
Table   Op      Msg_type        Msg_text
 
25298
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
25299
CHECK    TABLE t1 EXTENDED;
 
25300
Table   Op      Msg_type        Msg_text
 
25301
test.t1 check   note    The storage engine for the table doesn't support check
 
25302
CHECKSUM TABLE t1 EXTENDED;
 
25303
Table   Checksum
 
25304
test.t1 <some_value>
 
25305
OPTIMIZE TABLE t1;
 
25306
Table   Op      Msg_type        Msg_text
 
25307
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
25308
# check layout success:    1
 
25309
REPAIR   TABLE t1 EXTENDED;
 
25310
Table   Op      Msg_type        Msg_text
 
25311
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25312
# check layout success:    1
 
25313
TRUNCATE t1;
 
25314
        
 
25315
# check TRUNCATE success:       1
 
25316
# check layout success:    1
 
25317
# End usability test (inc/partition_check.inc)
 
25318
DROP TABLE t1;
 
25319
CREATE TABLE t1 (
 
25320
f_int1 INTEGER,
 
25321
f_int2 INTEGER,
 
25322
f_char1 CHAR(20),
 
25323
f_char2 CHAR(20),
 
25324
f_charbig VARCHAR(1000)
 
25325
 
 
25326
)
 
25327
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
25328
(PARTITION part_3 VALUES IN (-3),
 
25329
PARTITION part_2 VALUES IN (-2),
 
25330
PARTITION part_1 VALUES IN (-1),
 
25331
PARTITION part_N VALUES IN (NULL),
 
25332
PARTITION part0 VALUES IN (0),
 
25333
PARTITION part1 VALUES IN (1),
 
25334
PARTITION part2 VALUES IN (2),
 
25335
PARTITION part3 VALUES IN (3));
 
25336
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25337
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25338
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25339
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
25340
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25341
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25342
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25343
# Start usability test (inc/partition_check.inc)
 
25344
create_command
 
25345
SHOW CREATE TABLE t1;
 
25346
Table   Create Table
 
25347
t1      CREATE TABLE `t1` (
 
25348
  `f_int1` int(11) DEFAULT NULL,
 
25349
  `f_int2` int(11) DEFAULT NULL,
 
25350
  `f_char1` char(20) DEFAULT NULL,
 
25351
  `f_char2` char(20) DEFAULT NULL,
 
25352
  `f_charbig` varchar(1000) DEFAULT NULL,
 
25353
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
25354
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
25355
 
 
25356
# check prerequisites-1 success:    1
 
25357
# check COUNT(*) success:    1
 
25358
# check MIN/MAX(f_int1) success:    1
 
25359
# check MIN/MAX(f_int2) success:    1
 
25360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25361
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25362
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25363
WHERE f_int1 IN (2,3);
 
25364
ERROR 23000: Can't write; duplicate key in table 't1'
 
25365
# check prerequisites-3 success:    1
 
25366
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
25367
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25368
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25369
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25370
WHERE f_int1 IN (2,3);
 
25371
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25372
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25373
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25374
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25375
WHERE f_int1 IN (2,3);
 
25376
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25377
# check read via f_int1 success: 1
 
25378
# check read via f_int2 success: 1
 
25379
        
 
25380
# check multiple-1 success:     1
 
25381
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25382
        
 
25383
# check multiple-2 success:     1
 
25384
INSERT INTO t1 SELECT * FROM t0_template
 
25385
WHERE MOD(f_int1,3) = 0;
 
25386
        
 
25387
# check multiple-3 success:     1
 
25388
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25389
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25390
AND @max_row_div2 + @max_row_div4;
 
25391
        
 
25392
# check multiple-4 success:     1
 
25393
DELETE FROM t1
 
25394
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25395
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25396
        
 
25397
# check multiple-5 success:     1
 
25398
SELECT COUNT(*) INTO @try_count FROM t0_template
 
25399
WHERE MOD(f_int1,3) = 0
 
25400
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25401
SELECT COUNT(*) INTO @clash_count
 
25402
FROM t1 INNER JOIN t0_template USING(f_int1)
 
25403
WHERE MOD(f_int1,3) = 0
 
25404
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25405
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25406
INSERT INTO t1
 
25407
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25408
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25409
f_charbig = '#SINGLE#';
 
25410
        
 
25411
# check single-1 success:       1
 
25412
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25413
INSERT INTO t1
 
25414
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25415
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25416
f_charbig = '#SINGLE#';
 
25417
        
 
25418
# check single-2 success:       1
 
25419
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25420
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25421
UPDATE t1 SET f_int1 = @cur_value2
 
25422
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25423
        
 
25424
# check single-3 success:       1
 
25425
SET @cur_value1= -1;
 
25426
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25427
UPDATE t1 SET f_int1 = @cur_value1
 
25428
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25429
        
 
25430
# check single-4 success:       1
 
25431
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25432
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25433
        
 
25434
# check single-5 success:       1
 
25435
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25436
        
 
25437
# check single-6 success:       1
 
25438
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25439
        
 
25440
# check single-7 success:       1
 
25441
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
25442
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25443
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25444
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25445
f_charbig = '#NULL#';
 
25446
INSERT INTO t1
 
25447
SET f_int1 = NULL , f_int2 = -@max_row,
 
25448
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25449
f_charbig = '#NULL#';
 
25450
# check null success:    1
 
25451
        
 
25452
# check null-1 success:         1
 
25453
UPDATE t1 SET f_int1 = -@max_row
 
25454
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25455
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25456
        
 
25457
# check null-2 success:         1
 
25458
UPDATE t1 SET f_int1 = NULL
 
25459
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25460
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25461
        
 
25462
# check null-3 success:         1
 
25463
DELETE FROM t1
 
25464
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25465
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25466
        
 
25467
# check null-4 success:         1
 
25468
DELETE FROM t1
 
25469
WHERE f_int1 = 0 AND f_int2 = 0
 
25470
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25471
AND f_charbig = '#NULL#';
 
25472
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25473
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25474
   FROM t0_template source_tab
 
25475
WHERE MOD(f_int1,3) = 0
 
25476
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
25477
ON DUPLICATE KEY
 
25478
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
25479
f_int2 = 2 * @max_row + source_tab.f_int1,
 
25480
f_charbig = 'was updated';
 
25481
        
 
25482
# check unique-1-a success:     1
 
25483
        
 
25484
# check unique-1-b success:     1
 
25485
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25486
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25487
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25488
f_charbig = CONCAT('===',f_char1,'===')
 
25489
WHERE f_charbig = 'was updated';
 
25490
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25491
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
25492
   FROM t0_template source_tab
 
25493
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25494
        
 
25495
# check replace success:        1
 
25496
DELETE FROM t1
 
25497
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
25498
DELETE FROM t1
 
25499
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
25500
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
25501
UPDATE t1 SET f_int2 = f_int1,
 
25502
f_char1 = CAST(f_int1 AS CHAR),
 
25503
f_char2 = CAST(f_int1 AS CHAR),
 
25504
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
25505
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
25506
SET AUTOCOMMIT= 0;
 
25507
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25508
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25509
FROM t0_template source_tab
 
25510
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25511
        
 
25512
# check transactions-1 success:         1
 
25513
COMMIT WORK;
 
25514
        
 
25515
# check transactions-2 success:         1
 
25516
ROLLBACK WORK;
 
25517
        
 
25518
# check transactions-3 success:         1
 
25519
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25520
COMMIT WORK;
 
25521
ROLLBACK WORK;
 
25522
        
 
25523
# check transactions-4 success:         1
 
25524
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25525
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25526
FROM t0_template source_tab
 
25527
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25528
        
 
25529
# check transactions-5 success:         1
 
25530
ROLLBACK WORK;
 
25531
        
 
25532
# check transactions-6 success:         1
 
25533
# INFO: Storage engine used for t1 seems to be transactional.
 
25534
COMMIT;
 
25535
        
 
25536
# check transactions-7 success:         1
 
25537
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25538
COMMIT WORK;
 
25539
SET @@session.sql_mode = 'traditional';
 
25540
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25541
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25542
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25543
'', '', 'was inserted' FROM t0_template
 
25544
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25545
ERROR 22012: Division by 0
 
25546
COMMIT;
 
25547
        
 
25548
# check transactions-8 success:         1
 
25549
# INFO: Storage engine used for t1 seems to be able to revert
 
25550
#       changes made by the failing statement.
 
25551
SET @@session.sql_mode = '';
 
25552
SET AUTOCOMMIT= 1;
 
25553
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25554
COMMIT WORK;
 
25555
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25556
        
 
25557
# check special-1 success:      1
 
25558
UPDATE t1 SET f_charbig = '';
 
25559
        
 
25560
# check special-2 success:      1
 
25561
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25562
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25563
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25566
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25567
'just inserted' FROM t0_template
 
25568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25569
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25570
BEGIN
 
25571
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25572
f_charbig = 'updated by trigger'
 
25573
      WHERE f_int1 = new.f_int1;
 
25574
END|
 
25575
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25576
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25578
        
 
25579
# check trigger-1 success:      1
 
25580
DROP TRIGGER trg_1;
 
25581
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25582
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25583
f_charbig = 'just inserted'
 
25584
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25585
DELETE FROM t0_aux
 
25586
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25588
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25589
'just inserted' FROM t0_template
 
25590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25591
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25592
BEGIN
 
25593
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25594
f_charbig = 'updated by trigger'
 
25595
      WHERE f_int1 = new.f_int1;
 
25596
END|
 
25597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25598
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25600
        
 
25601
# check trigger-2 success:      1
 
25602
DROP TRIGGER trg_1;
 
25603
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25604
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25605
f_charbig = 'just inserted'
 
25606
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25607
DELETE FROM t0_aux
 
25608
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25609
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25610
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25611
'just inserted' FROM t0_template
 
25612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25613
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25614
BEGIN
 
25615
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25616
f_charbig = 'updated by trigger'
 
25617
      WHERE f_int1 = new.f_int1;
 
25618
END|
 
25619
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25620
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25621
        
 
25622
# check trigger-3 success:      1
 
25623
DROP TRIGGER trg_1;
 
25624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25626
f_charbig = 'just inserted'
 
25627
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25628
DELETE FROM t0_aux
 
25629
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25630
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25631
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25632
'just inserted' FROM t0_template
 
25633
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25634
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25635
BEGIN
 
25636
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25637
f_charbig = 'updated by trigger'
 
25638
      WHERE f_int1 = - old.f_int1;
 
25639
END|
 
25640
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25641
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25642
        
 
25643
# check trigger-4 success:      1
 
25644
DROP TRIGGER trg_1;
 
25645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25647
f_charbig = 'just inserted'
 
25648
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25649
DELETE FROM t0_aux
 
25650
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25651
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25652
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25653
'just inserted' FROM t0_template
 
25654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25655
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25656
BEGIN
 
25657
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25658
f_charbig = 'updated by trigger'
 
25659
      WHERE f_int1 = new.f_int1;
 
25660
END|
 
25661
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25662
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25663
        
 
25664
# check trigger-5 success:      1
 
25665
DROP TRIGGER trg_1;
 
25666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25668
f_charbig = 'just inserted'
 
25669
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25670
DELETE FROM t0_aux
 
25671
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25674
'just inserted' FROM t0_template
 
25675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25676
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25677
BEGIN
 
25678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25679
f_charbig = 'updated by trigger'
 
25680
      WHERE f_int1 = - old.f_int1;
 
25681
END|
 
25682
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25683
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25684
        
 
25685
# check trigger-6 success:      1
 
25686
DROP TRIGGER trg_1;
 
25687
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25688
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25689
f_charbig = 'just inserted'
 
25690
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25691
DELETE FROM t0_aux
 
25692
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25693
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25694
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25695
'just inserted' FROM t0_template
 
25696
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25697
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25698
BEGIN
 
25699
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25700
f_charbig = 'updated by trigger'
 
25701
      WHERE f_int1 = - old.f_int1;
 
25702
END|
 
25703
DELETE FROM t0_aux
 
25704
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25705
        
 
25706
# check trigger-7 success:      1
 
25707
DROP TRIGGER trg_1;
 
25708
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25709
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25710
f_charbig = 'just inserted'
 
25711
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25712
DELETE FROM t0_aux
 
25713
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25714
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25715
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25716
'just inserted' FROM t0_template
 
25717
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25718
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25719
BEGIN
 
25720
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25721
f_charbig = 'updated by trigger'
 
25722
      WHERE f_int1 = - old.f_int1;
 
25723
END|
 
25724
DELETE FROM t0_aux
 
25725
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25726
        
 
25727
# check trigger-8 success:      1
 
25728
DROP TRIGGER trg_1;
 
25729
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25730
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25731
f_charbig = 'just inserted'
 
25732
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25733
DELETE FROM t0_aux
 
25734
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25735
DELETE FROM t1
 
25736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25737
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25738
BEGIN
 
25739
SET new.f_int1 = old.f_int1 + @max_row,
 
25740
new.f_int2 = old.f_int2 - @max_row,
 
25741
new.f_charbig = '####updated per update trigger####';
 
25742
END|
 
25743
UPDATE t1
 
25744
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25745
f_charbig = '####updated per update statement itself####';
 
25746
        
 
25747
# check trigger-9 success:      1
 
25748
DROP TRIGGER trg_2;
 
25749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25751
f_charbig = CONCAT('===',f_char1,'===');
 
25752
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25753
BEGIN
 
25754
SET new.f_int1 = new.f_int1 + @max_row,
 
25755
new.f_int2 = new.f_int2 - @max_row,
 
25756
new.f_charbig = '####updated per update trigger####';
 
25757
END|
 
25758
UPDATE t1
 
25759
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25760
f_charbig = '####updated per update statement itself####';
 
25761
        
 
25762
# check trigger-10 success:     1
 
25763
DROP TRIGGER trg_2;
 
25764
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25765
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25766
f_charbig = CONCAT('===',f_char1,'===');
 
25767
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25768
BEGIN
 
25769
SET new.f_int1 = @my_max1 + @counter,
 
25770
new.f_int2 = @my_min2 - @counter,
 
25771
new.f_charbig = '####updated per insert trigger####';
 
25772
SET @counter = @counter + 1;
 
25773
END|
 
25774
SET @counter = 1;
 
25775
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25776
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25777
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25778
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25780
ORDER BY f_int1;
 
25781
DROP TRIGGER trg_3;
 
25782
        
 
25783
# check trigger-11 success:     1
 
25784
DELETE FROM t1
 
25785
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25786
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25787
AND f_charbig = '####updated per insert trigger####';
 
25788
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25789
BEGIN
 
25790
SET new.f_int1 = @my_max1 + @counter,
 
25791
new.f_int2 = @my_min2 - @counter,
 
25792
new.f_charbig = '####updated per insert trigger####';
 
25793
SET @counter = @counter + 1;
 
25794
END|
 
25795
SET @counter = 1;
 
25796
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25797
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25798
SELECT CAST(f_int1 AS CHAR),
 
25799
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25801
ORDER BY f_int1;
 
25802
DROP TRIGGER trg_3;
 
25803
        
 
25804
# check trigger-12 success:     1
 
25805
DELETE FROM t1
 
25806
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25807
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25808
AND f_charbig = '####updated per insert trigger####';
 
25809
ANALYZE  TABLE t1;
 
25810
Table   Op      Msg_type        Msg_text
 
25811
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
25812
CHECK    TABLE t1 EXTENDED;
 
25813
Table   Op      Msg_type        Msg_text
 
25814
test.t1 check   note    The storage engine for the table doesn't support check
 
25815
CHECKSUM TABLE t1 EXTENDED;
 
25816
Table   Checksum
 
25817
test.t1 <some_value>
 
25818
OPTIMIZE TABLE t1;
 
25819
Table   Op      Msg_type        Msg_text
 
25820
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
25821
# check layout success:    1
 
25822
REPAIR   TABLE t1 EXTENDED;
 
25823
Table   Op      Msg_type        Msg_text
 
25824
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25825
# check layout success:    1
 
25826
TRUNCATE t1;
 
25827
        
 
25828
# check TRUNCATE success:       1
 
25829
# check layout success:    1
 
25830
# End usability test (inc/partition_check.inc)
 
25831
DROP TABLE t1;
 
25832
CREATE TABLE t1 (
 
25833
f_int1 INTEGER,
 
25834
f_int2 INTEGER,
 
25835
f_char1 CHAR(20),
 
25836
f_char2 CHAR(20),
 
25837
f_charbig VARCHAR(1000)
 
25838
 
 
25839
)
 
25840
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
25841
(PARTITION parta VALUES LESS THAN (0),
 
25842
PARTITION partb VALUES LESS THAN (5),
 
25843
PARTITION partc VALUES LESS THAN (10),
 
25844
PARTITION partd VALUES LESS THAN (10 + 5),
 
25845
PARTITION parte VALUES LESS THAN (20),
 
25846
PARTITION partf VALUES LESS THAN (2147483646));
 
25847
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25848
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25849
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25850
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
25851
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25852
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25853
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25854
# Start usability test (inc/partition_check.inc)
 
25855
create_command
 
25856
SHOW CREATE TABLE t1;
 
25857
Table   Create Table
 
25858
t1      CREATE TABLE `t1` (
 
25859
  `f_int1` int(11) DEFAULT NULL,
 
25860
  `f_int2` int(11) DEFAULT NULL,
 
25861
  `f_char1` char(20) DEFAULT NULL,
 
25862
  `f_char2` char(20) DEFAULT NULL,
 
25863
  `f_charbig` varchar(1000) DEFAULT NULL,
 
25864
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
25865
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
25866
 
 
25867
# check prerequisites-1 success:    1
 
25868
# check COUNT(*) success:    1
 
25869
# check MIN/MAX(f_int1) success:    1
 
25870
# check MIN/MAX(f_int2) success:    1
 
25871
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25872
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25873
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25874
WHERE f_int1 IN (2,3);
 
25875
ERROR 23000: Can't write; duplicate key in table 't1'
 
25876
# check prerequisites-3 success:    1
 
25877
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
25878
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25879
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25880
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25881
WHERE f_int1 IN (2,3);
 
25882
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25884
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25885
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25886
WHERE f_int1 IN (2,3);
 
25887
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25888
# check read via f_int1 success: 1
 
25889
# check read via f_int2 success: 1
 
25890
        
 
25891
# check multiple-1 success:     1
 
25892
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25893
        
 
25894
# check multiple-2 success:     1
 
25895
INSERT INTO t1 SELECT * FROM t0_template
 
25896
WHERE MOD(f_int1,3) = 0;
 
25897
        
 
25898
# check multiple-3 success:     1
 
25899
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25900
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25901
AND @max_row_div2 + @max_row_div4;
 
25902
        
 
25903
# check multiple-4 success:     1
 
25904
DELETE FROM t1
 
25905
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25906
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25907
        
 
25908
# check multiple-5 success:     1
 
25909
SELECT COUNT(*) INTO @try_count FROM t0_template
 
25910
WHERE MOD(f_int1,3) = 0
 
25911
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25912
SELECT COUNT(*) INTO @clash_count
 
25913
FROM t1 INNER JOIN t0_template USING(f_int1)
 
25914
WHERE MOD(f_int1,3) = 0
 
25915
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25916
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25917
INSERT INTO t1
 
25918
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25919
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25920
f_charbig = '#SINGLE#';
 
25921
        
 
25922
# check single-1 success:       1
 
25923
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25924
INSERT INTO t1
 
25925
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25926
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25927
f_charbig = '#SINGLE#';
 
25928
        
 
25929
# check single-2 success:       1
 
25930
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25931
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25932
UPDATE t1 SET f_int1 = @cur_value2
 
25933
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25934
        
 
25935
# check single-3 success:       1
 
25936
SET @cur_value1= -1;
 
25937
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25938
UPDATE t1 SET f_int1 = @cur_value1
 
25939
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25940
        
 
25941
# check single-4 success:       1
 
25942
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25943
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25944
        
 
25945
# check single-5 success:       1
 
25946
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25947
        
 
25948
# check single-6 success:       1
 
25949
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25950
ERROR HY000: Table has no partition for value 2147483647
 
25951
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25952
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25953
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25954
f_charbig = '#NULL#';
 
25955
INSERT INTO t1
 
25956
SET f_int1 = NULL , f_int2 = -@max_row,
 
25957
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25958
f_charbig = '#NULL#';
 
25959
# check null success:    1
 
25960
        
 
25961
# check null-1 success:         1
 
25962
UPDATE t1 SET f_int1 = -@max_row
 
25963
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25964
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25965
        
 
25966
# check null-2 success:         1
 
25967
UPDATE t1 SET f_int1 = NULL
 
25968
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25969
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25970
        
 
25971
# check null-3 success:         1
 
25972
DELETE FROM t1
 
25973
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25974
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25975
        
 
25976
# check null-4 success:         1
 
25977
DELETE FROM t1
 
25978
WHERE f_int1 = 0 AND f_int2 = 0
 
25979
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25980
AND f_charbig = '#NULL#';
 
25981
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25982
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25983
   FROM t0_template source_tab
 
25984
WHERE MOD(f_int1,3) = 0
 
25985
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
25986
ON DUPLICATE KEY
 
25987
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
25988
f_int2 = 2 * @max_row + source_tab.f_int1,
 
25989
f_charbig = 'was updated';
 
25990
        
 
25991
# check unique-1-a success:     1
 
25992
        
 
25993
# check unique-1-b success:     1
 
25994
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25995
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25996
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25997
f_charbig = CONCAT('===',f_char1,'===')
 
25998
WHERE f_charbig = 'was updated';
 
25999
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26000
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
26001
   FROM t0_template source_tab
 
26002
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26003
        
 
26004
# check replace success:        1
 
26005
DELETE FROM t1
 
26006
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
26007
DELETE FROM t1
 
26008
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
26009
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
26010
UPDATE t1 SET f_int2 = f_int1,
 
26011
f_char1 = CAST(f_int1 AS CHAR),
 
26012
f_char2 = CAST(f_int1 AS CHAR),
 
26013
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
26014
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
26015
SET AUTOCOMMIT= 0;
 
26016
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26017
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26018
FROM t0_template source_tab
 
26019
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26020
        
 
26021
# check transactions-1 success:         1
 
26022
COMMIT WORK;
 
26023
        
 
26024
# check transactions-2 success:         1
 
26025
ROLLBACK WORK;
 
26026
        
 
26027
# check transactions-3 success:         1
 
26028
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26029
COMMIT WORK;
 
26030
ROLLBACK WORK;
 
26031
        
 
26032
# check transactions-4 success:         1
 
26033
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26034
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26035
FROM t0_template source_tab
 
26036
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26037
        
 
26038
# check transactions-5 success:         1
 
26039
ROLLBACK WORK;
 
26040
        
 
26041
# check transactions-6 success:         1
 
26042
# INFO: Storage engine used for t1 seems to be transactional.
 
26043
COMMIT;
 
26044
        
 
26045
# check transactions-7 success:         1
 
26046
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26047
COMMIT WORK;
 
26048
SET @@session.sql_mode = 'traditional';
 
26049
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26050
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26051
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26052
'', '', 'was inserted' FROM t0_template
 
26053
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26054
ERROR 22012: Division by 0
 
26055
COMMIT;
 
26056
        
 
26057
# check transactions-8 success:         1
 
26058
# INFO: Storage engine used for t1 seems to be able to revert
 
26059
#       changes made by the failing statement.
 
26060
SET @@session.sql_mode = '';
 
26061
SET AUTOCOMMIT= 1;
 
26062
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26063
COMMIT WORK;
 
26064
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26065
        
 
26066
# check special-1 success:      1
 
26067
UPDATE t1 SET f_charbig = '';
 
26068
        
 
26069
# check special-2 success:      1
 
26070
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26071
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26072
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26074
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26075
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26076
'just inserted' FROM t0_template
 
26077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26078
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26079
BEGIN
 
26080
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26081
f_charbig = 'updated by trigger'
 
26082
      WHERE f_int1 = new.f_int1;
 
26083
END|
 
26084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26085
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26087
        
 
26088
# check trigger-1 success:      1
 
26089
DROP TRIGGER trg_1;
 
26090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26092
f_charbig = 'just inserted'
 
26093
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26094
DELETE FROM t0_aux
 
26095
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26096
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26097
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26098
'just inserted' FROM t0_template
 
26099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26100
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26101
BEGIN
 
26102
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26103
f_charbig = 'updated by trigger'
 
26104
      WHERE f_int1 = new.f_int1;
 
26105
END|
 
26106
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26107
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26109
        
 
26110
# check trigger-2 success:      1
 
26111
DROP TRIGGER trg_1;
 
26112
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26113
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26114
f_charbig = 'just inserted'
 
26115
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26116
DELETE FROM t0_aux
 
26117
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26118
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26119
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26120
'just inserted' FROM t0_template
 
26121
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26122
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26123
BEGIN
 
26124
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26125
f_charbig = 'updated by trigger'
 
26126
      WHERE f_int1 = new.f_int1;
 
26127
END|
 
26128
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26129
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26130
        
 
26131
# check trigger-3 success:      1
 
26132
DROP TRIGGER trg_1;
 
26133
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26134
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26135
f_charbig = 'just inserted'
 
26136
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26137
DELETE FROM t0_aux
 
26138
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26139
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26140
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26141
'just inserted' FROM t0_template
 
26142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26143
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26144
BEGIN
 
26145
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26146
f_charbig = 'updated by trigger'
 
26147
      WHERE f_int1 = - old.f_int1;
 
26148
END|
 
26149
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26150
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26151
        
 
26152
# check trigger-4 success:      1
 
26153
DROP TRIGGER trg_1;
 
26154
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26155
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26156
f_charbig = 'just inserted'
 
26157
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26158
DELETE FROM t0_aux
 
26159
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26160
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26161
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26162
'just inserted' FROM t0_template
 
26163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26164
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26165
BEGIN
 
26166
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26167
f_charbig = 'updated by trigger'
 
26168
      WHERE f_int1 = new.f_int1;
 
26169
END|
 
26170
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26171
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26172
        
 
26173
# check trigger-5 success:      1
 
26174
DROP TRIGGER trg_1;
 
26175
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26176
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26177
f_charbig = 'just inserted'
 
26178
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26179
DELETE FROM t0_aux
 
26180
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26182
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26183
'just inserted' FROM t0_template
 
26184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26185
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26186
BEGIN
 
26187
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26188
f_charbig = 'updated by trigger'
 
26189
      WHERE f_int1 = - old.f_int1;
 
26190
END|
 
26191
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26192
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26193
        
 
26194
# check trigger-6 success:      1
 
26195
DROP TRIGGER trg_1;
 
26196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26198
f_charbig = 'just inserted'
 
26199
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26200
DELETE FROM t0_aux
 
26201
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26203
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26204
'just inserted' FROM t0_template
 
26205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26206
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26207
BEGIN
 
26208
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26209
f_charbig = 'updated by trigger'
 
26210
      WHERE f_int1 = - old.f_int1;
 
26211
END|
 
26212
DELETE FROM t0_aux
 
26213
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26214
        
 
26215
# check trigger-7 success:      1
 
26216
DROP TRIGGER trg_1;
 
26217
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26218
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26219
f_charbig = 'just inserted'
 
26220
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26221
DELETE FROM t0_aux
 
26222
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26224
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26225
'just inserted' FROM t0_template
 
26226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26227
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26228
BEGIN
 
26229
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26230
f_charbig = 'updated by trigger'
 
26231
      WHERE f_int1 = - old.f_int1;
 
26232
END|
 
26233
DELETE FROM t0_aux
 
26234
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26235
        
 
26236
# check trigger-8 success:      1
 
26237
DROP TRIGGER trg_1;
 
26238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26240
f_charbig = 'just inserted'
 
26241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26242
DELETE FROM t0_aux
 
26243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26244
DELETE FROM t1
 
26245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26246
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26247
BEGIN
 
26248
SET new.f_int1 = old.f_int1 + @max_row,
 
26249
new.f_int2 = old.f_int2 - @max_row,
 
26250
new.f_charbig = '####updated per update trigger####';
 
26251
END|
 
26252
UPDATE t1
 
26253
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26254
f_charbig = '####updated per update statement itself####';
 
26255
        
 
26256
# check trigger-9 success:      1
 
26257
DROP TRIGGER trg_2;
 
26258
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26259
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26260
f_charbig = CONCAT('===',f_char1,'===');
 
26261
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26262
BEGIN
 
26263
SET new.f_int1 = new.f_int1 + @max_row,
 
26264
new.f_int2 = new.f_int2 - @max_row,
 
26265
new.f_charbig = '####updated per update trigger####';
 
26266
END|
 
26267
UPDATE t1
 
26268
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26269
f_charbig = '####updated per update statement itself####';
 
26270
        
 
26271
# check trigger-10 success:     1
 
26272
DROP TRIGGER trg_2;
 
26273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26275
f_charbig = CONCAT('===',f_char1,'===');
 
26276
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26277
BEGIN
 
26278
SET new.f_int1 = @my_max1 + @counter,
 
26279
new.f_int2 = @my_min2 - @counter,
 
26280
new.f_charbig = '####updated per insert trigger####';
 
26281
SET @counter = @counter + 1;
 
26282
END|
 
26283
SET @counter = 1;
 
26284
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26285
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26286
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26287
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26288
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26289
ORDER BY f_int1;
 
26290
DROP TRIGGER trg_3;
 
26291
        
 
26292
# check trigger-11 success:     1
 
26293
DELETE FROM t1
 
26294
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26295
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26296
AND f_charbig = '####updated per insert trigger####';
 
26297
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26298
BEGIN
 
26299
SET new.f_int1 = @my_max1 + @counter,
 
26300
new.f_int2 = @my_min2 - @counter,
 
26301
new.f_charbig = '####updated per insert trigger####';
 
26302
SET @counter = @counter + 1;
 
26303
END|
 
26304
SET @counter = 1;
 
26305
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26306
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26307
SELECT CAST(f_int1 AS CHAR),
 
26308
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26310
ORDER BY f_int1;
 
26311
DROP TRIGGER trg_3;
 
26312
        
 
26313
# check trigger-12 success:     1
 
26314
DELETE FROM t1
 
26315
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26316
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26317
AND f_charbig = '####updated per insert trigger####';
 
26318
ANALYZE  TABLE t1;
 
26319
Table   Op      Msg_type        Msg_text
 
26320
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
26321
CHECK    TABLE t1 EXTENDED;
 
26322
Table   Op      Msg_type        Msg_text
 
26323
test.t1 check   note    The storage engine for the table doesn't support check
 
26324
CHECKSUM TABLE t1 EXTENDED;
 
26325
Table   Checksum
 
26326
test.t1 <some_value>
 
26327
OPTIMIZE TABLE t1;
 
26328
Table   Op      Msg_type        Msg_text
 
26329
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
26330
# check layout success:    1
 
26331
REPAIR   TABLE t1 EXTENDED;
 
26332
Table   Op      Msg_type        Msg_text
 
26333
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26334
# check layout success:    1
 
26335
TRUNCATE t1;
 
26336
        
 
26337
# check TRUNCATE success:       1
 
26338
# check layout success:    1
 
26339
# End usability test (inc/partition_check.inc)
 
26340
DROP TABLE t1;
 
26341
CREATE TABLE t1 (
 
26342
f_int1 INTEGER,
 
26343
f_int2 INTEGER,
 
26344
f_char1 CHAR(20),
 
26345
f_char2 CHAR(20),
 
26346
f_charbig VARCHAR(1000)
 
26347
 
 
26348
)
 
26349
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
26350
(PARTITION parta VALUES LESS THAN (0),
 
26351
PARTITION partb VALUES LESS THAN (5),
 
26352
PARTITION partc VALUES LESS THAN (10),
 
26353
PARTITION partd VALUES LESS THAN (2147483646));
 
26354
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26355
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26356
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26357
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
26358
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26359
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26360
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26361
# Start usability test (inc/partition_check.inc)
 
26362
create_command
 
26363
SHOW CREATE TABLE t1;
 
26364
Table   Create Table
 
26365
t1      CREATE TABLE `t1` (
 
26366
  `f_int1` int(11) DEFAULT NULL,
 
26367
  `f_int2` int(11) DEFAULT NULL,
 
26368
  `f_char1` char(20) DEFAULT NULL,
 
26369
  `f_char2` char(20) DEFAULT NULL,
 
26370
  `f_charbig` varchar(1000) DEFAULT NULL,
 
26371
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
26372
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
26373
 
 
26374
# check prerequisites-1 success:    1
 
26375
# check COUNT(*) success:    1
 
26376
# check MIN/MAX(f_int1) success:    1
 
26377
# check MIN/MAX(f_int2) success:    1
 
26378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26379
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26380
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26381
WHERE f_int1 IN (2,3);
 
26382
ERROR 23000: Can't write; duplicate key in table 't1'
 
26383
# check prerequisites-3 success:    1
 
26384
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
26385
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26386
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26387
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26388
WHERE f_int1 IN (2,3);
 
26389
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26390
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26391
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26392
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26393
WHERE f_int1 IN (2,3);
 
26394
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26395
# check read via f_int1 success: 1
 
26396
# check read via f_int2 success: 1
 
26397
        
 
26398
# check multiple-1 success:     1
 
26399
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26400
        
 
26401
# check multiple-2 success:     1
 
26402
INSERT INTO t1 SELECT * FROM t0_template
 
26403
WHERE MOD(f_int1,3) = 0;
 
26404
        
 
26405
# check multiple-3 success:     1
 
26406
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26407
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26408
AND @max_row_div2 + @max_row_div4;
 
26409
        
 
26410
# check multiple-4 success:     1
 
26411
DELETE FROM t1
 
26412
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26413
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26414
        
 
26415
# check multiple-5 success:     1
 
26416
SELECT COUNT(*) INTO @try_count FROM t0_template
 
26417
WHERE MOD(f_int1,3) = 0
 
26418
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26419
SELECT COUNT(*) INTO @clash_count
 
26420
FROM t1 INNER JOIN t0_template USING(f_int1)
 
26421
WHERE MOD(f_int1,3) = 0
 
26422
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26423
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26424
INSERT INTO t1
 
26425
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26426
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26427
f_charbig = '#SINGLE#';
 
26428
        
 
26429
# check single-1 success:       1
 
26430
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26431
INSERT INTO t1
 
26432
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26433
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26434
f_charbig = '#SINGLE#';
 
26435
        
 
26436
# check single-2 success:       1
 
26437
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26438
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26439
UPDATE t1 SET f_int1 = @cur_value2
 
26440
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26441
        
 
26442
# check single-3 success:       1
 
26443
SET @cur_value1= -1;
 
26444
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26445
UPDATE t1 SET f_int1 = @cur_value1
 
26446
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26447
        
 
26448
# check single-4 success:       1
 
26449
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26450
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26451
        
 
26452
# check single-5 success:       1
 
26453
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26454
        
 
26455
# check single-6 success:       1
 
26456
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26457
ERROR HY000: Table has no partition for value 2147483647
 
26458
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26459
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26460
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26461
f_charbig = '#NULL#';
 
26462
INSERT INTO t1
 
26463
SET f_int1 = NULL , f_int2 = -@max_row,
 
26464
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26465
f_charbig = '#NULL#';
 
26466
# check null success:    1
 
26467
        
 
26468
# check null-1 success:         1
 
26469
UPDATE t1 SET f_int1 = -@max_row
 
26470
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26471
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26472
        
 
26473
# check null-2 success:         1
 
26474
UPDATE t1 SET f_int1 = NULL
 
26475
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26476
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26477
        
 
26478
# check null-3 success:         1
 
26479
DELETE FROM t1
 
26480
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26481
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26482
        
 
26483
# check null-4 success:         1
 
26484
DELETE FROM t1
 
26485
WHERE f_int1 = 0 AND f_int2 = 0
 
26486
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26487
AND f_charbig = '#NULL#';
 
26488
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26489
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26490
   FROM t0_template source_tab
 
26491
WHERE MOD(f_int1,3) = 0
 
26492
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
26493
ON DUPLICATE KEY
 
26494
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
26495
f_int2 = 2 * @max_row + source_tab.f_int1,
 
26496
f_charbig = 'was updated';
 
26497
        
 
26498
# check unique-1-a success:     1
 
26499
        
 
26500
# check unique-1-b success:     1
 
26501
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26502
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26503
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26504
f_charbig = CONCAT('===',f_char1,'===')
 
26505
WHERE f_charbig = 'was updated';
 
26506
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26507
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
26508
   FROM t0_template source_tab
 
26509
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26510
        
 
26511
# check replace success:        1
 
26512
DELETE FROM t1
 
26513
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
26514
DELETE FROM t1
 
26515
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
26516
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
26517
UPDATE t1 SET f_int2 = f_int1,
 
26518
f_char1 = CAST(f_int1 AS CHAR),
 
26519
f_char2 = CAST(f_int1 AS CHAR),
 
26520
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
26521
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
26522
SET AUTOCOMMIT= 0;
 
26523
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26524
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26525
FROM t0_template source_tab
 
26526
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26527
        
 
26528
# check transactions-1 success:         1
 
26529
COMMIT WORK;
 
26530
        
 
26531
# check transactions-2 success:         1
 
26532
ROLLBACK WORK;
 
26533
        
 
26534
# check transactions-3 success:         1
 
26535
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26536
COMMIT WORK;
 
26537
ROLLBACK WORK;
 
26538
        
 
26539
# check transactions-4 success:         1
 
26540
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26541
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26542
FROM t0_template source_tab
 
26543
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26544
        
 
26545
# check transactions-5 success:         1
 
26546
ROLLBACK WORK;
 
26547
        
 
26548
# check transactions-6 success:         1
 
26549
# INFO: Storage engine used for t1 seems to be transactional.
 
26550
COMMIT;
 
26551
        
 
26552
# check transactions-7 success:         1
 
26553
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26554
COMMIT WORK;
 
26555
SET @@session.sql_mode = 'traditional';
 
26556
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26557
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26558
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26559
'', '', 'was inserted' FROM t0_template
 
26560
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26561
ERROR 22012: Division by 0
 
26562
COMMIT;
 
26563
        
 
26564
# check transactions-8 success:         1
 
26565
# INFO: Storage engine used for t1 seems to be able to revert
 
26566
#       changes made by the failing statement.
 
26567
SET @@session.sql_mode = '';
 
26568
SET AUTOCOMMIT= 1;
 
26569
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26570
COMMIT WORK;
 
26571
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26572
        
 
26573
# check special-1 success:      1
 
26574
UPDATE t1 SET f_charbig = '';
 
26575
        
 
26576
# check special-2 success:      1
 
26577
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26578
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26579
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26582
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26583
'just inserted' FROM t0_template
 
26584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26585
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26586
BEGIN
 
26587
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26588
f_charbig = 'updated by trigger'
 
26589
      WHERE f_int1 = new.f_int1;
 
26590
END|
 
26591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26592
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26593
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26594
        
 
26595
# check trigger-1 success:      1
 
26596
DROP TRIGGER trg_1;
 
26597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26599
f_charbig = 'just inserted'
 
26600
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26601
DELETE FROM t0_aux
 
26602
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26604
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26605
'just inserted' FROM t0_template
 
26606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26607
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26608
BEGIN
 
26609
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26610
f_charbig = 'updated by trigger'
 
26611
      WHERE f_int1 = new.f_int1;
 
26612
END|
 
26613
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26614
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26616
        
 
26617
# check trigger-2 success:      1
 
26618
DROP TRIGGER trg_1;
 
26619
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26620
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26621
f_charbig = 'just inserted'
 
26622
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26623
DELETE FROM t0_aux
 
26624
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26625
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26626
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26627
'just inserted' FROM t0_template
 
26628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26629
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26630
BEGIN
 
26631
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26632
f_charbig = 'updated by trigger'
 
26633
      WHERE f_int1 = new.f_int1;
 
26634
END|
 
26635
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26636
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26637
        
 
26638
# check trigger-3 success:      1
 
26639
DROP TRIGGER trg_1;
 
26640
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26641
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26642
f_charbig = 'just inserted'
 
26643
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26644
DELETE FROM t0_aux
 
26645
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26648
'just inserted' FROM t0_template
 
26649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26650
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26651
BEGIN
 
26652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26653
f_charbig = 'updated by trigger'
 
26654
      WHERE f_int1 = - old.f_int1;
 
26655
END|
 
26656
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26657
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26658
        
 
26659
# check trigger-4 success:      1
 
26660
DROP TRIGGER trg_1;
 
26661
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26662
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26663
f_charbig = 'just inserted'
 
26664
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26665
DELETE FROM t0_aux
 
26666
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26667
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26668
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26669
'just inserted' FROM t0_template
 
26670
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26671
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26672
BEGIN
 
26673
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26674
f_charbig = 'updated by trigger'
 
26675
      WHERE f_int1 = new.f_int1;
 
26676
END|
 
26677
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26678
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26679
        
 
26680
# check trigger-5 success:      1
 
26681
DROP TRIGGER trg_1;
 
26682
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26683
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26684
f_charbig = 'just inserted'
 
26685
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26686
DELETE FROM t0_aux
 
26687
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26689
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26690
'just inserted' FROM t0_template
 
26691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26692
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26693
BEGIN
 
26694
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26695
f_charbig = 'updated by trigger'
 
26696
      WHERE f_int1 = - old.f_int1;
 
26697
END|
 
26698
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26699
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26700
        
 
26701
# check trigger-6 success:      1
 
26702
DROP TRIGGER trg_1;
 
26703
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26704
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26705
f_charbig = 'just inserted'
 
26706
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26707
DELETE FROM t0_aux
 
26708
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26709
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26710
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26711
'just inserted' FROM t0_template
 
26712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26713
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26714
BEGIN
 
26715
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26716
f_charbig = 'updated by trigger'
 
26717
      WHERE f_int1 = - old.f_int1;
 
26718
END|
 
26719
DELETE FROM t0_aux
 
26720
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26721
        
 
26722
# check trigger-7 success:      1
 
26723
DROP TRIGGER trg_1;
 
26724
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26725
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26726
f_charbig = 'just inserted'
 
26727
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26728
DELETE FROM t0_aux
 
26729
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26730
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26731
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26732
'just inserted' FROM t0_template
 
26733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26734
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26735
BEGIN
 
26736
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26737
f_charbig = 'updated by trigger'
 
26738
      WHERE f_int1 = - old.f_int1;
 
26739
END|
 
26740
DELETE FROM t0_aux
 
26741
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26742
        
 
26743
# check trigger-8 success:      1
 
26744
DROP TRIGGER trg_1;
 
26745
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26746
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26747
f_charbig = 'just inserted'
 
26748
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26749
DELETE FROM t0_aux
 
26750
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26751
DELETE FROM t1
 
26752
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26753
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26754
BEGIN
 
26755
SET new.f_int1 = old.f_int1 + @max_row,
 
26756
new.f_int2 = old.f_int2 - @max_row,
 
26757
new.f_charbig = '####updated per update trigger####';
 
26758
END|
 
26759
UPDATE t1
 
26760
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26761
f_charbig = '####updated per update statement itself####';
 
26762
        
 
26763
# check trigger-9 success:      1
 
26764
DROP TRIGGER trg_2;
 
26765
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26766
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26767
f_charbig = CONCAT('===',f_char1,'===');
 
26768
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26769
BEGIN
 
26770
SET new.f_int1 = new.f_int1 + @max_row,
 
26771
new.f_int2 = new.f_int2 - @max_row,
 
26772
new.f_charbig = '####updated per update trigger####';
 
26773
END|
 
26774
UPDATE t1
 
26775
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26776
f_charbig = '####updated per update statement itself####';
 
26777
        
 
26778
# check trigger-10 success:     1
 
26779
DROP TRIGGER trg_2;
 
26780
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26781
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26782
f_charbig = CONCAT('===',f_char1,'===');
 
26783
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26784
BEGIN
 
26785
SET new.f_int1 = @my_max1 + @counter,
 
26786
new.f_int2 = @my_min2 - @counter,
 
26787
new.f_charbig = '####updated per insert trigger####';
 
26788
SET @counter = @counter + 1;
 
26789
END|
 
26790
SET @counter = 1;
 
26791
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26792
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26793
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26794
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26796
ORDER BY f_int1;
 
26797
DROP TRIGGER trg_3;
 
26798
        
 
26799
# check trigger-11 success:     1
 
26800
DELETE FROM t1
 
26801
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26802
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26803
AND f_charbig = '####updated per insert trigger####';
 
26804
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26805
BEGIN
 
26806
SET new.f_int1 = @my_max1 + @counter,
 
26807
new.f_int2 = @my_min2 - @counter,
 
26808
new.f_charbig = '####updated per insert trigger####';
 
26809
SET @counter = @counter + 1;
 
26810
END|
 
26811
SET @counter = 1;
 
26812
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26813
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26814
SELECT CAST(f_int1 AS CHAR),
 
26815
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26817
ORDER BY f_int1;
 
26818
DROP TRIGGER trg_3;
 
26819
        
 
26820
# check trigger-12 success:     1
 
26821
DELETE FROM t1
 
26822
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26823
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26824
AND f_charbig = '####updated per insert trigger####';
 
26825
ANALYZE  TABLE t1;
 
26826
Table   Op      Msg_type        Msg_text
 
26827
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
26828
CHECK    TABLE t1 EXTENDED;
 
26829
Table   Op      Msg_type        Msg_text
 
26830
test.t1 check   note    The storage engine for the table doesn't support check
 
26831
CHECKSUM TABLE t1 EXTENDED;
 
26832
Table   Checksum
 
26833
test.t1 <some_value>
 
26834
OPTIMIZE TABLE t1;
 
26835
Table   Op      Msg_type        Msg_text
 
26836
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
26837
# check layout success:    1
 
26838
REPAIR   TABLE t1 EXTENDED;
 
26839
Table   Op      Msg_type        Msg_text
 
26840
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26841
# check layout success:    1
 
26842
TRUNCATE t1;
 
26843
        
 
26844
# check TRUNCATE success:       1
 
26845
# check layout success:    1
 
26846
# End usability test (inc/partition_check.inc)
 
26847
DROP TABLE t1;
 
26848
CREATE TABLE t1 (
 
26849
f_int1 INTEGER,
 
26850
f_int2 INTEGER,
 
26851
f_char1 CHAR(20),
 
26852
f_char2 CHAR(20),
 
26853
f_charbig VARCHAR(1000)
 
26854
 
 
26855
)
 
26856
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
26857
(PARTITION part1 VALUES LESS THAN (0)
 
26858
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
26859
PARTITION part2 VALUES LESS THAN (5)
 
26860
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
26861
PARTITION part3 VALUES LESS THAN (10)
 
26862
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
26863
PARTITION part4 VALUES LESS THAN (2147483646)
 
26864
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
26865
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26866
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26867
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26868
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
26869
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26870
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26871
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26872
# Start usability test (inc/partition_check.inc)
 
26873
create_command
 
26874
SHOW CREATE TABLE t1;
 
26875
Table   Create Table
 
26876
t1      CREATE TABLE `t1` (
 
26877
  `f_int1` int(11) DEFAULT NULL,
 
26878
  `f_int2` int(11) DEFAULT NULL,
 
26879
  `f_char1` char(20) DEFAULT NULL,
 
26880
  `f_char2` char(20) DEFAULT NULL,
 
26881
  `f_charbig` varchar(1000) DEFAULT NULL,
 
26882
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
26883
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
26884
 
 
26885
# check prerequisites-1 success:    1
 
26886
# check COUNT(*) success:    1
 
26887
# check MIN/MAX(f_int1) success:    1
 
26888
# check MIN/MAX(f_int2) success:    1
 
26889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26890
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26891
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26892
WHERE f_int1 IN (2,3);
 
26893
ERROR 23000: Can't write; duplicate key in table 't1'
 
26894
# check prerequisites-3 success:    1
 
26895
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
26896
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26897
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26898
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26899
WHERE f_int1 IN (2,3);
 
26900
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26901
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26902
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26903
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26904
WHERE f_int1 IN (2,3);
 
26905
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26906
# check read via f_int1 success: 1
 
26907
# check read via f_int2 success: 1
 
26908
        
 
26909
# check multiple-1 success:     1
 
26910
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26911
        
 
26912
# check multiple-2 success:     1
 
26913
INSERT INTO t1 SELECT * FROM t0_template
 
26914
WHERE MOD(f_int1,3) = 0;
 
26915
        
 
26916
# check multiple-3 success:     1
 
26917
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26918
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26919
AND @max_row_div2 + @max_row_div4;
 
26920
        
 
26921
# check multiple-4 success:     1
 
26922
DELETE FROM t1
 
26923
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26924
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26925
        
 
26926
# check multiple-5 success:     1
 
26927
SELECT COUNT(*) INTO @try_count FROM t0_template
 
26928
WHERE MOD(f_int1,3) = 0
 
26929
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26930
SELECT COUNT(*) INTO @clash_count
 
26931
FROM t1 INNER JOIN t0_template USING(f_int1)
 
26932
WHERE MOD(f_int1,3) = 0
 
26933
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26934
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26935
INSERT INTO t1
 
26936
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26937
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26938
f_charbig = '#SINGLE#';
 
26939
        
 
26940
# check single-1 success:       1
 
26941
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26942
INSERT INTO t1
 
26943
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26944
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26945
f_charbig = '#SINGLE#';
 
26946
        
 
26947
# check single-2 success:       1
 
26948
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26949
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26950
UPDATE t1 SET f_int1 = @cur_value2
 
26951
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26952
        
 
26953
# check single-3 success:       1
 
26954
SET @cur_value1= -1;
 
26955
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26956
UPDATE t1 SET f_int1 = @cur_value1
 
26957
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26958
        
 
26959
# check single-4 success:       1
 
26960
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26961
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26962
        
 
26963
# check single-5 success:       1
 
26964
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26965
        
 
26966
# check single-6 success:       1
 
26967
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26968
ERROR HY000: Table has no partition for value 2147483647
 
26969
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26970
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26971
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26972
f_charbig = '#NULL#';
 
26973
INSERT INTO t1
 
26974
SET f_int1 = NULL , f_int2 = -@max_row,
 
26975
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26976
f_charbig = '#NULL#';
 
26977
# check null success:    1
 
26978
        
 
26979
# check null-1 success:         1
 
26980
UPDATE t1 SET f_int1 = -@max_row
 
26981
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26982
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26983
        
 
26984
# check null-2 success:         1
 
26985
UPDATE t1 SET f_int1 = NULL
 
26986
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26987
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26988
        
 
26989
# check null-3 success:         1
 
26990
DELETE FROM t1
 
26991
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26993
        
 
26994
# check null-4 success:         1
 
26995
DELETE FROM t1
 
26996
WHERE f_int1 = 0 AND f_int2 = 0
 
26997
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26998
AND f_charbig = '#NULL#';
 
26999
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27000
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27001
   FROM t0_template source_tab
 
27002
WHERE MOD(f_int1,3) = 0
 
27003
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
27004
ON DUPLICATE KEY
 
27005
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
27006
f_int2 = 2 * @max_row + source_tab.f_int1,
 
27007
f_charbig = 'was updated';
 
27008
        
 
27009
# check unique-1-a success:     1
 
27010
        
 
27011
# check unique-1-b success:     1
 
27012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27015
f_charbig = CONCAT('===',f_char1,'===')
 
27016
WHERE f_charbig = 'was updated';
 
27017
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27018
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
27019
   FROM t0_template source_tab
 
27020
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27021
        
 
27022
# check replace success:        1
 
27023
DELETE FROM t1
 
27024
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
27025
DELETE FROM t1
 
27026
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
27027
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
27028
UPDATE t1 SET f_int2 = f_int1,
 
27029
f_char1 = CAST(f_int1 AS CHAR),
 
27030
f_char2 = CAST(f_int1 AS CHAR),
 
27031
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
27032
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
27033
SET AUTOCOMMIT= 0;
 
27034
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27035
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27036
FROM t0_template source_tab
 
27037
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27038
        
 
27039
# check transactions-1 success:         1
 
27040
COMMIT WORK;
 
27041
        
 
27042
# check transactions-2 success:         1
 
27043
ROLLBACK WORK;
 
27044
        
 
27045
# check transactions-3 success:         1
 
27046
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27047
COMMIT WORK;
 
27048
ROLLBACK WORK;
 
27049
        
 
27050
# check transactions-4 success:         1
 
27051
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27052
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27053
FROM t0_template source_tab
 
27054
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27055
        
 
27056
# check transactions-5 success:         1
 
27057
ROLLBACK WORK;
 
27058
        
 
27059
# check transactions-6 success:         1
 
27060
# INFO: Storage engine used for t1 seems to be transactional.
 
27061
COMMIT;
 
27062
        
 
27063
# check transactions-7 success:         1
 
27064
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27065
COMMIT WORK;
 
27066
SET @@session.sql_mode = 'traditional';
 
27067
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27068
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27069
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27070
'', '', 'was inserted' FROM t0_template
 
27071
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27072
ERROR 22012: Division by 0
 
27073
COMMIT;
 
27074
        
 
27075
# check transactions-8 success:         1
 
27076
# INFO: Storage engine used for t1 seems to be able to revert
 
27077
#       changes made by the failing statement.
 
27078
SET @@session.sql_mode = '';
 
27079
SET AUTOCOMMIT= 1;
 
27080
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27081
COMMIT WORK;
 
27082
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27083
        
 
27084
# check special-1 success:      1
 
27085
UPDATE t1 SET f_charbig = '';
 
27086
        
 
27087
# check special-2 success:      1
 
27088
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27089
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27090
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27094
'just inserted' FROM t0_template
 
27095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27096
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27097
BEGIN
 
27098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27099
f_charbig = 'updated by trigger'
 
27100
      WHERE f_int1 = new.f_int1;
 
27101
END|
 
27102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27103
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27105
        
 
27106
# check trigger-1 success:      1
 
27107
DROP TRIGGER trg_1;
 
27108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27110
f_charbig = 'just inserted'
 
27111
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27112
DELETE FROM t0_aux
 
27113
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27116
'just inserted' FROM t0_template
 
27117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27118
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27119
BEGIN
 
27120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27121
f_charbig = 'updated by trigger'
 
27122
      WHERE f_int1 = new.f_int1;
 
27123
END|
 
27124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27125
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27127
        
 
27128
# check trigger-2 success:      1
 
27129
DROP TRIGGER trg_1;
 
27130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27132
f_charbig = 'just inserted'
 
27133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27134
DELETE FROM t0_aux
 
27135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27138
'just inserted' FROM t0_template
 
27139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27140
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27141
BEGIN
 
27142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27143
f_charbig = 'updated by trigger'
 
27144
      WHERE f_int1 = new.f_int1;
 
27145
END|
 
27146
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27147
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27148
        
 
27149
# check trigger-3 success:      1
 
27150
DROP TRIGGER trg_1;
 
27151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27153
f_charbig = 'just inserted'
 
27154
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27155
DELETE FROM t0_aux
 
27156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27159
'just inserted' FROM t0_template
 
27160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27161
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27162
BEGIN
 
27163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27164
f_charbig = 'updated by trigger'
 
27165
      WHERE f_int1 = - old.f_int1;
 
27166
END|
 
27167
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27168
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27169
        
 
27170
# check trigger-4 success:      1
 
27171
DROP TRIGGER trg_1;
 
27172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27173
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27174
f_charbig = 'just inserted'
 
27175
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27176
DELETE FROM t0_aux
 
27177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27180
'just inserted' FROM t0_template
 
27181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27182
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27183
BEGIN
 
27184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27185
f_charbig = 'updated by trigger'
 
27186
      WHERE f_int1 = new.f_int1;
 
27187
END|
 
27188
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27189
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27190
        
 
27191
# check trigger-5 success:      1
 
27192
DROP TRIGGER trg_1;
 
27193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27195
f_charbig = 'just inserted'
 
27196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27197
DELETE FROM t0_aux
 
27198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27200
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27201
'just inserted' FROM t0_template
 
27202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27203
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27204
BEGIN
 
27205
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27206
f_charbig = 'updated by trigger'
 
27207
      WHERE f_int1 = - old.f_int1;
 
27208
END|
 
27209
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27210
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27211
        
 
27212
# check trigger-6 success:      1
 
27213
DROP TRIGGER trg_1;
 
27214
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27215
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27216
f_charbig = 'just inserted'
 
27217
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27218
DELETE FROM t0_aux
 
27219
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27220
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27221
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27222
'just inserted' FROM t0_template
 
27223
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27224
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27225
BEGIN
 
27226
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27227
f_charbig = 'updated by trigger'
 
27228
      WHERE f_int1 = - old.f_int1;
 
27229
END|
 
27230
DELETE FROM t0_aux
 
27231
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27232
        
 
27233
# check trigger-7 success:      1
 
27234
DROP TRIGGER trg_1;
 
27235
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27236
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27237
f_charbig = 'just inserted'
 
27238
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27239
DELETE FROM t0_aux
 
27240
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27242
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27243
'just inserted' FROM t0_template
 
27244
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27245
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27246
BEGIN
 
27247
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27248
f_charbig = 'updated by trigger'
 
27249
      WHERE f_int1 = - old.f_int1;
 
27250
END|
 
27251
DELETE FROM t0_aux
 
27252
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27253
        
 
27254
# check trigger-8 success:      1
 
27255
DROP TRIGGER trg_1;
 
27256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27258
f_charbig = 'just inserted'
 
27259
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27260
DELETE FROM t0_aux
 
27261
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27262
DELETE FROM t1
 
27263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27264
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27265
BEGIN
 
27266
SET new.f_int1 = old.f_int1 + @max_row,
 
27267
new.f_int2 = old.f_int2 - @max_row,
 
27268
new.f_charbig = '####updated per update trigger####';
 
27269
END|
 
27270
UPDATE t1
 
27271
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27272
f_charbig = '####updated per update statement itself####';
 
27273
        
 
27274
# check trigger-9 success:      1
 
27275
DROP TRIGGER trg_2;
 
27276
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27277
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27278
f_charbig = CONCAT('===',f_char1,'===');
 
27279
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27280
BEGIN
 
27281
SET new.f_int1 = new.f_int1 + @max_row,
 
27282
new.f_int2 = new.f_int2 - @max_row,
 
27283
new.f_charbig = '####updated per update trigger####';
 
27284
END|
 
27285
UPDATE t1
 
27286
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27287
f_charbig = '####updated per update statement itself####';
 
27288
        
 
27289
# check trigger-10 success:     1
 
27290
DROP TRIGGER trg_2;
 
27291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27293
f_charbig = CONCAT('===',f_char1,'===');
 
27294
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27295
BEGIN
 
27296
SET new.f_int1 = @my_max1 + @counter,
 
27297
new.f_int2 = @my_min2 - @counter,
 
27298
new.f_charbig = '####updated per insert trigger####';
 
27299
SET @counter = @counter + 1;
 
27300
END|
 
27301
SET @counter = 1;
 
27302
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27303
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27304
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27305
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27306
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27307
ORDER BY f_int1;
 
27308
DROP TRIGGER trg_3;
 
27309
        
 
27310
# check trigger-11 success:     1
 
27311
DELETE FROM t1
 
27312
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27313
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27314
AND f_charbig = '####updated per insert trigger####';
 
27315
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27316
BEGIN
 
27317
SET new.f_int1 = @my_max1 + @counter,
 
27318
new.f_int2 = @my_min2 - @counter,
 
27319
new.f_charbig = '####updated per insert trigger####';
 
27320
SET @counter = @counter + 1;
 
27321
END|
 
27322
SET @counter = 1;
 
27323
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27324
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27325
SELECT CAST(f_int1 AS CHAR),
 
27326
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27328
ORDER BY f_int1;
 
27329
DROP TRIGGER trg_3;
 
27330
        
 
27331
# check trigger-12 success:     1
 
27332
DELETE FROM t1
 
27333
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27334
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27335
AND f_charbig = '####updated per insert trigger####';
 
27336
ANALYZE  TABLE t1;
 
27337
Table   Op      Msg_type        Msg_text
 
27338
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
27339
CHECK    TABLE t1 EXTENDED;
 
27340
Table   Op      Msg_type        Msg_text
 
27341
test.t1 check   note    The storage engine for the table doesn't support check
 
27342
CHECKSUM TABLE t1 EXTENDED;
 
27343
Table   Checksum
 
27344
test.t1 <some_value>
 
27345
OPTIMIZE TABLE t1;
 
27346
Table   Op      Msg_type        Msg_text
 
27347
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
27348
# check layout success:    1
 
27349
REPAIR   TABLE t1 EXTENDED;
 
27350
Table   Op      Msg_type        Msg_text
 
27351
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27352
# check layout success:    1
 
27353
TRUNCATE t1;
 
27354
        
 
27355
# check TRUNCATE success:       1
 
27356
# check layout success:    1
 
27357
# End usability test (inc/partition_check.inc)
 
27358
DROP TABLE t1;
 
27359
CREATE TABLE t1 (
 
27360
f_int1 INTEGER,
 
27361
f_int2 INTEGER,
 
27362
f_char1 CHAR(20),
 
27363
f_char2 CHAR(20),
 
27364
f_charbig VARCHAR(1000)
 
27365
 
 
27366
)
 
27367
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
27368
(PARTITION part1 VALUES IN (0)
 
27369
(SUBPARTITION sp11, SUBPARTITION sp12),
 
27370
PARTITION part2 VALUES IN (1)
 
27371
(SUBPARTITION sp21, SUBPARTITION sp22),
 
27372
PARTITION part3 VALUES IN (2)
 
27373
(SUBPARTITION sp31, SUBPARTITION sp32),
 
27374
PARTITION part4 VALUES IN (NULL)
 
27375
(SUBPARTITION sp41, SUBPARTITION sp42));
 
27376
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27377
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27378
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27379
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
27380
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27381
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27382
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27383
# Start usability test (inc/partition_check.inc)
 
27384
create_command
 
27385
SHOW CREATE TABLE t1;
 
27386
Table   Create Table
 
27387
t1      CREATE TABLE `t1` (
 
27388
  `f_int1` int(11) DEFAULT NULL,
 
27389
  `f_int2` int(11) DEFAULT NULL,
 
27390
  `f_char1` char(20) DEFAULT NULL,
 
27391
  `f_char2` char(20) DEFAULT NULL,
 
27392
  `f_charbig` varchar(1000) DEFAULT NULL,
 
27393
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
27394
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
27395
 
 
27396
# check prerequisites-1 success:    1
 
27397
# check COUNT(*) success:    1
 
27398
# check MIN/MAX(f_int1) success:    1
 
27399
# check MIN/MAX(f_int2) success:    1
 
27400
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27401
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27402
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27403
WHERE f_int1 IN (2,3);
 
27404
ERROR 23000: Can't write; duplicate key in table 't1'
 
27405
# check prerequisites-3 success:    1
 
27406
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
27407
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27408
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27409
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27410
WHERE f_int1 IN (2,3);
 
27411
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27412
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27413
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27414
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27415
WHERE f_int1 IN (2,3);
 
27416
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27417
# check read via f_int1 success: 1
 
27418
# check read via f_int2 success: 1
 
27419
        
 
27420
# check multiple-1 success:     1
 
27421
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27422
        
 
27423
# check multiple-2 success:     1
 
27424
INSERT INTO t1 SELECT * FROM t0_template
 
27425
WHERE MOD(f_int1,3) = 0;
 
27426
        
 
27427
# check multiple-3 success:     1
 
27428
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27429
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27430
AND @max_row_div2 + @max_row_div4;
 
27431
        
 
27432
# check multiple-4 success:     1
 
27433
DELETE FROM t1
 
27434
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27435
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27436
        
 
27437
# check multiple-5 success:     1
 
27438
SELECT COUNT(*) INTO @try_count FROM t0_template
 
27439
WHERE MOD(f_int1,3) = 0
 
27440
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27441
SELECT COUNT(*) INTO @clash_count
 
27442
FROM t1 INNER JOIN t0_template USING(f_int1)
 
27443
WHERE MOD(f_int1,3) = 0
 
27444
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27445
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27446
INSERT INTO t1
 
27447
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27448
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27449
f_charbig = '#SINGLE#';
 
27450
        
 
27451
# check single-1 success:       1
 
27452
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27453
INSERT INTO t1
 
27454
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27455
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27456
f_charbig = '#SINGLE#';
 
27457
        
 
27458
# check single-2 success:       1
 
27459
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27460
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27461
UPDATE t1 SET f_int1 = @cur_value2
 
27462
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27463
        
 
27464
# check single-3 success:       1
 
27465
SET @cur_value1= -1;
 
27466
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27467
UPDATE t1 SET f_int1 = @cur_value1
 
27468
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27469
        
 
27470
# check single-4 success:       1
 
27471
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27472
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27473
        
 
27474
# check single-5 success:       1
 
27475
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27476
        
 
27477
# check single-6 success:       1
 
27478
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27479
        
 
27480
# check single-7 success:       1
 
27481
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27482
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27483
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27484
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27485
f_charbig = '#NULL#';
 
27486
INSERT INTO t1
 
27487
SET f_int1 = NULL , f_int2 = -@max_row,
 
27488
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27489
f_charbig = '#NULL#';
 
27490
# check null success:    1
 
27491
        
 
27492
# check null-1 success:         1
 
27493
UPDATE t1 SET f_int1 = -@max_row
 
27494
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27495
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27496
        
 
27497
# check null-2 success:         1
 
27498
UPDATE t1 SET f_int1 = NULL
 
27499
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27500
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27501
        
 
27502
# check null-3 success:         1
 
27503
DELETE FROM t1
 
27504
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27505
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27506
        
 
27507
# check null-4 success:         1
 
27508
DELETE FROM t1
 
27509
WHERE f_int1 = 0 AND f_int2 = 0
 
27510
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27511
AND f_charbig = '#NULL#';
 
27512
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27513
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27514
   FROM t0_template source_tab
 
27515
WHERE MOD(f_int1,3) = 0
 
27516
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
27517
ON DUPLICATE KEY
 
27518
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
27519
f_int2 = 2 * @max_row + source_tab.f_int1,
 
27520
f_charbig = 'was updated';
 
27521
        
 
27522
# check unique-1-a success:     1
 
27523
        
 
27524
# check unique-1-b success:     1
 
27525
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27526
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27527
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27528
f_charbig = CONCAT('===',f_char1,'===')
 
27529
WHERE f_charbig = 'was updated';
 
27530
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27531
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
27532
   FROM t0_template source_tab
 
27533
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27534
        
 
27535
# check replace success:        1
 
27536
DELETE FROM t1
 
27537
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
27538
DELETE FROM t1
 
27539
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
27540
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
27541
UPDATE t1 SET f_int2 = f_int1,
 
27542
f_char1 = CAST(f_int1 AS CHAR),
 
27543
f_char2 = CAST(f_int1 AS CHAR),
 
27544
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
27545
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
27546
SET AUTOCOMMIT= 0;
 
27547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27548
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27549
FROM t0_template source_tab
 
27550
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27551
        
 
27552
# check transactions-1 success:         1
 
27553
COMMIT WORK;
 
27554
        
 
27555
# check transactions-2 success:         1
 
27556
ROLLBACK WORK;
 
27557
        
 
27558
# check transactions-3 success:         1
 
27559
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27560
COMMIT WORK;
 
27561
ROLLBACK WORK;
 
27562
        
 
27563
# check transactions-4 success:         1
 
27564
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27565
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27566
FROM t0_template source_tab
 
27567
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27568
        
 
27569
# check transactions-5 success:         1
 
27570
ROLLBACK WORK;
 
27571
        
 
27572
# check transactions-6 success:         1
 
27573
# INFO: Storage engine used for t1 seems to be transactional.
 
27574
COMMIT;
 
27575
        
 
27576
# check transactions-7 success:         1
 
27577
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27578
COMMIT WORK;
 
27579
SET @@session.sql_mode = 'traditional';
 
27580
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27581
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27582
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27583
'', '', 'was inserted' FROM t0_template
 
27584
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27585
ERROR 22012: Division by 0
 
27586
COMMIT;
 
27587
        
 
27588
# check transactions-8 success:         1
 
27589
# INFO: Storage engine used for t1 seems to be able to revert
 
27590
#       changes made by the failing statement.
 
27591
SET @@session.sql_mode = '';
 
27592
SET AUTOCOMMIT= 1;
 
27593
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27594
COMMIT WORK;
 
27595
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27596
        
 
27597
# check special-1 success:      1
 
27598
UPDATE t1 SET f_charbig = '';
 
27599
        
 
27600
# check special-2 success:      1
 
27601
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27602
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27603
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27604
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27605
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27606
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27607
'just inserted' FROM t0_template
 
27608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27609
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27610
BEGIN
 
27611
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27612
f_charbig = 'updated by trigger'
 
27613
      WHERE f_int1 = new.f_int1;
 
27614
END|
 
27615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27616
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27618
        
 
27619
# check trigger-1 success:      1
 
27620
DROP TRIGGER trg_1;
 
27621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27623
f_charbig = 'just inserted'
 
27624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27625
DELETE FROM t0_aux
 
27626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27628
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27629
'just inserted' FROM t0_template
 
27630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27631
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27632
BEGIN
 
27633
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27634
f_charbig = 'updated by trigger'
 
27635
      WHERE f_int1 = new.f_int1;
 
27636
END|
 
27637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27638
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27640
        
 
27641
# check trigger-2 success:      1
 
27642
DROP TRIGGER trg_1;
 
27643
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27644
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27645
f_charbig = 'just inserted'
 
27646
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27647
DELETE FROM t0_aux
 
27648
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27649
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27650
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27651
'just inserted' FROM t0_template
 
27652
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27653
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27654
BEGIN
 
27655
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27656
f_charbig = 'updated by trigger'
 
27657
      WHERE f_int1 = new.f_int1;
 
27658
END|
 
27659
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27660
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27661
        
 
27662
# check trigger-3 success:      1
 
27663
DROP TRIGGER trg_1;
 
27664
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27665
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27666
f_charbig = 'just inserted'
 
27667
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27668
DELETE FROM t0_aux
 
27669
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27671
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27672
'just inserted' FROM t0_template
 
27673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27674
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27675
BEGIN
 
27676
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27677
f_charbig = 'updated by trigger'
 
27678
      WHERE f_int1 = - old.f_int1;
 
27679
END|
 
27680
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27681
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27682
        
 
27683
# check trigger-4 success:      1
 
27684
DROP TRIGGER trg_1;
 
27685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27687
f_charbig = 'just inserted'
 
27688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27689
DELETE FROM t0_aux
 
27690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27693
'just inserted' FROM t0_template
 
27694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27695
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27696
BEGIN
 
27697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27698
f_charbig = 'updated by trigger'
 
27699
      WHERE f_int1 = new.f_int1;
 
27700
END|
 
27701
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27702
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27703
        
 
27704
# check trigger-5 success:      1
 
27705
DROP TRIGGER trg_1;
 
27706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27708
f_charbig = 'just inserted'
 
27709
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27710
DELETE FROM t0_aux
 
27711
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27712
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27713
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27714
'just inserted' FROM t0_template
 
27715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27716
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27717
BEGIN
 
27718
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27719
f_charbig = 'updated by trigger'
 
27720
      WHERE f_int1 = - old.f_int1;
 
27721
END|
 
27722
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27723
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27724
        
 
27725
# check trigger-6 success:      1
 
27726
DROP TRIGGER trg_1;
 
27727
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27728
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27729
f_charbig = 'just inserted'
 
27730
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27731
DELETE FROM t0_aux
 
27732
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27733
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27734
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27735
'just inserted' FROM t0_template
 
27736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27737
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27738
BEGIN
 
27739
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27740
f_charbig = 'updated by trigger'
 
27741
      WHERE f_int1 = - old.f_int1;
 
27742
END|
 
27743
DELETE FROM t0_aux
 
27744
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27745
        
 
27746
# check trigger-7 success:      1
 
27747
DROP TRIGGER trg_1;
 
27748
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27749
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27750
f_charbig = 'just inserted'
 
27751
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27752
DELETE FROM t0_aux
 
27753
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27755
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27756
'just inserted' FROM t0_template
 
27757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27758
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27759
BEGIN
 
27760
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27761
f_charbig = 'updated by trigger'
 
27762
      WHERE f_int1 = - old.f_int1;
 
27763
END|
 
27764
DELETE FROM t0_aux
 
27765
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27766
        
 
27767
# check trigger-8 success:      1
 
27768
DROP TRIGGER trg_1;
 
27769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27771
f_charbig = 'just inserted'
 
27772
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27773
DELETE FROM t0_aux
 
27774
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27775
DELETE FROM t1
 
27776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27777
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27778
BEGIN
 
27779
SET new.f_int1 = old.f_int1 + @max_row,
 
27780
new.f_int2 = old.f_int2 - @max_row,
 
27781
new.f_charbig = '####updated per update trigger####';
 
27782
END|
 
27783
UPDATE t1
 
27784
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27785
f_charbig = '####updated per update statement itself####';
 
27786
        
 
27787
# check trigger-9 success:      1
 
27788
DROP TRIGGER trg_2;
 
27789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27791
f_charbig = CONCAT('===',f_char1,'===');
 
27792
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27793
BEGIN
 
27794
SET new.f_int1 = new.f_int1 + @max_row,
 
27795
new.f_int2 = new.f_int2 - @max_row,
 
27796
new.f_charbig = '####updated per update trigger####';
 
27797
END|
 
27798
UPDATE t1
 
27799
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27800
f_charbig = '####updated per update statement itself####';
 
27801
        
 
27802
# check trigger-10 success:     1
 
27803
DROP TRIGGER trg_2;
 
27804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27806
f_charbig = CONCAT('===',f_char1,'===');
 
27807
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27808
BEGIN
 
27809
SET new.f_int1 = @my_max1 + @counter,
 
27810
new.f_int2 = @my_min2 - @counter,
 
27811
new.f_charbig = '####updated per insert trigger####';
 
27812
SET @counter = @counter + 1;
 
27813
END|
 
27814
SET @counter = 1;
 
27815
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27816
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27817
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27818
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27820
ORDER BY f_int1;
 
27821
DROP TRIGGER trg_3;
 
27822
        
 
27823
# check trigger-11 success:     1
 
27824
DELETE FROM t1
 
27825
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27826
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27827
AND f_charbig = '####updated per insert trigger####';
 
27828
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27829
BEGIN
 
27830
SET new.f_int1 = @my_max1 + @counter,
 
27831
new.f_int2 = @my_min2 - @counter,
 
27832
new.f_charbig = '####updated per insert trigger####';
 
27833
SET @counter = @counter + 1;
 
27834
END|
 
27835
SET @counter = 1;
 
27836
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27837
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27838
SELECT CAST(f_int1 AS CHAR),
 
27839
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27841
ORDER BY f_int1;
 
27842
DROP TRIGGER trg_3;
 
27843
        
 
27844
# check trigger-12 success:     1
 
27845
DELETE FROM t1
 
27846
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27847
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27848
AND f_charbig = '####updated per insert trigger####';
 
27849
ANALYZE  TABLE t1;
 
27850
Table   Op      Msg_type        Msg_text
 
27851
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
27852
CHECK    TABLE t1 EXTENDED;
 
27853
Table   Op      Msg_type        Msg_text
 
27854
test.t1 check   note    The storage engine for the table doesn't support check
 
27855
CHECKSUM TABLE t1 EXTENDED;
 
27856
Table   Checksum
 
27857
test.t1 <some_value>
 
27858
OPTIMIZE TABLE t1;
 
27859
Table   Op      Msg_type        Msg_text
 
27860
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
27861
# check layout success:    1
 
27862
REPAIR   TABLE t1 EXTENDED;
 
27863
Table   Op      Msg_type        Msg_text
 
27864
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27865
# check layout success:    1
 
27866
TRUNCATE t1;
 
27867
        
 
27868
# check TRUNCATE success:       1
 
27869
# check layout success:    1
 
27870
# End usability test (inc/partition_check.inc)
 
27871
DROP TABLE t1;
 
27872
CREATE TABLE t1 (
 
27873
f_int1 INTEGER,
 
27874
f_int2 INTEGER,
 
27875
f_char1 CHAR(20),
 
27876
f_char2 CHAR(20),
 
27877
f_charbig VARCHAR(1000)
 
27878
 
 
27879
)
 
27880
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
27881
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
27882
(PARTITION part1 VALUES IN (0),
 
27883
 PARTITION part2 VALUES IN (1),
 
27884
 PARTITION part3 VALUES IN (NULL));
 
27885
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27886
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27887
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27888
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
27889
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27890
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27891
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27892
# Start usability test (inc/partition_check.inc)
 
27893
create_command
 
27894
SHOW CREATE TABLE t1;
 
27895
Table   Create Table
 
27896
t1      CREATE TABLE `t1` (
 
27897
  `f_int1` int(11) DEFAULT NULL,
 
27898
  `f_int2` int(11) DEFAULT NULL,
 
27899
  `f_char1` char(20) DEFAULT NULL,
 
27900
  `f_char2` char(20) DEFAULT NULL,
 
27901
  `f_charbig` varchar(1000) DEFAULT NULL,
 
27902
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
27903
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
27904
 
 
27905
# check prerequisites-1 success:    1
 
27906
# check COUNT(*) success:    1
 
27907
# check MIN/MAX(f_int1) success:    1
 
27908
# check MIN/MAX(f_int2) success:    1
 
27909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27910
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27911
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27912
WHERE f_int1 IN (2,3);
 
27913
ERROR 23000: Can't write; duplicate key in table 't1'
 
27914
# check prerequisites-3 success:    1
 
27915
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
27916
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27917
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27918
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27919
WHERE f_int1 IN (2,3);
 
27920
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27921
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27922
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27923
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27924
WHERE f_int1 IN (2,3);
 
27925
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27926
# check read via f_int1 success: 1
 
27927
# check read via f_int2 success: 1
 
27928
        
 
27929
# check multiple-1 success:     1
 
27930
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27931
        
 
27932
# check multiple-2 success:     1
 
27933
INSERT INTO t1 SELECT * FROM t0_template
 
27934
WHERE MOD(f_int1,3) = 0;
 
27935
        
 
27936
# check multiple-3 success:     1
 
27937
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27938
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27939
AND @max_row_div2 + @max_row_div4;
 
27940
        
 
27941
# check multiple-4 success:     1
 
27942
DELETE FROM t1
 
27943
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27944
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27945
        
 
27946
# check multiple-5 success:     1
 
27947
SELECT COUNT(*) INTO @try_count FROM t0_template
 
27948
WHERE MOD(f_int1,3) = 0
 
27949
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27950
SELECT COUNT(*) INTO @clash_count
 
27951
FROM t1 INNER JOIN t0_template USING(f_int1)
 
27952
WHERE MOD(f_int1,3) = 0
 
27953
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27954
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27955
INSERT INTO t1
 
27956
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27957
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27958
f_charbig = '#SINGLE#';
 
27959
        
 
27960
# check single-1 success:       1
 
27961
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27962
INSERT INTO t1
 
27963
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27964
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27965
f_charbig = '#SINGLE#';
 
27966
        
 
27967
# check single-2 success:       1
 
27968
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27969
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27970
UPDATE t1 SET f_int1 = @cur_value2
 
27971
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27972
        
 
27973
# check single-3 success:       1
 
27974
SET @cur_value1= -1;
 
27975
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27976
UPDATE t1 SET f_int1 = @cur_value1
 
27977
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27978
        
 
27979
# check single-4 success:       1
 
27980
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27981
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27982
        
 
27983
# check single-5 success:       1
 
27984
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27985
        
 
27986
# check single-6 success:       1
 
27987
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27988
        
 
27989
# check single-7 success:       1
 
27990
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27991
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27992
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27993
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27994
f_charbig = '#NULL#';
 
27995
INSERT INTO t1
 
27996
SET f_int1 = NULL , f_int2 = -@max_row,
 
27997
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27998
f_charbig = '#NULL#';
 
27999
# check null success:    1
 
28000
        
 
28001
# check null-1 success:         1
 
28002
UPDATE t1 SET f_int1 = -@max_row
 
28003
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28004
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28005
        
 
28006
# check null-2 success:         1
 
28007
UPDATE t1 SET f_int1 = NULL
 
28008
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28009
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28010
        
 
28011
# check null-3 success:         1
 
28012
DELETE FROM t1
 
28013
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28014
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28015
        
 
28016
# check null-4 success:         1
 
28017
DELETE FROM t1
 
28018
WHERE f_int1 = 0 AND f_int2 = 0
 
28019
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28020
AND f_charbig = '#NULL#';
 
28021
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28022
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28023
   FROM t0_template source_tab
 
28024
WHERE MOD(f_int1,3) = 0
 
28025
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
28026
ON DUPLICATE KEY
 
28027
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
28028
f_int2 = 2 * @max_row + source_tab.f_int1,
 
28029
f_charbig = 'was updated';
 
28030
        
 
28031
# check unique-1-a success:     1
 
28032
        
 
28033
# check unique-1-b success:     1
 
28034
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28035
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28036
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28037
f_charbig = CONCAT('===',f_char1,'===')
 
28038
WHERE f_charbig = 'was updated';
 
28039
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28040
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
28041
   FROM t0_template source_tab
 
28042
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28043
        
 
28044
# check replace success:        1
 
28045
DELETE FROM t1
 
28046
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
28047
DELETE FROM t1
 
28048
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
28049
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
28050
UPDATE t1 SET f_int2 = f_int1,
 
28051
f_char1 = CAST(f_int1 AS CHAR),
 
28052
f_char2 = CAST(f_int1 AS CHAR),
 
28053
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
28054
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
28055
SET AUTOCOMMIT= 0;
 
28056
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28057
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28058
FROM t0_template source_tab
 
28059
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28060
        
 
28061
# check transactions-1 success:         1
 
28062
COMMIT WORK;
 
28063
        
 
28064
# check transactions-2 success:         1
 
28065
ROLLBACK WORK;
 
28066
        
 
28067
# check transactions-3 success:         1
 
28068
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28069
COMMIT WORK;
 
28070
ROLLBACK WORK;
 
28071
        
 
28072
# check transactions-4 success:         1
 
28073
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28074
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28075
FROM t0_template source_tab
 
28076
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28077
        
 
28078
# check transactions-5 success:         1
 
28079
ROLLBACK WORK;
 
28080
        
 
28081
# check transactions-6 success:         1
 
28082
# INFO: Storage engine used for t1 seems to be transactional.
 
28083
COMMIT;
 
28084
        
 
28085
# check transactions-7 success:         1
 
28086
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28087
COMMIT WORK;
 
28088
SET @@session.sql_mode = 'traditional';
 
28089
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28090
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28091
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28092
'', '', 'was inserted' FROM t0_template
 
28093
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28094
ERROR 22012: Division by 0
 
28095
COMMIT;
 
28096
        
 
28097
# check transactions-8 success:         1
 
28098
# INFO: Storage engine used for t1 seems to be able to revert
 
28099
#       changes made by the failing statement.
 
28100
SET @@session.sql_mode = '';
 
28101
SET AUTOCOMMIT= 1;
 
28102
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28103
COMMIT WORK;
 
28104
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28105
        
 
28106
# check special-1 success:      1
 
28107
UPDATE t1 SET f_charbig = '';
 
28108
        
 
28109
# check special-2 success:      1
 
28110
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28111
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28112
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28116
'just inserted' FROM t0_template
 
28117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28118
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28119
BEGIN
 
28120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28121
f_charbig = 'updated by trigger'
 
28122
      WHERE f_int1 = new.f_int1;
 
28123
END|
 
28124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28125
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28127
        
 
28128
# check trigger-1 success:      1
 
28129
DROP TRIGGER trg_1;
 
28130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28132
f_charbig = 'just inserted'
 
28133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28134
DELETE FROM t0_aux
 
28135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28138
'just inserted' FROM t0_template
 
28139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28140
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28141
BEGIN
 
28142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28143
f_charbig = 'updated by trigger'
 
28144
      WHERE f_int1 = new.f_int1;
 
28145
END|
 
28146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28147
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28149
        
 
28150
# check trigger-2 success:      1
 
28151
DROP TRIGGER trg_1;
 
28152
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28153
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28154
f_charbig = 'just inserted'
 
28155
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28156
DELETE FROM t0_aux
 
28157
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28158
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28159
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28160
'just inserted' FROM t0_template
 
28161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28162
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28163
BEGIN
 
28164
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28165
f_charbig = 'updated by trigger'
 
28166
      WHERE f_int1 = new.f_int1;
 
28167
END|
 
28168
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28169
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28170
        
 
28171
# check trigger-3 success:      1
 
28172
DROP TRIGGER trg_1;
 
28173
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28174
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28175
f_charbig = 'just inserted'
 
28176
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28177
DELETE FROM t0_aux
 
28178
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28180
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28181
'just inserted' FROM t0_template
 
28182
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28183
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28184
BEGIN
 
28185
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28186
f_charbig = 'updated by trigger'
 
28187
      WHERE f_int1 = - old.f_int1;
 
28188
END|
 
28189
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28190
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28191
        
 
28192
# check trigger-4 success:      1
 
28193
DROP TRIGGER trg_1;
 
28194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28195
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28196
f_charbig = 'just inserted'
 
28197
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28198
DELETE FROM t0_aux
 
28199
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28202
'just inserted' FROM t0_template
 
28203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28204
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28205
BEGIN
 
28206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28207
f_charbig = 'updated by trigger'
 
28208
      WHERE f_int1 = new.f_int1;
 
28209
END|
 
28210
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28211
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28212
        
 
28213
# check trigger-5 success:      1
 
28214
DROP TRIGGER trg_1;
 
28215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28217
f_charbig = 'just inserted'
 
28218
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28219
DELETE FROM t0_aux
 
28220
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28223
'just inserted' FROM t0_template
 
28224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28225
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28226
BEGIN
 
28227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28228
f_charbig = 'updated by trigger'
 
28229
      WHERE f_int1 = - old.f_int1;
 
28230
END|
 
28231
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28232
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28233
        
 
28234
# check trigger-6 success:      1
 
28235
DROP TRIGGER trg_1;
 
28236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28238
f_charbig = 'just inserted'
 
28239
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28240
DELETE FROM t0_aux
 
28241
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28242
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28243
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28244
'just inserted' FROM t0_template
 
28245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28246
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28247
BEGIN
 
28248
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28249
f_charbig = 'updated by trigger'
 
28250
      WHERE f_int1 = - old.f_int1;
 
28251
END|
 
28252
DELETE FROM t0_aux
 
28253
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28254
        
 
28255
# check trigger-7 success:      1
 
28256
DROP TRIGGER trg_1;
 
28257
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28258
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28259
f_charbig = 'just inserted'
 
28260
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28261
DELETE FROM t0_aux
 
28262
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28263
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28264
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28265
'just inserted' FROM t0_template
 
28266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28267
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28268
BEGIN
 
28269
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28270
f_charbig = 'updated by trigger'
 
28271
      WHERE f_int1 = - old.f_int1;
 
28272
END|
 
28273
DELETE FROM t0_aux
 
28274
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28275
        
 
28276
# check trigger-8 success:      1
 
28277
DROP TRIGGER trg_1;
 
28278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28280
f_charbig = 'just inserted'
 
28281
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28282
DELETE FROM t0_aux
 
28283
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28284
DELETE FROM t1
 
28285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28286
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28287
BEGIN
 
28288
SET new.f_int1 = old.f_int1 + @max_row,
 
28289
new.f_int2 = old.f_int2 - @max_row,
 
28290
new.f_charbig = '####updated per update trigger####';
 
28291
END|
 
28292
UPDATE t1
 
28293
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28294
f_charbig = '####updated per update statement itself####';
 
28295
        
 
28296
# check trigger-9 success:      1
 
28297
DROP TRIGGER trg_2;
 
28298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28300
f_charbig = CONCAT('===',f_char1,'===');
 
28301
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28302
BEGIN
 
28303
SET new.f_int1 = new.f_int1 + @max_row,
 
28304
new.f_int2 = new.f_int2 - @max_row,
 
28305
new.f_charbig = '####updated per update trigger####';
 
28306
END|
 
28307
UPDATE t1
 
28308
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28309
f_charbig = '####updated per update statement itself####';
 
28310
        
 
28311
# check trigger-10 success:     1
 
28312
DROP TRIGGER trg_2;
 
28313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28315
f_charbig = CONCAT('===',f_char1,'===');
 
28316
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28317
BEGIN
 
28318
SET new.f_int1 = @my_max1 + @counter,
 
28319
new.f_int2 = @my_min2 - @counter,
 
28320
new.f_charbig = '####updated per insert trigger####';
 
28321
SET @counter = @counter + 1;
 
28322
END|
 
28323
SET @counter = 1;
 
28324
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28325
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28326
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28327
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28329
ORDER BY f_int1;
 
28330
DROP TRIGGER trg_3;
 
28331
        
 
28332
# check trigger-11 success:     1
 
28333
DELETE FROM t1
 
28334
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28335
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28336
AND f_charbig = '####updated per insert trigger####';
 
28337
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28338
BEGIN
 
28339
SET new.f_int1 = @my_max1 + @counter,
 
28340
new.f_int2 = @my_min2 - @counter,
 
28341
new.f_charbig = '####updated per insert trigger####';
 
28342
SET @counter = @counter + 1;
 
28343
END|
 
28344
SET @counter = 1;
 
28345
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28346
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28347
SELECT CAST(f_int1 AS CHAR),
 
28348
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28350
ORDER BY f_int1;
 
28351
DROP TRIGGER trg_3;
 
28352
        
 
28353
# check trigger-12 success:     1
 
28354
DELETE FROM t1
 
28355
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28356
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28357
AND f_charbig = '####updated per insert trigger####';
 
28358
ANALYZE  TABLE t1;
 
28359
Table   Op      Msg_type        Msg_text
 
28360
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
28361
CHECK    TABLE t1 EXTENDED;
 
28362
Table   Op      Msg_type        Msg_text
 
28363
test.t1 check   note    The storage engine for the table doesn't support check
 
28364
CHECKSUM TABLE t1 EXTENDED;
 
28365
Table   Checksum
 
28366
test.t1 <some_value>
 
28367
OPTIMIZE TABLE t1;
 
28368
Table   Op      Msg_type        Msg_text
 
28369
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
28370
# check layout success:    1
 
28371
REPAIR   TABLE t1 EXTENDED;
 
28372
Table   Op      Msg_type        Msg_text
 
28373
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28374
# check layout success:    1
 
28375
TRUNCATE t1;
 
28376
        
 
28377
# check TRUNCATE success:       1
 
28378
# check layout success:    1
 
28379
# End usability test (inc/partition_check.inc)
 
28380
DROP TABLE t1;
 
28381
DROP TABLE IF EXISTS t1;
 
28382
CREATE TABLE t1 (
 
28383
f_int1 INTEGER,
 
28384
f_int2 INTEGER,
 
28385
f_char1 CHAR(20),
 
28386
f_char2 CHAR(20),
 
28387
f_charbig VARCHAR(1000)
 
28388
 
 
28389
)
 
28390
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
28391
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28392
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28393
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28394
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
28395
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28396
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28397
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28398
# Start usability test (inc/partition_check.inc)
 
28399
create_command
 
28400
SHOW CREATE TABLE t1;
 
28401
Table   Create Table
 
28402
t1      CREATE TABLE `t1` (
 
28403
  `f_int1` int(11) DEFAULT NULL,
 
28404
  `f_int2` int(11) DEFAULT NULL,
 
28405
  `f_char1` char(20) DEFAULT NULL,
 
28406
  `f_char2` char(20) DEFAULT NULL,
 
28407
  `f_charbig` varchar(1000) DEFAULT NULL,
 
28408
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
28409
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
28410
 
 
28411
# check prerequisites-1 success:    1
 
28412
# check COUNT(*) success:    1
 
28413
# check MIN/MAX(f_int1) success:    1
 
28414
# check MIN/MAX(f_int2) success:    1
 
28415
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28416
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28417
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28418
WHERE f_int1 IN (2,3);
 
28419
ERROR 23000: Can't write; duplicate key in table 't1'
 
28420
# check prerequisites-3 success:    1
 
28421
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
28422
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28423
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28424
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28425
WHERE f_int1 IN (2,3);
 
28426
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28427
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28428
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28429
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28430
WHERE f_int1 IN (2,3);
 
28431
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28432
# check read via f_int1 success: 1
 
28433
# check read via f_int2 success: 1
 
28434
        
 
28435
# check multiple-1 success:     1
 
28436
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28437
        
 
28438
# check multiple-2 success:     1
 
28439
INSERT INTO t1 SELECT * FROM t0_template
 
28440
WHERE MOD(f_int1,3) = 0;
 
28441
        
 
28442
# check multiple-3 success:     1
 
28443
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28444
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28445
AND @max_row_div2 + @max_row_div4;
 
28446
        
 
28447
# check multiple-4 success:     1
 
28448
DELETE FROM t1
 
28449
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28450
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28451
        
 
28452
# check multiple-5 success:     1
 
28453
SELECT COUNT(*) INTO @try_count FROM t0_template
 
28454
WHERE MOD(f_int1,3) = 0
 
28455
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28456
SELECT COUNT(*) INTO @clash_count
 
28457
FROM t1 INNER JOIN t0_template USING(f_int1)
 
28458
WHERE MOD(f_int1,3) = 0
 
28459
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28460
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28461
INSERT INTO t1
 
28462
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28463
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28464
f_charbig = '#SINGLE#';
 
28465
        
 
28466
# check single-1 success:       1
 
28467
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28468
INSERT INTO t1
 
28469
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28470
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28471
f_charbig = '#SINGLE#';
 
28472
        
 
28473
# check single-2 success:       1
 
28474
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28475
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28476
UPDATE t1 SET f_int1 = @cur_value2
 
28477
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28478
        
 
28479
# check single-3 success:       1
 
28480
SET @cur_value1= -1;
 
28481
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28482
UPDATE t1 SET f_int1 = @cur_value1
 
28483
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28484
        
 
28485
# check single-4 success:       1
 
28486
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28487
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28488
        
 
28489
# check single-5 success:       1
 
28490
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28491
        
 
28492
# check single-6 success:       1
 
28493
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28494
        
 
28495
# check single-7 success:       1
 
28496
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28497
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28498
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28499
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28500
f_charbig = '#NULL#';
 
28501
INSERT INTO t1
 
28502
SET f_int1 = NULL , f_int2 = -@max_row,
 
28503
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28504
f_charbig = '#NULL#';
 
28505
# check null success:    1
 
28506
        
 
28507
# check null-1 success:         1
 
28508
UPDATE t1 SET f_int1 = -@max_row
 
28509
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28510
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28511
        
 
28512
# check null-2 success:         1
 
28513
UPDATE t1 SET f_int1 = NULL
 
28514
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28515
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28516
        
 
28517
# check null-3 success:         1
 
28518
DELETE FROM t1
 
28519
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28520
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28521
        
 
28522
# check null-4 success:         1
 
28523
DELETE FROM t1
 
28524
WHERE f_int1 = 0 AND f_int2 = 0
 
28525
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28526
AND f_charbig = '#NULL#';
 
28527
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28528
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28529
   FROM t0_template source_tab
 
28530
WHERE MOD(f_int1,3) = 0
 
28531
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
28532
ON DUPLICATE KEY
 
28533
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
28534
f_int2 = 2 * @max_row + source_tab.f_int1,
 
28535
f_charbig = 'was updated';
 
28536
        
 
28537
# check unique-1-a success:     1
 
28538
        
 
28539
# check unique-1-b success:     1
 
28540
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28543
f_charbig = CONCAT('===',f_char1,'===')
 
28544
WHERE f_charbig = 'was updated';
 
28545
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28546
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
28547
   FROM t0_template source_tab
 
28548
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28549
        
 
28550
# check replace success:        1
 
28551
DELETE FROM t1
 
28552
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
28553
DELETE FROM t1
 
28554
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
28555
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
28556
UPDATE t1 SET f_int2 = f_int1,
 
28557
f_char1 = CAST(f_int1 AS CHAR),
 
28558
f_char2 = CAST(f_int1 AS CHAR),
 
28559
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
28560
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
28561
SET AUTOCOMMIT= 0;
 
28562
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28563
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28564
FROM t0_template source_tab
 
28565
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28566
        
 
28567
# check transactions-1 success:         1
 
28568
COMMIT WORK;
 
28569
        
 
28570
# check transactions-2 success:         1
 
28571
ROLLBACK WORK;
 
28572
        
 
28573
# check transactions-3 success:         1
 
28574
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28575
COMMIT WORK;
 
28576
ROLLBACK WORK;
 
28577
        
 
28578
# check transactions-4 success:         1
 
28579
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28580
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28581
FROM t0_template source_tab
 
28582
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28583
        
 
28584
# check transactions-5 success:         1
 
28585
ROLLBACK WORK;
 
28586
        
 
28587
# check transactions-6 success:         1
 
28588
# INFO: Storage engine used for t1 seems to be transactional.
 
28589
COMMIT;
 
28590
        
 
28591
# check transactions-7 success:         1
 
28592
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28593
COMMIT WORK;
 
28594
SET @@session.sql_mode = 'traditional';
 
28595
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28596
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28597
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28598
'', '', 'was inserted' FROM t0_template
 
28599
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28600
ERROR 22012: Division by 0
 
28601
COMMIT;
 
28602
        
 
28603
# check transactions-8 success:         1
 
28604
# INFO: Storage engine used for t1 seems to be able to revert
 
28605
#       changes made by the failing statement.
 
28606
SET @@session.sql_mode = '';
 
28607
SET AUTOCOMMIT= 1;
 
28608
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28609
COMMIT WORK;
 
28610
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28611
        
 
28612
# check special-1 success:      1
 
28613
UPDATE t1 SET f_charbig = '';
 
28614
        
 
28615
# check special-2 success:      1
 
28616
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28617
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28618
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28622
'just inserted' FROM t0_template
 
28623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28624
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28625
BEGIN
 
28626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28627
f_charbig = 'updated by trigger'
 
28628
      WHERE f_int1 = new.f_int1;
 
28629
END|
 
28630
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28631
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28633
        
 
28634
# check trigger-1 success:      1
 
28635
DROP TRIGGER trg_1;
 
28636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28638
f_charbig = 'just inserted'
 
28639
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28640
DELETE FROM t0_aux
 
28641
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28642
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28643
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28644
'just inserted' FROM t0_template
 
28645
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28646
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28647
BEGIN
 
28648
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28649
f_charbig = 'updated by trigger'
 
28650
      WHERE f_int1 = new.f_int1;
 
28651
END|
 
28652
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28653
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28655
        
 
28656
# check trigger-2 success:      1
 
28657
DROP TRIGGER trg_1;
 
28658
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28659
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28660
f_charbig = 'just inserted'
 
28661
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28662
DELETE FROM t0_aux
 
28663
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28664
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28665
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28666
'just inserted' FROM t0_template
 
28667
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28668
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28669
BEGIN
 
28670
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28671
f_charbig = 'updated by trigger'
 
28672
      WHERE f_int1 = new.f_int1;
 
28673
END|
 
28674
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28675
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28676
        
 
28677
# check trigger-3 success:      1
 
28678
DROP TRIGGER trg_1;
 
28679
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28680
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28681
f_charbig = 'just inserted'
 
28682
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28683
DELETE FROM t0_aux
 
28684
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28685
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28686
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28687
'just inserted' FROM t0_template
 
28688
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28689
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28690
BEGIN
 
28691
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28692
f_charbig = 'updated by trigger'
 
28693
      WHERE f_int1 = - old.f_int1;
 
28694
END|
 
28695
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28696
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28697
        
 
28698
# check trigger-4 success:      1
 
28699
DROP TRIGGER trg_1;
 
28700
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28701
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28702
f_charbig = 'just inserted'
 
28703
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28704
DELETE FROM t0_aux
 
28705
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28706
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28707
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28708
'just inserted' FROM t0_template
 
28709
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28710
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28711
BEGIN
 
28712
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28713
f_charbig = 'updated by trigger'
 
28714
      WHERE f_int1 = new.f_int1;
 
28715
END|
 
28716
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28717
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28718
        
 
28719
# check trigger-5 success:      1
 
28720
DROP TRIGGER trg_1;
 
28721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28723
f_charbig = 'just inserted'
 
28724
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28725
DELETE FROM t0_aux
 
28726
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28728
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28729
'just inserted' FROM t0_template
 
28730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28731
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28732
BEGIN
 
28733
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28734
f_charbig = 'updated by trigger'
 
28735
      WHERE f_int1 = - old.f_int1;
 
28736
END|
 
28737
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28738
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28739
        
 
28740
# check trigger-6 success:      1
 
28741
DROP TRIGGER trg_1;
 
28742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28743
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28744
f_charbig = 'just inserted'
 
28745
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28746
DELETE FROM t0_aux
 
28747
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28748
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28749
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28750
'just inserted' FROM t0_template
 
28751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28752
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28753
BEGIN
 
28754
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28755
f_charbig = 'updated by trigger'
 
28756
      WHERE f_int1 = - old.f_int1;
 
28757
END|
 
28758
DELETE FROM t0_aux
 
28759
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28760
        
 
28761
# check trigger-7 success:      1
 
28762
DROP TRIGGER trg_1;
 
28763
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28764
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28765
f_charbig = 'just inserted'
 
28766
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28767
DELETE FROM t0_aux
 
28768
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28769
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28770
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28771
'just inserted' FROM t0_template
 
28772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28773
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28774
BEGIN
 
28775
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28776
f_charbig = 'updated by trigger'
 
28777
      WHERE f_int1 = - old.f_int1;
 
28778
END|
 
28779
DELETE FROM t0_aux
 
28780
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28781
        
 
28782
# check trigger-8 success:      1
 
28783
DROP TRIGGER trg_1;
 
28784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28786
f_charbig = 'just inserted'
 
28787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28788
DELETE FROM t0_aux
 
28789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28790
DELETE FROM t1
 
28791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28792
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28793
BEGIN
 
28794
SET new.f_int1 = old.f_int1 + @max_row,
 
28795
new.f_int2 = old.f_int2 - @max_row,
 
28796
new.f_charbig = '####updated per update trigger####';
 
28797
END|
 
28798
UPDATE t1
 
28799
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28800
f_charbig = '####updated per update statement itself####';
 
28801
        
 
28802
# check trigger-9 success:      1
 
28803
DROP TRIGGER trg_2;
 
28804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28806
f_charbig = CONCAT('===',f_char1,'===');
 
28807
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28808
BEGIN
 
28809
SET new.f_int1 = new.f_int1 + @max_row,
 
28810
new.f_int2 = new.f_int2 - @max_row,
 
28811
new.f_charbig = '####updated per update trigger####';
 
28812
END|
 
28813
UPDATE t1
 
28814
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28815
f_charbig = '####updated per update statement itself####';
 
28816
        
 
28817
# check trigger-10 success:     1
 
28818
DROP TRIGGER trg_2;
 
28819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28821
f_charbig = CONCAT('===',f_char1,'===');
 
28822
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28823
BEGIN
 
28824
SET new.f_int1 = @my_max1 + @counter,
 
28825
new.f_int2 = @my_min2 - @counter,
 
28826
new.f_charbig = '####updated per insert trigger####';
 
28827
SET @counter = @counter + 1;
 
28828
END|
 
28829
SET @counter = 1;
 
28830
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28831
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28832
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28833
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28835
ORDER BY f_int1;
 
28836
DROP TRIGGER trg_3;
 
28837
        
 
28838
# check trigger-11 success:     1
 
28839
DELETE FROM t1
 
28840
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28841
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28842
AND f_charbig = '####updated per insert trigger####';
 
28843
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28844
BEGIN
 
28845
SET new.f_int1 = @my_max1 + @counter,
 
28846
new.f_int2 = @my_min2 - @counter,
 
28847
new.f_charbig = '####updated per insert trigger####';
 
28848
SET @counter = @counter + 1;
 
28849
END|
 
28850
SET @counter = 1;
 
28851
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28852
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28853
SELECT CAST(f_int1 AS CHAR),
 
28854
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28855
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28856
ORDER BY f_int1;
 
28857
DROP TRIGGER trg_3;
 
28858
        
 
28859
# check trigger-12 success:     1
 
28860
DELETE FROM t1
 
28861
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28862
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28863
AND f_charbig = '####updated per insert trigger####';
 
28864
ANALYZE  TABLE t1;
 
28865
Table   Op      Msg_type        Msg_text
 
28866
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
28867
CHECK    TABLE t1 EXTENDED;
 
28868
Table   Op      Msg_type        Msg_text
 
28869
test.t1 check   note    The storage engine for the table doesn't support check
 
28870
CHECKSUM TABLE t1 EXTENDED;
 
28871
Table   Checksum
 
28872
test.t1 <some_value>
 
28873
OPTIMIZE TABLE t1;
 
28874
Table   Op      Msg_type        Msg_text
 
28875
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
28876
# check layout success:    1
 
28877
REPAIR   TABLE t1 EXTENDED;
 
28878
Table   Op      Msg_type        Msg_text
 
28879
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28880
# check layout success:    1
 
28881
TRUNCATE t1;
 
28882
        
 
28883
# check TRUNCATE success:       1
 
28884
# check layout success:    1
 
28885
# End usability test (inc/partition_check.inc)
 
28886
DROP TABLE t1;
 
28887
CREATE TABLE t1 (
 
28888
f_int1 INTEGER,
 
28889
f_int2 INTEGER,
 
28890
f_char1 CHAR(20),
 
28891
f_char2 CHAR(20),
 
28892
f_charbig VARCHAR(1000)
 
28893
 
 
28894
)
 
28895
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
28896
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28897
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28898
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28899
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
28900
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28901
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28902
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28903
# Start usability test (inc/partition_check.inc)
 
28904
create_command
 
28905
SHOW CREATE TABLE t1;
 
28906
Table   Create Table
 
28907
t1      CREATE TABLE `t1` (
 
28908
  `f_int1` int(11) DEFAULT NULL,
 
28909
  `f_int2` int(11) DEFAULT NULL,
 
28910
  `f_char1` char(20) DEFAULT NULL,
 
28911
  `f_char2` char(20) DEFAULT NULL,
 
28912
  `f_charbig` varchar(1000) DEFAULT NULL,
 
28913
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
28914
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
28915
 
 
28916
# check prerequisites-1 success:    1
 
28917
# check COUNT(*) success:    1
 
28918
# check MIN/MAX(f_int1) success:    1
 
28919
# check MIN/MAX(f_int2) success:    1
 
28920
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28921
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28922
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28923
WHERE f_int1 IN (2,3);
 
28924
ERROR 23000: Can't write; duplicate key in table 't1'
 
28925
# check prerequisites-3 success:    1
 
28926
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
28927
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28928
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28929
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28930
WHERE f_int1 IN (2,3);
 
28931
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28932
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28933
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28934
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28935
WHERE f_int1 IN (2,3);
 
28936
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28937
# check read via f_int1 success: 1
 
28938
# check read via f_int2 success: 1
 
28939
        
 
28940
# check multiple-1 success:     1
 
28941
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28942
        
 
28943
# check multiple-2 success:     1
 
28944
INSERT INTO t1 SELECT * FROM t0_template
 
28945
WHERE MOD(f_int1,3) = 0;
 
28946
        
 
28947
# check multiple-3 success:     1
 
28948
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28949
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28950
AND @max_row_div2 + @max_row_div4;
 
28951
        
 
28952
# check multiple-4 success:     1
 
28953
DELETE FROM t1
 
28954
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28955
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28956
        
 
28957
# check multiple-5 success:     1
 
28958
SELECT COUNT(*) INTO @try_count FROM t0_template
 
28959
WHERE MOD(f_int1,3) = 0
 
28960
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28961
SELECT COUNT(*) INTO @clash_count
 
28962
FROM t1 INNER JOIN t0_template USING(f_int1)
 
28963
WHERE MOD(f_int1,3) = 0
 
28964
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28965
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28966
INSERT INTO t1
 
28967
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28968
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28969
f_charbig = '#SINGLE#';
 
28970
        
 
28971
# check single-1 success:       1
 
28972
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28973
INSERT INTO t1
 
28974
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28975
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28976
f_charbig = '#SINGLE#';
 
28977
        
 
28978
# check single-2 success:       1
 
28979
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28980
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28981
UPDATE t1 SET f_int1 = @cur_value2
 
28982
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28983
        
 
28984
# check single-3 success:       1
 
28985
SET @cur_value1= -1;
 
28986
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28987
UPDATE t1 SET f_int1 = @cur_value1
 
28988
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28989
        
 
28990
# check single-4 success:       1
 
28991
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28992
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28993
        
 
28994
# check single-5 success:       1
 
28995
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28996
        
 
28997
# check single-6 success:       1
 
28998
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28999
        
 
29000
# check single-7 success:       1
 
29001
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29002
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29003
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29004
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29005
f_charbig = '#NULL#';
 
29006
INSERT INTO t1
 
29007
SET f_int1 = NULL , f_int2 = -@max_row,
 
29008
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29009
f_charbig = '#NULL#';
 
29010
# check null success:    1
 
29011
        
 
29012
# check null-1 success:         1
 
29013
UPDATE t1 SET f_int1 = -@max_row
 
29014
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29015
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29016
        
 
29017
# check null-2 success:         1
 
29018
UPDATE t1 SET f_int1 = NULL
 
29019
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29020
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29021
        
 
29022
# check null-3 success:         1
 
29023
DELETE FROM t1
 
29024
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29025
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29026
        
 
29027
# check null-4 success:         1
 
29028
DELETE FROM t1
 
29029
WHERE f_int1 = 0 AND f_int2 = 0
 
29030
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29031
AND f_charbig = '#NULL#';
 
29032
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29033
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29034
   FROM t0_template source_tab
 
29035
WHERE MOD(f_int1,3) = 0
 
29036
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
29037
ON DUPLICATE KEY
 
29038
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
29039
f_int2 = 2 * @max_row + source_tab.f_int1,
 
29040
f_charbig = 'was updated';
 
29041
        
 
29042
# check unique-1-a success:     1
 
29043
        
 
29044
# check unique-1-b success:     1
 
29045
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29046
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29047
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29048
f_charbig = CONCAT('===',f_char1,'===')
 
29049
WHERE f_charbig = 'was updated';
 
29050
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29051
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
29052
   FROM t0_template source_tab
 
29053
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29054
        
 
29055
# check replace success:        1
 
29056
DELETE FROM t1
 
29057
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
29058
DELETE FROM t1
 
29059
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
29060
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
29061
UPDATE t1 SET f_int2 = f_int1,
 
29062
f_char1 = CAST(f_int1 AS CHAR),
 
29063
f_char2 = CAST(f_int1 AS CHAR),
 
29064
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
29065
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
29066
SET AUTOCOMMIT= 0;
 
29067
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29068
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29069
FROM t0_template source_tab
 
29070
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29071
        
 
29072
# check transactions-1 success:         1
 
29073
COMMIT WORK;
 
29074
        
 
29075
# check transactions-2 success:         1
 
29076
ROLLBACK WORK;
 
29077
        
 
29078
# check transactions-3 success:         1
 
29079
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29080
COMMIT WORK;
 
29081
ROLLBACK WORK;
 
29082
        
 
29083
# check transactions-4 success:         1
 
29084
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29085
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29086
FROM t0_template source_tab
 
29087
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29088
        
 
29089
# check transactions-5 success:         1
 
29090
ROLLBACK WORK;
 
29091
        
 
29092
# check transactions-6 success:         1
 
29093
# INFO: Storage engine used for t1 seems to be transactional.
 
29094
COMMIT;
 
29095
        
 
29096
# check transactions-7 success:         1
 
29097
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29098
COMMIT WORK;
 
29099
SET @@session.sql_mode = 'traditional';
 
29100
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29101
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29102
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29103
'', '', 'was inserted' FROM t0_template
 
29104
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29105
ERROR 22012: Division by 0
 
29106
COMMIT;
 
29107
        
 
29108
# check transactions-8 success:         1
 
29109
# INFO: Storage engine used for t1 seems to be able to revert
 
29110
#       changes made by the failing statement.
 
29111
SET @@session.sql_mode = '';
 
29112
SET AUTOCOMMIT= 1;
 
29113
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29114
COMMIT WORK;
 
29115
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29116
        
 
29117
# check special-1 success:      1
 
29118
UPDATE t1 SET f_charbig = '';
 
29119
        
 
29120
# check special-2 success:      1
 
29121
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29122
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29123
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29124
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29127
'just inserted' FROM t0_template
 
29128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29129
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29130
BEGIN
 
29131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29132
f_charbig = 'updated by trigger'
 
29133
      WHERE f_int1 = new.f_int1;
 
29134
END|
 
29135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29136
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29138
        
 
29139
# check trigger-1 success:      1
 
29140
DROP TRIGGER trg_1;
 
29141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29143
f_charbig = 'just inserted'
 
29144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29145
DELETE FROM t0_aux
 
29146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29149
'just inserted' FROM t0_template
 
29150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29151
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29152
BEGIN
 
29153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29154
f_charbig = 'updated by trigger'
 
29155
      WHERE f_int1 = new.f_int1;
 
29156
END|
 
29157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29158
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29160
        
 
29161
# check trigger-2 success:      1
 
29162
DROP TRIGGER trg_1;
 
29163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29165
f_charbig = 'just inserted'
 
29166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29167
DELETE FROM t0_aux
 
29168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29171
'just inserted' FROM t0_template
 
29172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29173
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29174
BEGIN
 
29175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29176
f_charbig = 'updated by trigger'
 
29177
      WHERE f_int1 = new.f_int1;
 
29178
END|
 
29179
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29180
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29181
        
 
29182
# check trigger-3 success:      1
 
29183
DROP TRIGGER trg_1;
 
29184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29186
f_charbig = 'just inserted'
 
29187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29188
DELETE FROM t0_aux
 
29189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29192
'just inserted' FROM t0_template
 
29193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29194
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29195
BEGIN
 
29196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29197
f_charbig = 'updated by trigger'
 
29198
      WHERE f_int1 = - old.f_int1;
 
29199
END|
 
29200
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29202
        
 
29203
# check trigger-4 success:      1
 
29204
DROP TRIGGER trg_1;
 
29205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29207
f_charbig = 'just inserted'
 
29208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29209
DELETE FROM t0_aux
 
29210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29213
'just inserted' FROM t0_template
 
29214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29215
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29216
BEGIN
 
29217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29218
f_charbig = 'updated by trigger'
 
29219
      WHERE f_int1 = new.f_int1;
 
29220
END|
 
29221
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29223
        
 
29224
# check trigger-5 success:      1
 
29225
DROP TRIGGER trg_1;
 
29226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29228
f_charbig = 'just inserted'
 
29229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29230
DELETE FROM t0_aux
 
29231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29234
'just inserted' FROM t0_template
 
29235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29236
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29237
BEGIN
 
29238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29239
f_charbig = 'updated by trigger'
 
29240
      WHERE f_int1 = - old.f_int1;
 
29241
END|
 
29242
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29243
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29244
        
 
29245
# check trigger-6 success:      1
 
29246
DROP TRIGGER trg_1;
 
29247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29249
f_charbig = 'just inserted'
 
29250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29251
DELETE FROM t0_aux
 
29252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29255
'just inserted' FROM t0_template
 
29256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29257
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29258
BEGIN
 
29259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29260
f_charbig = 'updated by trigger'
 
29261
      WHERE f_int1 = - old.f_int1;
 
29262
END|
 
29263
DELETE FROM t0_aux
 
29264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29265
        
 
29266
# check trigger-7 success:      1
 
29267
DROP TRIGGER trg_1;
 
29268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29270
f_charbig = 'just inserted'
 
29271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29272
DELETE FROM t0_aux
 
29273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29276
'just inserted' FROM t0_template
 
29277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29278
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29279
BEGIN
 
29280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29281
f_charbig = 'updated by trigger'
 
29282
      WHERE f_int1 = - old.f_int1;
 
29283
END|
 
29284
DELETE FROM t0_aux
 
29285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29286
        
 
29287
# check trigger-8 success:      1
 
29288
DROP TRIGGER trg_1;
 
29289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29291
f_charbig = 'just inserted'
 
29292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29293
DELETE FROM t0_aux
 
29294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29295
DELETE FROM t1
 
29296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29297
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29298
BEGIN
 
29299
SET new.f_int1 = old.f_int1 + @max_row,
 
29300
new.f_int2 = old.f_int2 - @max_row,
 
29301
new.f_charbig = '####updated per update trigger####';
 
29302
END|
 
29303
UPDATE t1
 
29304
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29305
f_charbig = '####updated per update statement itself####';
 
29306
        
 
29307
# check trigger-9 success:      1
 
29308
DROP TRIGGER trg_2;
 
29309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29311
f_charbig = CONCAT('===',f_char1,'===');
 
29312
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29313
BEGIN
 
29314
SET new.f_int1 = new.f_int1 + @max_row,
 
29315
new.f_int2 = new.f_int2 - @max_row,
 
29316
new.f_charbig = '####updated per update trigger####';
 
29317
END|
 
29318
UPDATE t1
 
29319
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29320
f_charbig = '####updated per update statement itself####';
 
29321
        
 
29322
# check trigger-10 success:     1
 
29323
DROP TRIGGER trg_2;
 
29324
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29325
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29326
f_charbig = CONCAT('===',f_char1,'===');
 
29327
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29328
BEGIN
 
29329
SET new.f_int1 = @my_max1 + @counter,
 
29330
new.f_int2 = @my_min2 - @counter,
 
29331
new.f_charbig = '####updated per insert trigger####';
 
29332
SET @counter = @counter + 1;
 
29333
END|
 
29334
SET @counter = 1;
 
29335
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29336
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29337
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29338
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29340
ORDER BY f_int1;
 
29341
DROP TRIGGER trg_3;
 
29342
        
 
29343
# check trigger-11 success:     1
 
29344
DELETE FROM t1
 
29345
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29346
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29347
AND f_charbig = '####updated per insert trigger####';
 
29348
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29349
BEGIN
 
29350
SET new.f_int1 = @my_max1 + @counter,
 
29351
new.f_int2 = @my_min2 - @counter,
 
29352
new.f_charbig = '####updated per insert trigger####';
 
29353
SET @counter = @counter + 1;
 
29354
END|
 
29355
SET @counter = 1;
 
29356
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29357
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29358
SELECT CAST(f_int1 AS CHAR),
 
29359
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29361
ORDER BY f_int1;
 
29362
DROP TRIGGER trg_3;
 
29363
        
 
29364
# check trigger-12 success:     1
 
29365
DELETE FROM t1
 
29366
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29367
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29368
AND f_charbig = '####updated per insert trigger####';
 
29369
ANALYZE  TABLE t1;
 
29370
Table   Op      Msg_type        Msg_text
 
29371
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
29372
CHECK    TABLE t1 EXTENDED;
 
29373
Table   Op      Msg_type        Msg_text
 
29374
test.t1 check   note    The storage engine for the table doesn't support check
 
29375
CHECKSUM TABLE t1 EXTENDED;
 
29376
Table   Checksum
 
29377
test.t1 <some_value>
 
29378
OPTIMIZE TABLE t1;
 
29379
Table   Op      Msg_type        Msg_text
 
29380
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
29381
# check layout success:    1
 
29382
REPAIR   TABLE t1 EXTENDED;
 
29383
Table   Op      Msg_type        Msg_text
 
29384
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29385
# check layout success:    1
 
29386
TRUNCATE t1;
 
29387
        
 
29388
# check TRUNCATE success:       1
 
29389
# check layout success:    1
 
29390
# End usability test (inc/partition_check.inc)
 
29391
DROP TABLE t1;
 
29392
CREATE TABLE t1 (
 
29393
f_int1 INTEGER,
 
29394
f_int2 INTEGER,
 
29395
f_char1 CHAR(20),
 
29396
f_char2 CHAR(20),
 
29397
f_charbig VARCHAR(1000)
 
29398
 
 
29399
)
 
29400
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
29401
(PARTITION part_3 VALUES IN (-3),
 
29402
PARTITION part_2 VALUES IN (-2),
 
29403
PARTITION part_1 VALUES IN (-1),
 
29404
PARTITION part_N VALUES IN (NULL),
 
29405
PARTITION part0 VALUES IN (0),
 
29406
PARTITION part1 VALUES IN (1),
 
29407
PARTITION part2 VALUES IN (2),
 
29408
PARTITION part3 VALUES IN (3));
 
29409
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29410
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29411
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29412
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
29413
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29414
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29415
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29416
# Start usability test (inc/partition_check.inc)
 
29417
create_command
 
29418
SHOW CREATE TABLE t1;
 
29419
Table   Create Table
 
29420
t1      CREATE TABLE `t1` (
 
29421
  `f_int1` int(11) DEFAULT NULL,
 
29422
  `f_int2` int(11) DEFAULT NULL,
 
29423
  `f_char1` char(20) DEFAULT NULL,
 
29424
  `f_char2` char(20) DEFAULT NULL,
 
29425
  `f_charbig` varchar(1000) DEFAULT NULL,
 
29426
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
29427
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
29428
 
 
29429
# check prerequisites-1 success:    1
 
29430
# check COUNT(*) success:    1
 
29431
# check MIN/MAX(f_int1) success:    1
 
29432
# check MIN/MAX(f_int2) success:    1
 
29433
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29434
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29435
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29436
WHERE f_int1 IN (2,3);
 
29437
ERROR 23000: Can't write; duplicate key in table 't1'
 
29438
# check prerequisites-3 success:    1
 
29439
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
29440
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29441
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29442
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29443
WHERE f_int1 IN (2,3);
 
29444
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29445
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29446
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29447
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29448
WHERE f_int1 IN (2,3);
 
29449
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29450
# check read via f_int1 success: 1
 
29451
# check read via f_int2 success: 1
 
29452
        
 
29453
# check multiple-1 success:     1
 
29454
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29455
        
 
29456
# check multiple-2 success:     1
 
29457
INSERT INTO t1 SELECT * FROM t0_template
 
29458
WHERE MOD(f_int1,3) = 0;
 
29459
        
 
29460
# check multiple-3 success:     1
 
29461
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29462
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29463
AND @max_row_div2 + @max_row_div4;
 
29464
        
 
29465
# check multiple-4 success:     1
 
29466
DELETE FROM t1
 
29467
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29468
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29469
        
 
29470
# check multiple-5 success:     1
 
29471
SELECT COUNT(*) INTO @try_count FROM t0_template
 
29472
WHERE MOD(f_int1,3) = 0
 
29473
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29474
SELECT COUNT(*) INTO @clash_count
 
29475
FROM t1 INNER JOIN t0_template USING(f_int1)
 
29476
WHERE MOD(f_int1,3) = 0
 
29477
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29478
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29479
INSERT INTO t1
 
29480
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29481
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29482
f_charbig = '#SINGLE#';
 
29483
        
 
29484
# check single-1 success:       1
 
29485
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29486
INSERT INTO t1
 
29487
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29488
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29489
f_charbig = '#SINGLE#';
 
29490
        
 
29491
# check single-2 success:       1
 
29492
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29493
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29494
UPDATE t1 SET f_int1 = @cur_value2
 
29495
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29496
        
 
29497
# check single-3 success:       1
 
29498
SET @cur_value1= -1;
 
29499
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29500
UPDATE t1 SET f_int1 = @cur_value1
 
29501
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29502
        
 
29503
# check single-4 success:       1
 
29504
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29505
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29506
        
 
29507
# check single-5 success:       1
 
29508
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29509
        
 
29510
# check single-6 success:       1
 
29511
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29512
        
 
29513
# check single-7 success:       1
 
29514
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29515
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29516
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29517
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29518
f_charbig = '#NULL#';
 
29519
INSERT INTO t1
 
29520
SET f_int1 = NULL , f_int2 = -@max_row,
 
29521
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29522
f_charbig = '#NULL#';
 
29523
# check null success:    1
 
29524
        
 
29525
# check null-1 success:         1
 
29526
UPDATE t1 SET f_int1 = -@max_row
 
29527
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29528
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29529
        
 
29530
# check null-2 success:         1
 
29531
UPDATE t1 SET f_int1 = NULL
 
29532
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29533
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29534
        
 
29535
# check null-3 success:         1
 
29536
DELETE FROM t1
 
29537
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29538
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29539
        
 
29540
# check null-4 success:         1
 
29541
DELETE FROM t1
 
29542
WHERE f_int1 = 0 AND f_int2 = 0
 
29543
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29544
AND f_charbig = '#NULL#';
 
29545
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29546
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29547
   FROM t0_template source_tab
 
29548
WHERE MOD(f_int1,3) = 0
 
29549
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
29550
ON DUPLICATE KEY
 
29551
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
29552
f_int2 = 2 * @max_row + source_tab.f_int1,
 
29553
f_charbig = 'was updated';
 
29554
        
 
29555
# check unique-1-a success:     1
 
29556
        
 
29557
# check unique-1-b success:     1
 
29558
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29559
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29560
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29561
f_charbig = CONCAT('===',f_char1,'===')
 
29562
WHERE f_charbig = 'was updated';
 
29563
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29564
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
29565
   FROM t0_template source_tab
 
29566
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29567
        
 
29568
# check replace success:        1
 
29569
DELETE FROM t1
 
29570
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
29571
DELETE FROM t1
 
29572
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
29573
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
29574
UPDATE t1 SET f_int2 = f_int1,
 
29575
f_char1 = CAST(f_int1 AS CHAR),
 
29576
f_char2 = CAST(f_int1 AS CHAR),
 
29577
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
29578
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
29579
SET AUTOCOMMIT= 0;
 
29580
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29581
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29582
FROM t0_template source_tab
 
29583
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29584
        
 
29585
# check transactions-1 success:         1
 
29586
COMMIT WORK;
 
29587
        
 
29588
# check transactions-2 success:         1
 
29589
ROLLBACK WORK;
 
29590
        
 
29591
# check transactions-3 success:         1
 
29592
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29593
COMMIT WORK;
 
29594
ROLLBACK WORK;
 
29595
        
 
29596
# check transactions-4 success:         1
 
29597
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29598
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29599
FROM t0_template source_tab
 
29600
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29601
        
 
29602
# check transactions-5 success:         1
 
29603
ROLLBACK WORK;
 
29604
        
 
29605
# check transactions-6 success:         1
 
29606
# INFO: Storage engine used for t1 seems to be transactional.
 
29607
COMMIT;
 
29608
        
 
29609
# check transactions-7 success:         1
 
29610
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29611
COMMIT WORK;
 
29612
SET @@session.sql_mode = 'traditional';
 
29613
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29615
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29616
'', '', 'was inserted' FROM t0_template
 
29617
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29618
ERROR 22012: Division by 0
 
29619
COMMIT;
 
29620
        
 
29621
# check transactions-8 success:         1
 
29622
# INFO: Storage engine used for t1 seems to be able to revert
 
29623
#       changes made by the failing statement.
 
29624
SET @@session.sql_mode = '';
 
29625
SET AUTOCOMMIT= 1;
 
29626
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29627
COMMIT WORK;
 
29628
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29629
        
 
29630
# check special-1 success:      1
 
29631
UPDATE t1 SET f_charbig = '';
 
29632
        
 
29633
# check special-2 success:      1
 
29634
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29635
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29636
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29638
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29639
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29640
'just inserted' FROM t0_template
 
29641
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29642
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29643
BEGIN
 
29644
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29645
f_charbig = 'updated by trigger'
 
29646
      WHERE f_int1 = new.f_int1;
 
29647
END|
 
29648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29649
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29650
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29651
        
 
29652
# check trigger-1 success:      1
 
29653
DROP TRIGGER trg_1;
 
29654
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29655
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29656
f_charbig = 'just inserted'
 
29657
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29658
DELETE FROM t0_aux
 
29659
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29660
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29661
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29662
'just inserted' FROM t0_template
 
29663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29664
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29665
BEGIN
 
29666
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29667
f_charbig = 'updated by trigger'
 
29668
      WHERE f_int1 = new.f_int1;
 
29669
END|
 
29670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29671
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29673
        
 
29674
# check trigger-2 success:      1
 
29675
DROP TRIGGER trg_1;
 
29676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29678
f_charbig = 'just inserted'
 
29679
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29680
DELETE FROM t0_aux
 
29681
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29683
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29684
'just inserted' FROM t0_template
 
29685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29686
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29687
BEGIN
 
29688
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29689
f_charbig = 'updated by trigger'
 
29690
      WHERE f_int1 = new.f_int1;
 
29691
END|
 
29692
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29693
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29694
        
 
29695
# check trigger-3 success:      1
 
29696
DROP TRIGGER trg_1;
 
29697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29699
f_charbig = 'just inserted'
 
29700
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29701
DELETE FROM t0_aux
 
29702
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29703
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29704
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29705
'just inserted' FROM t0_template
 
29706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29707
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29708
BEGIN
 
29709
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29710
f_charbig = 'updated by trigger'
 
29711
      WHERE f_int1 = - old.f_int1;
 
29712
END|
 
29713
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29714
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29715
        
 
29716
# check trigger-4 success:      1
 
29717
DROP TRIGGER trg_1;
 
29718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29720
f_charbig = 'just inserted'
 
29721
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29722
DELETE FROM t0_aux
 
29723
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29724
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29725
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29726
'just inserted' FROM t0_template
 
29727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29728
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29729
BEGIN
 
29730
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29731
f_charbig = 'updated by trigger'
 
29732
      WHERE f_int1 = new.f_int1;
 
29733
END|
 
29734
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29735
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29736
        
 
29737
# check trigger-5 success:      1
 
29738
DROP TRIGGER trg_1;
 
29739
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29740
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29741
f_charbig = 'just inserted'
 
29742
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29743
DELETE FROM t0_aux
 
29744
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29746
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29747
'just inserted' FROM t0_template
 
29748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29749
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29750
BEGIN
 
29751
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29752
f_charbig = 'updated by trigger'
 
29753
      WHERE f_int1 = - old.f_int1;
 
29754
END|
 
29755
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29756
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29757
        
 
29758
# check trigger-6 success:      1
 
29759
DROP TRIGGER trg_1;
 
29760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29762
f_charbig = 'just inserted'
 
29763
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29764
DELETE FROM t0_aux
 
29765
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29766
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29767
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29768
'just inserted' FROM t0_template
 
29769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29770
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29771
BEGIN
 
29772
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29773
f_charbig = 'updated by trigger'
 
29774
      WHERE f_int1 = - old.f_int1;
 
29775
END|
 
29776
DELETE FROM t0_aux
 
29777
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29778
        
 
29779
# check trigger-7 success:      1
 
29780
DROP TRIGGER trg_1;
 
29781
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29782
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29783
f_charbig = 'just inserted'
 
29784
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29785
DELETE FROM t0_aux
 
29786
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29787
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29788
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29789
'just inserted' FROM t0_template
 
29790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29791
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29792
BEGIN
 
29793
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29794
f_charbig = 'updated by trigger'
 
29795
      WHERE f_int1 = - old.f_int1;
 
29796
END|
 
29797
DELETE FROM t0_aux
 
29798
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29799
        
 
29800
# check trigger-8 success:      1
 
29801
DROP TRIGGER trg_1;
 
29802
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29803
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29804
f_charbig = 'just inserted'
 
29805
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29806
DELETE FROM t0_aux
 
29807
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29808
DELETE FROM t1
 
29809
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29810
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29811
BEGIN
 
29812
SET new.f_int1 = old.f_int1 + @max_row,
 
29813
new.f_int2 = old.f_int2 - @max_row,
 
29814
new.f_charbig = '####updated per update trigger####';
 
29815
END|
 
29816
UPDATE t1
 
29817
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29818
f_charbig = '####updated per update statement itself####';
 
29819
        
 
29820
# check trigger-9 success:      1
 
29821
DROP TRIGGER trg_2;
 
29822
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29823
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29824
f_charbig = CONCAT('===',f_char1,'===');
 
29825
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29826
BEGIN
 
29827
SET new.f_int1 = new.f_int1 + @max_row,
 
29828
new.f_int2 = new.f_int2 - @max_row,
 
29829
new.f_charbig = '####updated per update trigger####';
 
29830
END|
 
29831
UPDATE t1
 
29832
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29833
f_charbig = '####updated per update statement itself####';
 
29834
        
 
29835
# check trigger-10 success:     1
 
29836
DROP TRIGGER trg_2;
 
29837
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29838
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29839
f_charbig = CONCAT('===',f_char1,'===');
 
29840
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29841
BEGIN
 
29842
SET new.f_int1 = @my_max1 + @counter,
 
29843
new.f_int2 = @my_min2 - @counter,
 
29844
new.f_charbig = '####updated per insert trigger####';
 
29845
SET @counter = @counter + 1;
 
29846
END|
 
29847
SET @counter = 1;
 
29848
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29849
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29850
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29851
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29852
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29853
ORDER BY f_int1;
 
29854
DROP TRIGGER trg_3;
 
29855
        
 
29856
# check trigger-11 success:     1
 
29857
DELETE FROM t1
 
29858
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29859
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29860
AND f_charbig = '####updated per insert trigger####';
 
29861
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29862
BEGIN
 
29863
SET new.f_int1 = @my_max1 + @counter,
 
29864
new.f_int2 = @my_min2 - @counter,
 
29865
new.f_charbig = '####updated per insert trigger####';
 
29866
SET @counter = @counter + 1;
 
29867
END|
 
29868
SET @counter = 1;
 
29869
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29870
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29871
SELECT CAST(f_int1 AS CHAR),
 
29872
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29873
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29874
ORDER BY f_int1;
 
29875
DROP TRIGGER trg_3;
 
29876
        
 
29877
# check trigger-12 success:     1
 
29878
DELETE FROM t1
 
29879
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29880
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29881
AND f_charbig = '####updated per insert trigger####';
 
29882
ANALYZE  TABLE t1;
 
29883
Table   Op      Msg_type        Msg_text
 
29884
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
29885
CHECK    TABLE t1 EXTENDED;
 
29886
Table   Op      Msg_type        Msg_text
 
29887
test.t1 check   note    The storage engine for the table doesn't support check
 
29888
CHECKSUM TABLE t1 EXTENDED;
 
29889
Table   Checksum
 
29890
test.t1 <some_value>
 
29891
OPTIMIZE TABLE t1;
 
29892
Table   Op      Msg_type        Msg_text
 
29893
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
29894
# check layout success:    1
 
29895
REPAIR   TABLE t1 EXTENDED;
 
29896
Table   Op      Msg_type        Msg_text
 
29897
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29898
# check layout success:    1
 
29899
TRUNCATE t1;
 
29900
        
 
29901
# check TRUNCATE success:       1
 
29902
# check layout success:    1
 
29903
# End usability test (inc/partition_check.inc)
 
29904
DROP TABLE t1;
 
29905
CREATE TABLE t1 (
 
29906
f_int1 INTEGER,
 
29907
f_int2 INTEGER,
 
29908
f_char1 CHAR(20),
 
29909
f_char2 CHAR(20),
 
29910
f_charbig VARCHAR(1000)
 
29911
 
 
29912
)
 
29913
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
29914
(PARTITION parta VALUES LESS THAN (0),
 
29915
PARTITION partb VALUES LESS THAN (5),
 
29916
PARTITION partc VALUES LESS THAN (10),
 
29917
PARTITION partd VALUES LESS THAN (10 + 5),
 
29918
PARTITION parte VALUES LESS THAN (20),
 
29919
PARTITION partf VALUES LESS THAN (2147483646));
 
29920
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29921
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29922
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29923
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
29924
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29925
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29926
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29927
# Start usability test (inc/partition_check.inc)
 
29928
create_command
 
29929
SHOW CREATE TABLE t1;
 
29930
Table   Create Table
 
29931
t1      CREATE TABLE `t1` (
 
29932
  `f_int1` int(11) DEFAULT NULL,
 
29933
  `f_int2` int(11) DEFAULT NULL,
 
29934
  `f_char1` char(20) DEFAULT NULL,
 
29935
  `f_char2` char(20) DEFAULT NULL,
 
29936
  `f_charbig` varchar(1000) DEFAULT NULL,
 
29937
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
29938
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
29939
 
 
29940
# check prerequisites-1 success:    1
 
29941
# check COUNT(*) success:    1
 
29942
# check MIN/MAX(f_int1) success:    1
 
29943
# check MIN/MAX(f_int2) success:    1
 
29944
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29945
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29946
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29947
WHERE f_int1 IN (2,3);
 
29948
ERROR 23000: Can't write; duplicate key in table 't1'
 
29949
# check prerequisites-3 success:    1
 
29950
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
29951
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29952
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29953
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29954
WHERE f_int1 IN (2,3);
 
29955
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29957
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29958
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29959
WHERE f_int1 IN (2,3);
 
29960
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29961
# check read via f_int1 success: 1
 
29962
# check read via f_int2 success: 1
 
29963
        
 
29964
# check multiple-1 success:     1
 
29965
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29966
        
 
29967
# check multiple-2 success:     1
 
29968
INSERT INTO t1 SELECT * FROM t0_template
 
29969
WHERE MOD(f_int1,3) = 0;
 
29970
        
 
29971
# check multiple-3 success:     1
 
29972
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29973
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29974
AND @max_row_div2 + @max_row_div4;
 
29975
        
 
29976
# check multiple-4 success:     1
 
29977
DELETE FROM t1
 
29978
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29979
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29980
        
 
29981
# check multiple-5 success:     1
 
29982
SELECT COUNT(*) INTO @try_count FROM t0_template
 
29983
WHERE MOD(f_int1,3) = 0
 
29984
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29985
SELECT COUNT(*) INTO @clash_count
 
29986
FROM t1 INNER JOIN t0_template USING(f_int1)
 
29987
WHERE MOD(f_int1,3) = 0
 
29988
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29989
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29990
INSERT INTO t1
 
29991
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29992
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29993
f_charbig = '#SINGLE#';
 
29994
        
 
29995
# check single-1 success:       1
 
29996
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29997
INSERT INTO t1
 
29998
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29999
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30000
f_charbig = '#SINGLE#';
 
30001
        
 
30002
# check single-2 success:       1
 
30003
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30004
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30005
UPDATE t1 SET f_int1 = @cur_value2
 
30006
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30007
        
 
30008
# check single-3 success:       1
 
30009
SET @cur_value1= -1;
 
30010
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30011
UPDATE t1 SET f_int1 = @cur_value1
 
30012
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30013
        
 
30014
# check single-4 success:       1
 
30015
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30016
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30017
        
 
30018
# check single-5 success:       1
 
30019
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30020
        
 
30021
# check single-6 success:       1
 
30022
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30023
ERROR HY000: Table has no partition for value 2147483647
 
30024
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30025
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30026
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30027
f_charbig = '#NULL#';
 
30028
INSERT INTO t1
 
30029
SET f_int1 = NULL , f_int2 = -@max_row,
 
30030
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30031
f_charbig = '#NULL#';
 
30032
# check null success:    1
 
30033
        
 
30034
# check null-1 success:         1
 
30035
UPDATE t1 SET f_int1 = -@max_row
 
30036
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30037
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30038
        
 
30039
# check null-2 success:         1
 
30040
UPDATE t1 SET f_int1 = NULL
 
30041
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30042
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30043
        
 
30044
# check null-3 success:         1
 
30045
DELETE FROM t1
 
30046
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30047
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30048
        
 
30049
# check null-4 success:         1
 
30050
DELETE FROM t1
 
30051
WHERE f_int1 = 0 AND f_int2 = 0
 
30052
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30053
AND f_charbig = '#NULL#';
 
30054
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30055
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30056
   FROM t0_template source_tab
 
30057
WHERE MOD(f_int1,3) = 0
 
30058
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
30059
ON DUPLICATE KEY
 
30060
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
30061
f_int2 = 2 * @max_row + source_tab.f_int1,
 
30062
f_charbig = 'was updated';
 
30063
        
 
30064
# check unique-1-a success:     1
 
30065
        
 
30066
# check unique-1-b success:     1
 
30067
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30068
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30069
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30070
f_charbig = CONCAT('===',f_char1,'===')
 
30071
WHERE f_charbig = 'was updated';
 
30072
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30073
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
30074
   FROM t0_template source_tab
 
30075
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30076
        
 
30077
# check replace success:        1
 
30078
DELETE FROM t1
 
30079
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
30080
DELETE FROM t1
 
30081
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
30082
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
30083
UPDATE t1 SET f_int2 = f_int1,
 
30084
f_char1 = CAST(f_int1 AS CHAR),
 
30085
f_char2 = CAST(f_int1 AS CHAR),
 
30086
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
30087
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
30088
SET AUTOCOMMIT= 0;
 
30089
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30090
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30091
FROM t0_template source_tab
 
30092
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30093
        
 
30094
# check transactions-1 success:         1
 
30095
COMMIT WORK;
 
30096
        
 
30097
# check transactions-2 success:         1
 
30098
ROLLBACK WORK;
 
30099
        
 
30100
# check transactions-3 success:         1
 
30101
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30102
COMMIT WORK;
 
30103
ROLLBACK WORK;
 
30104
        
 
30105
# check transactions-4 success:         1
 
30106
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30107
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30108
FROM t0_template source_tab
 
30109
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30110
        
 
30111
# check transactions-5 success:         1
 
30112
ROLLBACK WORK;
 
30113
        
 
30114
# check transactions-6 success:         1
 
30115
# INFO: Storage engine used for t1 seems to be transactional.
 
30116
COMMIT;
 
30117
        
 
30118
# check transactions-7 success:         1
 
30119
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30120
COMMIT WORK;
 
30121
SET @@session.sql_mode = 'traditional';
 
30122
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30123
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30124
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30125
'', '', 'was inserted' FROM t0_template
 
30126
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30127
ERROR 22012: Division by 0
 
30128
COMMIT;
 
30129
        
 
30130
# check transactions-8 success:         1
 
30131
# INFO: Storage engine used for t1 seems to be able to revert
 
30132
#       changes made by the failing statement.
 
30133
SET @@session.sql_mode = '';
 
30134
SET AUTOCOMMIT= 1;
 
30135
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30136
COMMIT WORK;
 
30137
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30138
        
 
30139
# check special-1 success:      1
 
30140
UPDATE t1 SET f_charbig = '';
 
30141
        
 
30142
# check special-2 success:      1
 
30143
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30144
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30145
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30149
'just inserted' FROM t0_template
 
30150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30151
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30152
BEGIN
 
30153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30154
f_charbig = 'updated by trigger'
 
30155
      WHERE f_int1 = new.f_int1;
 
30156
END|
 
30157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30158
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30160
        
 
30161
# check trigger-1 success:      1
 
30162
DROP TRIGGER trg_1;
 
30163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30165
f_charbig = 'just inserted'
 
30166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30167
DELETE FROM t0_aux
 
30168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30171
'just inserted' FROM t0_template
 
30172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30173
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30174
BEGIN
 
30175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30176
f_charbig = 'updated by trigger'
 
30177
      WHERE f_int1 = new.f_int1;
 
30178
END|
 
30179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30180
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30182
        
 
30183
# check trigger-2 success:      1
 
30184
DROP TRIGGER trg_1;
 
30185
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30186
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30187
f_charbig = 'just inserted'
 
30188
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30189
DELETE FROM t0_aux
 
30190
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30193
'just inserted' FROM t0_template
 
30194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30195
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30196
BEGIN
 
30197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30198
f_charbig = 'updated by trigger'
 
30199
      WHERE f_int1 = new.f_int1;
 
30200
END|
 
30201
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30202
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30203
        
 
30204
# check trigger-3 success:      1
 
30205
DROP TRIGGER trg_1;
 
30206
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30207
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30208
f_charbig = 'just inserted'
 
30209
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30210
DELETE FROM t0_aux
 
30211
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30212
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30213
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30214
'just inserted' FROM t0_template
 
30215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30216
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30217
BEGIN
 
30218
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30219
f_charbig = 'updated by trigger'
 
30220
      WHERE f_int1 = - old.f_int1;
 
30221
END|
 
30222
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30223
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30224
        
 
30225
# check trigger-4 success:      1
 
30226
DROP TRIGGER trg_1;
 
30227
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30228
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30229
f_charbig = 'just inserted'
 
30230
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30231
DELETE FROM t0_aux
 
30232
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30233
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30234
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30235
'just inserted' FROM t0_template
 
30236
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30237
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30238
BEGIN
 
30239
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30240
f_charbig = 'updated by trigger'
 
30241
      WHERE f_int1 = new.f_int1;
 
30242
END|
 
30243
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30244
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30245
        
 
30246
# check trigger-5 success:      1
 
30247
DROP TRIGGER trg_1;
 
30248
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30249
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30250
f_charbig = 'just inserted'
 
30251
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30252
DELETE FROM t0_aux
 
30253
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30254
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30255
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30256
'just inserted' FROM t0_template
 
30257
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30258
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30259
BEGIN
 
30260
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30261
f_charbig = 'updated by trigger'
 
30262
      WHERE f_int1 = - old.f_int1;
 
30263
END|
 
30264
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30265
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30266
        
 
30267
# check trigger-6 success:      1
 
30268
DROP TRIGGER trg_1;
 
30269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30271
f_charbig = 'just inserted'
 
30272
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30273
DELETE FROM t0_aux
 
30274
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30276
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30277
'just inserted' FROM t0_template
 
30278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30279
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30280
BEGIN
 
30281
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30282
f_charbig = 'updated by trigger'
 
30283
      WHERE f_int1 = - old.f_int1;
 
30284
END|
 
30285
DELETE FROM t0_aux
 
30286
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30287
        
 
30288
# check trigger-7 success:      1
 
30289
DROP TRIGGER trg_1;
 
30290
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30291
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30292
f_charbig = 'just inserted'
 
30293
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30294
DELETE FROM t0_aux
 
30295
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30296
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30297
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30298
'just inserted' FROM t0_template
 
30299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30300
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30301
BEGIN
 
30302
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30303
f_charbig = 'updated by trigger'
 
30304
      WHERE f_int1 = - old.f_int1;
 
30305
END|
 
30306
DELETE FROM t0_aux
 
30307
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30308
        
 
30309
# check trigger-8 success:      1
 
30310
DROP TRIGGER trg_1;
 
30311
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30312
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30313
f_charbig = 'just inserted'
 
30314
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30315
DELETE FROM t0_aux
 
30316
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30317
DELETE FROM t1
 
30318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30319
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30320
BEGIN
 
30321
SET new.f_int1 = old.f_int1 + @max_row,
 
30322
new.f_int2 = old.f_int2 - @max_row,
 
30323
new.f_charbig = '####updated per update trigger####';
 
30324
END|
 
30325
UPDATE t1
 
30326
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30327
f_charbig = '####updated per update statement itself####';
 
30328
        
 
30329
# check trigger-9 success:      1
 
30330
DROP TRIGGER trg_2;
 
30331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30333
f_charbig = CONCAT('===',f_char1,'===');
 
30334
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30335
BEGIN
 
30336
SET new.f_int1 = new.f_int1 + @max_row,
 
30337
new.f_int2 = new.f_int2 - @max_row,
 
30338
new.f_charbig = '####updated per update trigger####';
 
30339
END|
 
30340
UPDATE t1
 
30341
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30342
f_charbig = '####updated per update statement itself####';
 
30343
        
 
30344
# check trigger-10 success:     1
 
30345
DROP TRIGGER trg_2;
 
30346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30348
f_charbig = CONCAT('===',f_char1,'===');
 
30349
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30350
BEGIN
 
30351
SET new.f_int1 = @my_max1 + @counter,
 
30352
new.f_int2 = @my_min2 - @counter,
 
30353
new.f_charbig = '####updated per insert trigger####';
 
30354
SET @counter = @counter + 1;
 
30355
END|
 
30356
SET @counter = 1;
 
30357
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30358
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30359
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30360
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30362
ORDER BY f_int1;
 
30363
DROP TRIGGER trg_3;
 
30364
        
 
30365
# check trigger-11 success:     1
 
30366
DELETE FROM t1
 
30367
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30368
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30369
AND f_charbig = '####updated per insert trigger####';
 
30370
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30371
BEGIN
 
30372
SET new.f_int1 = @my_max1 + @counter,
 
30373
new.f_int2 = @my_min2 - @counter,
 
30374
new.f_charbig = '####updated per insert trigger####';
 
30375
SET @counter = @counter + 1;
 
30376
END|
 
30377
SET @counter = 1;
 
30378
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30379
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30380
SELECT CAST(f_int1 AS CHAR),
 
30381
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30383
ORDER BY f_int1;
 
30384
DROP TRIGGER trg_3;
 
30385
        
 
30386
# check trigger-12 success:     1
 
30387
DELETE FROM t1
 
30388
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30389
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30390
AND f_charbig = '####updated per insert trigger####';
 
30391
ANALYZE  TABLE t1;
 
30392
Table   Op      Msg_type        Msg_text
 
30393
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
30394
CHECK    TABLE t1 EXTENDED;
 
30395
Table   Op      Msg_type        Msg_text
 
30396
test.t1 check   note    The storage engine for the table doesn't support check
 
30397
CHECKSUM TABLE t1 EXTENDED;
 
30398
Table   Checksum
 
30399
test.t1 <some_value>
 
30400
OPTIMIZE TABLE t1;
 
30401
Table   Op      Msg_type        Msg_text
 
30402
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
30403
# check layout success:    1
 
30404
REPAIR   TABLE t1 EXTENDED;
 
30405
Table   Op      Msg_type        Msg_text
 
30406
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30407
# check layout success:    1
 
30408
TRUNCATE t1;
 
30409
        
 
30410
# check TRUNCATE success:       1
 
30411
# check layout success:    1
 
30412
# End usability test (inc/partition_check.inc)
 
30413
DROP TABLE t1;
 
30414
CREATE TABLE t1 (
 
30415
f_int1 INTEGER,
 
30416
f_int2 INTEGER,
 
30417
f_char1 CHAR(20),
 
30418
f_char2 CHAR(20),
 
30419
f_charbig VARCHAR(1000)
 
30420
 
 
30421
)
 
30422
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
30423
(PARTITION parta VALUES LESS THAN (0),
 
30424
PARTITION partb VALUES LESS THAN (5),
 
30425
PARTITION partc VALUES LESS THAN (10),
 
30426
PARTITION partd VALUES LESS THAN (2147483646));
 
30427
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30428
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30429
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30430
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
30431
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30432
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30433
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30434
# Start usability test (inc/partition_check.inc)
 
30435
create_command
 
30436
SHOW CREATE TABLE t1;
 
30437
Table   Create Table
 
30438
t1      CREATE TABLE `t1` (
 
30439
  `f_int1` int(11) DEFAULT NULL,
 
30440
  `f_int2` int(11) DEFAULT NULL,
 
30441
  `f_char1` char(20) DEFAULT NULL,
 
30442
  `f_char2` char(20) DEFAULT NULL,
 
30443
  `f_charbig` varchar(1000) DEFAULT NULL,
 
30444
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
30445
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
30446
 
 
30447
# check prerequisites-1 success:    1
 
30448
# check COUNT(*) success:    1
 
30449
# check MIN/MAX(f_int1) success:    1
 
30450
# check MIN/MAX(f_int2) success:    1
 
30451
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30452
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30453
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30454
WHERE f_int1 IN (2,3);
 
30455
ERROR 23000: Can't write; duplicate key in table 't1'
 
30456
# check prerequisites-3 success:    1
 
30457
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
30458
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30459
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30460
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30461
WHERE f_int1 IN (2,3);
 
30462
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30463
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30464
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30465
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30466
WHERE f_int1 IN (2,3);
 
30467
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30468
# check read via f_int1 success: 1
 
30469
# check read via f_int2 success: 1
 
30470
        
 
30471
# check multiple-1 success:     1
 
30472
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30473
        
 
30474
# check multiple-2 success:     1
 
30475
INSERT INTO t1 SELECT * FROM t0_template
 
30476
WHERE MOD(f_int1,3) = 0;
 
30477
        
 
30478
# check multiple-3 success:     1
 
30479
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30480
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30481
AND @max_row_div2 + @max_row_div4;
 
30482
        
 
30483
# check multiple-4 success:     1
 
30484
DELETE FROM t1
 
30485
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30486
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30487
        
 
30488
# check multiple-5 success:     1
 
30489
SELECT COUNT(*) INTO @try_count FROM t0_template
 
30490
WHERE MOD(f_int1,3) = 0
 
30491
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30492
SELECT COUNT(*) INTO @clash_count
 
30493
FROM t1 INNER JOIN t0_template USING(f_int1)
 
30494
WHERE MOD(f_int1,3) = 0
 
30495
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30496
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30497
INSERT INTO t1
 
30498
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30499
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30500
f_charbig = '#SINGLE#';
 
30501
        
 
30502
# check single-1 success:       1
 
30503
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30504
INSERT INTO t1
 
30505
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30506
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30507
f_charbig = '#SINGLE#';
 
30508
        
 
30509
# check single-2 success:       1
 
30510
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30511
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30512
UPDATE t1 SET f_int1 = @cur_value2
 
30513
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30514
        
 
30515
# check single-3 success:       1
 
30516
SET @cur_value1= -1;
 
30517
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30518
UPDATE t1 SET f_int1 = @cur_value1
 
30519
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30520
        
 
30521
# check single-4 success:       1
 
30522
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30523
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30524
        
 
30525
# check single-5 success:       1
 
30526
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30527
        
 
30528
# check single-6 success:       1
 
30529
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30530
ERROR HY000: Table has no partition for value 2147483647
 
30531
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30532
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30533
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30534
f_charbig = '#NULL#';
 
30535
INSERT INTO t1
 
30536
SET f_int1 = NULL , f_int2 = -@max_row,
 
30537
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30538
f_charbig = '#NULL#';
 
30539
# check null success:    1
 
30540
        
 
30541
# check null-1 success:         1
 
30542
UPDATE t1 SET f_int1 = -@max_row
 
30543
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30544
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30545
        
 
30546
# check null-2 success:         1
 
30547
UPDATE t1 SET f_int1 = NULL
 
30548
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30549
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30550
        
 
30551
# check null-3 success:         1
 
30552
DELETE FROM t1
 
30553
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30554
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30555
        
 
30556
# check null-4 success:         1
 
30557
DELETE FROM t1
 
30558
WHERE f_int1 = 0 AND f_int2 = 0
 
30559
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30560
AND f_charbig = '#NULL#';
 
30561
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30562
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30563
   FROM t0_template source_tab
 
30564
WHERE MOD(f_int1,3) = 0
 
30565
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
30566
ON DUPLICATE KEY
 
30567
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
30568
f_int2 = 2 * @max_row + source_tab.f_int1,
 
30569
f_charbig = 'was updated';
 
30570
        
 
30571
# check unique-1-a success:     1
 
30572
        
 
30573
# check unique-1-b success:     1
 
30574
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30577
f_charbig = CONCAT('===',f_char1,'===')
 
30578
WHERE f_charbig = 'was updated';
 
30579
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30580
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
30581
   FROM t0_template source_tab
 
30582
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30583
        
 
30584
# check replace success:        1
 
30585
DELETE FROM t1
 
30586
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
30587
DELETE FROM t1
 
30588
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
30589
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
30590
UPDATE t1 SET f_int2 = f_int1,
 
30591
f_char1 = CAST(f_int1 AS CHAR),
 
30592
f_char2 = CAST(f_int1 AS CHAR),
 
30593
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
30594
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
30595
SET AUTOCOMMIT= 0;
 
30596
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30597
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30598
FROM t0_template source_tab
 
30599
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30600
        
 
30601
# check transactions-1 success:         1
 
30602
COMMIT WORK;
 
30603
        
 
30604
# check transactions-2 success:         1
 
30605
ROLLBACK WORK;
 
30606
        
 
30607
# check transactions-3 success:         1
 
30608
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30609
COMMIT WORK;
 
30610
ROLLBACK WORK;
 
30611
        
 
30612
# check transactions-4 success:         1
 
30613
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30614
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30615
FROM t0_template source_tab
 
30616
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30617
        
 
30618
# check transactions-5 success:         1
 
30619
ROLLBACK WORK;
 
30620
        
 
30621
# check transactions-6 success:         1
 
30622
# INFO: Storage engine used for t1 seems to be transactional.
 
30623
COMMIT;
 
30624
        
 
30625
# check transactions-7 success:         1
 
30626
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30627
COMMIT WORK;
 
30628
SET @@session.sql_mode = 'traditional';
 
30629
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30630
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30631
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30632
'', '', 'was inserted' FROM t0_template
 
30633
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30634
ERROR 22012: Division by 0
 
30635
COMMIT;
 
30636
        
 
30637
# check transactions-8 success:         1
 
30638
# INFO: Storage engine used for t1 seems to be able to revert
 
30639
#       changes made by the failing statement.
 
30640
SET @@session.sql_mode = '';
 
30641
SET AUTOCOMMIT= 1;
 
30642
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30643
COMMIT WORK;
 
30644
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30645
        
 
30646
# check special-1 success:      1
 
30647
UPDATE t1 SET f_charbig = '';
 
30648
        
 
30649
# check special-2 success:      1
 
30650
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30651
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30652
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30654
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30655
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30656
'just inserted' FROM t0_template
 
30657
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30658
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30659
BEGIN
 
30660
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30661
f_charbig = 'updated by trigger'
 
30662
      WHERE f_int1 = new.f_int1;
 
30663
END|
 
30664
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30665
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30666
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30667
        
 
30668
# check trigger-1 success:      1
 
30669
DROP TRIGGER trg_1;
 
30670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30672
f_charbig = 'just inserted'
 
30673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30674
DELETE FROM t0_aux
 
30675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30678
'just inserted' FROM t0_template
 
30679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30680
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30681
BEGIN
 
30682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30683
f_charbig = 'updated by trigger'
 
30684
      WHERE f_int1 = new.f_int1;
 
30685
END|
 
30686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30687
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30688
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30689
        
 
30690
# check trigger-2 success:      1
 
30691
DROP TRIGGER trg_1;
 
30692
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30693
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30694
f_charbig = 'just inserted'
 
30695
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30696
DELETE FROM t0_aux
 
30697
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30699
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30700
'just inserted' FROM t0_template
 
30701
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30702
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30703
BEGIN
 
30704
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30705
f_charbig = 'updated by trigger'
 
30706
      WHERE f_int1 = new.f_int1;
 
30707
END|
 
30708
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30709
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30710
        
 
30711
# check trigger-3 success:      1
 
30712
DROP TRIGGER trg_1;
 
30713
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30714
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30715
f_charbig = 'just inserted'
 
30716
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30717
DELETE FROM t0_aux
 
30718
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30719
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30720
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30721
'just inserted' FROM t0_template
 
30722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30723
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30724
BEGIN
 
30725
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30726
f_charbig = 'updated by trigger'
 
30727
      WHERE f_int1 = - old.f_int1;
 
30728
END|
 
30729
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30730
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30731
        
 
30732
# check trigger-4 success:      1
 
30733
DROP TRIGGER trg_1;
 
30734
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30735
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30736
f_charbig = 'just inserted'
 
30737
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30738
DELETE FROM t0_aux
 
30739
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30740
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30741
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30742
'just inserted' FROM t0_template
 
30743
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30744
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30745
BEGIN
 
30746
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30747
f_charbig = 'updated by trigger'
 
30748
      WHERE f_int1 = new.f_int1;
 
30749
END|
 
30750
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30751
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30752
        
 
30753
# check trigger-5 success:      1
 
30754
DROP TRIGGER trg_1;
 
30755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30757
f_charbig = 'just inserted'
 
30758
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30759
DELETE FROM t0_aux
 
30760
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30761
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30762
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30763
'just inserted' FROM t0_template
 
30764
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30765
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30766
BEGIN
 
30767
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30768
f_charbig = 'updated by trigger'
 
30769
      WHERE f_int1 = - old.f_int1;
 
30770
END|
 
30771
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30772
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30773
        
 
30774
# check trigger-6 success:      1
 
30775
DROP TRIGGER trg_1;
 
30776
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30777
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30778
f_charbig = 'just inserted'
 
30779
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30780
DELETE FROM t0_aux
 
30781
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30782
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30783
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30784
'just inserted' FROM t0_template
 
30785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30786
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30787
BEGIN
 
30788
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30789
f_charbig = 'updated by trigger'
 
30790
      WHERE f_int1 = - old.f_int1;
 
30791
END|
 
30792
DELETE FROM t0_aux
 
30793
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30794
        
 
30795
# check trigger-7 success:      1
 
30796
DROP TRIGGER trg_1;
 
30797
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30798
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30799
f_charbig = 'just inserted'
 
30800
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30801
DELETE FROM t0_aux
 
30802
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30803
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30804
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30805
'just inserted' FROM t0_template
 
30806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30807
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30808
BEGIN
 
30809
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30810
f_charbig = 'updated by trigger'
 
30811
      WHERE f_int1 = - old.f_int1;
 
30812
END|
 
30813
DELETE FROM t0_aux
 
30814
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30815
        
 
30816
# check trigger-8 success:      1
 
30817
DROP TRIGGER trg_1;
 
30818
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30819
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30820
f_charbig = 'just inserted'
 
30821
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30822
DELETE FROM t0_aux
 
30823
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30824
DELETE FROM t1
 
30825
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30826
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30827
BEGIN
 
30828
SET new.f_int1 = old.f_int1 + @max_row,
 
30829
new.f_int2 = old.f_int2 - @max_row,
 
30830
new.f_charbig = '####updated per update trigger####';
 
30831
END|
 
30832
UPDATE t1
 
30833
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30834
f_charbig = '####updated per update statement itself####';
 
30835
        
 
30836
# check trigger-9 success:      1
 
30837
DROP TRIGGER trg_2;
 
30838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30840
f_charbig = CONCAT('===',f_char1,'===');
 
30841
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30842
BEGIN
 
30843
SET new.f_int1 = new.f_int1 + @max_row,
 
30844
new.f_int2 = new.f_int2 - @max_row,
 
30845
new.f_charbig = '####updated per update trigger####';
 
30846
END|
 
30847
UPDATE t1
 
30848
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30849
f_charbig = '####updated per update statement itself####';
 
30850
        
 
30851
# check trigger-10 success:     1
 
30852
DROP TRIGGER trg_2;
 
30853
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30854
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30855
f_charbig = CONCAT('===',f_char1,'===');
 
30856
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30857
BEGIN
 
30858
SET new.f_int1 = @my_max1 + @counter,
 
30859
new.f_int2 = @my_min2 - @counter,
 
30860
new.f_charbig = '####updated per insert trigger####';
 
30861
SET @counter = @counter + 1;
 
30862
END|
 
30863
SET @counter = 1;
 
30864
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30866
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30867
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30868
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30869
ORDER BY f_int1;
 
30870
DROP TRIGGER trg_3;
 
30871
        
 
30872
# check trigger-11 success:     1
 
30873
DELETE FROM t1
 
30874
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30875
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30876
AND f_charbig = '####updated per insert trigger####';
 
30877
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30878
BEGIN
 
30879
SET new.f_int1 = @my_max1 + @counter,
 
30880
new.f_int2 = @my_min2 - @counter,
 
30881
new.f_charbig = '####updated per insert trigger####';
 
30882
SET @counter = @counter + 1;
 
30883
END|
 
30884
SET @counter = 1;
 
30885
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30886
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30887
SELECT CAST(f_int1 AS CHAR),
 
30888
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30889
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30890
ORDER BY f_int1;
 
30891
DROP TRIGGER trg_3;
 
30892
        
 
30893
# check trigger-12 success:     1
 
30894
DELETE FROM t1
 
30895
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30896
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30897
AND f_charbig = '####updated per insert trigger####';
 
30898
ANALYZE  TABLE t1;
 
30899
Table   Op      Msg_type        Msg_text
 
30900
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
30901
CHECK    TABLE t1 EXTENDED;
 
30902
Table   Op      Msg_type        Msg_text
 
30903
test.t1 check   note    The storage engine for the table doesn't support check
 
30904
CHECKSUM TABLE t1 EXTENDED;
 
30905
Table   Checksum
 
30906
test.t1 <some_value>
 
30907
OPTIMIZE TABLE t1;
 
30908
Table   Op      Msg_type        Msg_text
 
30909
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
30910
# check layout success:    1
 
30911
REPAIR   TABLE t1 EXTENDED;
 
30912
Table   Op      Msg_type        Msg_text
 
30913
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30914
# check layout success:    1
 
30915
TRUNCATE t1;
 
30916
        
 
30917
# check TRUNCATE success:       1
 
30918
# check layout success:    1
 
30919
# End usability test (inc/partition_check.inc)
 
30920
DROP TABLE t1;
 
30921
CREATE TABLE t1 (
 
30922
f_int1 INTEGER,
 
30923
f_int2 INTEGER,
 
30924
f_char1 CHAR(20),
 
30925
f_char2 CHAR(20),
 
30926
f_charbig VARCHAR(1000)
 
30927
 
 
30928
)
 
30929
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
30930
(PARTITION part1 VALUES LESS THAN (0)
 
30931
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
30932
PARTITION part2 VALUES LESS THAN (5)
 
30933
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
30934
PARTITION part3 VALUES LESS THAN (10)
 
30935
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
30936
PARTITION part4 VALUES LESS THAN (2147483646)
 
30937
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
30938
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30939
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30940
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30941
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
30942
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30943
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30944
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30945
# Start usability test (inc/partition_check.inc)
 
30946
create_command
 
30947
SHOW CREATE TABLE t1;
 
30948
Table   Create Table
 
30949
t1      CREATE TABLE `t1` (
 
30950
  `f_int1` int(11) DEFAULT NULL,
 
30951
  `f_int2` int(11) DEFAULT NULL,
 
30952
  `f_char1` char(20) DEFAULT NULL,
 
30953
  `f_char2` char(20) DEFAULT NULL,
 
30954
  `f_charbig` varchar(1000) DEFAULT NULL,
 
30955
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
30956
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
30957
 
 
30958
# check prerequisites-1 success:    1
 
30959
# check COUNT(*) success:    1
 
30960
# check MIN/MAX(f_int1) success:    1
 
30961
# check MIN/MAX(f_int2) success:    1
 
30962
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30963
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30964
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30965
WHERE f_int1 IN (2,3);
 
30966
ERROR 23000: Can't write; duplicate key in table 't1'
 
30967
# check prerequisites-3 success:    1
 
30968
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
30969
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30970
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30971
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30972
WHERE f_int1 IN (2,3);
 
30973
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30974
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30975
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30976
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30977
WHERE f_int1 IN (2,3);
 
30978
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30979
# check read via f_int1 success: 1
 
30980
# check read via f_int2 success: 1
 
30981
        
 
30982
# check multiple-1 success:     1
 
30983
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30984
        
 
30985
# check multiple-2 success:     1
 
30986
INSERT INTO t1 SELECT * FROM t0_template
 
30987
WHERE MOD(f_int1,3) = 0;
 
30988
        
 
30989
# check multiple-3 success:     1
 
30990
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30991
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30992
AND @max_row_div2 + @max_row_div4;
 
30993
        
 
30994
# check multiple-4 success:     1
 
30995
DELETE FROM t1
 
30996
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30997
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30998
        
 
30999
# check multiple-5 success:     1
 
31000
SELECT COUNT(*) INTO @try_count FROM t0_template
 
31001
WHERE MOD(f_int1,3) = 0
 
31002
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31003
SELECT COUNT(*) INTO @clash_count
 
31004
FROM t1 INNER JOIN t0_template USING(f_int1)
 
31005
WHERE MOD(f_int1,3) = 0
 
31006
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31007
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31008
INSERT INTO t1
 
31009
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31010
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31011
f_charbig = '#SINGLE#';
 
31012
        
 
31013
# check single-1 success:       1
 
31014
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31015
INSERT INTO t1
 
31016
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31017
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31018
f_charbig = '#SINGLE#';
 
31019
        
 
31020
# check single-2 success:       1
 
31021
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31022
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31023
UPDATE t1 SET f_int1 = @cur_value2
 
31024
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31025
        
 
31026
# check single-3 success:       1
 
31027
SET @cur_value1= -1;
 
31028
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31029
UPDATE t1 SET f_int1 = @cur_value1
 
31030
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31031
        
 
31032
# check single-4 success:       1
 
31033
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31034
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31035
        
 
31036
# check single-5 success:       1
 
31037
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31038
        
 
31039
# check single-6 success:       1
 
31040
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31041
ERROR HY000: Table has no partition for value 2147483647
 
31042
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31043
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31044
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31045
f_charbig = '#NULL#';
 
31046
INSERT INTO t1
 
31047
SET f_int1 = NULL , f_int2 = -@max_row,
 
31048
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31049
f_charbig = '#NULL#';
 
31050
# check null success:    1
 
31051
        
 
31052
# check null-1 success:         1
 
31053
UPDATE t1 SET f_int1 = -@max_row
 
31054
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31055
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31056
        
 
31057
# check null-2 success:         1
 
31058
UPDATE t1 SET f_int1 = NULL
 
31059
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31060
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31061
        
 
31062
# check null-3 success:         1
 
31063
DELETE FROM t1
 
31064
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31065
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31066
        
 
31067
# check null-4 success:         1
 
31068
DELETE FROM t1
 
31069
WHERE f_int1 = 0 AND f_int2 = 0
 
31070
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31071
AND f_charbig = '#NULL#';
 
31072
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31073
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31074
   FROM t0_template source_tab
 
31075
WHERE MOD(f_int1,3) = 0
 
31076
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
31077
ON DUPLICATE KEY
 
31078
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
31079
f_int2 = 2 * @max_row + source_tab.f_int1,
 
31080
f_charbig = 'was updated';
 
31081
        
 
31082
# check unique-1-a success:     1
 
31083
        
 
31084
# check unique-1-b success:     1
 
31085
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31088
f_charbig = CONCAT('===',f_char1,'===')
 
31089
WHERE f_charbig = 'was updated';
 
31090
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31091
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
31092
   FROM t0_template source_tab
 
31093
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31094
        
 
31095
# check replace success:        1
 
31096
DELETE FROM t1
 
31097
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
31098
DELETE FROM t1
 
31099
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
31100
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
31101
UPDATE t1 SET f_int2 = f_int1,
 
31102
f_char1 = CAST(f_int1 AS CHAR),
 
31103
f_char2 = CAST(f_int1 AS CHAR),
 
31104
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
31105
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
31106
SET AUTOCOMMIT= 0;
 
31107
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31108
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31109
FROM t0_template source_tab
 
31110
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31111
        
 
31112
# check transactions-1 success:         1
 
31113
COMMIT WORK;
 
31114
        
 
31115
# check transactions-2 success:         1
 
31116
ROLLBACK WORK;
 
31117
        
 
31118
# check transactions-3 success:         1
 
31119
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31120
COMMIT WORK;
 
31121
ROLLBACK WORK;
 
31122
        
 
31123
# check transactions-4 success:         1
 
31124
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31125
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31126
FROM t0_template source_tab
 
31127
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31128
        
 
31129
# check transactions-5 success:         1
 
31130
ROLLBACK WORK;
 
31131
        
 
31132
# check transactions-6 success:         1
 
31133
# INFO: Storage engine used for t1 seems to be transactional.
 
31134
COMMIT;
 
31135
        
 
31136
# check transactions-7 success:         1
 
31137
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31138
COMMIT WORK;
 
31139
SET @@session.sql_mode = 'traditional';
 
31140
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31141
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31142
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31143
'', '', 'was inserted' FROM t0_template
 
31144
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31145
ERROR 22012: Division by 0
 
31146
COMMIT;
 
31147
        
 
31148
# check transactions-8 success:         1
 
31149
# INFO: Storage engine used for t1 seems to be able to revert
 
31150
#       changes made by the failing statement.
 
31151
SET @@session.sql_mode = '';
 
31152
SET AUTOCOMMIT= 1;
 
31153
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31154
COMMIT WORK;
 
31155
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31156
        
 
31157
# check special-1 success:      1
 
31158
UPDATE t1 SET f_charbig = '';
 
31159
        
 
31160
# check special-2 success:      1
 
31161
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31162
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31163
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31167
'just inserted' FROM t0_template
 
31168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31169
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31170
BEGIN
 
31171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31172
f_charbig = 'updated by trigger'
 
31173
      WHERE f_int1 = new.f_int1;
 
31174
END|
 
31175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31176
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31178
        
 
31179
# check trigger-1 success:      1
 
31180
DROP TRIGGER trg_1;
 
31181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31183
f_charbig = 'just inserted'
 
31184
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31185
DELETE FROM t0_aux
 
31186
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31188
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31189
'just inserted' FROM t0_template
 
31190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31191
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31192
BEGIN
 
31193
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31194
f_charbig = 'updated by trigger'
 
31195
      WHERE f_int1 = new.f_int1;
 
31196
END|
 
31197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31198
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31200
        
 
31201
# check trigger-2 success:      1
 
31202
DROP TRIGGER trg_1;
 
31203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31205
f_charbig = 'just inserted'
 
31206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31207
DELETE FROM t0_aux
 
31208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31211
'just inserted' FROM t0_template
 
31212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31213
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31214
BEGIN
 
31215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31216
f_charbig = 'updated by trigger'
 
31217
      WHERE f_int1 = new.f_int1;
 
31218
END|
 
31219
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31221
        
 
31222
# check trigger-3 success:      1
 
31223
DROP TRIGGER trg_1;
 
31224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31226
f_charbig = 'just inserted'
 
31227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31228
DELETE FROM t0_aux
 
31229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31230
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31231
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31232
'just inserted' FROM t0_template
 
31233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31234
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31235
BEGIN
 
31236
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31237
f_charbig = 'updated by trigger'
 
31238
      WHERE f_int1 = - old.f_int1;
 
31239
END|
 
31240
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31241
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31242
        
 
31243
# check trigger-4 success:      1
 
31244
DROP TRIGGER trg_1;
 
31245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31247
f_charbig = 'just inserted'
 
31248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31249
DELETE FROM t0_aux
 
31250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31253
'just inserted' FROM t0_template
 
31254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31255
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31256
BEGIN
 
31257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31258
f_charbig = 'updated by trigger'
 
31259
      WHERE f_int1 = new.f_int1;
 
31260
END|
 
31261
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31263
        
 
31264
# check trigger-5 success:      1
 
31265
DROP TRIGGER trg_1;
 
31266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31268
f_charbig = 'just inserted'
 
31269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31270
DELETE FROM t0_aux
 
31271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31272
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31273
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31274
'just inserted' FROM t0_template
 
31275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31276
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31277
BEGIN
 
31278
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31279
f_charbig = 'updated by trigger'
 
31280
      WHERE f_int1 = - old.f_int1;
 
31281
END|
 
31282
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31283
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31284
        
 
31285
# check trigger-6 success:      1
 
31286
DROP TRIGGER trg_1;
 
31287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31289
f_charbig = 'just inserted'
 
31290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31291
DELETE FROM t0_aux
 
31292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31295
'just inserted' FROM t0_template
 
31296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31297
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31298
BEGIN
 
31299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31300
f_charbig = 'updated by trigger'
 
31301
      WHERE f_int1 = - old.f_int1;
 
31302
END|
 
31303
DELETE FROM t0_aux
 
31304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31305
        
 
31306
# check trigger-7 success:      1
 
31307
DROP TRIGGER trg_1;
 
31308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31310
f_charbig = 'just inserted'
 
31311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31312
DELETE FROM t0_aux
 
31313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31315
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31316
'just inserted' FROM t0_template
 
31317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31318
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31319
BEGIN
 
31320
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31321
f_charbig = 'updated by trigger'
 
31322
      WHERE f_int1 = - old.f_int1;
 
31323
END|
 
31324
DELETE FROM t0_aux
 
31325
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31326
        
 
31327
# check trigger-8 success:      1
 
31328
DROP TRIGGER trg_1;
 
31329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31331
f_charbig = 'just inserted'
 
31332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31333
DELETE FROM t0_aux
 
31334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31335
DELETE FROM t1
 
31336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31337
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31338
BEGIN
 
31339
SET new.f_int1 = old.f_int1 + @max_row,
 
31340
new.f_int2 = old.f_int2 - @max_row,
 
31341
new.f_charbig = '####updated per update trigger####';
 
31342
END|
 
31343
UPDATE t1
 
31344
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31345
f_charbig = '####updated per update statement itself####';
 
31346
        
 
31347
# check trigger-9 success:      1
 
31348
DROP TRIGGER trg_2;
 
31349
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31350
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31351
f_charbig = CONCAT('===',f_char1,'===');
 
31352
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31353
BEGIN
 
31354
SET new.f_int1 = new.f_int1 + @max_row,
 
31355
new.f_int2 = new.f_int2 - @max_row,
 
31356
new.f_charbig = '####updated per update trigger####';
 
31357
END|
 
31358
UPDATE t1
 
31359
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31360
f_charbig = '####updated per update statement itself####';
 
31361
        
 
31362
# check trigger-10 success:     1
 
31363
DROP TRIGGER trg_2;
 
31364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31366
f_charbig = CONCAT('===',f_char1,'===');
 
31367
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31368
BEGIN
 
31369
SET new.f_int1 = @my_max1 + @counter,
 
31370
new.f_int2 = @my_min2 - @counter,
 
31371
new.f_charbig = '####updated per insert trigger####';
 
31372
SET @counter = @counter + 1;
 
31373
END|
 
31374
SET @counter = 1;
 
31375
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31377
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31378
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31380
ORDER BY f_int1;
 
31381
DROP TRIGGER trg_3;
 
31382
        
 
31383
# check trigger-11 success:     1
 
31384
DELETE FROM t1
 
31385
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31386
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31387
AND f_charbig = '####updated per insert trigger####';
 
31388
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31389
BEGIN
 
31390
SET new.f_int1 = @my_max1 + @counter,
 
31391
new.f_int2 = @my_min2 - @counter,
 
31392
new.f_charbig = '####updated per insert trigger####';
 
31393
SET @counter = @counter + 1;
 
31394
END|
 
31395
SET @counter = 1;
 
31396
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31397
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31398
SELECT CAST(f_int1 AS CHAR),
 
31399
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31401
ORDER BY f_int1;
 
31402
DROP TRIGGER trg_3;
 
31403
        
 
31404
# check trigger-12 success:     1
 
31405
DELETE FROM t1
 
31406
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31407
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31408
AND f_charbig = '####updated per insert trigger####';
 
31409
ANALYZE  TABLE t1;
 
31410
Table   Op      Msg_type        Msg_text
 
31411
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
31412
CHECK    TABLE t1 EXTENDED;
 
31413
Table   Op      Msg_type        Msg_text
 
31414
test.t1 check   note    The storage engine for the table doesn't support check
 
31415
CHECKSUM TABLE t1 EXTENDED;
 
31416
Table   Checksum
 
31417
test.t1 <some_value>
 
31418
OPTIMIZE TABLE t1;
 
31419
Table   Op      Msg_type        Msg_text
 
31420
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
31421
# check layout success:    1
 
31422
REPAIR   TABLE t1 EXTENDED;
 
31423
Table   Op      Msg_type        Msg_text
 
31424
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31425
# check layout success:    1
 
31426
TRUNCATE t1;
 
31427
        
 
31428
# check TRUNCATE success:       1
 
31429
# check layout success:    1
 
31430
# End usability test (inc/partition_check.inc)
 
31431
DROP TABLE t1;
 
31432
CREATE TABLE t1 (
 
31433
f_int1 INTEGER,
 
31434
f_int2 INTEGER,
 
31435
f_char1 CHAR(20),
 
31436
f_char2 CHAR(20),
 
31437
f_charbig VARCHAR(1000)
 
31438
 
 
31439
)
 
31440
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
31441
(PARTITION part1 VALUES IN (0)
 
31442
(SUBPARTITION sp11, SUBPARTITION sp12),
 
31443
PARTITION part2 VALUES IN (1)
 
31444
(SUBPARTITION sp21, SUBPARTITION sp22),
 
31445
PARTITION part3 VALUES IN (2)
 
31446
(SUBPARTITION sp31, SUBPARTITION sp32),
 
31447
PARTITION part4 VALUES IN (NULL)
 
31448
(SUBPARTITION sp41, SUBPARTITION sp42));
 
31449
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31450
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31451
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31452
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
31453
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31454
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31455
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31456
# Start usability test (inc/partition_check.inc)
 
31457
create_command
 
31458
SHOW CREATE TABLE t1;
 
31459
Table   Create Table
 
31460
t1      CREATE TABLE `t1` (
 
31461
  `f_int1` int(11) DEFAULT NULL,
 
31462
  `f_int2` int(11) DEFAULT NULL,
 
31463
  `f_char1` char(20) DEFAULT NULL,
 
31464
  `f_char2` char(20) DEFAULT NULL,
 
31465
  `f_charbig` varchar(1000) DEFAULT NULL,
 
31466
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
31467
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
31468
 
 
31469
# check prerequisites-1 success:    1
 
31470
# check COUNT(*) success:    1
 
31471
# check MIN/MAX(f_int1) success:    1
 
31472
# check MIN/MAX(f_int2) success:    1
 
31473
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31474
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31475
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31476
WHERE f_int1 IN (2,3);
 
31477
ERROR 23000: Can't write; duplicate key in table 't1'
 
31478
# check prerequisites-3 success:    1
 
31479
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
31480
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31481
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
31482
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
31483
WHERE f_int1 IN (2,3);
 
31484
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31485
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31486
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
31487
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
31488
WHERE f_int1 IN (2,3);
 
31489
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31490
# check read via f_int1 success: 1
 
31491
# check read via f_int2 success: 1
 
31492
        
 
31493
# check multiple-1 success:     1
 
31494
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31495
        
 
31496
# check multiple-2 success:     1
 
31497
INSERT INTO t1 SELECT * FROM t0_template
 
31498
WHERE MOD(f_int1,3) = 0;
 
31499
        
 
31500
# check multiple-3 success:     1
 
31501
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31502
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31503
AND @max_row_div2 + @max_row_div4;
 
31504
        
 
31505
# check multiple-4 success:     1
 
31506
DELETE FROM t1
 
31507
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31508
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31509
        
 
31510
# check multiple-5 success:     1
 
31511
SELECT COUNT(*) INTO @try_count FROM t0_template
 
31512
WHERE MOD(f_int1,3) = 0
 
31513
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31514
SELECT COUNT(*) INTO @clash_count
 
31515
FROM t1 INNER JOIN t0_template USING(f_int1)
 
31516
WHERE MOD(f_int1,3) = 0
 
31517
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31518
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31519
INSERT INTO t1
 
31520
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31521
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31522
f_charbig = '#SINGLE#';
 
31523
        
 
31524
# check single-1 success:       1
 
31525
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31526
INSERT INTO t1
 
31527
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31528
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31529
f_charbig = '#SINGLE#';
 
31530
        
 
31531
# check single-2 success:       1
 
31532
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31533
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31534
UPDATE t1 SET f_int1 = @cur_value2
 
31535
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31536
        
 
31537
# check single-3 success:       1
 
31538
SET @cur_value1= -1;
 
31539
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31540
UPDATE t1 SET f_int1 = @cur_value1
 
31541
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31542
        
 
31543
# check single-4 success:       1
 
31544
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31545
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31546
        
 
31547
# check single-5 success:       1
 
31548
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31549
        
 
31550
# check single-6 success:       1
 
31551
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31552
        
 
31553
# check single-7 success:       1
 
31554
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
31555
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31556
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31557
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31558
f_charbig = '#NULL#';
 
31559
INSERT INTO t1
 
31560
SET f_int1 = NULL , f_int2 = -@max_row,
 
31561
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31562
f_charbig = '#NULL#';
 
31563
# check null success:    1
 
31564
        
 
31565
# check null-1 success:         1
 
31566
UPDATE t1 SET f_int1 = -@max_row
 
31567
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31568
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31569
        
 
31570
# check null-2 success:         1
 
31571
UPDATE t1 SET f_int1 = NULL
 
31572
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31573
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31574
        
 
31575
# check null-3 success:         1
 
31576
DELETE FROM t1
 
31577
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31578
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31579
        
 
31580
# check null-4 success:         1
 
31581
DELETE FROM t1
 
31582
WHERE f_int1 = 0 AND f_int2 = 0
 
31583
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31584
AND f_charbig = '#NULL#';
 
31585
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31586
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31587
   FROM t0_template source_tab
 
31588
WHERE MOD(f_int1,3) = 0
 
31589
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
31590
ON DUPLICATE KEY
 
31591
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
31592
f_int2 = 2 * @max_row + source_tab.f_int1,
 
31593
f_charbig = 'was updated';
 
31594
        
 
31595
# check unique-1-a success:     1
 
31596
        
 
31597
# check unique-1-b success:     1
 
31598
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31599
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31600
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31601
f_charbig = CONCAT('===',f_char1,'===')
 
31602
WHERE f_charbig = 'was updated';
 
31603
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31604
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
31605
   FROM t0_template source_tab
 
31606
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31607
        
 
31608
# check replace success:        1
 
31609
DELETE FROM t1
 
31610
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
31611
DELETE FROM t1
 
31612
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
31613
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
31614
UPDATE t1 SET f_int2 = f_int1,
 
31615
f_char1 = CAST(f_int1 AS CHAR),
 
31616
f_char2 = CAST(f_int1 AS CHAR),
 
31617
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
31618
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
31619
SET AUTOCOMMIT= 0;
 
31620
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31621
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31622
FROM t0_template source_tab
 
31623
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31624
        
 
31625
# check transactions-1 success:         1
 
31626
COMMIT WORK;
 
31627
        
 
31628
# check transactions-2 success:         1
 
31629
ROLLBACK WORK;
 
31630
        
 
31631
# check transactions-3 success:         1
 
31632
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31633
COMMIT WORK;
 
31634
ROLLBACK WORK;
 
31635
        
 
31636
# check transactions-4 success:         1
 
31637
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31638
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31639
FROM t0_template source_tab
 
31640
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31641
        
 
31642
# check transactions-5 success:         1
 
31643
ROLLBACK WORK;
 
31644
        
 
31645
# check transactions-6 success:         1
 
31646
# INFO: Storage engine used for t1 seems to be transactional.
 
31647
COMMIT;
 
31648
        
 
31649
# check transactions-7 success:         1
 
31650
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31651
COMMIT WORK;
 
31652
SET @@session.sql_mode = 'traditional';
 
31653
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31654
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31655
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31656
'', '', 'was inserted' FROM t0_template
 
31657
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31658
ERROR 22012: Division by 0
 
31659
COMMIT;
 
31660
        
 
31661
# check transactions-8 success:         1
 
31662
# INFO: Storage engine used for t1 seems to be able to revert
 
31663
#       changes made by the failing statement.
 
31664
SET @@session.sql_mode = '';
 
31665
SET AUTOCOMMIT= 1;
 
31666
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31667
COMMIT WORK;
 
31668
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31669
        
 
31670
# check special-1 success:      1
 
31671
UPDATE t1 SET f_charbig = '';
 
31672
        
 
31673
# check special-2 success:      1
 
31674
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31675
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31676
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31677
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31680
'just inserted' FROM t0_template
 
31681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31682
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31683
BEGIN
 
31684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31685
f_charbig = 'updated by trigger'
 
31686
      WHERE f_int1 = new.f_int1;
 
31687
END|
 
31688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31689
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31691
        
 
31692
# check trigger-1 success:      1
 
31693
DROP TRIGGER trg_1;
 
31694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31696
f_charbig = 'just inserted'
 
31697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31698
DELETE FROM t0_aux
 
31699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31702
'just inserted' FROM t0_template
 
31703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31704
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31705
BEGIN
 
31706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31707
f_charbig = 'updated by trigger'
 
31708
      WHERE f_int1 = new.f_int1;
 
31709
END|
 
31710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31711
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31713
        
 
31714
# check trigger-2 success:      1
 
31715
DROP TRIGGER trg_1;
 
31716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31718
f_charbig = 'just inserted'
 
31719
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31720
DELETE FROM t0_aux
 
31721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31722
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31723
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31724
'just inserted' FROM t0_template
 
31725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31726
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31727
BEGIN
 
31728
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31729
f_charbig = 'updated by trigger'
 
31730
      WHERE f_int1 = new.f_int1;
 
31731
END|
 
31732
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31733
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31734
        
 
31735
# check trigger-3 success:      1
 
31736
DROP TRIGGER trg_1;
 
31737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31739
f_charbig = 'just inserted'
 
31740
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31741
DELETE FROM t0_aux
 
31742
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31743
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31744
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31745
'just inserted' FROM t0_template
 
31746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31747
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31748
BEGIN
 
31749
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31750
f_charbig = 'updated by trigger'
 
31751
      WHERE f_int1 = - old.f_int1;
 
31752
END|
 
31753
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31754
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31755
        
 
31756
# check trigger-4 success:      1
 
31757
DROP TRIGGER trg_1;
 
31758
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31759
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31760
f_charbig = 'just inserted'
 
31761
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31762
DELETE FROM t0_aux
 
31763
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31764
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31765
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31766
'just inserted' FROM t0_template
 
31767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31768
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31769
BEGIN
 
31770
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31771
f_charbig = 'updated by trigger'
 
31772
      WHERE f_int1 = new.f_int1;
 
31773
END|
 
31774
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31775
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31776
        
 
31777
# check trigger-5 success:      1
 
31778
DROP TRIGGER trg_1;
 
31779
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31780
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31781
f_charbig = 'just inserted'
 
31782
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31783
DELETE FROM t0_aux
 
31784
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31785
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31786
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31787
'just inserted' FROM t0_template
 
31788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31789
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31790
BEGIN
 
31791
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31792
f_charbig = 'updated by trigger'
 
31793
      WHERE f_int1 = - old.f_int1;
 
31794
END|
 
31795
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31796
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31797
        
 
31798
# check trigger-6 success:      1
 
31799
DROP TRIGGER trg_1;
 
31800
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31801
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31802
f_charbig = 'just inserted'
 
31803
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31804
DELETE FROM t0_aux
 
31805
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31806
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31807
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31808
'just inserted' FROM t0_template
 
31809
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31810
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31811
BEGIN
 
31812
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31813
f_charbig = 'updated by trigger'
 
31814
      WHERE f_int1 = - old.f_int1;
 
31815
END|
 
31816
DELETE FROM t0_aux
 
31817
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31818
        
 
31819
# check trigger-7 success:      1
 
31820
DROP TRIGGER trg_1;
 
31821
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31822
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31823
f_charbig = 'just inserted'
 
31824
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31825
DELETE FROM t0_aux
 
31826
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31827
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31828
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31829
'just inserted' FROM t0_template
 
31830
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31831
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31832
BEGIN
 
31833
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31834
f_charbig = 'updated by trigger'
 
31835
      WHERE f_int1 = - old.f_int1;
 
31836
END|
 
31837
DELETE FROM t0_aux
 
31838
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31839
        
 
31840
# check trigger-8 success:      1
 
31841
DROP TRIGGER trg_1;
 
31842
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31843
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31844
f_charbig = 'just inserted'
 
31845
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31846
DELETE FROM t0_aux
 
31847
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31848
DELETE FROM t1
 
31849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31850
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31851
BEGIN
 
31852
SET new.f_int1 = old.f_int1 + @max_row,
 
31853
new.f_int2 = old.f_int2 - @max_row,
 
31854
new.f_charbig = '####updated per update trigger####';
 
31855
END|
 
31856
UPDATE t1
 
31857
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31858
f_charbig = '####updated per update statement itself####';
 
31859
        
 
31860
# check trigger-9 success:      1
 
31861
DROP TRIGGER trg_2;
 
31862
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31863
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31864
f_charbig = CONCAT('===',f_char1,'===');
 
31865
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31866
BEGIN
 
31867
SET new.f_int1 = new.f_int1 + @max_row,
 
31868
new.f_int2 = new.f_int2 - @max_row,
 
31869
new.f_charbig = '####updated per update trigger####';
 
31870
END|
 
31871
UPDATE t1
 
31872
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31873
f_charbig = '####updated per update statement itself####';
 
31874
        
 
31875
# check trigger-10 success:     1
 
31876
DROP TRIGGER trg_2;
 
31877
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31878
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31879
f_charbig = CONCAT('===',f_char1,'===');
 
31880
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31881
BEGIN
 
31882
SET new.f_int1 = @my_max1 + @counter,
 
31883
new.f_int2 = @my_min2 - @counter,
 
31884
new.f_charbig = '####updated per insert trigger####';
 
31885
SET @counter = @counter + 1;
 
31886
END|
 
31887
SET @counter = 1;
 
31888
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31890
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31891
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31893
ORDER BY f_int1;
 
31894
DROP TRIGGER trg_3;
 
31895
        
 
31896
# check trigger-11 success:     1
 
31897
DELETE FROM t1
 
31898
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31899
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31900
AND f_charbig = '####updated per insert trigger####';
 
31901
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31902
BEGIN
 
31903
SET new.f_int1 = @my_max1 + @counter,
 
31904
new.f_int2 = @my_min2 - @counter,
 
31905
new.f_charbig = '####updated per insert trigger####';
 
31906
SET @counter = @counter + 1;
 
31907
END|
 
31908
SET @counter = 1;
 
31909
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31910
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31911
SELECT CAST(f_int1 AS CHAR),
 
31912
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31914
ORDER BY f_int1;
 
31915
DROP TRIGGER trg_3;
 
31916
        
 
31917
# check trigger-12 success:     1
 
31918
DELETE FROM t1
 
31919
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31920
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31921
AND f_charbig = '####updated per insert trigger####';
 
31922
ANALYZE  TABLE t1;
 
31923
Table   Op      Msg_type        Msg_text
 
31924
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
31925
CHECK    TABLE t1 EXTENDED;
 
31926
Table   Op      Msg_type        Msg_text
 
31927
test.t1 check   note    The storage engine for the table doesn't support check
 
31928
CHECKSUM TABLE t1 EXTENDED;
 
31929
Table   Checksum
 
31930
test.t1 <some_value>
 
31931
OPTIMIZE TABLE t1;
 
31932
Table   Op      Msg_type        Msg_text
 
31933
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
31934
# check layout success:    1
 
31935
REPAIR   TABLE t1 EXTENDED;
 
31936
Table   Op      Msg_type        Msg_text
 
31937
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31938
# check layout success:    1
 
31939
TRUNCATE t1;
 
31940
        
 
31941
# check TRUNCATE success:       1
 
31942
# check layout success:    1
 
31943
# End usability test (inc/partition_check.inc)
 
31944
DROP TABLE t1;
 
31945
CREATE TABLE t1 (
 
31946
f_int1 INTEGER,
 
31947
f_int2 INTEGER,
 
31948
f_char1 CHAR(20),
 
31949
f_char2 CHAR(20),
 
31950
f_charbig VARCHAR(1000)
 
31951
 
 
31952
)
 
31953
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31954
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
31955
(PARTITION part1 VALUES IN (0),
 
31956
 PARTITION part2 VALUES IN (1),
 
31957
 PARTITION part3 VALUES IN (NULL));
 
31958
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31959
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31960
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31961
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
31962
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31963
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31964
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31965
# Start usability test (inc/partition_check.inc)
 
31966
create_command
 
31967
SHOW CREATE TABLE t1;
 
31968
Table   Create Table
 
31969
t1      CREATE TABLE `t1` (
 
31970
  `f_int1` int(11) DEFAULT NULL,
 
31971
  `f_int2` int(11) DEFAULT NULL,
 
31972
  `f_char1` char(20) DEFAULT NULL,
 
31973
  `f_char2` char(20) DEFAULT NULL,
 
31974
  `f_charbig` varchar(1000) DEFAULT NULL,
 
31975
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
31976
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
31977
 
 
31978
# check prerequisites-1 success:    1
 
31979
# check COUNT(*) success:    1
 
31980
# check MIN/MAX(f_int1) success:    1
 
31981
# check MIN/MAX(f_int2) success:    1
 
31982
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31983
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31984
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31985
WHERE f_int1 IN (2,3);
 
31986
ERROR 23000: Can't write; duplicate key in table 't1'
 
31987
# check prerequisites-3 success:    1
 
31988
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
31989
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31990
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
31991
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
31992
WHERE f_int1 IN (2,3);
 
31993
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31994
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31995
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
31996
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
31997
WHERE f_int1 IN (2,3);
 
31998
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31999
# check read via f_int1 success: 1
 
32000
# check read via f_int2 success: 1
 
32001
        
 
32002
# check multiple-1 success:     1
 
32003
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32004
        
 
32005
# check multiple-2 success:     1
 
32006
INSERT INTO t1 SELECT * FROM t0_template
 
32007
WHERE MOD(f_int1,3) = 0;
 
32008
        
 
32009
# check multiple-3 success:     1
 
32010
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32011
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32012
AND @max_row_div2 + @max_row_div4;
 
32013
        
 
32014
# check multiple-4 success:     1
 
32015
DELETE FROM t1
 
32016
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32017
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32018
        
 
32019
# check multiple-5 success:     1
 
32020
SELECT COUNT(*) INTO @try_count FROM t0_template
 
32021
WHERE MOD(f_int1,3) = 0
 
32022
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32023
SELECT COUNT(*) INTO @clash_count
 
32024
FROM t1 INNER JOIN t0_template USING(f_int1)
 
32025
WHERE MOD(f_int1,3) = 0
 
32026
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32027
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32028
INSERT INTO t1
 
32029
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32030
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32031
f_charbig = '#SINGLE#';
 
32032
        
 
32033
# check single-1 success:       1
 
32034
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32035
INSERT INTO t1
 
32036
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32037
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32038
f_charbig = '#SINGLE#';
 
32039
        
 
32040
# check single-2 success:       1
 
32041
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32042
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32043
UPDATE t1 SET f_int1 = @cur_value2
 
32044
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32045
        
 
32046
# check single-3 success:       1
 
32047
SET @cur_value1= -1;
 
32048
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32049
UPDATE t1 SET f_int1 = @cur_value1
 
32050
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32051
        
 
32052
# check single-4 success:       1
 
32053
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32054
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32055
        
 
32056
# check single-5 success:       1
 
32057
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32058
        
 
32059
# check single-6 success:       1
 
32060
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32061
        
 
32062
# check single-7 success:       1
 
32063
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32064
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32065
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32066
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32067
f_charbig = '#NULL#';
 
32068
INSERT INTO t1
 
32069
SET f_int1 = NULL , f_int2 = -@max_row,
 
32070
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32071
f_charbig = '#NULL#';
 
32072
# check null success:    1
 
32073
        
 
32074
# check null-1 success:         1
 
32075
UPDATE t1 SET f_int1 = -@max_row
 
32076
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32077
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32078
        
 
32079
# check null-2 success:         1
 
32080
UPDATE t1 SET f_int1 = NULL
 
32081
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32082
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32083
        
 
32084
# check null-3 success:         1
 
32085
DELETE FROM t1
 
32086
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32087
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32088
        
 
32089
# check null-4 success:         1
 
32090
DELETE FROM t1
 
32091
WHERE f_int1 = 0 AND f_int2 = 0
 
32092
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32093
AND f_charbig = '#NULL#';
 
32094
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32095
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32096
   FROM t0_template source_tab
 
32097
WHERE MOD(f_int1,3) = 0
 
32098
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
32099
ON DUPLICATE KEY
 
32100
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
32101
f_int2 = 2 * @max_row + source_tab.f_int1,
 
32102
f_charbig = 'was updated';
 
32103
        
 
32104
# check unique-1-a success:     1
 
32105
        
 
32106
# check unique-1-b success:     1
 
32107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32110
f_charbig = CONCAT('===',f_char1,'===')
 
32111
WHERE f_charbig = 'was updated';
 
32112
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32113
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
32114
   FROM t0_template source_tab
 
32115
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32116
        
 
32117
# check replace success:        1
 
32118
DELETE FROM t1
 
32119
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
32120
DELETE FROM t1
 
32121
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
32122
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
32123
UPDATE t1 SET f_int2 = f_int1,
 
32124
f_char1 = CAST(f_int1 AS CHAR),
 
32125
f_char2 = CAST(f_int1 AS CHAR),
 
32126
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
32127
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
32128
SET AUTOCOMMIT= 0;
 
32129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32130
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32131
FROM t0_template source_tab
 
32132
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32133
        
 
32134
# check transactions-1 success:         1
 
32135
COMMIT WORK;
 
32136
        
 
32137
# check transactions-2 success:         1
 
32138
ROLLBACK WORK;
 
32139
        
 
32140
# check transactions-3 success:         1
 
32141
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32142
COMMIT WORK;
 
32143
ROLLBACK WORK;
 
32144
        
 
32145
# check transactions-4 success:         1
 
32146
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32147
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32148
FROM t0_template source_tab
 
32149
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32150
        
 
32151
# check transactions-5 success:         1
 
32152
ROLLBACK WORK;
 
32153
        
 
32154
# check transactions-6 success:         1
 
32155
# INFO: Storage engine used for t1 seems to be transactional.
 
32156
COMMIT;
 
32157
        
 
32158
# check transactions-7 success:         1
 
32159
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32160
COMMIT WORK;
 
32161
SET @@session.sql_mode = 'traditional';
 
32162
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32163
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32164
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32165
'', '', 'was inserted' FROM t0_template
 
32166
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32167
ERROR 22012: Division by 0
 
32168
COMMIT;
 
32169
        
 
32170
# check transactions-8 success:         1
 
32171
# INFO: Storage engine used for t1 seems to be able to revert
 
32172
#       changes made by the failing statement.
 
32173
SET @@session.sql_mode = '';
 
32174
SET AUTOCOMMIT= 1;
 
32175
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32176
COMMIT WORK;
 
32177
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32178
        
 
32179
# check special-1 success:      1
 
32180
UPDATE t1 SET f_charbig = '';
 
32181
        
 
32182
# check special-2 success:      1
 
32183
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32184
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32185
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32186
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32188
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32189
'just inserted' FROM t0_template
 
32190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32191
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32192
BEGIN
 
32193
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32194
f_charbig = 'updated by trigger'
 
32195
      WHERE f_int1 = new.f_int1;
 
32196
END|
 
32197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32198
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32200
        
 
32201
# check trigger-1 success:      1
 
32202
DROP TRIGGER trg_1;
 
32203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32205
f_charbig = 'just inserted'
 
32206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32207
DELETE FROM t0_aux
 
32208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32211
'just inserted' FROM t0_template
 
32212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32213
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32214
BEGIN
 
32215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32216
f_charbig = 'updated by trigger'
 
32217
      WHERE f_int1 = new.f_int1;
 
32218
END|
 
32219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32220
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32222
        
 
32223
# check trigger-2 success:      1
 
32224
DROP TRIGGER trg_1;
 
32225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32227
f_charbig = 'just inserted'
 
32228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32229
DELETE FROM t0_aux
 
32230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32233
'just inserted' FROM t0_template
 
32234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32235
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32236
BEGIN
 
32237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32238
f_charbig = 'updated by trigger'
 
32239
      WHERE f_int1 = new.f_int1;
 
32240
END|
 
32241
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32242
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32243
        
 
32244
# check trigger-3 success:      1
 
32245
DROP TRIGGER trg_1;
 
32246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32248
f_charbig = 'just inserted'
 
32249
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32250
DELETE FROM t0_aux
 
32251
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32252
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32253
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32254
'just inserted' FROM t0_template
 
32255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32256
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32257
BEGIN
 
32258
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32259
f_charbig = 'updated by trigger'
 
32260
      WHERE f_int1 = - old.f_int1;
 
32261
END|
 
32262
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32263
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32264
        
 
32265
# check trigger-4 success:      1
 
32266
DROP TRIGGER trg_1;
 
32267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32269
f_charbig = 'just inserted'
 
32270
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32271
DELETE FROM t0_aux
 
32272
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32273
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32274
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32275
'just inserted' FROM t0_template
 
32276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32277
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32278
BEGIN
 
32279
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32280
f_charbig = 'updated by trigger'
 
32281
      WHERE f_int1 = new.f_int1;
 
32282
END|
 
32283
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32284
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32285
        
 
32286
# check trigger-5 success:      1
 
32287
DROP TRIGGER trg_1;
 
32288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32290
f_charbig = 'just inserted'
 
32291
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32292
DELETE FROM t0_aux
 
32293
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32294
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32295
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32296
'just inserted' FROM t0_template
 
32297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32298
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32299
BEGIN
 
32300
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32301
f_charbig = 'updated by trigger'
 
32302
      WHERE f_int1 = - old.f_int1;
 
32303
END|
 
32304
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32305
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32306
        
 
32307
# check trigger-6 success:      1
 
32308
DROP TRIGGER trg_1;
 
32309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32311
f_charbig = 'just inserted'
 
32312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32313
DELETE FROM t0_aux
 
32314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32315
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32316
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32317
'just inserted' FROM t0_template
 
32318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32319
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32320
BEGIN
 
32321
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32322
f_charbig = 'updated by trigger'
 
32323
      WHERE f_int1 = - old.f_int1;
 
32324
END|
 
32325
DELETE FROM t0_aux
 
32326
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32327
        
 
32328
# check trigger-7 success:      1
 
32329
DROP TRIGGER trg_1;
 
32330
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32331
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32332
f_charbig = 'just inserted'
 
32333
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32334
DELETE FROM t0_aux
 
32335
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32336
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32337
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32338
'just inserted' FROM t0_template
 
32339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32340
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32341
BEGIN
 
32342
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32343
f_charbig = 'updated by trigger'
 
32344
      WHERE f_int1 = - old.f_int1;
 
32345
END|
 
32346
DELETE FROM t0_aux
 
32347
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32348
        
 
32349
# check trigger-8 success:      1
 
32350
DROP TRIGGER trg_1;
 
32351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32353
f_charbig = 'just inserted'
 
32354
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32355
DELETE FROM t0_aux
 
32356
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32357
DELETE FROM t1
 
32358
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32359
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32360
BEGIN
 
32361
SET new.f_int1 = old.f_int1 + @max_row,
 
32362
new.f_int2 = old.f_int2 - @max_row,
 
32363
new.f_charbig = '####updated per update trigger####';
 
32364
END|
 
32365
UPDATE t1
 
32366
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32367
f_charbig = '####updated per update statement itself####';
 
32368
        
 
32369
# check trigger-9 success:      1
 
32370
DROP TRIGGER trg_2;
 
32371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32373
f_charbig = CONCAT('===',f_char1,'===');
 
32374
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32375
BEGIN
 
32376
SET new.f_int1 = new.f_int1 + @max_row,
 
32377
new.f_int2 = new.f_int2 - @max_row,
 
32378
new.f_charbig = '####updated per update trigger####';
 
32379
END|
 
32380
UPDATE t1
 
32381
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32382
f_charbig = '####updated per update statement itself####';
 
32383
        
 
32384
# check trigger-10 success:     1
 
32385
DROP TRIGGER trg_2;
 
32386
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32387
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32388
f_charbig = CONCAT('===',f_char1,'===');
 
32389
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32390
BEGIN
 
32391
SET new.f_int1 = @my_max1 + @counter,
 
32392
new.f_int2 = @my_min2 - @counter,
 
32393
new.f_charbig = '####updated per insert trigger####';
 
32394
SET @counter = @counter + 1;
 
32395
END|
 
32396
SET @counter = 1;
 
32397
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32398
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32399
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32400
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32402
ORDER BY f_int1;
 
32403
DROP TRIGGER trg_3;
 
32404
        
 
32405
# check trigger-11 success:     1
 
32406
DELETE FROM t1
 
32407
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32408
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32409
AND f_charbig = '####updated per insert trigger####';
 
32410
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32411
BEGIN
 
32412
SET new.f_int1 = @my_max1 + @counter,
 
32413
new.f_int2 = @my_min2 - @counter,
 
32414
new.f_charbig = '####updated per insert trigger####';
 
32415
SET @counter = @counter + 1;
 
32416
END|
 
32417
SET @counter = 1;
 
32418
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32419
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32420
SELECT CAST(f_int1 AS CHAR),
 
32421
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32423
ORDER BY f_int1;
 
32424
DROP TRIGGER trg_3;
 
32425
        
 
32426
# check trigger-12 success:     1
 
32427
DELETE FROM t1
 
32428
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32429
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32430
AND f_charbig = '####updated per insert trigger####';
 
32431
ANALYZE  TABLE t1;
 
32432
Table   Op      Msg_type        Msg_text
 
32433
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
32434
CHECK    TABLE t1 EXTENDED;
 
32435
Table   Op      Msg_type        Msg_text
 
32436
test.t1 check   note    The storage engine for the table doesn't support check
 
32437
CHECKSUM TABLE t1 EXTENDED;
 
32438
Table   Checksum
 
32439
test.t1 <some_value>
 
32440
OPTIMIZE TABLE t1;
 
32441
Table   Op      Msg_type        Msg_text
 
32442
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
32443
# check layout success:    1
 
32444
REPAIR   TABLE t1 EXTENDED;
 
32445
Table   Op      Msg_type        Msg_text
 
32446
test.t1 repair  note    The storage engine for the table doesn't support repair
 
32447
# check layout success:    1
 
32448
TRUNCATE t1;
 
32449
        
 
32450
# check TRUNCATE success:       1
 
32451
# check layout success:    1
 
32452
# End usability test (inc/partition_check.inc)
 
32453
DROP TABLE t1;
 
32454
#  1.2.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
 
32455
DROP TABLE IF EXISTS t1;
 
32456
CREATE TABLE t1 (
 
32457
f_int1 INTEGER,
 
32458
f_int2 INTEGER,
 
32459
f_char1 CHAR(20),
 
32460
f_char2 CHAR(20),
 
32461
f_charbig VARCHAR(1000)
 
32462
 
 
32463
)
 
32464
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
32465
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32466
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32467
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32468
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
32469
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32470
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32471
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32472
# Start usability test (inc/partition_check.inc)
 
32473
create_command
 
32474
SHOW CREATE TABLE t1;
 
32475
Table   Create Table
 
32476
t1      CREATE TABLE `t1` (
 
32477
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
32478
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
32479
  `f_char1` char(20) DEFAULT NULL,
 
32480
  `f_char2` char(20) DEFAULT NULL,
 
32481
  `f_charbig` varchar(1000) DEFAULT NULL,
 
32482
  PRIMARY KEY (`f_int2`,`f_int1`),
 
32483
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
32484
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
32485
 
 
32486
# check prerequisites-1 success:    1
 
32487
# check COUNT(*) success:    1
 
32488
# check MIN/MAX(f_int1) success:    1
 
32489
# check MIN/MAX(f_int2) success:    1
 
32490
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32491
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32492
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32493
WHERE f_int1 IN (2,3);
 
32494
ERROR 23000: Can't write; duplicate key in table 't1'
 
32495
# check prerequisites-3 success:    1
 
32496
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
32497
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32498
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
32499
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
32500
WHERE f_int1 IN (2,3);
 
32501
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32502
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32503
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
32504
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
32505
WHERE f_int1 IN (2,3);
 
32506
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32507
# check read via f_int1 success: 1
 
32508
# check read via f_int2 success: 1
 
32509
        
 
32510
# check multiple-1 success:     1
 
32511
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32512
        
 
32513
# check multiple-2 success:     1
 
32514
INSERT INTO t1 SELECT * FROM t0_template
 
32515
WHERE MOD(f_int1,3) = 0;
 
32516
        
 
32517
# check multiple-3 success:     1
 
32518
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32519
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32520
AND @max_row_div2 + @max_row_div4;
 
32521
        
 
32522
# check multiple-4 success:     1
 
32523
DELETE FROM t1
 
32524
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32525
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32526
        
 
32527
# check multiple-5 success:     1
 
32528
SELECT COUNT(*) INTO @try_count FROM t0_template
 
32529
WHERE MOD(f_int1,3) = 0
 
32530
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32531
SELECT COUNT(*) INTO @clash_count
 
32532
FROM t1 INNER JOIN t0_template USING(f_int1)
 
32533
WHERE MOD(f_int1,3) = 0
 
32534
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32535
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32536
INSERT INTO t1
 
32537
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32538
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32539
f_charbig = '#SINGLE#';
 
32540
        
 
32541
# check single-1 success:       1
 
32542
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32543
INSERT INTO t1
 
32544
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32545
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32546
f_charbig = '#SINGLE#';
 
32547
        
 
32548
# check single-2 success:       1
 
32549
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32550
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32551
UPDATE t1 SET f_int1 = @cur_value2
 
32552
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32553
        
 
32554
# check single-3 success:       1
 
32555
SET @cur_value1= -1;
 
32556
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32557
UPDATE t1 SET f_int1 = @cur_value1
 
32558
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32559
        
 
32560
# check single-4 success:       1
 
32561
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32562
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32563
        
 
32564
# check single-5 success:       1
 
32565
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32566
        
 
32567
# check single-6 success:       1
 
32568
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32569
        
 
32570
# check single-7 success:       1
 
32571
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32572
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32573
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32574
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32575
f_charbig = '#NULL#';
 
32576
INSERT INTO t1
 
32577
SET f_int1 = NULL , f_int2 = -@max_row,
 
32578
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32579
f_charbig = '#NULL#';
 
32580
ERROR 23000: Column 'f_int1' cannot be null
 
32581
# check null success:    1
 
32582
DELETE FROM t1
 
32583
WHERE f_int1 = 0 AND f_int2 = 0
 
32584
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32585
AND f_charbig = '#NULL#';
 
32586
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32587
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32588
   FROM t0_template source_tab
 
32589
WHERE MOD(f_int1,3) = 0
 
32590
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
32591
ON DUPLICATE KEY
 
32592
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
32593
f_int2 = 2 * @max_row + source_tab.f_int1,
 
32594
f_charbig = 'was updated';
 
32595
        
 
32596
# check unique-1-a success:     1
 
32597
        
 
32598
# check unique-1-b success:     1
 
32599
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32602
f_charbig = CONCAT('===',f_char1,'===')
 
32603
WHERE f_charbig = 'was updated';
 
32604
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32605
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
32606
   FROM t0_template source_tab
 
32607
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32608
        
 
32609
# check replace success:        1
 
32610
DELETE FROM t1
 
32611
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
32612
DELETE FROM t1
 
32613
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
32614
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
32615
UPDATE t1 SET f_int2 = f_int1,
 
32616
f_char1 = CAST(f_int1 AS CHAR),
 
32617
f_char2 = CAST(f_int1 AS CHAR),
 
32618
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
32619
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
32620
SET AUTOCOMMIT= 0;
 
32621
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32622
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32623
FROM t0_template source_tab
 
32624
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32625
        
 
32626
# check transactions-1 success:         1
 
32627
COMMIT WORK;
 
32628
        
 
32629
# check transactions-2 success:         1
 
32630
ROLLBACK WORK;
 
32631
        
 
32632
# check transactions-3 success:         1
 
32633
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32634
COMMIT WORK;
 
32635
ROLLBACK WORK;
 
32636
        
 
32637
# check transactions-4 success:         1
 
32638
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32639
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32640
FROM t0_template source_tab
 
32641
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32642
        
 
32643
# check transactions-5 success:         1
 
32644
ROLLBACK WORK;
 
32645
        
 
32646
# check transactions-6 success:         1
 
32647
# INFO: Storage engine used for t1 seems to be transactional.
 
32648
COMMIT;
 
32649
        
 
32650
# check transactions-7 success:         1
 
32651
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32652
COMMIT WORK;
 
32653
SET @@session.sql_mode = 'traditional';
 
32654
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32655
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32656
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32657
'', '', 'was inserted' FROM t0_template
 
32658
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32659
ERROR 22012: Division by 0
 
32660
COMMIT;
 
32661
        
 
32662
# check transactions-8 success:         1
 
32663
# INFO: Storage engine used for t1 seems to be able to revert
 
32664
#       changes made by the failing statement.
 
32665
SET @@session.sql_mode = '';
 
32666
SET AUTOCOMMIT= 1;
 
32667
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32668
COMMIT WORK;
 
32669
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32670
        
 
32671
# check special-1 success:      1
 
32672
UPDATE t1 SET f_charbig = '';
 
32673
        
 
32674
# check special-2 success:      1
 
32675
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32676
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32677
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32681
'just inserted' FROM t0_template
 
32682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32683
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32684
BEGIN
 
32685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32686
f_charbig = 'updated by trigger'
 
32687
      WHERE f_int1 = new.f_int1;
 
32688
END|
 
32689
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32690
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32692
        
 
32693
# check trigger-1 success:      1
 
32694
DROP TRIGGER trg_1;
 
32695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32697
f_charbig = 'just inserted'
 
32698
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32699
DELETE FROM t0_aux
 
32700
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32702
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32703
'just inserted' FROM t0_template
 
32704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32705
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32706
BEGIN
 
32707
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32708
f_charbig = 'updated by trigger'
 
32709
      WHERE f_int1 = new.f_int1;
 
32710
END|
 
32711
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32712
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32714
        
 
32715
# check trigger-2 success:      1
 
32716
DROP TRIGGER trg_1;
 
32717
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32718
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32719
f_charbig = 'just inserted'
 
32720
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32721
DELETE FROM t0_aux
 
32722
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32723
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32724
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32725
'just inserted' FROM t0_template
 
32726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32727
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32728
BEGIN
 
32729
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32730
f_charbig = 'updated by trigger'
 
32731
      WHERE f_int1 = new.f_int1;
 
32732
END|
 
32733
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32734
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32735
        
 
32736
# check trigger-3 success:      1
 
32737
DROP TRIGGER trg_1;
 
32738
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32739
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32740
f_charbig = 'just inserted'
 
32741
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32742
DELETE FROM t0_aux
 
32743
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32744
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32745
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32746
'just inserted' FROM t0_template
 
32747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32748
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32749
BEGIN
 
32750
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32751
f_charbig = 'updated by trigger'
 
32752
      WHERE f_int1 = - old.f_int1;
 
32753
END|
 
32754
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32755
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32756
        
 
32757
# check trigger-4 success:      1
 
32758
DROP TRIGGER trg_1;
 
32759
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32760
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32761
f_charbig = 'just inserted'
 
32762
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32763
DELETE FROM t0_aux
 
32764
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32765
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32766
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32767
'just inserted' FROM t0_template
 
32768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32769
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32770
BEGIN
 
32771
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32772
f_charbig = 'updated by trigger'
 
32773
      WHERE f_int1 = new.f_int1;
 
32774
END|
 
32775
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32776
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32777
        
 
32778
# check trigger-5 success:      1
 
32779
DROP TRIGGER trg_1;
 
32780
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32781
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32782
f_charbig = 'just inserted'
 
32783
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32784
DELETE FROM t0_aux
 
32785
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32787
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32788
'just inserted' FROM t0_template
 
32789
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32790
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32791
BEGIN
 
32792
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32793
f_charbig = 'updated by trigger'
 
32794
      WHERE f_int1 = - old.f_int1;
 
32795
END|
 
32796
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32797
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32798
        
 
32799
# check trigger-6 success:      1
 
32800
DROP TRIGGER trg_1;
 
32801
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32802
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32803
f_charbig = 'just inserted'
 
32804
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32805
DELETE FROM t0_aux
 
32806
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32807
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32808
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32809
'just inserted' FROM t0_template
 
32810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32811
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32812
BEGIN
 
32813
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32814
f_charbig = 'updated by trigger'
 
32815
      WHERE f_int1 = - old.f_int1;
 
32816
END|
 
32817
DELETE FROM t0_aux
 
32818
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32819
        
 
32820
# check trigger-7 success:      1
 
32821
DROP TRIGGER trg_1;
 
32822
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32823
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32824
f_charbig = 'just inserted'
 
32825
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32826
DELETE FROM t0_aux
 
32827
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32828
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32829
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32830
'just inserted' FROM t0_template
 
32831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32832
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32833
BEGIN
 
32834
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32835
f_charbig = 'updated by trigger'
 
32836
      WHERE f_int1 = - old.f_int1;
 
32837
END|
 
32838
DELETE FROM t0_aux
 
32839
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32840
        
 
32841
# check trigger-8 success:      1
 
32842
DROP TRIGGER trg_1;
 
32843
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32844
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32845
f_charbig = 'just inserted'
 
32846
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32847
DELETE FROM t0_aux
 
32848
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32849
DELETE FROM t1
 
32850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32851
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32852
BEGIN
 
32853
SET new.f_int1 = old.f_int1 + @max_row,
 
32854
new.f_int2 = old.f_int2 - @max_row,
 
32855
new.f_charbig = '####updated per update trigger####';
 
32856
END|
 
32857
UPDATE t1
 
32858
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32859
f_charbig = '####updated per update statement itself####';
 
32860
        
 
32861
# check trigger-9 success:      1
 
32862
DROP TRIGGER trg_2;
 
32863
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32864
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32865
f_charbig = CONCAT('===',f_char1,'===');
 
32866
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32867
BEGIN
 
32868
SET new.f_int1 = new.f_int1 + @max_row,
 
32869
new.f_int2 = new.f_int2 - @max_row,
 
32870
new.f_charbig = '####updated per update trigger####';
 
32871
END|
 
32872
UPDATE t1
 
32873
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32874
f_charbig = '####updated per update statement itself####';
 
32875
        
 
32876
# check trigger-10 success:     1
 
32877
DROP TRIGGER trg_2;
 
32878
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32879
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32880
f_charbig = CONCAT('===',f_char1,'===');
 
32881
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32882
BEGIN
 
32883
SET new.f_int1 = @my_max1 + @counter,
 
32884
new.f_int2 = @my_min2 - @counter,
 
32885
new.f_charbig = '####updated per insert trigger####';
 
32886
SET @counter = @counter + 1;
 
32887
END|
 
32888
SET @counter = 1;
 
32889
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32890
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32891
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32892
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32893
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32894
ORDER BY f_int1;
 
32895
DROP TRIGGER trg_3;
 
32896
        
 
32897
# check trigger-11 success:     1
 
32898
DELETE FROM t1
 
32899
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32900
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32901
AND f_charbig = '####updated per insert trigger####';
 
32902
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32903
BEGIN
 
32904
SET new.f_int1 = @my_max1 + @counter,
 
32905
new.f_int2 = @my_min2 - @counter,
 
32906
new.f_charbig = '####updated per insert trigger####';
 
32907
SET @counter = @counter + 1;
 
32908
END|
 
32909
SET @counter = 1;
 
32910
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32911
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32912
SELECT CAST(f_int1 AS CHAR),
 
32913
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32914
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32915
ORDER BY f_int1;
 
32916
DROP TRIGGER trg_3;
 
32917
        
 
32918
# check trigger-12 success:     1
 
32919
DELETE FROM t1
 
32920
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32921
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32922
AND f_charbig = '####updated per insert trigger####';
 
32923
ANALYZE  TABLE t1;
 
32924
Table   Op      Msg_type        Msg_text
 
32925
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
32926
CHECK    TABLE t1 EXTENDED;
 
32927
Table   Op      Msg_type        Msg_text
 
32928
test.t1 check   note    The storage engine for the table doesn't support check
 
32929
CHECKSUM TABLE t1 EXTENDED;
 
32930
Table   Checksum
 
32931
test.t1 <some_value>
 
32932
OPTIMIZE TABLE t1;
 
32933
Table   Op      Msg_type        Msg_text
 
32934
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
32935
# check layout success:    1
 
32936
REPAIR   TABLE t1 EXTENDED;
 
32937
Table   Op      Msg_type        Msg_text
 
32938
test.t1 repair  note    The storage engine for the table doesn't support repair
 
32939
# check layout success:    1
 
32940
TRUNCATE t1;
 
32941
        
 
32942
# check TRUNCATE success:       1
 
32943
# check layout success:    1
 
32944
# End usability test (inc/partition_check.inc)
 
32945
DROP TABLE t1;
 
32946
CREATE TABLE t1 (
 
32947
f_int1 INTEGER,
 
32948
f_int2 INTEGER,
 
32949
f_char1 CHAR(20),
 
32950
f_char2 CHAR(20),
 
32951
f_charbig VARCHAR(1000)
 
32952
 
 
32953
)
 
32954
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
32955
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32956
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32957
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32958
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
32959
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32960
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32961
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32962
# Start usability test (inc/partition_check.inc)
 
32963
create_command
 
32964
SHOW CREATE TABLE t1;
 
32965
Table   Create Table
 
32966
t1      CREATE TABLE `t1` (
 
32967
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
32968
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
32969
  `f_char1` char(20) DEFAULT NULL,
 
32970
  `f_char2` char(20) DEFAULT NULL,
 
32971
  `f_charbig` varchar(1000) DEFAULT NULL,
 
32972
  PRIMARY KEY (`f_int2`,`f_int1`),
 
32973
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
32974
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
32975
 
 
32976
# check prerequisites-1 success:    1
 
32977
# check COUNT(*) success:    1
 
32978
# check MIN/MAX(f_int1) success:    1
 
32979
# check MIN/MAX(f_int2) success:    1
 
32980
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32981
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32982
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32983
WHERE f_int1 IN (2,3);
 
32984
ERROR 23000: Can't write; duplicate key in table 't1'
 
32985
# check prerequisites-3 success:    1
 
32986
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
32987
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32988
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
32989
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
32990
WHERE f_int1 IN (2,3);
 
32991
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32992
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32993
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
32994
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
32995
WHERE f_int1 IN (2,3);
 
32996
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32997
# check read via f_int1 success: 1
 
32998
# check read via f_int2 success: 1
 
32999
        
 
33000
# check multiple-1 success:     1
 
33001
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33002
        
 
33003
# check multiple-2 success:     1
 
33004
INSERT INTO t1 SELECT * FROM t0_template
 
33005
WHERE MOD(f_int1,3) = 0;
 
33006
        
 
33007
# check multiple-3 success:     1
 
33008
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33009
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33010
AND @max_row_div2 + @max_row_div4;
 
33011
        
 
33012
# check multiple-4 success:     1
 
33013
DELETE FROM t1
 
33014
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33015
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33016
        
 
33017
# check multiple-5 success:     1
 
33018
SELECT COUNT(*) INTO @try_count FROM t0_template
 
33019
WHERE MOD(f_int1,3) = 0
 
33020
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33021
SELECT COUNT(*) INTO @clash_count
 
33022
FROM t1 INNER JOIN t0_template USING(f_int1)
 
33023
WHERE MOD(f_int1,3) = 0
 
33024
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33025
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33026
INSERT INTO t1
 
33027
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33028
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33029
f_charbig = '#SINGLE#';
 
33030
        
 
33031
# check single-1 success:       1
 
33032
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33033
INSERT INTO t1
 
33034
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33035
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33036
f_charbig = '#SINGLE#';
 
33037
        
 
33038
# check single-2 success:       1
 
33039
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33040
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33041
UPDATE t1 SET f_int1 = @cur_value2
 
33042
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33043
        
 
33044
# check single-3 success:       1
 
33045
SET @cur_value1= -1;
 
33046
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33047
UPDATE t1 SET f_int1 = @cur_value1
 
33048
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33049
        
 
33050
# check single-4 success:       1
 
33051
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33052
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33053
        
 
33054
# check single-5 success:       1
 
33055
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33056
        
 
33057
# check single-6 success:       1
 
33058
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33059
        
 
33060
# check single-7 success:       1
 
33061
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
33062
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33063
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33064
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33065
f_charbig = '#NULL#';
 
33066
INSERT INTO t1
 
33067
SET f_int1 = NULL , f_int2 = -@max_row,
 
33068
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33069
f_charbig = '#NULL#';
 
33070
ERROR 23000: Column 'f_int1' cannot be null
 
33071
# check null success:    1
 
33072
DELETE FROM t1
 
33073
WHERE f_int1 = 0 AND f_int2 = 0
 
33074
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33075
AND f_charbig = '#NULL#';
 
33076
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33077
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33078
   FROM t0_template source_tab
 
33079
WHERE MOD(f_int1,3) = 0
 
33080
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
33081
ON DUPLICATE KEY
 
33082
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
33083
f_int2 = 2 * @max_row + source_tab.f_int1,
 
33084
f_charbig = 'was updated';
 
33085
        
 
33086
# check unique-1-a success:     1
 
33087
        
 
33088
# check unique-1-b success:     1
 
33089
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33092
f_charbig = CONCAT('===',f_char1,'===')
 
33093
WHERE f_charbig = 'was updated';
 
33094
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33095
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
33096
   FROM t0_template source_tab
 
33097
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33098
        
 
33099
# check replace success:        1
 
33100
DELETE FROM t1
 
33101
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
33102
DELETE FROM t1
 
33103
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
33104
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
33105
UPDATE t1 SET f_int2 = f_int1,
 
33106
f_char1 = CAST(f_int1 AS CHAR),
 
33107
f_char2 = CAST(f_int1 AS CHAR),
 
33108
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
33109
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
33110
SET AUTOCOMMIT= 0;
 
33111
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33112
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33113
FROM t0_template source_tab
 
33114
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33115
        
 
33116
# check transactions-1 success:         1
 
33117
COMMIT WORK;
 
33118
        
 
33119
# check transactions-2 success:         1
 
33120
ROLLBACK WORK;
 
33121
        
 
33122
# check transactions-3 success:         1
 
33123
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33124
COMMIT WORK;
 
33125
ROLLBACK WORK;
 
33126
        
 
33127
# check transactions-4 success:         1
 
33128
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33129
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33130
FROM t0_template source_tab
 
33131
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33132
        
 
33133
# check transactions-5 success:         1
 
33134
ROLLBACK WORK;
 
33135
        
 
33136
# check transactions-6 success:         1
 
33137
# INFO: Storage engine used for t1 seems to be transactional.
 
33138
COMMIT;
 
33139
        
 
33140
# check transactions-7 success:         1
 
33141
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33142
COMMIT WORK;
 
33143
SET @@session.sql_mode = 'traditional';
 
33144
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33145
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33146
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33147
'', '', 'was inserted' FROM t0_template
 
33148
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33149
ERROR 22012: Division by 0
 
33150
COMMIT;
 
33151
        
 
33152
# check transactions-8 success:         1
 
33153
# INFO: Storage engine used for t1 seems to be able to revert
 
33154
#       changes made by the failing statement.
 
33155
SET @@session.sql_mode = '';
 
33156
SET AUTOCOMMIT= 1;
 
33157
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33158
COMMIT WORK;
 
33159
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33160
        
 
33161
# check special-1 success:      1
 
33162
UPDATE t1 SET f_charbig = '';
 
33163
        
 
33164
# check special-2 success:      1
 
33165
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33166
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33167
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33171
'just inserted' FROM t0_template
 
33172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33173
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33174
BEGIN
 
33175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33176
f_charbig = 'updated by trigger'
 
33177
      WHERE f_int1 = new.f_int1;
 
33178
END|
 
33179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33180
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33182
        
 
33183
# check trigger-1 success:      1
 
33184
DROP TRIGGER trg_1;
 
33185
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33186
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33187
f_charbig = 'just inserted'
 
33188
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33189
DELETE FROM t0_aux
 
33190
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33193
'just inserted' FROM t0_template
 
33194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33195
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33196
BEGIN
 
33197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33198
f_charbig = 'updated by trigger'
 
33199
      WHERE f_int1 = new.f_int1;
 
33200
END|
 
33201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33202
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33204
        
 
33205
# check trigger-2 success:      1
 
33206
DROP TRIGGER trg_1;
 
33207
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33208
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33209
f_charbig = 'just inserted'
 
33210
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33211
DELETE FROM t0_aux
 
33212
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33213
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33214
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33215
'just inserted' FROM t0_template
 
33216
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33217
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33218
BEGIN
 
33219
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33220
f_charbig = 'updated by trigger'
 
33221
      WHERE f_int1 = new.f_int1;
 
33222
END|
 
33223
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33224
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33225
        
 
33226
# check trigger-3 success:      1
 
33227
DROP TRIGGER trg_1;
 
33228
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33229
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33230
f_charbig = 'just inserted'
 
33231
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33232
DELETE FROM t0_aux
 
33233
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33234
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33235
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33236
'just inserted' FROM t0_template
 
33237
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33238
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33239
BEGIN
 
33240
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33241
f_charbig = 'updated by trigger'
 
33242
      WHERE f_int1 = - old.f_int1;
 
33243
END|
 
33244
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33245
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33246
        
 
33247
# check trigger-4 success:      1
 
33248
DROP TRIGGER trg_1;
 
33249
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33250
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33251
f_charbig = 'just inserted'
 
33252
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33253
DELETE FROM t0_aux
 
33254
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33255
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33256
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33257
'just inserted' FROM t0_template
 
33258
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33259
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33260
BEGIN
 
33261
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33262
f_charbig = 'updated by trigger'
 
33263
      WHERE f_int1 = new.f_int1;
 
33264
END|
 
33265
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33266
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33267
        
 
33268
# check trigger-5 success:      1
 
33269
DROP TRIGGER trg_1;
 
33270
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33271
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33272
f_charbig = 'just inserted'
 
33273
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33274
DELETE FROM t0_aux
 
33275
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33276
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33277
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33278
'just inserted' FROM t0_template
 
33279
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33280
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33281
BEGIN
 
33282
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33283
f_charbig = 'updated by trigger'
 
33284
      WHERE f_int1 = - old.f_int1;
 
33285
END|
 
33286
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33287
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33288
        
 
33289
# check trigger-6 success:      1
 
33290
DROP TRIGGER trg_1;
 
33291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33293
f_charbig = 'just inserted'
 
33294
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33295
DELETE FROM t0_aux
 
33296
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33297
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33298
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33299
'just inserted' FROM t0_template
 
33300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33301
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33302
BEGIN
 
33303
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33304
f_charbig = 'updated by trigger'
 
33305
      WHERE f_int1 = - old.f_int1;
 
33306
END|
 
33307
DELETE FROM t0_aux
 
33308
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33309
        
 
33310
# check trigger-7 success:      1
 
33311
DROP TRIGGER trg_1;
 
33312
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33313
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33314
f_charbig = 'just inserted'
 
33315
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33316
DELETE FROM t0_aux
 
33317
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33319
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33320
'just inserted' FROM t0_template
 
33321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33322
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33323
BEGIN
 
33324
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33325
f_charbig = 'updated by trigger'
 
33326
      WHERE f_int1 = - old.f_int1;
 
33327
END|
 
33328
DELETE FROM t0_aux
 
33329
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33330
        
 
33331
# check trigger-8 success:      1
 
33332
DROP TRIGGER trg_1;
 
33333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33334
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33335
f_charbig = 'just inserted'
 
33336
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33337
DELETE FROM t0_aux
 
33338
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33339
DELETE FROM t1
 
33340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33341
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33342
BEGIN
 
33343
SET new.f_int1 = old.f_int1 + @max_row,
 
33344
new.f_int2 = old.f_int2 - @max_row,
 
33345
new.f_charbig = '####updated per update trigger####';
 
33346
END|
 
33347
UPDATE t1
 
33348
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33349
f_charbig = '####updated per update statement itself####';
 
33350
        
 
33351
# check trigger-9 success:      1
 
33352
DROP TRIGGER trg_2;
 
33353
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33354
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33355
f_charbig = CONCAT('===',f_char1,'===');
 
33356
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33357
BEGIN
 
33358
SET new.f_int1 = new.f_int1 + @max_row,
 
33359
new.f_int2 = new.f_int2 - @max_row,
 
33360
new.f_charbig = '####updated per update trigger####';
 
33361
END|
 
33362
UPDATE t1
 
33363
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33364
f_charbig = '####updated per update statement itself####';
 
33365
        
 
33366
# check trigger-10 success:     1
 
33367
DROP TRIGGER trg_2;
 
33368
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33369
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33370
f_charbig = CONCAT('===',f_char1,'===');
 
33371
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33372
BEGIN
 
33373
SET new.f_int1 = @my_max1 + @counter,
 
33374
new.f_int2 = @my_min2 - @counter,
 
33375
new.f_charbig = '####updated per insert trigger####';
 
33376
SET @counter = @counter + 1;
 
33377
END|
 
33378
SET @counter = 1;
 
33379
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33380
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33381
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33382
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33384
ORDER BY f_int1;
 
33385
DROP TRIGGER trg_3;
 
33386
        
 
33387
# check trigger-11 success:     1
 
33388
DELETE FROM t1
 
33389
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33390
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33391
AND f_charbig = '####updated per insert trigger####';
 
33392
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33393
BEGIN
 
33394
SET new.f_int1 = @my_max1 + @counter,
 
33395
new.f_int2 = @my_min2 - @counter,
 
33396
new.f_charbig = '####updated per insert trigger####';
 
33397
SET @counter = @counter + 1;
 
33398
END|
 
33399
SET @counter = 1;
 
33400
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33401
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33402
SELECT CAST(f_int1 AS CHAR),
 
33403
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33404
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33405
ORDER BY f_int1;
 
33406
DROP TRIGGER trg_3;
 
33407
        
 
33408
# check trigger-12 success:     1
 
33409
DELETE FROM t1
 
33410
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33411
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33412
AND f_charbig = '####updated per insert trigger####';
 
33413
ANALYZE  TABLE t1;
 
33414
Table   Op      Msg_type        Msg_text
 
33415
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
33416
CHECK    TABLE t1 EXTENDED;
 
33417
Table   Op      Msg_type        Msg_text
 
33418
test.t1 check   note    The storage engine for the table doesn't support check
 
33419
CHECKSUM TABLE t1 EXTENDED;
 
33420
Table   Checksum
 
33421
test.t1 <some_value>
 
33422
OPTIMIZE TABLE t1;
 
33423
Table   Op      Msg_type        Msg_text
 
33424
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
33425
# check layout success:    1
 
33426
REPAIR   TABLE t1 EXTENDED;
 
33427
Table   Op      Msg_type        Msg_text
 
33428
test.t1 repair  note    The storage engine for the table doesn't support repair
 
33429
# check layout success:    1
 
33430
TRUNCATE t1;
 
33431
        
 
33432
# check TRUNCATE success:       1
 
33433
# check layout success:    1
 
33434
# End usability test (inc/partition_check.inc)
 
33435
DROP TABLE t1;
 
33436
CREATE TABLE t1 (
 
33437
f_int1 INTEGER,
 
33438
f_int2 INTEGER,
 
33439
f_char1 CHAR(20),
 
33440
f_char2 CHAR(20),
 
33441
f_charbig VARCHAR(1000)
 
33442
 
 
33443
)
 
33444
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
33445
(PARTITION part_3 VALUES IN (-3),
 
33446
PARTITION part_2 VALUES IN (-2),
 
33447
PARTITION part_1 VALUES IN (-1),
 
33448
PARTITION part_N VALUES IN (NULL),
 
33449
PARTITION part0 VALUES IN (0),
 
33450
PARTITION part1 VALUES IN (1),
 
33451
PARTITION part2 VALUES IN (2),
 
33452
PARTITION part3 VALUES IN (3));
 
33453
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33454
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33455
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33456
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
33457
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33458
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33459
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33460
# Start usability test (inc/partition_check.inc)
 
33461
create_command
 
33462
SHOW CREATE TABLE t1;
 
33463
Table   Create Table
 
33464
t1      CREATE TABLE `t1` (
 
33465
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
33466
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
33467
  `f_char1` char(20) DEFAULT NULL,
 
33468
  `f_char2` char(20) DEFAULT NULL,
 
33469
  `f_charbig` varchar(1000) DEFAULT NULL,
 
33470
  PRIMARY KEY (`f_int2`,`f_int1`),
 
33471
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
33472
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
33473
 
 
33474
# check prerequisites-1 success:    1
 
33475
# check COUNT(*) success:    1
 
33476
# check MIN/MAX(f_int1) success:    1
 
33477
# check MIN/MAX(f_int2) success:    1
 
33478
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33479
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33480
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33481
WHERE f_int1 IN (2,3);
 
33482
ERROR 23000: Can't write; duplicate key in table 't1'
 
33483
# check prerequisites-3 success:    1
 
33484
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
33485
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33486
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
33487
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
33488
WHERE f_int1 IN (2,3);
 
33489
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33490
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33491
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
33492
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
33493
WHERE f_int1 IN (2,3);
 
33494
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33495
# check read via f_int1 success: 1
 
33496
# check read via f_int2 success: 1
 
33497
        
 
33498
# check multiple-1 success:     1
 
33499
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33500
        
 
33501
# check multiple-2 success:     1
 
33502
INSERT INTO t1 SELECT * FROM t0_template
 
33503
WHERE MOD(f_int1,3) = 0;
 
33504
        
 
33505
# check multiple-3 success:     1
 
33506
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33507
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33508
AND @max_row_div2 + @max_row_div4;
 
33509
        
 
33510
# check multiple-4 success:     1
 
33511
DELETE FROM t1
 
33512
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33513
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33514
        
 
33515
# check multiple-5 success:     1
 
33516
SELECT COUNT(*) INTO @try_count FROM t0_template
 
33517
WHERE MOD(f_int1,3) = 0
 
33518
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33519
SELECT COUNT(*) INTO @clash_count
 
33520
FROM t1 INNER JOIN t0_template USING(f_int1)
 
33521
WHERE MOD(f_int1,3) = 0
 
33522
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33523
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33524
INSERT INTO t1
 
33525
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33526
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33527
f_charbig = '#SINGLE#';
 
33528
        
 
33529
# check single-1 success:       1
 
33530
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33531
INSERT INTO t1
 
33532
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33533
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33534
f_charbig = '#SINGLE#';
 
33535
        
 
33536
# check single-2 success:       1
 
33537
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33538
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33539
UPDATE t1 SET f_int1 = @cur_value2
 
33540
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33541
        
 
33542
# check single-3 success:       1
 
33543
SET @cur_value1= -1;
 
33544
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33545
UPDATE t1 SET f_int1 = @cur_value1
 
33546
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33547
        
 
33548
# check single-4 success:       1
 
33549
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33550
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33551
        
 
33552
# check single-5 success:       1
 
33553
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33554
        
 
33555
# check single-6 success:       1
 
33556
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33557
        
 
33558
# check single-7 success:       1
 
33559
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
33560
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33561
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33562
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33563
f_charbig = '#NULL#';
 
33564
INSERT INTO t1
 
33565
SET f_int1 = NULL , f_int2 = -@max_row,
 
33566
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33567
f_charbig = '#NULL#';
 
33568
ERROR 23000: Column 'f_int1' cannot be null
 
33569
# check null success:    1
 
33570
DELETE FROM t1
 
33571
WHERE f_int1 = 0 AND f_int2 = 0
 
33572
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33573
AND f_charbig = '#NULL#';
 
33574
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33575
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33576
   FROM t0_template source_tab
 
33577
WHERE MOD(f_int1,3) = 0
 
33578
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
33579
ON DUPLICATE KEY
 
33580
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
33581
f_int2 = 2 * @max_row + source_tab.f_int1,
 
33582
f_charbig = 'was updated';
 
33583
        
 
33584
# check unique-1-a success:     1
 
33585
        
 
33586
# check unique-1-b success:     1
 
33587
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33588
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33589
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33590
f_charbig = CONCAT('===',f_char1,'===')
 
33591
WHERE f_charbig = 'was updated';
 
33592
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33593
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
33594
   FROM t0_template source_tab
 
33595
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33596
        
 
33597
# check replace success:        1
 
33598
DELETE FROM t1
 
33599
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
33600
DELETE FROM t1
 
33601
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
33602
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
33603
UPDATE t1 SET f_int2 = f_int1,
 
33604
f_char1 = CAST(f_int1 AS CHAR),
 
33605
f_char2 = CAST(f_int1 AS CHAR),
 
33606
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
33607
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
33608
SET AUTOCOMMIT= 0;
 
33609
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33610
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33611
FROM t0_template source_tab
 
33612
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33613
        
 
33614
# check transactions-1 success:         1
 
33615
COMMIT WORK;
 
33616
        
 
33617
# check transactions-2 success:         1
 
33618
ROLLBACK WORK;
 
33619
        
 
33620
# check transactions-3 success:         1
 
33621
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33622
COMMIT WORK;
 
33623
ROLLBACK WORK;
 
33624
        
 
33625
# check transactions-4 success:         1
 
33626
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33627
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33628
FROM t0_template source_tab
 
33629
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33630
        
 
33631
# check transactions-5 success:         1
 
33632
ROLLBACK WORK;
 
33633
        
 
33634
# check transactions-6 success:         1
 
33635
# INFO: Storage engine used for t1 seems to be transactional.
 
33636
COMMIT;
 
33637
        
 
33638
# check transactions-7 success:         1
 
33639
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33640
COMMIT WORK;
 
33641
SET @@session.sql_mode = 'traditional';
 
33642
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33643
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33644
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33645
'', '', 'was inserted' FROM t0_template
 
33646
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33647
ERROR 22012: Division by 0
 
33648
COMMIT;
 
33649
        
 
33650
# check transactions-8 success:         1
 
33651
# INFO: Storage engine used for t1 seems to be able to revert
 
33652
#       changes made by the failing statement.
 
33653
SET @@session.sql_mode = '';
 
33654
SET AUTOCOMMIT= 1;
 
33655
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33656
COMMIT WORK;
 
33657
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33658
        
 
33659
# check special-1 success:      1
 
33660
UPDATE t1 SET f_charbig = '';
 
33661
        
 
33662
# check special-2 success:      1
 
33663
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33664
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33665
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33666
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33667
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33668
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33669
'just inserted' FROM t0_template
 
33670
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33671
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33672
BEGIN
 
33673
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33674
f_charbig = 'updated by trigger'
 
33675
      WHERE f_int1 = new.f_int1;
 
33676
END|
 
33677
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33678
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33680
        
 
33681
# check trigger-1 success:      1
 
33682
DROP TRIGGER trg_1;
 
33683
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33684
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33685
f_charbig = 'just inserted'
 
33686
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33687
DELETE FROM t0_aux
 
33688
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33689
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33690
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33691
'just inserted' FROM t0_template
 
33692
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33693
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33694
BEGIN
 
33695
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33696
f_charbig = 'updated by trigger'
 
33697
      WHERE f_int1 = new.f_int1;
 
33698
END|
 
33699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33700
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33701
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33702
        
 
33703
# check trigger-2 success:      1
 
33704
DROP TRIGGER trg_1;
 
33705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33707
f_charbig = 'just inserted'
 
33708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33709
DELETE FROM t0_aux
 
33710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33711
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33712
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33713
'just inserted' FROM t0_template
 
33714
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33715
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33716
BEGIN
 
33717
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33718
f_charbig = 'updated by trigger'
 
33719
      WHERE f_int1 = new.f_int1;
 
33720
END|
 
33721
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33722
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33723
        
 
33724
# check trigger-3 success:      1
 
33725
DROP TRIGGER trg_1;
 
33726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33728
f_charbig = 'just inserted'
 
33729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33730
DELETE FROM t0_aux
 
33731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33734
'just inserted' FROM t0_template
 
33735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33736
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33737
BEGIN
 
33738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33739
f_charbig = 'updated by trigger'
 
33740
      WHERE f_int1 = - old.f_int1;
 
33741
END|
 
33742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33744
        
 
33745
# check trigger-4 success:      1
 
33746
DROP TRIGGER trg_1;
 
33747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33749
f_charbig = 'just inserted'
 
33750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33751
DELETE FROM t0_aux
 
33752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33755
'just inserted' FROM t0_template
 
33756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33757
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33758
BEGIN
 
33759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33760
f_charbig = 'updated by trigger'
 
33761
      WHERE f_int1 = new.f_int1;
 
33762
END|
 
33763
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33765
        
 
33766
# check trigger-5 success:      1
 
33767
DROP TRIGGER trg_1;
 
33768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33770
f_charbig = 'just inserted'
 
33771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33772
DELETE FROM t0_aux
 
33773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33776
'just inserted' FROM t0_template
 
33777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33778
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33779
BEGIN
 
33780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33781
f_charbig = 'updated by trigger'
 
33782
      WHERE f_int1 = - old.f_int1;
 
33783
END|
 
33784
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33786
        
 
33787
# check trigger-6 success:      1
 
33788
DROP TRIGGER trg_1;
 
33789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33791
f_charbig = 'just inserted'
 
33792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33793
DELETE FROM t0_aux
 
33794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33797
'just inserted' FROM t0_template
 
33798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33799
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33800
BEGIN
 
33801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33802
f_charbig = 'updated by trigger'
 
33803
      WHERE f_int1 = - old.f_int1;
 
33804
END|
 
33805
DELETE FROM t0_aux
 
33806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33807
        
 
33808
# check trigger-7 success:      1
 
33809
DROP TRIGGER trg_1;
 
33810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33812
f_charbig = 'just inserted'
 
33813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33814
DELETE FROM t0_aux
 
33815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33818
'just inserted' FROM t0_template
 
33819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33820
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33821
BEGIN
 
33822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33823
f_charbig = 'updated by trigger'
 
33824
      WHERE f_int1 = - old.f_int1;
 
33825
END|
 
33826
DELETE FROM t0_aux
 
33827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33828
        
 
33829
# check trigger-8 success:      1
 
33830
DROP TRIGGER trg_1;
 
33831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33833
f_charbig = 'just inserted'
 
33834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33835
DELETE FROM t0_aux
 
33836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33837
DELETE FROM t1
 
33838
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33839
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33840
BEGIN
 
33841
SET new.f_int1 = old.f_int1 + @max_row,
 
33842
new.f_int2 = old.f_int2 - @max_row,
 
33843
new.f_charbig = '####updated per update trigger####';
 
33844
END|
 
33845
UPDATE t1
 
33846
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33847
f_charbig = '####updated per update statement itself####';
 
33848
        
 
33849
# check trigger-9 success:      1
 
33850
DROP TRIGGER trg_2;
 
33851
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33852
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33853
f_charbig = CONCAT('===',f_char1,'===');
 
33854
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33855
BEGIN
 
33856
SET new.f_int1 = new.f_int1 + @max_row,
 
33857
new.f_int2 = new.f_int2 - @max_row,
 
33858
new.f_charbig = '####updated per update trigger####';
 
33859
END|
 
33860
UPDATE t1
 
33861
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33862
f_charbig = '####updated per update statement itself####';
 
33863
        
 
33864
# check trigger-10 success:     1
 
33865
DROP TRIGGER trg_2;
 
33866
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33867
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33868
f_charbig = CONCAT('===',f_char1,'===');
 
33869
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33870
BEGIN
 
33871
SET new.f_int1 = @my_max1 + @counter,
 
33872
new.f_int2 = @my_min2 - @counter,
 
33873
new.f_charbig = '####updated per insert trigger####';
 
33874
SET @counter = @counter + 1;
 
33875
END|
 
33876
SET @counter = 1;
 
33877
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33878
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33879
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33880
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33882
ORDER BY f_int1;
 
33883
DROP TRIGGER trg_3;
 
33884
        
 
33885
# check trigger-11 success:     1
 
33886
DELETE FROM t1
 
33887
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33888
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33889
AND f_charbig = '####updated per insert trigger####';
 
33890
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33891
BEGIN
 
33892
SET new.f_int1 = @my_max1 + @counter,
 
33893
new.f_int2 = @my_min2 - @counter,
 
33894
new.f_charbig = '####updated per insert trigger####';
 
33895
SET @counter = @counter + 1;
 
33896
END|
 
33897
SET @counter = 1;
 
33898
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33899
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33900
SELECT CAST(f_int1 AS CHAR),
 
33901
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33903
ORDER BY f_int1;
 
33904
DROP TRIGGER trg_3;
 
33905
        
 
33906
# check trigger-12 success:     1
 
33907
DELETE FROM t1
 
33908
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33909
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33910
AND f_charbig = '####updated per insert trigger####';
 
33911
ANALYZE  TABLE t1;
 
33912
Table   Op      Msg_type        Msg_text
 
33913
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
33914
CHECK    TABLE t1 EXTENDED;
 
33915
Table   Op      Msg_type        Msg_text
 
33916
test.t1 check   note    The storage engine for the table doesn't support check
 
33917
CHECKSUM TABLE t1 EXTENDED;
 
33918
Table   Checksum
 
33919
test.t1 <some_value>
 
33920
OPTIMIZE TABLE t1;
 
33921
Table   Op      Msg_type        Msg_text
 
33922
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
33923
# check layout success:    1
 
33924
REPAIR   TABLE t1 EXTENDED;
 
33925
Table   Op      Msg_type        Msg_text
 
33926
test.t1 repair  note    The storage engine for the table doesn't support repair
 
33927
# check layout success:    1
 
33928
TRUNCATE t1;
 
33929
        
 
33930
# check TRUNCATE success:       1
 
33931
# check layout success:    1
 
33932
# End usability test (inc/partition_check.inc)
 
33933
DROP TABLE t1;
 
33934
CREATE TABLE t1 (
 
33935
f_int1 INTEGER,
 
33936
f_int2 INTEGER,
 
33937
f_char1 CHAR(20),
 
33938
f_char2 CHAR(20),
 
33939
f_charbig VARCHAR(1000)
 
33940
 
 
33941
)
 
33942
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
33943
(PARTITION parta VALUES LESS THAN (0),
 
33944
PARTITION partb VALUES LESS THAN (5),
 
33945
PARTITION partc VALUES LESS THAN (10),
 
33946
PARTITION partd VALUES LESS THAN (10 + 5),
 
33947
PARTITION parte VALUES LESS THAN (20),
 
33948
PARTITION partf VALUES LESS THAN (2147483646));
 
33949
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33950
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33951
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33952
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
33953
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33954
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33955
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33956
# Start usability test (inc/partition_check.inc)
 
33957
create_command
 
33958
SHOW CREATE TABLE t1;
 
33959
Table   Create Table
 
33960
t1      CREATE TABLE `t1` (
 
33961
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
33962
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
33963
  `f_char1` char(20) DEFAULT NULL,
 
33964
  `f_char2` char(20) DEFAULT NULL,
 
33965
  `f_charbig` varchar(1000) DEFAULT NULL,
 
33966
  PRIMARY KEY (`f_int2`,`f_int1`),
 
33967
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
33968
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
33969
 
 
33970
# check prerequisites-1 success:    1
 
33971
# check COUNT(*) success:    1
 
33972
# check MIN/MAX(f_int1) success:    1
 
33973
# check MIN/MAX(f_int2) success:    1
 
33974
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33975
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33976
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33977
WHERE f_int1 IN (2,3);
 
33978
ERROR 23000: Can't write; duplicate key in table 't1'
 
33979
# check prerequisites-3 success:    1
 
33980
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
33981
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33982
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
33983
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
33984
WHERE f_int1 IN (2,3);
 
33985
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33986
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33987
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
33988
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
33989
WHERE f_int1 IN (2,3);
 
33990
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33991
# check read via f_int1 success: 1
 
33992
# check read via f_int2 success: 1
 
33993
        
 
33994
# check multiple-1 success:     1
 
33995
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33996
        
 
33997
# check multiple-2 success:     1
 
33998
INSERT INTO t1 SELECT * FROM t0_template
 
33999
WHERE MOD(f_int1,3) = 0;
 
34000
        
 
34001
# check multiple-3 success:     1
 
34002
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34003
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34004
AND @max_row_div2 + @max_row_div4;
 
34005
        
 
34006
# check multiple-4 success:     1
 
34007
DELETE FROM t1
 
34008
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34009
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34010
        
 
34011
# check multiple-5 success:     1
 
34012
SELECT COUNT(*) INTO @try_count FROM t0_template
 
34013
WHERE MOD(f_int1,3) = 0
 
34014
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34015
SELECT COUNT(*) INTO @clash_count
 
34016
FROM t1 INNER JOIN t0_template USING(f_int1)
 
34017
WHERE MOD(f_int1,3) = 0
 
34018
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34019
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34020
INSERT INTO t1
 
34021
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34022
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34023
f_charbig = '#SINGLE#';
 
34024
        
 
34025
# check single-1 success:       1
 
34026
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34027
INSERT INTO t1
 
34028
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34029
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34030
f_charbig = '#SINGLE#';
 
34031
        
 
34032
# check single-2 success:       1
 
34033
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34034
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34035
UPDATE t1 SET f_int1 = @cur_value2
 
34036
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34037
        
 
34038
# check single-3 success:       1
 
34039
SET @cur_value1= -1;
 
34040
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34041
UPDATE t1 SET f_int1 = @cur_value1
 
34042
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34043
        
 
34044
# check single-4 success:       1
 
34045
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34046
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34047
        
 
34048
# check single-5 success:       1
 
34049
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34050
        
 
34051
# check single-6 success:       1
 
34052
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34053
ERROR HY000: Table has no partition for value 2147483647
 
34054
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34055
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34056
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34057
f_charbig = '#NULL#';
 
34058
INSERT INTO t1
 
34059
SET f_int1 = NULL , f_int2 = -@max_row,
 
34060
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34061
f_charbig = '#NULL#';
 
34062
ERROR 23000: Column 'f_int1' cannot be null
 
34063
# check null success:    1
 
34064
DELETE FROM t1
 
34065
WHERE f_int1 = 0 AND f_int2 = 0
 
34066
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34067
AND f_charbig = '#NULL#';
 
34068
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34069
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34070
   FROM t0_template source_tab
 
34071
WHERE MOD(f_int1,3) = 0
 
34072
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
34073
ON DUPLICATE KEY
 
34074
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
34075
f_int2 = 2 * @max_row + source_tab.f_int1,
 
34076
f_charbig = 'was updated';
 
34077
        
 
34078
# check unique-1-a success:     1
 
34079
        
 
34080
# check unique-1-b success:     1
 
34081
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34082
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34083
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34084
f_charbig = CONCAT('===',f_char1,'===')
 
34085
WHERE f_charbig = 'was updated';
 
34086
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34087
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
34088
   FROM t0_template source_tab
 
34089
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34090
        
 
34091
# check replace success:        1
 
34092
DELETE FROM t1
 
34093
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
34094
DELETE FROM t1
 
34095
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
34096
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
34097
UPDATE t1 SET f_int2 = f_int1,
 
34098
f_char1 = CAST(f_int1 AS CHAR),
 
34099
f_char2 = CAST(f_int1 AS CHAR),
 
34100
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
34101
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
34102
SET AUTOCOMMIT= 0;
 
34103
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34104
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34105
FROM t0_template source_tab
 
34106
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34107
        
 
34108
# check transactions-1 success:         1
 
34109
COMMIT WORK;
 
34110
        
 
34111
# check transactions-2 success:         1
 
34112
ROLLBACK WORK;
 
34113
        
 
34114
# check transactions-3 success:         1
 
34115
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34116
COMMIT WORK;
 
34117
ROLLBACK WORK;
 
34118
        
 
34119
# check transactions-4 success:         1
 
34120
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34121
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34122
FROM t0_template source_tab
 
34123
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34124
        
 
34125
# check transactions-5 success:         1
 
34126
ROLLBACK WORK;
 
34127
        
 
34128
# check transactions-6 success:         1
 
34129
# INFO: Storage engine used for t1 seems to be transactional.
 
34130
COMMIT;
 
34131
        
 
34132
# check transactions-7 success:         1
 
34133
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34134
COMMIT WORK;
 
34135
SET @@session.sql_mode = 'traditional';
 
34136
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34137
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34138
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34139
'', '', 'was inserted' FROM t0_template
 
34140
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34141
ERROR 22012: Division by 0
 
34142
COMMIT;
 
34143
        
 
34144
# check transactions-8 success:         1
 
34145
# INFO: Storage engine used for t1 seems to be able to revert
 
34146
#       changes made by the failing statement.
 
34147
SET @@session.sql_mode = '';
 
34148
SET AUTOCOMMIT= 1;
 
34149
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34150
COMMIT WORK;
 
34151
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34152
        
 
34153
# check special-1 success:      1
 
34154
UPDATE t1 SET f_charbig = '';
 
34155
        
 
34156
# check special-2 success:      1
 
34157
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34158
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34159
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34161
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34162
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34163
'just inserted' FROM t0_template
 
34164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34165
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34166
BEGIN
 
34167
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34168
f_charbig = 'updated by trigger'
 
34169
      WHERE f_int1 = new.f_int1;
 
34170
END|
 
34171
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34172
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34173
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34174
        
 
34175
# check trigger-1 success:      1
 
34176
DROP TRIGGER trg_1;
 
34177
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34178
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34179
f_charbig = 'just inserted'
 
34180
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34181
DELETE FROM t0_aux
 
34182
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34183
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34184
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34185
'just inserted' FROM t0_template
 
34186
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34187
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34188
BEGIN
 
34189
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34190
f_charbig = 'updated by trigger'
 
34191
      WHERE f_int1 = new.f_int1;
 
34192
END|
 
34193
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34194
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34196
        
 
34197
# check trigger-2 success:      1
 
34198
DROP TRIGGER trg_1;
 
34199
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34200
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34201
f_charbig = 'just inserted'
 
34202
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34203
DELETE FROM t0_aux
 
34204
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34205
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34206
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34207
'just inserted' FROM t0_template
 
34208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34209
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34210
BEGIN
 
34211
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34212
f_charbig = 'updated by trigger'
 
34213
      WHERE f_int1 = new.f_int1;
 
34214
END|
 
34215
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34216
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34217
        
 
34218
# check trigger-3 success:      1
 
34219
DROP TRIGGER trg_1;
 
34220
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34221
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34222
f_charbig = 'just inserted'
 
34223
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34224
DELETE FROM t0_aux
 
34225
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34226
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34227
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34228
'just inserted' FROM t0_template
 
34229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34230
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34231
BEGIN
 
34232
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34233
f_charbig = 'updated by trigger'
 
34234
      WHERE f_int1 = - old.f_int1;
 
34235
END|
 
34236
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34237
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34238
        
 
34239
# check trigger-4 success:      1
 
34240
DROP TRIGGER trg_1;
 
34241
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34242
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34243
f_charbig = 'just inserted'
 
34244
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34245
DELETE FROM t0_aux
 
34246
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34248
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34249
'just inserted' FROM t0_template
 
34250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34251
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34252
BEGIN
 
34253
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34254
f_charbig = 'updated by trigger'
 
34255
      WHERE f_int1 = new.f_int1;
 
34256
END|
 
34257
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34258
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34259
        
 
34260
# check trigger-5 success:      1
 
34261
DROP TRIGGER trg_1;
 
34262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34264
f_charbig = 'just inserted'
 
34265
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34266
DELETE FROM t0_aux
 
34267
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34270
'just inserted' FROM t0_template
 
34271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34272
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34273
BEGIN
 
34274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34275
f_charbig = 'updated by trigger'
 
34276
      WHERE f_int1 = - old.f_int1;
 
34277
END|
 
34278
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34279
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34280
        
 
34281
# check trigger-6 success:      1
 
34282
DROP TRIGGER trg_1;
 
34283
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34284
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34285
f_charbig = 'just inserted'
 
34286
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34287
DELETE FROM t0_aux
 
34288
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34289
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34290
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34291
'just inserted' FROM t0_template
 
34292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34293
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34294
BEGIN
 
34295
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34296
f_charbig = 'updated by trigger'
 
34297
      WHERE f_int1 = - old.f_int1;
 
34298
END|
 
34299
DELETE FROM t0_aux
 
34300
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34301
        
 
34302
# check trigger-7 success:      1
 
34303
DROP TRIGGER trg_1;
 
34304
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34305
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34306
f_charbig = 'just inserted'
 
34307
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34308
DELETE FROM t0_aux
 
34309
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34310
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34311
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34312
'just inserted' FROM t0_template
 
34313
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34314
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34315
BEGIN
 
34316
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34317
f_charbig = 'updated by trigger'
 
34318
      WHERE f_int1 = - old.f_int1;
 
34319
END|
 
34320
DELETE FROM t0_aux
 
34321
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34322
        
 
34323
# check trigger-8 success:      1
 
34324
DROP TRIGGER trg_1;
 
34325
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34326
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34327
f_charbig = 'just inserted'
 
34328
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34329
DELETE FROM t0_aux
 
34330
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34331
DELETE FROM t1
 
34332
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34333
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34334
BEGIN
 
34335
SET new.f_int1 = old.f_int1 + @max_row,
 
34336
new.f_int2 = old.f_int2 - @max_row,
 
34337
new.f_charbig = '####updated per update trigger####';
 
34338
END|
 
34339
UPDATE t1
 
34340
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34341
f_charbig = '####updated per update statement itself####';
 
34342
        
 
34343
# check trigger-9 success:      1
 
34344
DROP TRIGGER trg_2;
 
34345
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34346
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34347
f_charbig = CONCAT('===',f_char1,'===');
 
34348
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34349
BEGIN
 
34350
SET new.f_int1 = new.f_int1 + @max_row,
 
34351
new.f_int2 = new.f_int2 - @max_row,
 
34352
new.f_charbig = '####updated per update trigger####';
 
34353
END|
 
34354
UPDATE t1
 
34355
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34356
f_charbig = '####updated per update statement itself####';
 
34357
        
 
34358
# check trigger-10 success:     1
 
34359
DROP TRIGGER trg_2;
 
34360
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34361
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34362
f_charbig = CONCAT('===',f_char1,'===');
 
34363
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34364
BEGIN
 
34365
SET new.f_int1 = @my_max1 + @counter,
 
34366
new.f_int2 = @my_min2 - @counter,
 
34367
new.f_charbig = '####updated per insert trigger####';
 
34368
SET @counter = @counter + 1;
 
34369
END|
 
34370
SET @counter = 1;
 
34371
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34372
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34373
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34374
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34375
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34376
ORDER BY f_int1;
 
34377
DROP TRIGGER trg_3;
 
34378
        
 
34379
# check trigger-11 success:     1
 
34380
DELETE FROM t1
 
34381
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34382
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34383
AND f_charbig = '####updated per insert trigger####';
 
34384
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34385
BEGIN
 
34386
SET new.f_int1 = @my_max1 + @counter,
 
34387
new.f_int2 = @my_min2 - @counter,
 
34388
new.f_charbig = '####updated per insert trigger####';
 
34389
SET @counter = @counter + 1;
 
34390
END|
 
34391
SET @counter = 1;
 
34392
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34393
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34394
SELECT CAST(f_int1 AS CHAR),
 
34395
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34396
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34397
ORDER BY f_int1;
 
34398
DROP TRIGGER trg_3;
 
34399
        
 
34400
# check trigger-12 success:     1
 
34401
DELETE FROM t1
 
34402
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34403
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34404
AND f_charbig = '####updated per insert trigger####';
 
34405
ANALYZE  TABLE t1;
 
34406
Table   Op      Msg_type        Msg_text
 
34407
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
34408
CHECK    TABLE t1 EXTENDED;
 
34409
Table   Op      Msg_type        Msg_text
 
34410
test.t1 check   note    The storage engine for the table doesn't support check
 
34411
CHECKSUM TABLE t1 EXTENDED;
 
34412
Table   Checksum
 
34413
test.t1 <some_value>
 
34414
OPTIMIZE TABLE t1;
 
34415
Table   Op      Msg_type        Msg_text
 
34416
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
34417
# check layout success:    1
 
34418
REPAIR   TABLE t1 EXTENDED;
 
34419
Table   Op      Msg_type        Msg_text
 
34420
test.t1 repair  note    The storage engine for the table doesn't support repair
 
34421
# check layout success:    1
 
34422
TRUNCATE t1;
 
34423
        
 
34424
# check TRUNCATE success:       1
 
34425
# check layout success:    1
 
34426
# End usability test (inc/partition_check.inc)
 
34427
DROP TABLE t1;
 
34428
CREATE TABLE t1 (
 
34429
f_int1 INTEGER,
 
34430
f_int2 INTEGER,
 
34431
f_char1 CHAR(20),
 
34432
f_char2 CHAR(20),
 
34433
f_charbig VARCHAR(1000)
 
34434
 
 
34435
)
 
34436
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
34437
(PARTITION parta VALUES LESS THAN (0),
 
34438
PARTITION partb VALUES LESS THAN (5),
 
34439
PARTITION partc VALUES LESS THAN (10),
 
34440
PARTITION partd VALUES LESS THAN (2147483646));
 
34441
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34442
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34443
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34444
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
34445
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34446
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34447
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34448
# Start usability test (inc/partition_check.inc)
 
34449
create_command
 
34450
SHOW CREATE TABLE t1;
 
34451
Table   Create Table
 
34452
t1      CREATE TABLE `t1` (
 
34453
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
34454
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
34455
  `f_char1` char(20) DEFAULT NULL,
 
34456
  `f_char2` char(20) DEFAULT NULL,
 
34457
  `f_charbig` varchar(1000) DEFAULT NULL,
 
34458
  PRIMARY KEY (`f_int2`,`f_int1`),
 
34459
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
34460
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
34461
 
 
34462
# check prerequisites-1 success:    1
 
34463
# check COUNT(*) success:    1
 
34464
# check MIN/MAX(f_int1) success:    1
 
34465
# check MIN/MAX(f_int2) success:    1
 
34466
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34467
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34468
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34469
WHERE f_int1 IN (2,3);
 
34470
ERROR 23000: Can't write; duplicate key in table 't1'
 
34471
# check prerequisites-3 success:    1
 
34472
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
34473
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34474
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
34475
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
34476
WHERE f_int1 IN (2,3);
 
34477
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34478
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34479
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
34480
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
34481
WHERE f_int1 IN (2,3);
 
34482
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34483
# check read via f_int1 success: 1
 
34484
# check read via f_int2 success: 1
 
34485
        
 
34486
# check multiple-1 success:     1
 
34487
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34488
        
 
34489
# check multiple-2 success:     1
 
34490
INSERT INTO t1 SELECT * FROM t0_template
 
34491
WHERE MOD(f_int1,3) = 0;
 
34492
        
 
34493
# check multiple-3 success:     1
 
34494
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34495
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34496
AND @max_row_div2 + @max_row_div4;
 
34497
        
 
34498
# check multiple-4 success:     1
 
34499
DELETE FROM t1
 
34500
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34501
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34502
        
 
34503
# check multiple-5 success:     1
 
34504
SELECT COUNT(*) INTO @try_count FROM t0_template
 
34505
WHERE MOD(f_int1,3) = 0
 
34506
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34507
SELECT COUNT(*) INTO @clash_count
 
34508
FROM t1 INNER JOIN t0_template USING(f_int1)
 
34509
WHERE MOD(f_int1,3) = 0
 
34510
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34511
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34512
INSERT INTO t1
 
34513
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34514
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34515
f_charbig = '#SINGLE#';
 
34516
        
 
34517
# check single-1 success:       1
 
34518
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34519
INSERT INTO t1
 
34520
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34521
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34522
f_charbig = '#SINGLE#';
 
34523
        
 
34524
# check single-2 success:       1
 
34525
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34526
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34527
UPDATE t1 SET f_int1 = @cur_value2
 
34528
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34529
        
 
34530
# check single-3 success:       1
 
34531
SET @cur_value1= -1;
 
34532
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34533
UPDATE t1 SET f_int1 = @cur_value1
 
34534
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34535
        
 
34536
# check single-4 success:       1
 
34537
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34538
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34539
        
 
34540
# check single-5 success:       1
 
34541
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34542
        
 
34543
# check single-6 success:       1
 
34544
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34545
ERROR HY000: Table has no partition for value 2147483647
 
34546
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34547
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34548
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34549
f_charbig = '#NULL#';
 
34550
INSERT INTO t1
 
34551
SET f_int1 = NULL , f_int2 = -@max_row,
 
34552
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34553
f_charbig = '#NULL#';
 
34554
ERROR 23000: Column 'f_int1' cannot be null
 
34555
# check null success:    1
 
34556
DELETE FROM t1
 
34557
WHERE f_int1 = 0 AND f_int2 = 0
 
34558
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34559
AND f_charbig = '#NULL#';
 
34560
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34561
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34562
   FROM t0_template source_tab
 
34563
WHERE MOD(f_int1,3) = 0
 
34564
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
34565
ON DUPLICATE KEY
 
34566
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
34567
f_int2 = 2 * @max_row + source_tab.f_int1,
 
34568
f_charbig = 'was updated';
 
34569
        
 
34570
# check unique-1-a success:     1
 
34571
        
 
34572
# check unique-1-b success:     1
 
34573
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34574
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34575
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34576
f_charbig = CONCAT('===',f_char1,'===')
 
34577
WHERE f_charbig = 'was updated';
 
34578
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34579
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
34580
   FROM t0_template source_tab
 
34581
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34582
        
 
34583
# check replace success:        1
 
34584
DELETE FROM t1
 
34585
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
34586
DELETE FROM t1
 
34587
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
34588
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
34589
UPDATE t1 SET f_int2 = f_int1,
 
34590
f_char1 = CAST(f_int1 AS CHAR),
 
34591
f_char2 = CAST(f_int1 AS CHAR),
 
34592
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
34593
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
34594
SET AUTOCOMMIT= 0;
 
34595
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34596
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34597
FROM t0_template source_tab
 
34598
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34599
        
 
34600
# check transactions-1 success:         1
 
34601
COMMIT WORK;
 
34602
        
 
34603
# check transactions-2 success:         1
 
34604
ROLLBACK WORK;
 
34605
        
 
34606
# check transactions-3 success:         1
 
34607
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34608
COMMIT WORK;
 
34609
ROLLBACK WORK;
 
34610
        
 
34611
# check transactions-4 success:         1
 
34612
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34613
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34614
FROM t0_template source_tab
 
34615
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34616
        
 
34617
# check transactions-5 success:         1
 
34618
ROLLBACK WORK;
 
34619
        
 
34620
# check transactions-6 success:         1
 
34621
# INFO: Storage engine used for t1 seems to be transactional.
 
34622
COMMIT;
 
34623
        
 
34624
# check transactions-7 success:         1
 
34625
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34626
COMMIT WORK;
 
34627
SET @@session.sql_mode = 'traditional';
 
34628
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34629
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34630
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34631
'', '', 'was inserted' FROM t0_template
 
34632
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34633
ERROR 22012: Division by 0
 
34634
COMMIT;
 
34635
        
 
34636
# check transactions-8 success:         1
 
34637
# INFO: Storage engine used for t1 seems to be able to revert
 
34638
#       changes made by the failing statement.
 
34639
SET @@session.sql_mode = '';
 
34640
SET AUTOCOMMIT= 1;
 
34641
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34642
COMMIT WORK;
 
34643
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34644
        
 
34645
# check special-1 success:      1
 
34646
UPDATE t1 SET f_charbig = '';
 
34647
        
 
34648
# check special-2 success:      1
 
34649
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34650
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34651
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34652
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34653
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34654
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34655
'just inserted' FROM t0_template
 
34656
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34657
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34658
BEGIN
 
34659
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34660
f_charbig = 'updated by trigger'
 
34661
      WHERE f_int1 = new.f_int1;
 
34662
END|
 
34663
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34664
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34666
        
 
34667
# check trigger-1 success:      1
 
34668
DROP TRIGGER trg_1;
 
34669
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34670
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34671
f_charbig = 'just inserted'
 
34672
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34673
DELETE FROM t0_aux
 
34674
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34675
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34676
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34677
'just inserted' FROM t0_template
 
34678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34679
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34680
BEGIN
 
34681
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34682
f_charbig = 'updated by trigger'
 
34683
      WHERE f_int1 = new.f_int1;
 
34684
END|
 
34685
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34686
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34688
        
 
34689
# check trigger-2 success:      1
 
34690
DROP TRIGGER trg_1;
 
34691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34693
f_charbig = 'just inserted'
 
34694
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34695
DELETE FROM t0_aux
 
34696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34699
'just inserted' FROM t0_template
 
34700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34701
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34702
BEGIN
 
34703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34704
f_charbig = 'updated by trigger'
 
34705
      WHERE f_int1 = new.f_int1;
 
34706
END|
 
34707
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34709
        
 
34710
# check trigger-3 success:      1
 
34711
DROP TRIGGER trg_1;
 
34712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34714
f_charbig = 'just inserted'
 
34715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34716
DELETE FROM t0_aux
 
34717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34720
'just inserted' FROM t0_template
 
34721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34722
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34723
BEGIN
 
34724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34725
f_charbig = 'updated by trigger'
 
34726
      WHERE f_int1 = - old.f_int1;
 
34727
END|
 
34728
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34730
        
 
34731
# check trigger-4 success:      1
 
34732
DROP TRIGGER trg_1;
 
34733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34735
f_charbig = 'just inserted'
 
34736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34737
DELETE FROM t0_aux
 
34738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34741
'just inserted' FROM t0_template
 
34742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34743
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34744
BEGIN
 
34745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34746
f_charbig = 'updated by trigger'
 
34747
      WHERE f_int1 = new.f_int1;
 
34748
END|
 
34749
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34750
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34751
        
 
34752
# check trigger-5 success:      1
 
34753
DROP TRIGGER trg_1;
 
34754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34756
f_charbig = 'just inserted'
 
34757
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34758
DELETE FROM t0_aux
 
34759
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34760
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34761
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34762
'just inserted' FROM t0_template
 
34763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34764
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34765
BEGIN
 
34766
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34767
f_charbig = 'updated by trigger'
 
34768
      WHERE f_int1 = - old.f_int1;
 
34769
END|
 
34770
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34771
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34772
        
 
34773
# check trigger-6 success:      1
 
34774
DROP TRIGGER trg_1;
 
34775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34777
f_charbig = 'just inserted'
 
34778
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34779
DELETE FROM t0_aux
 
34780
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34781
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34782
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34783
'just inserted' FROM t0_template
 
34784
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34785
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34786
BEGIN
 
34787
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34788
f_charbig = 'updated by trigger'
 
34789
      WHERE f_int1 = - old.f_int1;
 
34790
END|
 
34791
DELETE FROM t0_aux
 
34792
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34793
        
 
34794
# check trigger-7 success:      1
 
34795
DROP TRIGGER trg_1;
 
34796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34798
f_charbig = 'just inserted'
 
34799
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34800
DELETE FROM t0_aux
 
34801
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34803
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34804
'just inserted' FROM t0_template
 
34805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34806
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34807
BEGIN
 
34808
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34809
f_charbig = 'updated by trigger'
 
34810
      WHERE f_int1 = - old.f_int1;
 
34811
END|
 
34812
DELETE FROM t0_aux
 
34813
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34814
        
 
34815
# check trigger-8 success:      1
 
34816
DROP TRIGGER trg_1;
 
34817
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34818
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34819
f_charbig = 'just inserted'
 
34820
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34821
DELETE FROM t0_aux
 
34822
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34823
DELETE FROM t1
 
34824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34825
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34826
BEGIN
 
34827
SET new.f_int1 = old.f_int1 + @max_row,
 
34828
new.f_int2 = old.f_int2 - @max_row,
 
34829
new.f_charbig = '####updated per update trigger####';
 
34830
END|
 
34831
UPDATE t1
 
34832
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34833
f_charbig = '####updated per update statement itself####';
 
34834
        
 
34835
# check trigger-9 success:      1
 
34836
DROP TRIGGER trg_2;
 
34837
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34838
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34839
f_charbig = CONCAT('===',f_char1,'===');
 
34840
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34841
BEGIN
 
34842
SET new.f_int1 = new.f_int1 + @max_row,
 
34843
new.f_int2 = new.f_int2 - @max_row,
 
34844
new.f_charbig = '####updated per update trigger####';
 
34845
END|
 
34846
UPDATE t1
 
34847
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34848
f_charbig = '####updated per update statement itself####';
 
34849
        
 
34850
# check trigger-10 success:     1
 
34851
DROP TRIGGER trg_2;
 
34852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34854
f_charbig = CONCAT('===',f_char1,'===');
 
34855
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34856
BEGIN
 
34857
SET new.f_int1 = @my_max1 + @counter,
 
34858
new.f_int2 = @my_min2 - @counter,
 
34859
new.f_charbig = '####updated per insert trigger####';
 
34860
SET @counter = @counter + 1;
 
34861
END|
 
34862
SET @counter = 1;
 
34863
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34864
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34865
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34866
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34868
ORDER BY f_int1;
 
34869
DROP TRIGGER trg_3;
 
34870
        
 
34871
# check trigger-11 success:     1
 
34872
DELETE FROM t1
 
34873
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34874
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34875
AND f_charbig = '####updated per insert trigger####';
 
34876
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34877
BEGIN
 
34878
SET new.f_int1 = @my_max1 + @counter,
 
34879
new.f_int2 = @my_min2 - @counter,
 
34880
new.f_charbig = '####updated per insert trigger####';
 
34881
SET @counter = @counter + 1;
 
34882
END|
 
34883
SET @counter = 1;
 
34884
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34885
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34886
SELECT CAST(f_int1 AS CHAR),
 
34887
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34888
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34889
ORDER BY f_int1;
 
34890
DROP TRIGGER trg_3;
 
34891
        
 
34892
# check trigger-12 success:     1
 
34893
DELETE FROM t1
 
34894
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34895
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34896
AND f_charbig = '####updated per insert trigger####';
 
34897
ANALYZE  TABLE t1;
 
34898
Table   Op      Msg_type        Msg_text
 
34899
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
34900
CHECK    TABLE t1 EXTENDED;
 
34901
Table   Op      Msg_type        Msg_text
 
34902
test.t1 check   note    The storage engine for the table doesn't support check
 
34903
CHECKSUM TABLE t1 EXTENDED;
 
34904
Table   Checksum
 
34905
test.t1 <some_value>
 
34906
OPTIMIZE TABLE t1;
 
34907
Table   Op      Msg_type        Msg_text
 
34908
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
34909
# check layout success:    1
 
34910
REPAIR   TABLE t1 EXTENDED;
 
34911
Table   Op      Msg_type        Msg_text
 
34912
test.t1 repair  note    The storage engine for the table doesn't support repair
 
34913
# check layout success:    1
 
34914
TRUNCATE t1;
 
34915
        
 
34916
# check TRUNCATE success:       1
 
34917
# check layout success:    1
 
34918
# End usability test (inc/partition_check.inc)
 
34919
DROP TABLE t1;
 
34920
CREATE TABLE t1 (
 
34921
f_int1 INTEGER,
 
34922
f_int2 INTEGER,
 
34923
f_char1 CHAR(20),
 
34924
f_char2 CHAR(20),
 
34925
f_charbig VARCHAR(1000)
 
34926
 
 
34927
)
 
34928
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
34929
(PARTITION part1 VALUES LESS THAN (0)
 
34930
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
34931
PARTITION part2 VALUES LESS THAN (5)
 
34932
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
34933
PARTITION part3 VALUES LESS THAN (10)
 
34934
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
34935
PARTITION part4 VALUES LESS THAN (2147483646)
 
34936
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
34937
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34938
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34939
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34940
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
34941
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34942
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34943
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34944
# Start usability test (inc/partition_check.inc)
 
34945
create_command
 
34946
SHOW CREATE TABLE t1;
 
34947
Table   Create Table
 
34948
t1      CREATE TABLE `t1` (
 
34949
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
34950
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
34951
  `f_char1` char(20) DEFAULT NULL,
 
34952
  `f_char2` char(20) DEFAULT NULL,
 
34953
  `f_charbig` varchar(1000) DEFAULT NULL,
 
34954
  PRIMARY KEY (`f_int2`,`f_int1`),
 
34955
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
34956
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
34957
 
 
34958
# check prerequisites-1 success:    1
 
34959
# check COUNT(*) success:    1
 
34960
# check MIN/MAX(f_int1) success:    1
 
34961
# check MIN/MAX(f_int2) success:    1
 
34962
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34963
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34964
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34965
WHERE f_int1 IN (2,3);
 
34966
ERROR 23000: Can't write; duplicate key in table 't1'
 
34967
# check prerequisites-3 success:    1
 
34968
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
34969
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34970
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
34971
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
34972
WHERE f_int1 IN (2,3);
 
34973
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34974
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34975
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
34976
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
34977
WHERE f_int1 IN (2,3);
 
34978
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34979
# check read via f_int1 success: 1
 
34980
# check read via f_int2 success: 1
 
34981
        
 
34982
# check multiple-1 success:     1
 
34983
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34984
        
 
34985
# check multiple-2 success:     1
 
34986
INSERT INTO t1 SELECT * FROM t0_template
 
34987
WHERE MOD(f_int1,3) = 0;
 
34988
        
 
34989
# check multiple-3 success:     1
 
34990
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34991
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34992
AND @max_row_div2 + @max_row_div4;
 
34993
        
 
34994
# check multiple-4 success:     1
 
34995
DELETE FROM t1
 
34996
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34997
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34998
        
 
34999
# check multiple-5 success:     1
 
35000
SELECT COUNT(*) INTO @try_count FROM t0_template
 
35001
WHERE MOD(f_int1,3) = 0
 
35002
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35003
SELECT COUNT(*) INTO @clash_count
 
35004
FROM t1 INNER JOIN t0_template USING(f_int1)
 
35005
WHERE MOD(f_int1,3) = 0
 
35006
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35007
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
35008
INSERT INTO t1
 
35009
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35010
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35011
f_charbig = '#SINGLE#';
 
35012
        
 
35013
# check single-1 success:       1
 
35014
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
35015
INSERT INTO t1
 
35016
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35017
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35018
f_charbig = '#SINGLE#';
 
35019
        
 
35020
# check single-2 success:       1
 
35021
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
35022
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
35023
UPDATE t1 SET f_int1 = @cur_value2
 
35024
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
35025
        
 
35026
# check single-3 success:       1
 
35027
SET @cur_value1= -1;
 
35028
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
35029
UPDATE t1 SET f_int1 = @cur_value1
 
35030
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
35031
        
 
35032
# check single-4 success:       1
 
35033
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
35034
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
35035
        
 
35036
# check single-5 success:       1
 
35037
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
35038
        
 
35039
# check single-6 success:       1
 
35040
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
35041
ERROR HY000: Table has no partition for value 2147483647
 
35042
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
35043
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
35044
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
35045
f_charbig = '#NULL#';
 
35046
INSERT INTO t1
 
35047
SET f_int1 = NULL , f_int2 = -@max_row,
 
35048
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
35049
f_charbig = '#NULL#';
 
35050
ERROR 23000: Column 'f_int1' cannot be null
 
35051
# check null success:    1
 
35052
DELETE FROM t1
 
35053
WHERE f_int1 = 0 AND f_int2 = 0
 
35054
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
35055
AND f_charbig = '#NULL#';
 
35056
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35057
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35058
   FROM t0_template source_tab
 
35059
WHERE MOD(f_int1,3) = 0
 
35060
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
35061
ON DUPLICATE KEY
 
35062
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
35063
f_int2 = 2 * @max_row + source_tab.f_int1,
 
35064
f_charbig = 'was updated';
 
35065
        
 
35066
# check unique-1-a success:     1
 
35067
        
 
35068
# check unique-1-b success:     1
 
35069
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35070
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35071
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35072
f_charbig = CONCAT('===',f_char1,'===')
 
35073
WHERE f_charbig = 'was updated';
 
35074
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35075
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
35076
   FROM t0_template source_tab
 
35077
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35078
        
 
35079
# check replace success:        1
 
35080
DELETE FROM t1
 
35081
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
35082
DELETE FROM t1
 
35083
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
35084
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
35085
UPDATE t1 SET f_int2 = f_int1,
 
35086
f_char1 = CAST(f_int1 AS CHAR),
 
35087
f_char2 = CAST(f_int1 AS CHAR),
 
35088
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
35089
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
35090
SET AUTOCOMMIT= 0;
 
35091
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35092
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35093
FROM t0_template source_tab
 
35094
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35095
        
 
35096
# check transactions-1 success:         1
 
35097
COMMIT WORK;
 
35098
        
 
35099
# check transactions-2 success:         1
 
35100
ROLLBACK WORK;
 
35101
        
 
35102
# check transactions-3 success:         1
 
35103
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35104
COMMIT WORK;
 
35105
ROLLBACK WORK;
 
35106
        
 
35107
# check transactions-4 success:         1
 
35108
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35109
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35110
FROM t0_template source_tab
 
35111
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35112
        
 
35113
# check transactions-5 success:         1
 
35114
ROLLBACK WORK;
 
35115
        
 
35116
# check transactions-6 success:         1
 
35117
# INFO: Storage engine used for t1 seems to be transactional.
 
35118
COMMIT;
 
35119
        
 
35120
# check transactions-7 success:         1
 
35121
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35122
COMMIT WORK;
 
35123
SET @@session.sql_mode = 'traditional';
 
35124
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
35125
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35126
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
35127
'', '', 'was inserted' FROM t0_template
 
35128
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35129
ERROR 22012: Division by 0
 
35130
COMMIT;
 
35131
        
 
35132
# check transactions-8 success:         1
 
35133
# INFO: Storage engine used for t1 seems to be able to revert
 
35134
#       changes made by the failing statement.
 
35135
SET @@session.sql_mode = '';
 
35136
SET AUTOCOMMIT= 1;
 
35137
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35138
COMMIT WORK;
 
35139
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
35140
        
 
35141
# check special-1 success:      1
 
35142
UPDATE t1 SET f_charbig = '';
 
35143
        
 
35144
# check special-2 success:      1
 
35145
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
35146
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35147
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
35148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35149
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35150
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35151
'just inserted' FROM t0_template
 
35152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35153
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
35154
BEGIN
 
35155
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35156
f_charbig = 'updated by trigger'
 
35157
      WHERE f_int1 = new.f_int1;
 
35158
END|
 
35159
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35160
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35162
        
 
35163
# check trigger-1 success:      1
 
35164
DROP TRIGGER trg_1;
 
35165
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35166
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35167
f_charbig = 'just inserted'
 
35168
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35169
DELETE FROM t0_aux
 
35170
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35171
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35172
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35173
'just inserted' FROM t0_template
 
35174
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35175
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
35176
BEGIN
 
35177
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35178
f_charbig = 'updated by trigger'
 
35179
      WHERE f_int1 = new.f_int1;
 
35180
END|
 
35181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35182
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35184
        
 
35185
# check trigger-2 success:      1
 
35186
DROP TRIGGER trg_1;
 
35187
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35188
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35189
f_charbig = 'just inserted'
 
35190
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35191
DELETE FROM t0_aux
 
35192
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35193
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35194
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35195
'just inserted' FROM t0_template
 
35196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35197
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35198
BEGIN
 
35199
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35200
f_charbig = 'updated by trigger'
 
35201
      WHERE f_int1 = new.f_int1;
 
35202
END|
 
35203
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35204
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35205
        
 
35206
# check trigger-3 success:      1
 
35207
DROP TRIGGER trg_1;
 
35208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35210
f_charbig = 'just inserted'
 
35211
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35212
DELETE FROM t0_aux
 
35213
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35214
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35215
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35216
'just inserted' FROM t0_template
 
35217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35218
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35219
BEGIN
 
35220
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35221
f_charbig = 'updated by trigger'
 
35222
      WHERE f_int1 = - old.f_int1;
 
35223
END|
 
35224
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35225
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35226
        
 
35227
# check trigger-4 success:      1
 
35228
DROP TRIGGER trg_1;
 
35229
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35230
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35231
f_charbig = 'just inserted'
 
35232
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35233
DELETE FROM t0_aux
 
35234
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35235
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35236
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35237
'just inserted' FROM t0_template
 
35238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35239
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35240
BEGIN
 
35241
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35242
f_charbig = 'updated by trigger'
 
35243
      WHERE f_int1 = new.f_int1;
 
35244
END|
 
35245
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35246
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35247
        
 
35248
# check trigger-5 success:      1
 
35249
DROP TRIGGER trg_1;
 
35250
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35251
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35252
f_charbig = 'just inserted'
 
35253
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35254
DELETE FROM t0_aux
 
35255
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35257
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35258
'just inserted' FROM t0_template
 
35259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35260
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35261
BEGIN
 
35262
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35263
f_charbig = 'updated by trigger'
 
35264
      WHERE f_int1 = - old.f_int1;
 
35265
END|
 
35266
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35267
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35268
        
 
35269
# check trigger-6 success:      1
 
35270
DROP TRIGGER trg_1;
 
35271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35272
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35273
f_charbig = 'just inserted'
 
35274
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35275
DELETE FROM t0_aux
 
35276
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35278
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35279
'just inserted' FROM t0_template
 
35280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35281
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
35282
BEGIN
 
35283
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35284
f_charbig = 'updated by trigger'
 
35285
      WHERE f_int1 = - old.f_int1;
 
35286
END|
 
35287
DELETE FROM t0_aux
 
35288
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35289
        
 
35290
# check trigger-7 success:      1
 
35291
DROP TRIGGER trg_1;
 
35292
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35293
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35294
f_charbig = 'just inserted'
 
35295
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35296
DELETE FROM t0_aux
 
35297
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35298
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35299
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35300
'just inserted' FROM t0_template
 
35301
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35302
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
35303
BEGIN
 
35304
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35305
f_charbig = 'updated by trigger'
 
35306
      WHERE f_int1 = - old.f_int1;
 
35307
END|
 
35308
DELETE FROM t0_aux
 
35309
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35310
        
 
35311
# check trigger-8 success:      1
 
35312
DROP TRIGGER trg_1;
 
35313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35315
f_charbig = 'just inserted'
 
35316
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35317
DELETE FROM t0_aux
 
35318
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35319
DELETE FROM t1
 
35320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35321
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35322
BEGIN
 
35323
SET new.f_int1 = old.f_int1 + @max_row,
 
35324
new.f_int2 = old.f_int2 - @max_row,
 
35325
new.f_charbig = '####updated per update trigger####';
 
35326
END|
 
35327
UPDATE t1
 
35328
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35329
f_charbig = '####updated per update statement itself####';
 
35330
        
 
35331
# check trigger-9 success:      1
 
35332
DROP TRIGGER trg_2;
 
35333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35334
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35335
f_charbig = CONCAT('===',f_char1,'===');
 
35336
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35337
BEGIN
 
35338
SET new.f_int1 = new.f_int1 + @max_row,
 
35339
new.f_int2 = new.f_int2 - @max_row,
 
35340
new.f_charbig = '####updated per update trigger####';
 
35341
END|
 
35342
UPDATE t1
 
35343
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35344
f_charbig = '####updated per update statement itself####';
 
35345
        
 
35346
# check trigger-10 success:     1
 
35347
DROP TRIGGER trg_2;
 
35348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35350
f_charbig = CONCAT('===',f_char1,'===');
 
35351
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35352
BEGIN
 
35353
SET new.f_int1 = @my_max1 + @counter,
 
35354
new.f_int2 = @my_min2 - @counter,
 
35355
new.f_charbig = '####updated per insert trigger####';
 
35356
SET @counter = @counter + 1;
 
35357
END|
 
35358
SET @counter = 1;
 
35359
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35361
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35362
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35364
ORDER BY f_int1;
 
35365
DROP TRIGGER trg_3;
 
35366
        
 
35367
# check trigger-11 success:     1
 
35368
DELETE FROM t1
 
35369
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35370
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35371
AND f_charbig = '####updated per insert trigger####';
 
35372
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35373
BEGIN
 
35374
SET new.f_int1 = @my_max1 + @counter,
 
35375
new.f_int2 = @my_min2 - @counter,
 
35376
new.f_charbig = '####updated per insert trigger####';
 
35377
SET @counter = @counter + 1;
 
35378
END|
 
35379
SET @counter = 1;
 
35380
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35381
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
35382
SELECT CAST(f_int1 AS CHAR),
 
35383
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35385
ORDER BY f_int1;
 
35386
DROP TRIGGER trg_3;
 
35387
        
 
35388
# check trigger-12 success:     1
 
35389
DELETE FROM t1
 
35390
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35391
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35392
AND f_charbig = '####updated per insert trigger####';
 
35393
ANALYZE  TABLE t1;
 
35394
Table   Op      Msg_type        Msg_text
 
35395
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
35396
CHECK    TABLE t1 EXTENDED;
 
35397
Table   Op      Msg_type        Msg_text
 
35398
test.t1 check   note    The storage engine for the table doesn't support check
 
35399
CHECKSUM TABLE t1 EXTENDED;
 
35400
Table   Checksum
 
35401
test.t1 <some_value>
 
35402
OPTIMIZE TABLE t1;
 
35403
Table   Op      Msg_type        Msg_text
 
35404
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
35405
# check layout success:    1
 
35406
REPAIR   TABLE t1 EXTENDED;
 
35407
Table   Op      Msg_type        Msg_text
 
35408
test.t1 repair  note    The storage engine for the table doesn't support repair
 
35409
# check layout success:    1
 
35410
TRUNCATE t1;
 
35411
        
 
35412
# check TRUNCATE success:       1
 
35413
# check layout success:    1
 
35414
# End usability test (inc/partition_check.inc)
 
35415
DROP TABLE t1;
 
35416
CREATE TABLE t1 (
 
35417
f_int1 INTEGER,
 
35418
f_int2 INTEGER,
 
35419
f_char1 CHAR(20),
 
35420
f_char2 CHAR(20),
 
35421
f_charbig VARCHAR(1000)
 
35422
 
 
35423
)
 
35424
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
35425
(PARTITION part1 VALUES IN (0)
 
35426
(SUBPARTITION sp11, SUBPARTITION sp12),
 
35427
PARTITION part2 VALUES IN (1)
 
35428
(SUBPARTITION sp21, SUBPARTITION sp22),
 
35429
PARTITION part3 VALUES IN (2)
 
35430
(SUBPARTITION sp31, SUBPARTITION sp32),
 
35431
PARTITION part4 VALUES IN (NULL)
 
35432
(SUBPARTITION sp41, SUBPARTITION sp42));
 
35433
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35434
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35435
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
35436
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
35437
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35438
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35439
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35440
# Start usability test (inc/partition_check.inc)
 
35441
create_command
 
35442
SHOW CREATE TABLE t1;
 
35443
Table   Create Table
 
35444
t1      CREATE TABLE `t1` (
 
35445
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
35446
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
35447
  `f_char1` char(20) DEFAULT NULL,
 
35448
  `f_char2` char(20) DEFAULT NULL,
 
35449
  `f_charbig` varchar(1000) DEFAULT NULL,
 
35450
  PRIMARY KEY (`f_int2`,`f_int1`),
 
35451
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
35452
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
35453
 
 
35454
# check prerequisites-1 success:    1
 
35455
# check COUNT(*) success:    1
 
35456
# check MIN/MAX(f_int1) success:    1
 
35457
# check MIN/MAX(f_int2) success:    1
 
35458
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35459
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35460
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
35461
WHERE f_int1 IN (2,3);
 
35462
ERROR 23000: Can't write; duplicate key in table 't1'
 
35463
# check prerequisites-3 success:    1
 
35464
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
35465
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35466
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
35467
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
35468
WHERE f_int1 IN (2,3);
 
35469
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35470
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35471
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
35472
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
35473
WHERE f_int1 IN (2,3);
 
35474
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35475
# check read via f_int1 success: 1
 
35476
# check read via f_int2 success: 1
 
35477
        
 
35478
# check multiple-1 success:     1
 
35479
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
35480
        
 
35481
# check multiple-2 success:     1
 
35482
INSERT INTO t1 SELECT * FROM t0_template
 
35483
WHERE MOD(f_int1,3) = 0;
 
35484
        
 
35485
# check multiple-3 success:     1
 
35486
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
35487
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
35488
AND @max_row_div2 + @max_row_div4;
 
35489
        
 
35490
# check multiple-4 success:     1
 
35491
DELETE FROM t1
 
35492
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
35493
AND @max_row_div2 + @max_row_div4 + @max_row;
 
35494
        
 
35495
# check multiple-5 success:     1
 
35496
SELECT COUNT(*) INTO @try_count FROM t0_template
 
35497
WHERE MOD(f_int1,3) = 0
 
35498
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35499
SELECT COUNT(*) INTO @clash_count
 
35500
FROM t1 INNER JOIN t0_template USING(f_int1)
 
35501
WHERE MOD(f_int1,3) = 0
 
35502
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35503
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
35504
INSERT INTO t1
 
35505
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35506
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35507
f_charbig = '#SINGLE#';
 
35508
        
 
35509
# check single-1 success:       1
 
35510
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
35511
INSERT INTO t1
 
35512
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35513
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35514
f_charbig = '#SINGLE#';
 
35515
        
 
35516
# check single-2 success:       1
 
35517
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
35518
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
35519
UPDATE t1 SET f_int1 = @cur_value2
 
35520
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
35521
        
 
35522
# check single-3 success:       1
 
35523
SET @cur_value1= -1;
 
35524
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
35525
UPDATE t1 SET f_int1 = @cur_value1
 
35526
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
35527
        
 
35528
# check single-4 success:       1
 
35529
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
35530
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
35531
        
 
35532
# check single-5 success:       1
 
35533
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
35534
        
 
35535
# check single-6 success:       1
 
35536
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
35537
        
 
35538
# check single-7 success:       1
 
35539
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
35540
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
35541
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
35542
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
35543
f_charbig = '#NULL#';
 
35544
INSERT INTO t1
 
35545
SET f_int1 = NULL , f_int2 = -@max_row,
 
35546
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
35547
f_charbig = '#NULL#';
 
35548
ERROR 23000: Column 'f_int1' cannot be null
 
35549
# check null success:    1
 
35550
DELETE FROM t1
 
35551
WHERE f_int1 = 0 AND f_int2 = 0
 
35552
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
35553
AND f_charbig = '#NULL#';
 
35554
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35555
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35556
   FROM t0_template source_tab
 
35557
WHERE MOD(f_int1,3) = 0
 
35558
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
35559
ON DUPLICATE KEY
 
35560
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
35561
f_int2 = 2 * @max_row + source_tab.f_int1,
 
35562
f_charbig = 'was updated';
 
35563
        
 
35564
# check unique-1-a success:     1
 
35565
        
 
35566
# check unique-1-b success:     1
 
35567
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35570
f_charbig = CONCAT('===',f_char1,'===')
 
35571
WHERE f_charbig = 'was updated';
 
35572
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35573
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
35574
   FROM t0_template source_tab
 
35575
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35576
        
 
35577
# check replace success:        1
 
35578
DELETE FROM t1
 
35579
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
35580
DELETE FROM t1
 
35581
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
35582
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
35583
UPDATE t1 SET f_int2 = f_int1,
 
35584
f_char1 = CAST(f_int1 AS CHAR),
 
35585
f_char2 = CAST(f_int1 AS CHAR),
 
35586
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
35587
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
35588
SET AUTOCOMMIT= 0;
 
35589
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35590
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35591
FROM t0_template source_tab
 
35592
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35593
        
 
35594
# check transactions-1 success:         1
 
35595
COMMIT WORK;
 
35596
        
 
35597
# check transactions-2 success:         1
 
35598
ROLLBACK WORK;
 
35599
        
 
35600
# check transactions-3 success:         1
 
35601
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35602
COMMIT WORK;
 
35603
ROLLBACK WORK;
 
35604
        
 
35605
# check transactions-4 success:         1
 
35606
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35607
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35608
FROM t0_template source_tab
 
35609
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35610
        
 
35611
# check transactions-5 success:         1
 
35612
ROLLBACK WORK;
 
35613
        
 
35614
# check transactions-6 success:         1
 
35615
# INFO: Storage engine used for t1 seems to be transactional.
 
35616
COMMIT;
 
35617
        
 
35618
# check transactions-7 success:         1
 
35619
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35620
COMMIT WORK;
 
35621
SET @@session.sql_mode = 'traditional';
 
35622
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
35623
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35624
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
35625
'', '', 'was inserted' FROM t0_template
 
35626
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35627
ERROR 22012: Division by 0
 
35628
COMMIT;
 
35629
        
 
35630
# check transactions-8 success:         1
 
35631
# INFO: Storage engine used for t1 seems to be able to revert
 
35632
#       changes made by the failing statement.
 
35633
SET @@session.sql_mode = '';
 
35634
SET AUTOCOMMIT= 1;
 
35635
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35636
COMMIT WORK;
 
35637
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
35638
        
 
35639
# check special-1 success:      1
 
35640
UPDATE t1 SET f_charbig = '';
 
35641
        
 
35642
# check special-2 success:      1
 
35643
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
35644
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35645
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
35646
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35647
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35648
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35649
'just inserted' FROM t0_template
 
35650
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35651
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
35652
BEGIN
 
35653
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35654
f_charbig = 'updated by trigger'
 
35655
      WHERE f_int1 = new.f_int1;
 
35656
END|
 
35657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35658
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35660
        
 
35661
# check trigger-1 success:      1
 
35662
DROP TRIGGER trg_1;
 
35663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35665
f_charbig = 'just inserted'
 
35666
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35667
DELETE FROM t0_aux
 
35668
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35670
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35671
'just inserted' FROM t0_template
 
35672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35673
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
35674
BEGIN
 
35675
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35676
f_charbig = 'updated by trigger'
 
35677
      WHERE f_int1 = new.f_int1;
 
35678
END|
 
35679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35680
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35682
        
 
35683
# check trigger-2 success:      1
 
35684
DROP TRIGGER trg_1;
 
35685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35687
f_charbig = 'just inserted'
 
35688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35689
DELETE FROM t0_aux
 
35690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35693
'just inserted' FROM t0_template
 
35694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35695
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35696
BEGIN
 
35697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35698
f_charbig = 'updated by trigger'
 
35699
      WHERE f_int1 = new.f_int1;
 
35700
END|
 
35701
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35702
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35703
        
 
35704
# check trigger-3 success:      1
 
35705
DROP TRIGGER trg_1;
 
35706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35708
f_charbig = 'just inserted'
 
35709
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35710
DELETE FROM t0_aux
 
35711
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35712
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35713
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35714
'just inserted' FROM t0_template
 
35715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35716
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35717
BEGIN
 
35718
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35719
f_charbig = 'updated by trigger'
 
35720
      WHERE f_int1 = - old.f_int1;
 
35721
END|
 
35722
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35723
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35724
        
 
35725
# check trigger-4 success:      1
 
35726
DROP TRIGGER trg_1;
 
35727
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35728
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35729
f_charbig = 'just inserted'
 
35730
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35731
DELETE FROM t0_aux
 
35732
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35733
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35734
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35735
'just inserted' FROM t0_template
 
35736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35737
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35738
BEGIN
 
35739
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35740
f_charbig = 'updated by trigger'
 
35741
      WHERE f_int1 = new.f_int1;
 
35742
END|
 
35743
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35744
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35745
        
 
35746
# check trigger-5 success:      1
 
35747
DROP TRIGGER trg_1;
 
35748
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35749
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35750
f_charbig = 'just inserted'
 
35751
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35752
DELETE FROM t0_aux
 
35753
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35755
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35756
'just inserted' FROM t0_template
 
35757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35758
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35759
BEGIN
 
35760
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35761
f_charbig = 'updated by trigger'
 
35762
      WHERE f_int1 = - old.f_int1;
 
35763
END|
 
35764
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35765
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35766
        
 
35767
# check trigger-6 success:      1
 
35768
DROP TRIGGER trg_1;
 
35769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35771
f_charbig = 'just inserted'
 
35772
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35773
DELETE FROM t0_aux
 
35774
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35775
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35776
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35777
'just inserted' FROM t0_template
 
35778
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35779
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
35780
BEGIN
 
35781
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35782
f_charbig = 'updated by trigger'
 
35783
      WHERE f_int1 = - old.f_int1;
 
35784
END|
 
35785
DELETE FROM t0_aux
 
35786
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35787
        
 
35788
# check trigger-7 success:      1
 
35789
DROP TRIGGER trg_1;
 
35790
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35791
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35792
f_charbig = 'just inserted'
 
35793
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35794
DELETE FROM t0_aux
 
35795
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35796
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35797
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35798
'just inserted' FROM t0_template
 
35799
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35800
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
35801
BEGIN
 
35802
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35803
f_charbig = 'updated by trigger'
 
35804
      WHERE f_int1 = - old.f_int1;
 
35805
END|
 
35806
DELETE FROM t0_aux
 
35807
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35808
        
 
35809
# check trigger-8 success:      1
 
35810
DROP TRIGGER trg_1;
 
35811
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35812
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35813
f_charbig = 'just inserted'
 
35814
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35815
DELETE FROM t0_aux
 
35816
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35817
DELETE FROM t1
 
35818
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35819
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35820
BEGIN
 
35821
SET new.f_int1 = old.f_int1 + @max_row,
 
35822
new.f_int2 = old.f_int2 - @max_row,
 
35823
new.f_charbig = '####updated per update trigger####';
 
35824
END|
 
35825
UPDATE t1
 
35826
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35827
f_charbig = '####updated per update statement itself####';
 
35828
        
 
35829
# check trigger-9 success:      1
 
35830
DROP TRIGGER trg_2;
 
35831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35833
f_charbig = CONCAT('===',f_char1,'===');
 
35834
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35835
BEGIN
 
35836
SET new.f_int1 = new.f_int1 + @max_row,
 
35837
new.f_int2 = new.f_int2 - @max_row,
 
35838
new.f_charbig = '####updated per update trigger####';
 
35839
END|
 
35840
UPDATE t1
 
35841
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35842
f_charbig = '####updated per update statement itself####';
 
35843
        
 
35844
# check trigger-10 success:     1
 
35845
DROP TRIGGER trg_2;
 
35846
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35847
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35848
f_charbig = CONCAT('===',f_char1,'===');
 
35849
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35850
BEGIN
 
35851
SET new.f_int1 = @my_max1 + @counter,
 
35852
new.f_int2 = @my_min2 - @counter,
 
35853
new.f_charbig = '####updated per insert trigger####';
 
35854
SET @counter = @counter + 1;
 
35855
END|
 
35856
SET @counter = 1;
 
35857
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35858
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35859
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35860
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35862
ORDER BY f_int1;
 
35863
DROP TRIGGER trg_3;
 
35864
        
 
35865
# check trigger-11 success:     1
 
35866
DELETE FROM t1
 
35867
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35868
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35869
AND f_charbig = '####updated per insert trigger####';
 
35870
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35871
BEGIN
 
35872
SET new.f_int1 = @my_max1 + @counter,
 
35873
new.f_int2 = @my_min2 - @counter,
 
35874
new.f_charbig = '####updated per insert trigger####';
 
35875
SET @counter = @counter + 1;
 
35876
END|
 
35877
SET @counter = 1;
 
35878
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35879
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
35880
SELECT CAST(f_int1 AS CHAR),
 
35881
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35883
ORDER BY f_int1;
 
35884
DROP TRIGGER trg_3;
 
35885
        
 
35886
# check trigger-12 success:     1
 
35887
DELETE FROM t1
 
35888
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35889
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35890
AND f_charbig = '####updated per insert trigger####';
 
35891
ANALYZE  TABLE t1;
 
35892
Table   Op      Msg_type        Msg_text
 
35893
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
35894
CHECK    TABLE t1 EXTENDED;
 
35895
Table   Op      Msg_type        Msg_text
 
35896
test.t1 check   note    The storage engine for the table doesn't support check
 
35897
CHECKSUM TABLE t1 EXTENDED;
 
35898
Table   Checksum
 
35899
test.t1 <some_value>
 
35900
OPTIMIZE TABLE t1;
 
35901
Table   Op      Msg_type        Msg_text
 
35902
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
35903
# check layout success:    1
 
35904
REPAIR   TABLE t1 EXTENDED;
 
35905
Table   Op      Msg_type        Msg_text
 
35906
test.t1 repair  note    The storage engine for the table doesn't support repair
 
35907
# check layout success:    1
 
35908
TRUNCATE t1;
 
35909
        
 
35910
# check TRUNCATE success:       1
 
35911
# check layout success:    1
 
35912
# End usability test (inc/partition_check.inc)
 
35913
DROP TABLE t1;
 
35914
CREATE TABLE t1 (
 
35915
f_int1 INTEGER,
 
35916
f_int2 INTEGER,
 
35917
f_char1 CHAR(20),
 
35918
f_char2 CHAR(20),
 
35919
f_charbig VARCHAR(1000)
 
35920
 
 
35921
)
 
35922
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
35923
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
35924
(PARTITION part1 VALUES IN (0),
 
35925
 PARTITION part2 VALUES IN (1),
 
35926
 PARTITION part3 VALUES IN (NULL));
 
35927
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35928
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35929
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
35930
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
 
35931
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35932
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35933
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35934
# Start usability test (inc/partition_check.inc)
 
35935
create_command
 
35936
SHOW CREATE TABLE t1;
 
35937
Table   Create Table
 
35938
t1      CREATE TABLE `t1` (
 
35939
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
35940
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
35941
  `f_char1` char(20) DEFAULT NULL,
 
35942
  `f_char2` char(20) DEFAULT NULL,
 
35943
  `f_charbig` varchar(1000) DEFAULT NULL,
 
35944
  PRIMARY KEY (`f_int2`,`f_int1`),
 
35945
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
35946
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
35947
 
 
35948
# check prerequisites-1 success:    1
 
35949
# check COUNT(*) success:    1
 
35950
# check MIN/MAX(f_int1) success:    1
 
35951
# check MIN/MAX(f_int2) success:    1
 
35952
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35953
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35954
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
35955
WHERE f_int1 IN (2,3);
 
35956
ERROR 23000: Can't write; duplicate key in table 't1'
 
35957
# check prerequisites-3 success:    1
 
35958
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
35959
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35960
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
35961
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
35962
WHERE f_int1 IN (2,3);
 
35963
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35964
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35965
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
35966
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
35967
WHERE f_int1 IN (2,3);
 
35968
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35969
# check read via f_int1 success: 1
 
35970
# check read via f_int2 success: 1
 
35971
        
 
35972
# check multiple-1 success:     1
 
35973
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
35974
        
 
35975
# check multiple-2 success:     1
 
35976
INSERT INTO t1 SELECT * FROM t0_template
 
35977
WHERE MOD(f_int1,3) = 0;
 
35978
        
 
35979
# check multiple-3 success:     1
 
35980
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
35981
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
35982
AND @max_row_div2 + @max_row_div4;
 
35983
        
 
35984
# check multiple-4 success:     1
 
35985
DELETE FROM t1
 
35986
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
35987
AND @max_row_div2 + @max_row_div4 + @max_row;
 
35988
        
 
35989
# check multiple-5 success:     1
 
35990
SELECT COUNT(*) INTO @try_count FROM t0_template
 
35991
WHERE MOD(f_int1,3) = 0
 
35992
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35993
SELECT COUNT(*) INTO @clash_count
 
35994
FROM t1 INNER JOIN t0_template USING(f_int1)
 
35995
WHERE MOD(f_int1,3) = 0
 
35996
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35997
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
35998
INSERT INTO t1
 
35999
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36000
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36001
f_charbig = '#SINGLE#';
 
36002
        
 
36003
# check single-1 success:       1
 
36004
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
36005
INSERT INTO t1
 
36006
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36007
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36008
f_charbig = '#SINGLE#';
 
36009
        
 
36010
# check single-2 success:       1
 
36011
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
36012
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
36013
UPDATE t1 SET f_int1 = @cur_value2
 
36014
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
36015
        
 
36016
# check single-3 success:       1
 
36017
SET @cur_value1= -1;
 
36018
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
36019
UPDATE t1 SET f_int1 = @cur_value1
 
36020
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
36021
        
 
36022
# check single-4 success:       1
 
36023
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
36024
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
36025
        
 
36026
# check single-5 success:       1
 
36027
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
36028
        
 
36029
# check single-6 success:       1
 
36030
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
36031
        
 
36032
# check single-7 success:       1
 
36033
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
36034
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
36035
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
36036
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
36037
f_charbig = '#NULL#';
 
36038
INSERT INTO t1
 
36039
SET f_int1 = NULL , f_int2 = -@max_row,
 
36040
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
36041
f_charbig = '#NULL#';
 
36042
ERROR 23000: Column 'f_int1' cannot be null
 
36043
# check null success:    1
 
36044
DELETE FROM t1
 
36045
WHERE f_int1 = 0 AND f_int2 = 0
 
36046
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
36047
AND f_charbig = '#NULL#';
 
36048
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36049
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36050
   FROM t0_template source_tab
 
36051
WHERE MOD(f_int1,3) = 0
 
36052
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
36053
ON DUPLICATE KEY
 
36054
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
36055
f_int2 = 2 * @max_row + source_tab.f_int1,
 
36056
f_charbig = 'was updated';
 
36057
        
 
36058
# check unique-1-a success:     1
 
36059
        
 
36060
# check unique-1-b success:     1
 
36061
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36064
f_charbig = CONCAT('===',f_char1,'===')
 
36065
WHERE f_charbig = 'was updated';
 
36066
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36067
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
36068
   FROM t0_template source_tab
 
36069
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36070
        
 
36071
# check replace success:        1
 
36072
DELETE FROM t1
 
36073
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
36074
DELETE FROM t1
 
36075
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
36076
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
36077
UPDATE t1 SET f_int2 = f_int1,
 
36078
f_char1 = CAST(f_int1 AS CHAR),
 
36079
f_char2 = CAST(f_int1 AS CHAR),
 
36080
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
36081
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
36082
SET AUTOCOMMIT= 0;
 
36083
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36084
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36085
FROM t0_template source_tab
 
36086
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36087
        
 
36088
# check transactions-1 success:         1
 
36089
COMMIT WORK;
 
36090
        
 
36091
# check transactions-2 success:         1
 
36092
ROLLBACK WORK;
 
36093
        
 
36094
# check transactions-3 success:         1
 
36095
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36096
COMMIT WORK;
 
36097
ROLLBACK WORK;
 
36098
        
 
36099
# check transactions-4 success:         1
 
36100
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36101
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36102
FROM t0_template source_tab
 
36103
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36104
        
 
36105
# check transactions-5 success:         1
 
36106
ROLLBACK WORK;
 
36107
        
 
36108
# check transactions-6 success:         1
 
36109
# INFO: Storage engine used for t1 seems to be transactional.
 
36110
COMMIT;
 
36111
        
 
36112
# check transactions-7 success:         1
 
36113
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36114
COMMIT WORK;
 
36115
SET @@session.sql_mode = 'traditional';
 
36116
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
36117
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36118
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
36119
'', '', 'was inserted' FROM t0_template
 
36120
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36121
ERROR 22012: Division by 0
 
36122
COMMIT;
 
36123
        
 
36124
# check transactions-8 success:         1
 
36125
# INFO: Storage engine used for t1 seems to be able to revert
 
36126
#       changes made by the failing statement.
 
36127
SET @@session.sql_mode = '';
 
36128
SET AUTOCOMMIT= 1;
 
36129
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36130
COMMIT WORK;
 
36131
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
36132
        
 
36133
# check special-1 success:      1
 
36134
UPDATE t1 SET f_charbig = '';
 
36135
        
 
36136
# check special-2 success:      1
 
36137
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
36138
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36139
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
36140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36143
'just inserted' FROM t0_template
 
36144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36145
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
36146
BEGIN
 
36147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36148
f_charbig = 'updated by trigger'
 
36149
      WHERE f_int1 = new.f_int1;
 
36150
END|
 
36151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36152
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36154
        
 
36155
# check trigger-1 success:      1
 
36156
DROP TRIGGER trg_1;
 
36157
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36158
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36159
f_charbig = 'just inserted'
 
36160
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36161
DELETE FROM t0_aux
 
36162
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36164
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36165
'just inserted' FROM t0_template
 
36166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36167
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
36168
BEGIN
 
36169
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36170
f_charbig = 'updated by trigger'
 
36171
      WHERE f_int1 = new.f_int1;
 
36172
END|
 
36173
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36174
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36175
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36176
        
 
36177
# check trigger-2 success:      1
 
36178
DROP TRIGGER trg_1;
 
36179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36181
f_charbig = 'just inserted'
 
36182
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36183
DELETE FROM t0_aux
 
36184
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36185
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36186
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36187
'just inserted' FROM t0_template
 
36188
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36189
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36190
BEGIN
 
36191
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36192
f_charbig = 'updated by trigger'
 
36193
      WHERE f_int1 = new.f_int1;
 
36194
END|
 
36195
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36196
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36197
        
 
36198
# check trigger-3 success:      1
 
36199
DROP TRIGGER trg_1;
 
36200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36202
f_charbig = 'just inserted'
 
36203
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36204
DELETE FROM t0_aux
 
36205
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36206
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36207
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36208
'just inserted' FROM t0_template
 
36209
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36210
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36211
BEGIN
 
36212
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36213
f_charbig = 'updated by trigger'
 
36214
      WHERE f_int1 = - old.f_int1;
 
36215
END|
 
36216
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36217
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36218
        
 
36219
# check trigger-4 success:      1
 
36220
DROP TRIGGER trg_1;
 
36221
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36222
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36223
f_charbig = 'just inserted'
 
36224
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36225
DELETE FROM t0_aux
 
36226
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36227
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36228
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36229
'just inserted' FROM t0_template
 
36230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36231
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36232
BEGIN
 
36233
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36234
f_charbig = 'updated by trigger'
 
36235
      WHERE f_int1 = new.f_int1;
 
36236
END|
 
36237
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36238
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36239
        
 
36240
# check trigger-5 success:      1
 
36241
DROP TRIGGER trg_1;
 
36242
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36243
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36244
f_charbig = 'just inserted'
 
36245
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36246
DELETE FROM t0_aux
 
36247
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36248
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36249
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36250
'just inserted' FROM t0_template
 
36251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36252
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36253
BEGIN
 
36254
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36255
f_charbig = 'updated by trigger'
 
36256
      WHERE f_int1 = - old.f_int1;
 
36257
END|
 
36258
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36259
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36260
        
 
36261
# check trigger-6 success:      1
 
36262
DROP TRIGGER trg_1;
 
36263
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36264
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36265
f_charbig = 'just inserted'
 
36266
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36267
DELETE FROM t0_aux
 
36268
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36269
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36270
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36271
'just inserted' FROM t0_template
 
36272
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36273
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
36274
BEGIN
 
36275
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36276
f_charbig = 'updated by trigger'
 
36277
      WHERE f_int1 = - old.f_int1;
 
36278
END|
 
36279
DELETE FROM t0_aux
 
36280
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36281
        
 
36282
# check trigger-7 success:      1
 
36283
DROP TRIGGER trg_1;
 
36284
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36285
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36286
f_charbig = 'just inserted'
 
36287
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36288
DELETE FROM t0_aux
 
36289
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36290
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36291
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36292
'just inserted' FROM t0_template
 
36293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36294
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
36295
BEGIN
 
36296
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36297
f_charbig = 'updated by trigger'
 
36298
      WHERE f_int1 = - old.f_int1;
 
36299
END|
 
36300
DELETE FROM t0_aux
 
36301
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36302
        
 
36303
# check trigger-8 success:      1
 
36304
DROP TRIGGER trg_1;
 
36305
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36306
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36307
f_charbig = 'just inserted'
 
36308
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36309
DELETE FROM t0_aux
 
36310
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36311
DELETE FROM t1
 
36312
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36313
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36314
BEGIN
 
36315
SET new.f_int1 = old.f_int1 + @max_row,
 
36316
new.f_int2 = old.f_int2 - @max_row,
 
36317
new.f_charbig = '####updated per update trigger####';
 
36318
END|
 
36319
UPDATE t1
 
36320
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36321
f_charbig = '####updated per update statement itself####';
 
36322
        
 
36323
# check trigger-9 success:      1
 
36324
DROP TRIGGER trg_2;
 
36325
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36326
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36327
f_charbig = CONCAT('===',f_char1,'===');
 
36328
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36329
BEGIN
 
36330
SET new.f_int1 = new.f_int1 + @max_row,
 
36331
new.f_int2 = new.f_int2 - @max_row,
 
36332
new.f_charbig = '####updated per update trigger####';
 
36333
END|
 
36334
UPDATE t1
 
36335
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36336
f_charbig = '####updated per update statement itself####';
 
36337
        
 
36338
# check trigger-10 success:     1
 
36339
DROP TRIGGER trg_2;
 
36340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36342
f_charbig = CONCAT('===',f_char1,'===');
 
36343
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36344
BEGIN
 
36345
SET new.f_int1 = @my_max1 + @counter,
 
36346
new.f_int2 = @my_min2 - @counter,
 
36347
new.f_charbig = '####updated per insert trigger####';
 
36348
SET @counter = @counter + 1;
 
36349
END|
 
36350
SET @counter = 1;
 
36351
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36352
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36353
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36354
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36356
ORDER BY f_int1;
 
36357
DROP TRIGGER trg_3;
 
36358
        
 
36359
# check trigger-11 success:     1
 
36360
DELETE FROM t1
 
36361
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36362
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36363
AND f_charbig = '####updated per insert trigger####';
 
36364
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36365
BEGIN
 
36366
SET new.f_int1 = @my_max1 + @counter,
 
36367
new.f_int2 = @my_min2 - @counter,
 
36368
new.f_charbig = '####updated per insert trigger####';
 
36369
SET @counter = @counter + 1;
 
36370
END|
 
36371
SET @counter = 1;
 
36372
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36373
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
36374
SELECT CAST(f_int1 AS CHAR),
 
36375
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36377
ORDER BY f_int1;
 
36378
DROP TRIGGER trg_3;
 
36379
        
 
36380
# check trigger-12 success:     1
 
36381
DELETE FROM t1
 
36382
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36383
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36384
AND f_charbig = '####updated per insert trigger####';
 
36385
ANALYZE  TABLE t1;
 
36386
Table   Op      Msg_type        Msg_text
 
36387
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
36388
CHECK    TABLE t1 EXTENDED;
 
36389
Table   Op      Msg_type        Msg_text
 
36390
test.t1 check   note    The storage engine for the table doesn't support check
 
36391
CHECKSUM TABLE t1 EXTENDED;
 
36392
Table   Checksum
 
36393
test.t1 <some_value>
 
36394
OPTIMIZE TABLE t1;
 
36395
Table   Op      Msg_type        Msg_text
 
36396
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
36397
# check layout success:    1
 
36398
REPAIR   TABLE t1 EXTENDED;
 
36399
Table   Op      Msg_type        Msg_text
 
36400
test.t1 repair  note    The storage engine for the table doesn't support repair
 
36401
# check layout success:    1
 
36402
TRUNCATE t1;
 
36403
        
 
36404
# check TRUNCATE success:       1
 
36405
# check layout success:    1
 
36406
# End usability test (inc/partition_check.inc)
 
36407
DROP TABLE t1;
 
36408
DROP TABLE IF EXISTS t1;
 
36409
CREATE TABLE t1 (
 
36410
f_int1 INTEGER,
 
36411
f_int2 INTEGER,
 
36412
f_char1 CHAR(20),
 
36413
f_char2 CHAR(20),
 
36414
f_charbig VARCHAR(1000)
 
36415
 
 
36416
)
 
36417
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
36418
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36419
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36420
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
36421
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
36422
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36423
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36424
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36425
# Start usability test (inc/partition_check.inc)
 
36426
create_command
 
36427
SHOW CREATE TABLE t1;
 
36428
Table   Create Table
 
36429
t1      CREATE TABLE `t1` (
 
36430
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
36431
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
36432
  `f_char1` char(20) DEFAULT NULL,
 
36433
  `f_char2` char(20) DEFAULT NULL,
 
36434
  `f_charbig` varchar(1000) DEFAULT NULL,
 
36435
  PRIMARY KEY (`f_int1`,`f_int2`),
 
36436
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
36437
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
36438
 
 
36439
# check prerequisites-1 success:    1
 
36440
# check COUNT(*) success:    1
 
36441
# check MIN/MAX(f_int1) success:    1
 
36442
# check MIN/MAX(f_int2) success:    1
 
36443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36444
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36445
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
36446
WHERE f_int1 IN (2,3);
 
36447
ERROR 23000: Can't write; duplicate key in table 't1'
 
36448
# check prerequisites-3 success:    1
 
36449
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
36450
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36451
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
36452
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
36453
WHERE f_int1 IN (2,3);
 
36454
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
36455
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36456
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
36457
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
36458
WHERE f_int1 IN (2,3);
 
36459
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
36460
# check read via f_int1 success: 1
 
36461
# check read via f_int2 success: 1
 
36462
        
 
36463
# check multiple-1 success:     1
 
36464
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
36465
        
 
36466
# check multiple-2 success:     1
 
36467
INSERT INTO t1 SELECT * FROM t0_template
 
36468
WHERE MOD(f_int1,3) = 0;
 
36469
        
 
36470
# check multiple-3 success:     1
 
36471
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
36472
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
36473
AND @max_row_div2 + @max_row_div4;
 
36474
        
 
36475
# check multiple-4 success:     1
 
36476
DELETE FROM t1
 
36477
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
36478
AND @max_row_div2 + @max_row_div4 + @max_row;
 
36479
        
 
36480
# check multiple-5 success:     1
 
36481
SELECT COUNT(*) INTO @try_count FROM t0_template
 
36482
WHERE MOD(f_int1,3) = 0
 
36483
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36484
SELECT COUNT(*) INTO @clash_count
 
36485
FROM t1 INNER JOIN t0_template USING(f_int1)
 
36486
WHERE MOD(f_int1,3) = 0
 
36487
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36488
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
36489
INSERT INTO t1
 
36490
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36491
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36492
f_charbig = '#SINGLE#';
 
36493
        
 
36494
# check single-1 success:       1
 
36495
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
36496
INSERT INTO t1
 
36497
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36498
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36499
f_charbig = '#SINGLE#';
 
36500
        
 
36501
# check single-2 success:       1
 
36502
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
36503
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
36504
UPDATE t1 SET f_int1 = @cur_value2
 
36505
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
36506
        
 
36507
# check single-3 success:       1
 
36508
SET @cur_value1= -1;
 
36509
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
36510
UPDATE t1 SET f_int1 = @cur_value1
 
36511
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
36512
        
 
36513
# check single-4 success:       1
 
36514
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
36515
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
36516
        
 
36517
# check single-5 success:       1
 
36518
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
36519
        
 
36520
# check single-6 success:       1
 
36521
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
36522
        
 
36523
# check single-7 success:       1
 
36524
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
36525
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
36526
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
36527
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
36528
f_charbig = '#NULL#';
 
36529
INSERT INTO t1
 
36530
SET f_int1 = NULL , f_int2 = -@max_row,
 
36531
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
36532
f_charbig = '#NULL#';
 
36533
ERROR 23000: Column 'f_int1' cannot be null
 
36534
# check null success:    1
 
36535
DELETE FROM t1
 
36536
WHERE f_int1 = 0 AND f_int2 = 0
 
36537
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
36538
AND f_charbig = '#NULL#';
 
36539
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36540
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36541
   FROM t0_template source_tab
 
36542
WHERE MOD(f_int1,3) = 0
 
36543
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
36544
ON DUPLICATE KEY
 
36545
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
36546
f_int2 = 2 * @max_row + source_tab.f_int1,
 
36547
f_charbig = 'was updated';
 
36548
        
 
36549
# check unique-1-a success:     1
 
36550
        
 
36551
# check unique-1-b success:     1
 
36552
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36555
f_charbig = CONCAT('===',f_char1,'===')
 
36556
WHERE f_charbig = 'was updated';
 
36557
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36558
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
36559
   FROM t0_template source_tab
 
36560
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36561
        
 
36562
# check replace success:        1
 
36563
DELETE FROM t1
 
36564
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
36565
DELETE FROM t1
 
36566
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
36567
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
36568
UPDATE t1 SET f_int2 = f_int1,
 
36569
f_char1 = CAST(f_int1 AS CHAR),
 
36570
f_char2 = CAST(f_int1 AS CHAR),
 
36571
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
36572
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
36573
SET AUTOCOMMIT= 0;
 
36574
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36575
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36576
FROM t0_template source_tab
 
36577
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36578
        
 
36579
# check transactions-1 success:         1
 
36580
COMMIT WORK;
 
36581
        
 
36582
# check transactions-2 success:         1
 
36583
ROLLBACK WORK;
 
36584
        
 
36585
# check transactions-3 success:         1
 
36586
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36587
COMMIT WORK;
 
36588
ROLLBACK WORK;
 
36589
        
 
36590
# check transactions-4 success:         1
 
36591
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36592
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36593
FROM t0_template source_tab
 
36594
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36595
        
 
36596
# check transactions-5 success:         1
 
36597
ROLLBACK WORK;
 
36598
        
 
36599
# check transactions-6 success:         1
 
36600
# INFO: Storage engine used for t1 seems to be transactional.
 
36601
COMMIT;
 
36602
        
 
36603
# check transactions-7 success:         1
 
36604
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36605
COMMIT WORK;
 
36606
SET @@session.sql_mode = 'traditional';
 
36607
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
36608
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36609
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
36610
'', '', 'was inserted' FROM t0_template
 
36611
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36612
ERROR 22012: Division by 0
 
36613
COMMIT;
 
36614
        
 
36615
# check transactions-8 success:         1
 
36616
# INFO: Storage engine used for t1 seems to be able to revert
 
36617
#       changes made by the failing statement.
 
36618
SET @@session.sql_mode = '';
 
36619
SET AUTOCOMMIT= 1;
 
36620
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36621
COMMIT WORK;
 
36622
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
36623
        
 
36624
# check special-1 success:      1
 
36625
UPDATE t1 SET f_charbig = '';
 
36626
        
 
36627
# check special-2 success:      1
 
36628
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
36629
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36630
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
36631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36632
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36633
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36634
'just inserted' FROM t0_template
 
36635
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36636
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
36637
BEGIN
 
36638
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36639
f_charbig = 'updated by trigger'
 
36640
      WHERE f_int1 = new.f_int1;
 
36641
END|
 
36642
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36643
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36645
        
 
36646
# check trigger-1 success:      1
 
36647
DROP TRIGGER trg_1;
 
36648
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36649
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36650
f_charbig = 'just inserted'
 
36651
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36652
DELETE FROM t0_aux
 
36653
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36654
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36655
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36656
'just inserted' FROM t0_template
 
36657
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36658
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
36659
BEGIN
 
36660
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36661
f_charbig = 'updated by trigger'
 
36662
      WHERE f_int1 = new.f_int1;
 
36663
END|
 
36664
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36665
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36666
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36667
        
 
36668
# check trigger-2 success:      1
 
36669
DROP TRIGGER trg_1;
 
36670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36672
f_charbig = 'just inserted'
 
36673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36674
DELETE FROM t0_aux
 
36675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36678
'just inserted' FROM t0_template
 
36679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36680
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36681
BEGIN
 
36682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36683
f_charbig = 'updated by trigger'
 
36684
      WHERE f_int1 = new.f_int1;
 
36685
END|
 
36686
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36687
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36688
        
 
36689
# check trigger-3 success:      1
 
36690
DROP TRIGGER trg_1;
 
36691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36693
f_charbig = 'just inserted'
 
36694
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36695
DELETE FROM t0_aux
 
36696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36699
'just inserted' FROM t0_template
 
36700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36701
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36702
BEGIN
 
36703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36704
f_charbig = 'updated by trigger'
 
36705
      WHERE f_int1 = - old.f_int1;
 
36706
END|
 
36707
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36709
        
 
36710
# check trigger-4 success:      1
 
36711
DROP TRIGGER trg_1;
 
36712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36714
f_charbig = 'just inserted'
 
36715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36716
DELETE FROM t0_aux
 
36717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36720
'just inserted' FROM t0_template
 
36721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36722
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36723
BEGIN
 
36724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36725
f_charbig = 'updated by trigger'
 
36726
      WHERE f_int1 = new.f_int1;
 
36727
END|
 
36728
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36730
        
 
36731
# check trigger-5 success:      1
 
36732
DROP TRIGGER trg_1;
 
36733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36735
f_charbig = 'just inserted'
 
36736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36737
DELETE FROM t0_aux
 
36738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36741
'just inserted' FROM t0_template
 
36742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36743
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36744
BEGIN
 
36745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36746
f_charbig = 'updated by trigger'
 
36747
      WHERE f_int1 = - old.f_int1;
 
36748
END|
 
36749
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36750
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36751
        
 
36752
# check trigger-6 success:      1
 
36753
DROP TRIGGER trg_1;
 
36754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36756
f_charbig = 'just inserted'
 
36757
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36758
DELETE FROM t0_aux
 
36759
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36760
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36761
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36762
'just inserted' FROM t0_template
 
36763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36764
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
36765
BEGIN
 
36766
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36767
f_charbig = 'updated by trigger'
 
36768
      WHERE f_int1 = - old.f_int1;
 
36769
END|
 
36770
DELETE FROM t0_aux
 
36771
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36772
        
 
36773
# check trigger-7 success:      1
 
36774
DROP TRIGGER trg_1;
 
36775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36777
f_charbig = 'just inserted'
 
36778
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36779
DELETE FROM t0_aux
 
36780
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36781
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36782
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36783
'just inserted' FROM t0_template
 
36784
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36785
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
36786
BEGIN
 
36787
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36788
f_charbig = 'updated by trigger'
 
36789
      WHERE f_int1 = - old.f_int1;
 
36790
END|
 
36791
DELETE FROM t0_aux
 
36792
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36793
        
 
36794
# check trigger-8 success:      1
 
36795
DROP TRIGGER trg_1;
 
36796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36798
f_charbig = 'just inserted'
 
36799
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36800
DELETE FROM t0_aux
 
36801
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36802
DELETE FROM t1
 
36803
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36804
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36805
BEGIN
 
36806
SET new.f_int1 = old.f_int1 + @max_row,
 
36807
new.f_int2 = old.f_int2 - @max_row,
 
36808
new.f_charbig = '####updated per update trigger####';
 
36809
END|
 
36810
UPDATE t1
 
36811
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36812
f_charbig = '####updated per update statement itself####';
 
36813
        
 
36814
# check trigger-9 success:      1
 
36815
DROP TRIGGER trg_2;
 
36816
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36817
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36818
f_charbig = CONCAT('===',f_char1,'===');
 
36819
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36820
BEGIN
 
36821
SET new.f_int1 = new.f_int1 + @max_row,
 
36822
new.f_int2 = new.f_int2 - @max_row,
 
36823
new.f_charbig = '####updated per update trigger####';
 
36824
END|
 
36825
UPDATE t1
 
36826
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36827
f_charbig = '####updated per update statement itself####';
 
36828
        
 
36829
# check trigger-10 success:     1
 
36830
DROP TRIGGER trg_2;
 
36831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36833
f_charbig = CONCAT('===',f_char1,'===');
 
36834
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36835
BEGIN
 
36836
SET new.f_int1 = @my_max1 + @counter,
 
36837
new.f_int2 = @my_min2 - @counter,
 
36838
new.f_charbig = '####updated per insert trigger####';
 
36839
SET @counter = @counter + 1;
 
36840
END|
 
36841
SET @counter = 1;
 
36842
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36843
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36844
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36845
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36846
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36847
ORDER BY f_int1;
 
36848
DROP TRIGGER trg_3;
 
36849
        
 
36850
# check trigger-11 success:     1
 
36851
DELETE FROM t1
 
36852
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36853
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36854
AND f_charbig = '####updated per insert trigger####';
 
36855
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36856
BEGIN
 
36857
SET new.f_int1 = @my_max1 + @counter,
 
36858
new.f_int2 = @my_min2 - @counter,
 
36859
new.f_charbig = '####updated per insert trigger####';
 
36860
SET @counter = @counter + 1;
 
36861
END|
 
36862
SET @counter = 1;
 
36863
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36864
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
36865
SELECT CAST(f_int1 AS CHAR),
 
36866
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36868
ORDER BY f_int1;
 
36869
DROP TRIGGER trg_3;
 
36870
        
 
36871
# check trigger-12 success:     1
 
36872
DELETE FROM t1
 
36873
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36874
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36875
AND f_charbig = '####updated per insert trigger####';
 
36876
ANALYZE  TABLE t1;
 
36877
Table   Op      Msg_type        Msg_text
 
36878
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
36879
CHECK    TABLE t1 EXTENDED;
 
36880
Table   Op      Msg_type        Msg_text
 
36881
test.t1 check   note    The storage engine for the table doesn't support check
 
36882
CHECKSUM TABLE t1 EXTENDED;
 
36883
Table   Checksum
 
36884
test.t1 <some_value>
 
36885
OPTIMIZE TABLE t1;
 
36886
Table   Op      Msg_type        Msg_text
 
36887
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
36888
# check layout success:    1
 
36889
REPAIR   TABLE t1 EXTENDED;
 
36890
Table   Op      Msg_type        Msg_text
 
36891
test.t1 repair  note    The storage engine for the table doesn't support repair
 
36892
# check layout success:    1
 
36893
TRUNCATE t1;
 
36894
        
 
36895
# check TRUNCATE success:       1
 
36896
# check layout success:    1
 
36897
# End usability test (inc/partition_check.inc)
 
36898
DROP TABLE t1;
 
36899
CREATE TABLE t1 (
 
36900
f_int1 INTEGER,
 
36901
f_int2 INTEGER,
 
36902
f_char1 CHAR(20),
 
36903
f_char2 CHAR(20),
 
36904
f_charbig VARCHAR(1000)
 
36905
 
 
36906
)
 
36907
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
36908
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36909
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36910
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
36911
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
36912
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36913
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36914
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36915
# Start usability test (inc/partition_check.inc)
 
36916
create_command
 
36917
SHOW CREATE TABLE t1;
 
36918
Table   Create Table
 
36919
t1      CREATE TABLE `t1` (
 
36920
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
36921
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
36922
  `f_char1` char(20) DEFAULT NULL,
 
36923
  `f_char2` char(20) DEFAULT NULL,
 
36924
  `f_charbig` varchar(1000) DEFAULT NULL,
 
36925
  PRIMARY KEY (`f_int1`,`f_int2`),
 
36926
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
36927
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
36928
 
 
36929
# check prerequisites-1 success:    1
 
36930
# check COUNT(*) success:    1
 
36931
# check MIN/MAX(f_int1) success:    1
 
36932
# check MIN/MAX(f_int2) success:    1
 
36933
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36934
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36935
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
36936
WHERE f_int1 IN (2,3);
 
36937
ERROR 23000: Can't write; duplicate key in table 't1'
 
36938
# check prerequisites-3 success:    1
 
36939
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
36940
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36941
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
36942
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
36943
WHERE f_int1 IN (2,3);
 
36944
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
36945
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36946
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
36947
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
36948
WHERE f_int1 IN (2,3);
 
36949
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
36950
# check read via f_int1 success: 1
 
36951
# check read via f_int2 success: 1
 
36952
        
 
36953
# check multiple-1 success:     1
 
36954
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
36955
        
 
36956
# check multiple-2 success:     1
 
36957
INSERT INTO t1 SELECT * FROM t0_template
 
36958
WHERE MOD(f_int1,3) = 0;
 
36959
        
 
36960
# check multiple-3 success:     1
 
36961
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
36962
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
36963
AND @max_row_div2 + @max_row_div4;
 
36964
        
 
36965
# check multiple-4 success:     1
 
36966
DELETE FROM t1
 
36967
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
36968
AND @max_row_div2 + @max_row_div4 + @max_row;
 
36969
        
 
36970
# check multiple-5 success:     1
 
36971
SELECT COUNT(*) INTO @try_count FROM t0_template
 
36972
WHERE MOD(f_int1,3) = 0
 
36973
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36974
SELECT COUNT(*) INTO @clash_count
 
36975
FROM t1 INNER JOIN t0_template USING(f_int1)
 
36976
WHERE MOD(f_int1,3) = 0
 
36977
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36978
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
36979
INSERT INTO t1
 
36980
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36981
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36982
f_charbig = '#SINGLE#';
 
36983
        
 
36984
# check single-1 success:       1
 
36985
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
36986
INSERT INTO t1
 
36987
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36988
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36989
f_charbig = '#SINGLE#';
 
36990
        
 
36991
# check single-2 success:       1
 
36992
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
36993
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
36994
UPDATE t1 SET f_int1 = @cur_value2
 
36995
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
36996
        
 
36997
# check single-3 success:       1
 
36998
SET @cur_value1= -1;
 
36999
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
37000
UPDATE t1 SET f_int1 = @cur_value1
 
37001
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
37002
        
 
37003
# check single-4 success:       1
 
37004
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
37005
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
37006
        
 
37007
# check single-5 success:       1
 
37008
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
37009
        
 
37010
# check single-6 success:       1
 
37011
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
37012
        
 
37013
# check single-7 success:       1
 
37014
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
37015
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
37016
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
37017
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
37018
f_charbig = '#NULL#';
 
37019
INSERT INTO t1
 
37020
SET f_int1 = NULL , f_int2 = -@max_row,
 
37021
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
37022
f_charbig = '#NULL#';
 
37023
ERROR 23000: Column 'f_int1' cannot be null
 
37024
# check null success:    1
 
37025
DELETE FROM t1
 
37026
WHERE f_int1 = 0 AND f_int2 = 0
 
37027
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
37028
AND f_charbig = '#NULL#';
 
37029
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37030
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37031
   FROM t0_template source_tab
 
37032
WHERE MOD(f_int1,3) = 0
 
37033
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
37034
ON DUPLICATE KEY
 
37035
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
37036
f_int2 = 2 * @max_row + source_tab.f_int1,
 
37037
f_charbig = 'was updated';
 
37038
        
 
37039
# check unique-1-a success:     1
 
37040
        
 
37041
# check unique-1-b success:     1
 
37042
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37044
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37045
f_charbig = CONCAT('===',f_char1,'===')
 
37046
WHERE f_charbig = 'was updated';
 
37047
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37048
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
37049
   FROM t0_template source_tab
 
37050
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37051
        
 
37052
# check replace success:        1
 
37053
DELETE FROM t1
 
37054
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
37055
DELETE FROM t1
 
37056
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
37057
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
37058
UPDATE t1 SET f_int2 = f_int1,
 
37059
f_char1 = CAST(f_int1 AS CHAR),
 
37060
f_char2 = CAST(f_int1 AS CHAR),
 
37061
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
37062
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
37063
SET AUTOCOMMIT= 0;
 
37064
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37065
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37066
FROM t0_template source_tab
 
37067
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37068
        
 
37069
# check transactions-1 success:         1
 
37070
COMMIT WORK;
 
37071
        
 
37072
# check transactions-2 success:         1
 
37073
ROLLBACK WORK;
 
37074
        
 
37075
# check transactions-3 success:         1
 
37076
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37077
COMMIT WORK;
 
37078
ROLLBACK WORK;
 
37079
        
 
37080
# check transactions-4 success:         1
 
37081
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37082
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37083
FROM t0_template source_tab
 
37084
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37085
        
 
37086
# check transactions-5 success:         1
 
37087
ROLLBACK WORK;
 
37088
        
 
37089
# check transactions-6 success:         1
 
37090
# INFO: Storage engine used for t1 seems to be transactional.
 
37091
COMMIT;
 
37092
        
 
37093
# check transactions-7 success:         1
 
37094
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37095
COMMIT WORK;
 
37096
SET @@session.sql_mode = 'traditional';
 
37097
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
37098
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37099
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
37100
'', '', 'was inserted' FROM t0_template
 
37101
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37102
ERROR 22012: Division by 0
 
37103
COMMIT;
 
37104
        
 
37105
# check transactions-8 success:         1
 
37106
# INFO: Storage engine used for t1 seems to be able to revert
 
37107
#       changes made by the failing statement.
 
37108
SET @@session.sql_mode = '';
 
37109
SET AUTOCOMMIT= 1;
 
37110
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37111
COMMIT WORK;
 
37112
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
37113
        
 
37114
# check special-1 success:      1
 
37115
UPDATE t1 SET f_charbig = '';
 
37116
        
 
37117
# check special-2 success:      1
 
37118
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
37119
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37120
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
37121
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37124
'just inserted' FROM t0_template
 
37125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37126
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
37127
BEGIN
 
37128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37129
f_charbig = 'updated by trigger'
 
37130
      WHERE f_int1 = new.f_int1;
 
37131
END|
 
37132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37133
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37135
        
 
37136
# check trigger-1 success:      1
 
37137
DROP TRIGGER trg_1;
 
37138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37140
f_charbig = 'just inserted'
 
37141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37142
DELETE FROM t0_aux
 
37143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37146
'just inserted' FROM t0_template
 
37147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37148
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
37149
BEGIN
 
37150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37151
f_charbig = 'updated by trigger'
 
37152
      WHERE f_int1 = new.f_int1;
 
37153
END|
 
37154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37155
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37157
        
 
37158
# check trigger-2 success:      1
 
37159
DROP TRIGGER trg_1;
 
37160
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37161
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37162
f_charbig = 'just inserted'
 
37163
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37164
DELETE FROM t0_aux
 
37165
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37166
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37167
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37168
'just inserted' FROM t0_template
 
37169
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37170
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37171
BEGIN
 
37172
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37173
f_charbig = 'updated by trigger'
 
37174
      WHERE f_int1 = new.f_int1;
 
37175
END|
 
37176
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37177
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37178
        
 
37179
# check trigger-3 success:      1
 
37180
DROP TRIGGER trg_1;
 
37181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37183
f_charbig = 'just inserted'
 
37184
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37185
DELETE FROM t0_aux
 
37186
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37188
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37189
'just inserted' FROM t0_template
 
37190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37191
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37192
BEGIN
 
37193
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37194
f_charbig = 'updated by trigger'
 
37195
      WHERE f_int1 = - old.f_int1;
 
37196
END|
 
37197
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37198
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37199
        
 
37200
# check trigger-4 success:      1
 
37201
DROP TRIGGER trg_1;
 
37202
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37203
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37204
f_charbig = 'just inserted'
 
37205
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37206
DELETE FROM t0_aux
 
37207
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37208
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37209
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37210
'just inserted' FROM t0_template
 
37211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37212
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37213
BEGIN
 
37214
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37215
f_charbig = 'updated by trigger'
 
37216
      WHERE f_int1 = new.f_int1;
 
37217
END|
 
37218
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37219
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37220
        
 
37221
# check trigger-5 success:      1
 
37222
DROP TRIGGER trg_1;
 
37223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37225
f_charbig = 'just inserted'
 
37226
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37227
DELETE FROM t0_aux
 
37228
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37229
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37230
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37231
'just inserted' FROM t0_template
 
37232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37233
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37234
BEGIN
 
37235
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37236
f_charbig = 'updated by trigger'
 
37237
      WHERE f_int1 = - old.f_int1;
 
37238
END|
 
37239
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37240
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37241
        
 
37242
# check trigger-6 success:      1
 
37243
DROP TRIGGER trg_1;
 
37244
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37245
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37246
f_charbig = 'just inserted'
 
37247
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37248
DELETE FROM t0_aux
 
37249
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37250
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37251
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37252
'just inserted' FROM t0_template
 
37253
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37254
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
37255
BEGIN
 
37256
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37257
f_charbig = 'updated by trigger'
 
37258
      WHERE f_int1 = - old.f_int1;
 
37259
END|
 
37260
DELETE FROM t0_aux
 
37261
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37262
        
 
37263
# check trigger-7 success:      1
 
37264
DROP TRIGGER trg_1;
 
37265
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37266
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37267
f_charbig = 'just inserted'
 
37268
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37269
DELETE FROM t0_aux
 
37270
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37272
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37273
'just inserted' FROM t0_template
 
37274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37275
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
37276
BEGIN
 
37277
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37278
f_charbig = 'updated by trigger'
 
37279
      WHERE f_int1 = - old.f_int1;
 
37280
END|
 
37281
DELETE FROM t0_aux
 
37282
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37283
        
 
37284
# check trigger-8 success:      1
 
37285
DROP TRIGGER trg_1;
 
37286
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37287
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37288
f_charbig = 'just inserted'
 
37289
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37290
DELETE FROM t0_aux
 
37291
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37292
DELETE FROM t1
 
37293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37294
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37295
BEGIN
 
37296
SET new.f_int1 = old.f_int1 + @max_row,
 
37297
new.f_int2 = old.f_int2 - @max_row,
 
37298
new.f_charbig = '####updated per update trigger####';
 
37299
END|
 
37300
UPDATE t1
 
37301
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37302
f_charbig = '####updated per update statement itself####';
 
37303
        
 
37304
# check trigger-9 success:      1
 
37305
DROP TRIGGER trg_2;
 
37306
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37307
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37308
f_charbig = CONCAT('===',f_char1,'===');
 
37309
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37310
BEGIN
 
37311
SET new.f_int1 = new.f_int1 + @max_row,
 
37312
new.f_int2 = new.f_int2 - @max_row,
 
37313
new.f_charbig = '####updated per update trigger####';
 
37314
END|
 
37315
UPDATE t1
 
37316
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37317
f_charbig = '####updated per update statement itself####';
 
37318
        
 
37319
# check trigger-10 success:     1
 
37320
DROP TRIGGER trg_2;
 
37321
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37322
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37323
f_charbig = CONCAT('===',f_char1,'===');
 
37324
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37325
BEGIN
 
37326
SET new.f_int1 = @my_max1 + @counter,
 
37327
new.f_int2 = @my_min2 - @counter,
 
37328
new.f_charbig = '####updated per insert trigger####';
 
37329
SET @counter = @counter + 1;
 
37330
END|
 
37331
SET @counter = 1;
 
37332
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37333
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37334
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37335
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37337
ORDER BY f_int1;
 
37338
DROP TRIGGER trg_3;
 
37339
        
 
37340
# check trigger-11 success:     1
 
37341
DELETE FROM t1
 
37342
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37343
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37344
AND f_charbig = '####updated per insert trigger####';
 
37345
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37346
BEGIN
 
37347
SET new.f_int1 = @my_max1 + @counter,
 
37348
new.f_int2 = @my_min2 - @counter,
 
37349
new.f_charbig = '####updated per insert trigger####';
 
37350
SET @counter = @counter + 1;
 
37351
END|
 
37352
SET @counter = 1;
 
37353
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37354
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
37355
SELECT CAST(f_int1 AS CHAR),
 
37356
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37358
ORDER BY f_int1;
 
37359
DROP TRIGGER trg_3;
 
37360
        
 
37361
# check trigger-12 success:     1
 
37362
DELETE FROM t1
 
37363
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37364
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37365
AND f_charbig = '####updated per insert trigger####';
 
37366
ANALYZE  TABLE t1;
 
37367
Table   Op      Msg_type        Msg_text
 
37368
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
37369
CHECK    TABLE t1 EXTENDED;
 
37370
Table   Op      Msg_type        Msg_text
 
37371
test.t1 check   note    The storage engine for the table doesn't support check
 
37372
CHECKSUM TABLE t1 EXTENDED;
 
37373
Table   Checksum
 
37374
test.t1 <some_value>
 
37375
OPTIMIZE TABLE t1;
 
37376
Table   Op      Msg_type        Msg_text
 
37377
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
37378
# check layout success:    1
 
37379
REPAIR   TABLE t1 EXTENDED;
 
37380
Table   Op      Msg_type        Msg_text
 
37381
test.t1 repair  note    The storage engine for the table doesn't support repair
 
37382
# check layout success:    1
 
37383
TRUNCATE t1;
 
37384
        
 
37385
# check TRUNCATE success:       1
 
37386
# check layout success:    1
 
37387
# End usability test (inc/partition_check.inc)
 
37388
DROP TABLE t1;
 
37389
CREATE TABLE t1 (
 
37390
f_int1 INTEGER,
 
37391
f_int2 INTEGER,
 
37392
f_char1 CHAR(20),
 
37393
f_char2 CHAR(20),
 
37394
f_charbig VARCHAR(1000)
 
37395
 
 
37396
)
 
37397
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
37398
(PARTITION part_3 VALUES IN (-3),
 
37399
PARTITION part_2 VALUES IN (-2),
 
37400
PARTITION part_1 VALUES IN (-1),
 
37401
PARTITION part_N VALUES IN (NULL),
 
37402
PARTITION part0 VALUES IN (0),
 
37403
PARTITION part1 VALUES IN (1),
 
37404
PARTITION part2 VALUES IN (2),
 
37405
PARTITION part3 VALUES IN (3));
 
37406
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37407
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37408
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
37409
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
37410
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37411
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37412
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37413
# Start usability test (inc/partition_check.inc)
 
37414
create_command
 
37415
SHOW CREATE TABLE t1;
 
37416
Table   Create Table
 
37417
t1      CREATE TABLE `t1` (
 
37418
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
37419
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
37420
  `f_char1` char(20) DEFAULT NULL,
 
37421
  `f_char2` char(20) DEFAULT NULL,
 
37422
  `f_charbig` varchar(1000) DEFAULT NULL,
 
37423
  PRIMARY KEY (`f_int1`,`f_int2`),
 
37424
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
37425
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
37426
 
 
37427
# check prerequisites-1 success:    1
 
37428
# check COUNT(*) success:    1
 
37429
# check MIN/MAX(f_int1) success:    1
 
37430
# check MIN/MAX(f_int2) success:    1
 
37431
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37432
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37433
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
37434
WHERE f_int1 IN (2,3);
 
37435
ERROR 23000: Can't write; duplicate key in table 't1'
 
37436
# check prerequisites-3 success:    1
 
37437
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
37438
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37439
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
37440
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
37441
WHERE f_int1 IN (2,3);
 
37442
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
37443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37444
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
37445
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
37446
WHERE f_int1 IN (2,3);
 
37447
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
37448
# check read via f_int1 success: 1
 
37449
# check read via f_int2 success: 1
 
37450
        
 
37451
# check multiple-1 success:     1
 
37452
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
37453
        
 
37454
# check multiple-2 success:     1
 
37455
INSERT INTO t1 SELECT * FROM t0_template
 
37456
WHERE MOD(f_int1,3) = 0;
 
37457
        
 
37458
# check multiple-3 success:     1
 
37459
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
37460
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
37461
AND @max_row_div2 + @max_row_div4;
 
37462
        
 
37463
# check multiple-4 success:     1
 
37464
DELETE FROM t1
 
37465
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
37466
AND @max_row_div2 + @max_row_div4 + @max_row;
 
37467
        
 
37468
# check multiple-5 success:     1
 
37469
SELECT COUNT(*) INTO @try_count FROM t0_template
 
37470
WHERE MOD(f_int1,3) = 0
 
37471
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37472
SELECT COUNT(*) INTO @clash_count
 
37473
FROM t1 INNER JOIN t0_template USING(f_int1)
 
37474
WHERE MOD(f_int1,3) = 0
 
37475
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37476
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
37477
INSERT INTO t1
 
37478
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37479
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37480
f_charbig = '#SINGLE#';
 
37481
        
 
37482
# check single-1 success:       1
 
37483
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
37484
INSERT INTO t1
 
37485
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37486
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37487
f_charbig = '#SINGLE#';
 
37488
        
 
37489
# check single-2 success:       1
 
37490
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
37491
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
37492
UPDATE t1 SET f_int1 = @cur_value2
 
37493
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
37494
        
 
37495
# check single-3 success:       1
 
37496
SET @cur_value1= -1;
 
37497
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
37498
UPDATE t1 SET f_int1 = @cur_value1
 
37499
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
37500
        
 
37501
# check single-4 success:       1
 
37502
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
37503
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
37504
        
 
37505
# check single-5 success:       1
 
37506
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
37507
        
 
37508
# check single-6 success:       1
 
37509
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
37510
        
 
37511
# check single-7 success:       1
 
37512
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
37513
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
37514
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
37515
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
37516
f_charbig = '#NULL#';
 
37517
INSERT INTO t1
 
37518
SET f_int1 = NULL , f_int2 = -@max_row,
 
37519
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
37520
f_charbig = '#NULL#';
 
37521
ERROR 23000: Column 'f_int1' cannot be null
 
37522
# check null success:    1
 
37523
DELETE FROM t1
 
37524
WHERE f_int1 = 0 AND f_int2 = 0
 
37525
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
37526
AND f_charbig = '#NULL#';
 
37527
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37528
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37529
   FROM t0_template source_tab
 
37530
WHERE MOD(f_int1,3) = 0
 
37531
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
37532
ON DUPLICATE KEY
 
37533
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
37534
f_int2 = 2 * @max_row + source_tab.f_int1,
 
37535
f_charbig = 'was updated';
 
37536
        
 
37537
# check unique-1-a success:     1
 
37538
        
 
37539
# check unique-1-b success:     1
 
37540
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37543
f_charbig = CONCAT('===',f_char1,'===')
 
37544
WHERE f_charbig = 'was updated';
 
37545
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37546
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
37547
   FROM t0_template source_tab
 
37548
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37549
        
 
37550
# check replace success:        1
 
37551
DELETE FROM t1
 
37552
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
37553
DELETE FROM t1
 
37554
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
37555
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
37556
UPDATE t1 SET f_int2 = f_int1,
 
37557
f_char1 = CAST(f_int1 AS CHAR),
 
37558
f_char2 = CAST(f_int1 AS CHAR),
 
37559
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
37560
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
37561
SET AUTOCOMMIT= 0;
 
37562
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37563
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37564
FROM t0_template source_tab
 
37565
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37566
        
 
37567
# check transactions-1 success:         1
 
37568
COMMIT WORK;
 
37569
        
 
37570
# check transactions-2 success:         1
 
37571
ROLLBACK WORK;
 
37572
        
 
37573
# check transactions-3 success:         1
 
37574
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37575
COMMIT WORK;
 
37576
ROLLBACK WORK;
 
37577
        
 
37578
# check transactions-4 success:         1
 
37579
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37580
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37581
FROM t0_template source_tab
 
37582
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37583
        
 
37584
# check transactions-5 success:         1
 
37585
ROLLBACK WORK;
 
37586
        
 
37587
# check transactions-6 success:         1
 
37588
# INFO: Storage engine used for t1 seems to be transactional.
 
37589
COMMIT;
 
37590
        
 
37591
# check transactions-7 success:         1
 
37592
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37593
COMMIT WORK;
 
37594
SET @@session.sql_mode = 'traditional';
 
37595
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
37596
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37597
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
37598
'', '', 'was inserted' FROM t0_template
 
37599
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37600
ERROR 22012: Division by 0
 
37601
COMMIT;
 
37602
        
 
37603
# check transactions-8 success:         1
 
37604
# INFO: Storage engine used for t1 seems to be able to revert
 
37605
#       changes made by the failing statement.
 
37606
SET @@session.sql_mode = '';
 
37607
SET AUTOCOMMIT= 1;
 
37608
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37609
COMMIT WORK;
 
37610
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
37611
        
 
37612
# check special-1 success:      1
 
37613
UPDATE t1 SET f_charbig = '';
 
37614
        
 
37615
# check special-2 success:      1
 
37616
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
37617
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37618
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
37619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37622
'just inserted' FROM t0_template
 
37623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37624
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
37625
BEGIN
 
37626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37627
f_charbig = 'updated by trigger'
 
37628
      WHERE f_int1 = new.f_int1;
 
37629
END|
 
37630
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37631
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37633
        
 
37634
# check trigger-1 success:      1
 
37635
DROP TRIGGER trg_1;
 
37636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37638
f_charbig = 'just inserted'
 
37639
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37640
DELETE FROM t0_aux
 
37641
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37642
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37643
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37644
'just inserted' FROM t0_template
 
37645
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37646
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
37647
BEGIN
 
37648
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37649
f_charbig = 'updated by trigger'
 
37650
      WHERE f_int1 = new.f_int1;
 
37651
END|
 
37652
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37653
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37655
        
 
37656
# check trigger-2 success:      1
 
37657
DROP TRIGGER trg_1;
 
37658
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37659
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37660
f_charbig = 'just inserted'
 
37661
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37662
DELETE FROM t0_aux
 
37663
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37664
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37665
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37666
'just inserted' FROM t0_template
 
37667
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37668
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37669
BEGIN
 
37670
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37671
f_charbig = 'updated by trigger'
 
37672
      WHERE f_int1 = new.f_int1;
 
37673
END|
 
37674
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37675
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37676
        
 
37677
# check trigger-3 success:      1
 
37678
DROP TRIGGER trg_1;
 
37679
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37680
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37681
f_charbig = 'just inserted'
 
37682
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37683
DELETE FROM t0_aux
 
37684
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37685
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37686
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37687
'just inserted' FROM t0_template
 
37688
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37689
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37690
BEGIN
 
37691
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37692
f_charbig = 'updated by trigger'
 
37693
      WHERE f_int1 = - old.f_int1;
 
37694
END|
 
37695
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37696
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37697
        
 
37698
# check trigger-4 success:      1
 
37699
DROP TRIGGER trg_1;
 
37700
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37701
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37702
f_charbig = 'just inserted'
 
37703
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37704
DELETE FROM t0_aux
 
37705
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37706
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37707
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37708
'just inserted' FROM t0_template
 
37709
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37710
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37711
BEGIN
 
37712
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37713
f_charbig = 'updated by trigger'
 
37714
      WHERE f_int1 = new.f_int1;
 
37715
END|
 
37716
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37717
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37718
        
 
37719
# check trigger-5 success:      1
 
37720
DROP TRIGGER trg_1;
 
37721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37723
f_charbig = 'just inserted'
 
37724
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37725
DELETE FROM t0_aux
 
37726
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37728
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37729
'just inserted' FROM t0_template
 
37730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37731
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37732
BEGIN
 
37733
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37734
f_charbig = 'updated by trigger'
 
37735
      WHERE f_int1 = - old.f_int1;
 
37736
END|
 
37737
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37738
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37739
        
 
37740
# check trigger-6 success:      1
 
37741
DROP TRIGGER trg_1;
 
37742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37743
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37744
f_charbig = 'just inserted'
 
37745
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37746
DELETE FROM t0_aux
 
37747
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37748
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37749
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37750
'just inserted' FROM t0_template
 
37751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37752
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
37753
BEGIN
 
37754
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37755
f_charbig = 'updated by trigger'
 
37756
      WHERE f_int1 = - old.f_int1;
 
37757
END|
 
37758
DELETE FROM t0_aux
 
37759
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37760
        
 
37761
# check trigger-7 success:      1
 
37762
DROP TRIGGER trg_1;
 
37763
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37764
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37765
f_charbig = 'just inserted'
 
37766
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37767
DELETE FROM t0_aux
 
37768
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37769
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37770
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37771
'just inserted' FROM t0_template
 
37772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37773
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
37774
BEGIN
 
37775
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37776
f_charbig = 'updated by trigger'
 
37777
      WHERE f_int1 = - old.f_int1;
 
37778
END|
 
37779
DELETE FROM t0_aux
 
37780
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37781
        
 
37782
# check trigger-8 success:      1
 
37783
DROP TRIGGER trg_1;
 
37784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37786
f_charbig = 'just inserted'
 
37787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37788
DELETE FROM t0_aux
 
37789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37790
DELETE FROM t1
 
37791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37792
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37793
BEGIN
 
37794
SET new.f_int1 = old.f_int1 + @max_row,
 
37795
new.f_int2 = old.f_int2 - @max_row,
 
37796
new.f_charbig = '####updated per update trigger####';
 
37797
END|
 
37798
UPDATE t1
 
37799
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37800
f_charbig = '####updated per update statement itself####';
 
37801
        
 
37802
# check trigger-9 success:      1
 
37803
DROP TRIGGER trg_2;
 
37804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37806
f_charbig = CONCAT('===',f_char1,'===');
 
37807
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37808
BEGIN
 
37809
SET new.f_int1 = new.f_int1 + @max_row,
 
37810
new.f_int2 = new.f_int2 - @max_row,
 
37811
new.f_charbig = '####updated per update trigger####';
 
37812
END|
 
37813
UPDATE t1
 
37814
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37815
f_charbig = '####updated per update statement itself####';
 
37816
        
 
37817
# check trigger-10 success:     1
 
37818
DROP TRIGGER trg_2;
 
37819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37821
f_charbig = CONCAT('===',f_char1,'===');
 
37822
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37823
BEGIN
 
37824
SET new.f_int1 = @my_max1 + @counter,
 
37825
new.f_int2 = @my_min2 - @counter,
 
37826
new.f_charbig = '####updated per insert trigger####';
 
37827
SET @counter = @counter + 1;
 
37828
END|
 
37829
SET @counter = 1;
 
37830
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37831
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37832
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37833
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37835
ORDER BY f_int1;
 
37836
DROP TRIGGER trg_3;
 
37837
        
 
37838
# check trigger-11 success:     1
 
37839
DELETE FROM t1
 
37840
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37841
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37842
AND f_charbig = '####updated per insert trigger####';
 
37843
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37844
BEGIN
 
37845
SET new.f_int1 = @my_max1 + @counter,
 
37846
new.f_int2 = @my_min2 - @counter,
 
37847
new.f_charbig = '####updated per insert trigger####';
 
37848
SET @counter = @counter + 1;
 
37849
END|
 
37850
SET @counter = 1;
 
37851
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37852
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
37853
SELECT CAST(f_int1 AS CHAR),
 
37854
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37855
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37856
ORDER BY f_int1;
 
37857
DROP TRIGGER trg_3;
 
37858
        
 
37859
# check trigger-12 success:     1
 
37860
DELETE FROM t1
 
37861
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37862
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37863
AND f_charbig = '####updated per insert trigger####';
 
37864
ANALYZE  TABLE t1;
 
37865
Table   Op      Msg_type        Msg_text
 
37866
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
37867
CHECK    TABLE t1 EXTENDED;
 
37868
Table   Op      Msg_type        Msg_text
 
37869
test.t1 check   note    The storage engine for the table doesn't support check
 
37870
CHECKSUM TABLE t1 EXTENDED;
 
37871
Table   Checksum
 
37872
test.t1 <some_value>
 
37873
OPTIMIZE TABLE t1;
 
37874
Table   Op      Msg_type        Msg_text
 
37875
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
37876
# check layout success:    1
 
37877
REPAIR   TABLE t1 EXTENDED;
 
37878
Table   Op      Msg_type        Msg_text
 
37879
test.t1 repair  note    The storage engine for the table doesn't support repair
 
37880
# check layout success:    1
 
37881
TRUNCATE t1;
 
37882
        
 
37883
# check TRUNCATE success:       1
 
37884
# check layout success:    1
 
37885
# End usability test (inc/partition_check.inc)
 
37886
DROP TABLE t1;
 
37887
CREATE TABLE t1 (
 
37888
f_int1 INTEGER,
 
37889
f_int2 INTEGER,
 
37890
f_char1 CHAR(20),
 
37891
f_char2 CHAR(20),
 
37892
f_charbig VARCHAR(1000)
 
37893
 
 
37894
)
 
37895
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
37896
(PARTITION parta VALUES LESS THAN (0),
 
37897
PARTITION partb VALUES LESS THAN (5),
 
37898
PARTITION partc VALUES LESS THAN (10),
 
37899
PARTITION partd VALUES LESS THAN (10 + 5),
 
37900
PARTITION parte VALUES LESS THAN (20),
 
37901
PARTITION partf VALUES LESS THAN (2147483646));
 
37902
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37903
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37904
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
37905
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
37906
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37907
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37908
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37909
# Start usability test (inc/partition_check.inc)
 
37910
create_command
 
37911
SHOW CREATE TABLE t1;
 
37912
Table   Create Table
 
37913
t1      CREATE TABLE `t1` (
 
37914
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
37915
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
37916
  `f_char1` char(20) DEFAULT NULL,
 
37917
  `f_char2` char(20) DEFAULT NULL,
 
37918
  `f_charbig` varchar(1000) DEFAULT NULL,
 
37919
  PRIMARY KEY (`f_int1`,`f_int2`),
 
37920
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
37921
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
37922
 
 
37923
# check prerequisites-1 success:    1
 
37924
# check COUNT(*) success:    1
 
37925
# check MIN/MAX(f_int1) success:    1
 
37926
# check MIN/MAX(f_int2) success:    1
 
37927
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37928
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37929
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
37930
WHERE f_int1 IN (2,3);
 
37931
ERROR 23000: Can't write; duplicate key in table 't1'
 
37932
# check prerequisites-3 success:    1
 
37933
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
37934
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37935
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
37936
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
37937
WHERE f_int1 IN (2,3);
 
37938
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
37939
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37940
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
37941
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
37942
WHERE f_int1 IN (2,3);
 
37943
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
37944
# check read via f_int1 success: 1
 
37945
# check read via f_int2 success: 1
 
37946
        
 
37947
# check multiple-1 success:     1
 
37948
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
37949
        
 
37950
# check multiple-2 success:     1
 
37951
INSERT INTO t1 SELECT * FROM t0_template
 
37952
WHERE MOD(f_int1,3) = 0;
 
37953
        
 
37954
# check multiple-3 success:     1
 
37955
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
37956
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
37957
AND @max_row_div2 + @max_row_div4;
 
37958
        
 
37959
# check multiple-4 success:     1
 
37960
DELETE FROM t1
 
37961
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
37962
AND @max_row_div2 + @max_row_div4 + @max_row;
 
37963
        
 
37964
# check multiple-5 success:     1
 
37965
SELECT COUNT(*) INTO @try_count FROM t0_template
 
37966
WHERE MOD(f_int1,3) = 0
 
37967
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37968
SELECT COUNT(*) INTO @clash_count
 
37969
FROM t1 INNER JOIN t0_template USING(f_int1)
 
37970
WHERE MOD(f_int1,3) = 0
 
37971
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37972
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
37973
INSERT INTO t1
 
37974
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37975
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37976
f_charbig = '#SINGLE#';
 
37977
        
 
37978
# check single-1 success:       1
 
37979
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
37980
INSERT INTO t1
 
37981
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37982
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37983
f_charbig = '#SINGLE#';
 
37984
        
 
37985
# check single-2 success:       1
 
37986
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
37987
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
37988
UPDATE t1 SET f_int1 = @cur_value2
 
37989
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
37990
        
 
37991
# check single-3 success:       1
 
37992
SET @cur_value1= -1;
 
37993
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
37994
UPDATE t1 SET f_int1 = @cur_value1
 
37995
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
37996
        
 
37997
# check single-4 success:       1
 
37998
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
37999
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
38000
        
 
38001
# check single-5 success:       1
 
38002
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
38003
        
 
38004
# check single-6 success:       1
 
38005
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
38006
ERROR HY000: Table has no partition for value 2147483647
 
38007
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
38008
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
38009
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
38010
f_charbig = '#NULL#';
 
38011
INSERT INTO t1
 
38012
SET f_int1 = NULL , f_int2 = -@max_row,
 
38013
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
38014
f_charbig = '#NULL#';
 
38015
ERROR 23000: Column 'f_int1' cannot be null
 
38016
# check null success:    1
 
38017
DELETE FROM t1
 
38018
WHERE f_int1 = 0 AND f_int2 = 0
 
38019
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
38020
AND f_charbig = '#NULL#';
 
38021
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38022
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38023
   FROM t0_template source_tab
 
38024
WHERE MOD(f_int1,3) = 0
 
38025
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
38026
ON DUPLICATE KEY
 
38027
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
38028
f_int2 = 2 * @max_row + source_tab.f_int1,
 
38029
f_charbig = 'was updated';
 
38030
        
 
38031
# check unique-1-a success:     1
 
38032
        
 
38033
# check unique-1-b success:     1
 
38034
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38035
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38036
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38037
f_charbig = CONCAT('===',f_char1,'===')
 
38038
WHERE f_charbig = 'was updated';
 
38039
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38040
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
38041
   FROM t0_template source_tab
 
38042
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38043
        
 
38044
# check replace success:        1
 
38045
DELETE FROM t1
 
38046
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
38047
DELETE FROM t1
 
38048
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
38049
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
38050
UPDATE t1 SET f_int2 = f_int1,
 
38051
f_char1 = CAST(f_int1 AS CHAR),
 
38052
f_char2 = CAST(f_int1 AS CHAR),
 
38053
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
38054
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
38055
SET AUTOCOMMIT= 0;
 
38056
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38057
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38058
FROM t0_template source_tab
 
38059
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38060
        
 
38061
# check transactions-1 success:         1
 
38062
COMMIT WORK;
 
38063
        
 
38064
# check transactions-2 success:         1
 
38065
ROLLBACK WORK;
 
38066
        
 
38067
# check transactions-3 success:         1
 
38068
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38069
COMMIT WORK;
 
38070
ROLLBACK WORK;
 
38071
        
 
38072
# check transactions-4 success:         1
 
38073
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38074
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38075
FROM t0_template source_tab
 
38076
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38077
        
 
38078
# check transactions-5 success:         1
 
38079
ROLLBACK WORK;
 
38080
        
 
38081
# check transactions-6 success:         1
 
38082
# INFO: Storage engine used for t1 seems to be transactional.
 
38083
COMMIT;
 
38084
        
 
38085
# check transactions-7 success:         1
 
38086
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38087
COMMIT WORK;
 
38088
SET @@session.sql_mode = 'traditional';
 
38089
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
38090
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38091
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
38092
'', '', 'was inserted' FROM t0_template
 
38093
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38094
ERROR 22012: Division by 0
 
38095
COMMIT;
 
38096
        
 
38097
# check transactions-8 success:         1
 
38098
# INFO: Storage engine used for t1 seems to be able to revert
 
38099
#       changes made by the failing statement.
 
38100
SET @@session.sql_mode = '';
 
38101
SET AUTOCOMMIT= 1;
 
38102
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38103
COMMIT WORK;
 
38104
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
38105
        
 
38106
# check special-1 success:      1
 
38107
UPDATE t1 SET f_charbig = '';
 
38108
        
 
38109
# check special-2 success:      1
 
38110
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
38111
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38112
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
38113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38116
'just inserted' FROM t0_template
 
38117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38118
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
38119
BEGIN
 
38120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38121
f_charbig = 'updated by trigger'
 
38122
      WHERE f_int1 = new.f_int1;
 
38123
END|
 
38124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38125
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38127
        
 
38128
# check trigger-1 success:      1
 
38129
DROP TRIGGER trg_1;
 
38130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38132
f_charbig = 'just inserted'
 
38133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38134
DELETE FROM t0_aux
 
38135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38138
'just inserted' FROM t0_template
 
38139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38140
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
38141
BEGIN
 
38142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38143
f_charbig = 'updated by trigger'
 
38144
      WHERE f_int1 = new.f_int1;
 
38145
END|
 
38146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38147
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38149
        
 
38150
# check trigger-2 success:      1
 
38151
DROP TRIGGER trg_1;
 
38152
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38153
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38154
f_charbig = 'just inserted'
 
38155
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38156
DELETE FROM t0_aux
 
38157
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38158
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38159
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38160
'just inserted' FROM t0_template
 
38161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38162
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38163
BEGIN
 
38164
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38165
f_charbig = 'updated by trigger'
 
38166
      WHERE f_int1 = new.f_int1;
 
38167
END|
 
38168
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38169
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38170
        
 
38171
# check trigger-3 success:      1
 
38172
DROP TRIGGER trg_1;
 
38173
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38174
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38175
f_charbig = 'just inserted'
 
38176
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38177
DELETE FROM t0_aux
 
38178
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38180
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38181
'just inserted' FROM t0_template
 
38182
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38183
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38184
BEGIN
 
38185
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38186
f_charbig = 'updated by trigger'
 
38187
      WHERE f_int1 = - old.f_int1;
 
38188
END|
 
38189
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38190
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38191
        
 
38192
# check trigger-4 success:      1
 
38193
DROP TRIGGER trg_1;
 
38194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38195
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38196
f_charbig = 'just inserted'
 
38197
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38198
DELETE FROM t0_aux
 
38199
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38202
'just inserted' FROM t0_template
 
38203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38204
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38205
BEGIN
 
38206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38207
f_charbig = 'updated by trigger'
 
38208
      WHERE f_int1 = new.f_int1;
 
38209
END|
 
38210
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38211
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38212
        
 
38213
# check trigger-5 success:      1
 
38214
DROP TRIGGER trg_1;
 
38215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38217
f_charbig = 'just inserted'
 
38218
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38219
DELETE FROM t0_aux
 
38220
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38223
'just inserted' FROM t0_template
 
38224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38225
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38226
BEGIN
 
38227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38228
f_charbig = 'updated by trigger'
 
38229
      WHERE f_int1 = - old.f_int1;
 
38230
END|
 
38231
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38232
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38233
        
 
38234
# check trigger-6 success:      1
 
38235
DROP TRIGGER trg_1;
 
38236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38238
f_charbig = 'just inserted'
 
38239
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38240
DELETE FROM t0_aux
 
38241
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38242
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38243
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38244
'just inserted' FROM t0_template
 
38245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38246
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
38247
BEGIN
 
38248
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38249
f_charbig = 'updated by trigger'
 
38250
      WHERE f_int1 = - old.f_int1;
 
38251
END|
 
38252
DELETE FROM t0_aux
 
38253
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38254
        
 
38255
# check trigger-7 success:      1
 
38256
DROP TRIGGER trg_1;
 
38257
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38258
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38259
f_charbig = 'just inserted'
 
38260
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38261
DELETE FROM t0_aux
 
38262
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38263
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38264
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38265
'just inserted' FROM t0_template
 
38266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38267
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
38268
BEGIN
 
38269
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38270
f_charbig = 'updated by trigger'
 
38271
      WHERE f_int1 = - old.f_int1;
 
38272
END|
 
38273
DELETE FROM t0_aux
 
38274
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38275
        
 
38276
# check trigger-8 success:      1
 
38277
DROP TRIGGER trg_1;
 
38278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38280
f_charbig = 'just inserted'
 
38281
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38282
DELETE FROM t0_aux
 
38283
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38284
DELETE FROM t1
 
38285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38286
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38287
BEGIN
 
38288
SET new.f_int1 = old.f_int1 + @max_row,
 
38289
new.f_int2 = old.f_int2 - @max_row,
 
38290
new.f_charbig = '####updated per update trigger####';
 
38291
END|
 
38292
UPDATE t1
 
38293
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38294
f_charbig = '####updated per update statement itself####';
 
38295
        
 
38296
# check trigger-9 success:      1
 
38297
DROP TRIGGER trg_2;
 
38298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38300
f_charbig = CONCAT('===',f_char1,'===');
 
38301
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38302
BEGIN
 
38303
SET new.f_int1 = new.f_int1 + @max_row,
 
38304
new.f_int2 = new.f_int2 - @max_row,
 
38305
new.f_charbig = '####updated per update trigger####';
 
38306
END|
 
38307
UPDATE t1
 
38308
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38309
f_charbig = '####updated per update statement itself####';
 
38310
        
 
38311
# check trigger-10 success:     1
 
38312
DROP TRIGGER trg_2;
 
38313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38315
f_charbig = CONCAT('===',f_char1,'===');
 
38316
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38317
BEGIN
 
38318
SET new.f_int1 = @my_max1 + @counter,
 
38319
new.f_int2 = @my_min2 - @counter,
 
38320
new.f_charbig = '####updated per insert trigger####';
 
38321
SET @counter = @counter + 1;
 
38322
END|
 
38323
SET @counter = 1;
 
38324
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38325
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38326
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38327
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38329
ORDER BY f_int1;
 
38330
DROP TRIGGER trg_3;
 
38331
        
 
38332
# check trigger-11 success:     1
 
38333
DELETE FROM t1
 
38334
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38335
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38336
AND f_charbig = '####updated per insert trigger####';
 
38337
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38338
BEGIN
 
38339
SET new.f_int1 = @my_max1 + @counter,
 
38340
new.f_int2 = @my_min2 - @counter,
 
38341
new.f_charbig = '####updated per insert trigger####';
 
38342
SET @counter = @counter + 1;
 
38343
END|
 
38344
SET @counter = 1;
 
38345
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38346
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
38347
SELECT CAST(f_int1 AS CHAR),
 
38348
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38350
ORDER BY f_int1;
 
38351
DROP TRIGGER trg_3;
 
38352
        
 
38353
# check trigger-12 success:     1
 
38354
DELETE FROM t1
 
38355
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38356
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38357
AND f_charbig = '####updated per insert trigger####';
 
38358
ANALYZE  TABLE t1;
 
38359
Table   Op      Msg_type        Msg_text
 
38360
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
38361
CHECK    TABLE t1 EXTENDED;
 
38362
Table   Op      Msg_type        Msg_text
 
38363
test.t1 check   note    The storage engine for the table doesn't support check
 
38364
CHECKSUM TABLE t1 EXTENDED;
 
38365
Table   Checksum
 
38366
test.t1 <some_value>
 
38367
OPTIMIZE TABLE t1;
 
38368
Table   Op      Msg_type        Msg_text
 
38369
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
38370
# check layout success:    1
 
38371
REPAIR   TABLE t1 EXTENDED;
 
38372
Table   Op      Msg_type        Msg_text
 
38373
test.t1 repair  note    The storage engine for the table doesn't support repair
 
38374
# check layout success:    1
 
38375
TRUNCATE t1;
 
38376
        
 
38377
# check TRUNCATE success:       1
 
38378
# check layout success:    1
 
38379
# End usability test (inc/partition_check.inc)
 
38380
DROP TABLE t1;
 
38381
CREATE TABLE t1 (
 
38382
f_int1 INTEGER,
 
38383
f_int2 INTEGER,
 
38384
f_char1 CHAR(20),
 
38385
f_char2 CHAR(20),
 
38386
f_charbig VARCHAR(1000)
 
38387
 
 
38388
)
 
38389
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
38390
(PARTITION parta VALUES LESS THAN (0),
 
38391
PARTITION partb VALUES LESS THAN (5),
 
38392
PARTITION partc VALUES LESS THAN (10),
 
38393
PARTITION partd VALUES LESS THAN (2147483646));
 
38394
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38395
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38396
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
38397
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
38398
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38399
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38400
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38401
# Start usability test (inc/partition_check.inc)
 
38402
create_command
 
38403
SHOW CREATE TABLE t1;
 
38404
Table   Create Table
 
38405
t1      CREATE TABLE `t1` (
 
38406
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
38407
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
38408
  `f_char1` char(20) DEFAULT NULL,
 
38409
  `f_char2` char(20) DEFAULT NULL,
 
38410
  `f_charbig` varchar(1000) DEFAULT NULL,
 
38411
  PRIMARY KEY (`f_int1`,`f_int2`),
 
38412
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
38413
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
38414
 
 
38415
# check prerequisites-1 success:    1
 
38416
# check COUNT(*) success:    1
 
38417
# check MIN/MAX(f_int1) success:    1
 
38418
# check MIN/MAX(f_int2) success:    1
 
38419
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38420
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38421
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
38422
WHERE f_int1 IN (2,3);
 
38423
ERROR 23000: Can't write; duplicate key in table 't1'
 
38424
# check prerequisites-3 success:    1
 
38425
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
38426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38427
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
38428
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
38429
WHERE f_int1 IN (2,3);
 
38430
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
38431
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38432
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
38433
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
38434
WHERE f_int1 IN (2,3);
 
38435
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
38436
# check read via f_int1 success: 1
 
38437
# check read via f_int2 success: 1
 
38438
        
 
38439
# check multiple-1 success:     1
 
38440
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
38441
        
 
38442
# check multiple-2 success:     1
 
38443
INSERT INTO t1 SELECT * FROM t0_template
 
38444
WHERE MOD(f_int1,3) = 0;
 
38445
        
 
38446
# check multiple-3 success:     1
 
38447
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
38448
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
38449
AND @max_row_div2 + @max_row_div4;
 
38450
        
 
38451
# check multiple-4 success:     1
 
38452
DELETE FROM t1
 
38453
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
38454
AND @max_row_div2 + @max_row_div4 + @max_row;
 
38455
        
 
38456
# check multiple-5 success:     1
 
38457
SELECT COUNT(*) INTO @try_count FROM t0_template
 
38458
WHERE MOD(f_int1,3) = 0
 
38459
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38460
SELECT COUNT(*) INTO @clash_count
 
38461
FROM t1 INNER JOIN t0_template USING(f_int1)
 
38462
WHERE MOD(f_int1,3) = 0
 
38463
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38464
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
38465
INSERT INTO t1
 
38466
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38467
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38468
f_charbig = '#SINGLE#';
 
38469
        
 
38470
# check single-1 success:       1
 
38471
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
38472
INSERT INTO t1
 
38473
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38474
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38475
f_charbig = '#SINGLE#';
 
38476
        
 
38477
# check single-2 success:       1
 
38478
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
38479
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
38480
UPDATE t1 SET f_int1 = @cur_value2
 
38481
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
38482
        
 
38483
# check single-3 success:       1
 
38484
SET @cur_value1= -1;
 
38485
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
38486
UPDATE t1 SET f_int1 = @cur_value1
 
38487
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
38488
        
 
38489
# check single-4 success:       1
 
38490
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
38491
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
38492
        
 
38493
# check single-5 success:       1
 
38494
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
38495
        
 
38496
# check single-6 success:       1
 
38497
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
38498
ERROR HY000: Table has no partition for value 2147483647
 
38499
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
38500
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
38501
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
38502
f_charbig = '#NULL#';
 
38503
INSERT INTO t1
 
38504
SET f_int1 = NULL , f_int2 = -@max_row,
 
38505
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
38506
f_charbig = '#NULL#';
 
38507
ERROR 23000: Column 'f_int1' cannot be null
 
38508
# check null success:    1
 
38509
DELETE FROM t1
 
38510
WHERE f_int1 = 0 AND f_int2 = 0
 
38511
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
38512
AND f_charbig = '#NULL#';
 
38513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38514
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38515
   FROM t0_template source_tab
 
38516
WHERE MOD(f_int1,3) = 0
 
38517
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
38518
ON DUPLICATE KEY
 
38519
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
38520
f_int2 = 2 * @max_row + source_tab.f_int1,
 
38521
f_charbig = 'was updated';
 
38522
        
 
38523
# check unique-1-a success:     1
 
38524
        
 
38525
# check unique-1-b success:     1
 
38526
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38527
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38528
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38529
f_charbig = CONCAT('===',f_char1,'===')
 
38530
WHERE f_charbig = 'was updated';
 
38531
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38532
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
38533
   FROM t0_template source_tab
 
38534
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38535
        
 
38536
# check replace success:        1
 
38537
DELETE FROM t1
 
38538
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
38539
DELETE FROM t1
 
38540
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
38541
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
38542
UPDATE t1 SET f_int2 = f_int1,
 
38543
f_char1 = CAST(f_int1 AS CHAR),
 
38544
f_char2 = CAST(f_int1 AS CHAR),
 
38545
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
38546
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
38547
SET AUTOCOMMIT= 0;
 
38548
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38549
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38550
FROM t0_template source_tab
 
38551
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38552
        
 
38553
# check transactions-1 success:         1
 
38554
COMMIT WORK;
 
38555
        
 
38556
# check transactions-2 success:         1
 
38557
ROLLBACK WORK;
 
38558
        
 
38559
# check transactions-3 success:         1
 
38560
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38561
COMMIT WORK;
 
38562
ROLLBACK WORK;
 
38563
        
 
38564
# check transactions-4 success:         1
 
38565
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38566
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38567
FROM t0_template source_tab
 
38568
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38569
        
 
38570
# check transactions-5 success:         1
 
38571
ROLLBACK WORK;
 
38572
        
 
38573
# check transactions-6 success:         1
 
38574
# INFO: Storage engine used for t1 seems to be transactional.
 
38575
COMMIT;
 
38576
        
 
38577
# check transactions-7 success:         1
 
38578
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38579
COMMIT WORK;
 
38580
SET @@session.sql_mode = 'traditional';
 
38581
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
38582
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38583
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
38584
'', '', 'was inserted' FROM t0_template
 
38585
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38586
ERROR 22012: Division by 0
 
38587
COMMIT;
 
38588
        
 
38589
# check transactions-8 success:         1
 
38590
# INFO: Storage engine used for t1 seems to be able to revert
 
38591
#       changes made by the failing statement.
 
38592
SET @@session.sql_mode = '';
 
38593
SET AUTOCOMMIT= 1;
 
38594
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38595
COMMIT WORK;
 
38596
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
38597
        
 
38598
# check special-1 success:      1
 
38599
UPDATE t1 SET f_charbig = '';
 
38600
        
 
38601
# check special-2 success:      1
 
38602
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
38603
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38604
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
38605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38608
'just inserted' FROM t0_template
 
38609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38610
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
38611
BEGIN
 
38612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38613
f_charbig = 'updated by trigger'
 
38614
      WHERE f_int1 = new.f_int1;
 
38615
END|
 
38616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38617
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38619
        
 
38620
# check trigger-1 success:      1
 
38621
DROP TRIGGER trg_1;
 
38622
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38623
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38624
f_charbig = 'just inserted'
 
38625
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38626
DELETE FROM t0_aux
 
38627
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38628
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38629
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38630
'just inserted' FROM t0_template
 
38631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38632
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
38633
BEGIN
 
38634
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38635
f_charbig = 'updated by trigger'
 
38636
      WHERE f_int1 = new.f_int1;
 
38637
END|
 
38638
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38639
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38641
        
 
38642
# check trigger-2 success:      1
 
38643
DROP TRIGGER trg_1;
 
38644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38646
f_charbig = 'just inserted'
 
38647
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38648
DELETE FROM t0_aux
 
38649
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38652
'just inserted' FROM t0_template
 
38653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38654
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38655
BEGIN
 
38656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38657
f_charbig = 'updated by trigger'
 
38658
      WHERE f_int1 = new.f_int1;
 
38659
END|
 
38660
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38661
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38662
        
 
38663
# check trigger-3 success:      1
 
38664
DROP TRIGGER trg_1;
 
38665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38667
f_charbig = 'just inserted'
 
38668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38669
DELETE FROM t0_aux
 
38670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38672
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38673
'just inserted' FROM t0_template
 
38674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38675
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38676
BEGIN
 
38677
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38678
f_charbig = 'updated by trigger'
 
38679
      WHERE f_int1 = - old.f_int1;
 
38680
END|
 
38681
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38682
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38683
        
 
38684
# check trigger-4 success:      1
 
38685
DROP TRIGGER trg_1;
 
38686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38688
f_charbig = 'just inserted'
 
38689
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38690
DELETE FROM t0_aux
 
38691
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38692
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38693
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38694
'just inserted' FROM t0_template
 
38695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38696
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38697
BEGIN
 
38698
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38699
f_charbig = 'updated by trigger'
 
38700
      WHERE f_int1 = new.f_int1;
 
38701
END|
 
38702
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38703
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38704
        
 
38705
# check trigger-5 success:      1
 
38706
DROP TRIGGER trg_1;
 
38707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38709
f_charbig = 'just inserted'
 
38710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38711
DELETE FROM t0_aux
 
38712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38715
'just inserted' FROM t0_template
 
38716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38717
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38718
BEGIN
 
38719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38720
f_charbig = 'updated by trigger'
 
38721
      WHERE f_int1 = - old.f_int1;
 
38722
END|
 
38723
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38724
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38725
        
 
38726
# check trigger-6 success:      1
 
38727
DROP TRIGGER trg_1;
 
38728
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38729
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38730
f_charbig = 'just inserted'
 
38731
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38732
DELETE FROM t0_aux
 
38733
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38736
'just inserted' FROM t0_template
 
38737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38738
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
38739
BEGIN
 
38740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38741
f_charbig = 'updated by trigger'
 
38742
      WHERE f_int1 = - old.f_int1;
 
38743
END|
 
38744
DELETE FROM t0_aux
 
38745
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38746
        
 
38747
# check trigger-7 success:      1
 
38748
DROP TRIGGER trg_1;
 
38749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38751
f_charbig = 'just inserted'
 
38752
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38753
DELETE FROM t0_aux
 
38754
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38756
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38757
'just inserted' FROM t0_template
 
38758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38759
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
38760
BEGIN
 
38761
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38762
f_charbig = 'updated by trigger'
 
38763
      WHERE f_int1 = - old.f_int1;
 
38764
END|
 
38765
DELETE FROM t0_aux
 
38766
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38767
        
 
38768
# check trigger-8 success:      1
 
38769
DROP TRIGGER trg_1;
 
38770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38772
f_charbig = 'just inserted'
 
38773
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38774
DELETE FROM t0_aux
 
38775
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38776
DELETE FROM t1
 
38777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38778
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38779
BEGIN
 
38780
SET new.f_int1 = old.f_int1 + @max_row,
 
38781
new.f_int2 = old.f_int2 - @max_row,
 
38782
new.f_charbig = '####updated per update trigger####';
 
38783
END|
 
38784
UPDATE t1
 
38785
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38786
f_charbig = '####updated per update statement itself####';
 
38787
        
 
38788
# check trigger-9 success:      1
 
38789
DROP TRIGGER trg_2;
 
38790
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38791
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38792
f_charbig = CONCAT('===',f_char1,'===');
 
38793
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38794
BEGIN
 
38795
SET new.f_int1 = new.f_int1 + @max_row,
 
38796
new.f_int2 = new.f_int2 - @max_row,
 
38797
new.f_charbig = '####updated per update trigger####';
 
38798
END|
 
38799
UPDATE t1
 
38800
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38801
f_charbig = '####updated per update statement itself####';
 
38802
        
 
38803
# check trigger-10 success:     1
 
38804
DROP TRIGGER trg_2;
 
38805
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38806
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38807
f_charbig = CONCAT('===',f_char1,'===');
 
38808
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38809
BEGIN
 
38810
SET new.f_int1 = @my_max1 + @counter,
 
38811
new.f_int2 = @my_min2 - @counter,
 
38812
new.f_charbig = '####updated per insert trigger####';
 
38813
SET @counter = @counter + 1;
 
38814
END|
 
38815
SET @counter = 1;
 
38816
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38818
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38819
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38820
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38821
ORDER BY f_int1;
 
38822
DROP TRIGGER trg_3;
 
38823
        
 
38824
# check trigger-11 success:     1
 
38825
DELETE FROM t1
 
38826
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38827
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38828
AND f_charbig = '####updated per insert trigger####';
 
38829
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38830
BEGIN
 
38831
SET new.f_int1 = @my_max1 + @counter,
 
38832
new.f_int2 = @my_min2 - @counter,
 
38833
new.f_charbig = '####updated per insert trigger####';
 
38834
SET @counter = @counter + 1;
 
38835
END|
 
38836
SET @counter = 1;
 
38837
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38838
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
38839
SELECT CAST(f_int1 AS CHAR),
 
38840
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38842
ORDER BY f_int1;
 
38843
DROP TRIGGER trg_3;
 
38844
        
 
38845
# check trigger-12 success:     1
 
38846
DELETE FROM t1
 
38847
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38848
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38849
AND f_charbig = '####updated per insert trigger####';
 
38850
ANALYZE  TABLE t1;
 
38851
Table   Op      Msg_type        Msg_text
 
38852
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
38853
CHECK    TABLE t1 EXTENDED;
 
38854
Table   Op      Msg_type        Msg_text
 
38855
test.t1 check   note    The storage engine for the table doesn't support check
 
38856
CHECKSUM TABLE t1 EXTENDED;
 
38857
Table   Checksum
 
38858
test.t1 <some_value>
 
38859
OPTIMIZE TABLE t1;
 
38860
Table   Op      Msg_type        Msg_text
 
38861
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
38862
# check layout success:    1
 
38863
REPAIR   TABLE t1 EXTENDED;
 
38864
Table   Op      Msg_type        Msg_text
 
38865
test.t1 repair  note    The storage engine for the table doesn't support repair
 
38866
# check layout success:    1
 
38867
TRUNCATE t1;
 
38868
        
 
38869
# check TRUNCATE success:       1
 
38870
# check layout success:    1
 
38871
# End usability test (inc/partition_check.inc)
 
38872
DROP TABLE t1;
 
38873
CREATE TABLE t1 (
 
38874
f_int1 INTEGER,
 
38875
f_int2 INTEGER,
 
38876
f_char1 CHAR(20),
 
38877
f_char2 CHAR(20),
 
38878
f_charbig VARCHAR(1000)
 
38879
 
 
38880
)
 
38881
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
38882
(PARTITION part1 VALUES LESS THAN (0)
 
38883
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
38884
PARTITION part2 VALUES LESS THAN (5)
 
38885
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
38886
PARTITION part3 VALUES LESS THAN (10)
 
38887
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
38888
PARTITION part4 VALUES LESS THAN (2147483646)
 
38889
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
38890
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38891
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38892
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
38893
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
38894
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38895
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38896
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38897
# Start usability test (inc/partition_check.inc)
 
38898
create_command
 
38899
SHOW CREATE TABLE t1;
 
38900
Table   Create Table
 
38901
t1      CREATE TABLE `t1` (
 
38902
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
38903
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
38904
  `f_char1` char(20) DEFAULT NULL,
 
38905
  `f_char2` char(20) DEFAULT NULL,
 
38906
  `f_charbig` varchar(1000) DEFAULT NULL,
 
38907
  PRIMARY KEY (`f_int1`,`f_int2`),
 
38908
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
38909
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
38910
 
 
38911
# check prerequisites-1 success:    1
 
38912
# check COUNT(*) success:    1
 
38913
# check MIN/MAX(f_int1) success:    1
 
38914
# check MIN/MAX(f_int2) success:    1
 
38915
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38916
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38917
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
38918
WHERE f_int1 IN (2,3);
 
38919
ERROR 23000: Can't write; duplicate key in table 't1'
 
38920
# check prerequisites-3 success:    1
 
38921
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
38922
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38923
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
38924
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
38925
WHERE f_int1 IN (2,3);
 
38926
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
38927
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38928
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
38929
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
38930
WHERE f_int1 IN (2,3);
 
38931
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
38932
# check read via f_int1 success: 1
 
38933
# check read via f_int2 success: 1
 
38934
        
 
38935
# check multiple-1 success:     1
 
38936
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
38937
        
 
38938
# check multiple-2 success:     1
 
38939
INSERT INTO t1 SELECT * FROM t0_template
 
38940
WHERE MOD(f_int1,3) = 0;
 
38941
        
 
38942
# check multiple-3 success:     1
 
38943
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
38944
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
38945
AND @max_row_div2 + @max_row_div4;
 
38946
        
 
38947
# check multiple-4 success:     1
 
38948
DELETE FROM t1
 
38949
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
38950
AND @max_row_div2 + @max_row_div4 + @max_row;
 
38951
        
 
38952
# check multiple-5 success:     1
 
38953
SELECT COUNT(*) INTO @try_count FROM t0_template
 
38954
WHERE MOD(f_int1,3) = 0
 
38955
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38956
SELECT COUNT(*) INTO @clash_count
 
38957
FROM t1 INNER JOIN t0_template USING(f_int1)
 
38958
WHERE MOD(f_int1,3) = 0
 
38959
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38960
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
38961
INSERT INTO t1
 
38962
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38963
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38964
f_charbig = '#SINGLE#';
 
38965
        
 
38966
# check single-1 success:       1
 
38967
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
38968
INSERT INTO t1
 
38969
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38970
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38971
f_charbig = '#SINGLE#';
 
38972
        
 
38973
# check single-2 success:       1
 
38974
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
38975
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
38976
UPDATE t1 SET f_int1 = @cur_value2
 
38977
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
38978
        
 
38979
# check single-3 success:       1
 
38980
SET @cur_value1= -1;
 
38981
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
38982
UPDATE t1 SET f_int1 = @cur_value1
 
38983
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
38984
        
 
38985
# check single-4 success:       1
 
38986
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
38987
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
38988
        
 
38989
# check single-5 success:       1
 
38990
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
38991
        
 
38992
# check single-6 success:       1
 
38993
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
38994
ERROR HY000: Table has no partition for value 2147483647
 
38995
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
38996
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
38997
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
38998
f_charbig = '#NULL#';
 
38999
INSERT INTO t1
 
39000
SET f_int1 = NULL , f_int2 = -@max_row,
 
39001
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
39002
f_charbig = '#NULL#';
 
39003
ERROR 23000: Column 'f_int1' cannot be null
 
39004
# check null success:    1
 
39005
DELETE FROM t1
 
39006
WHERE f_int1 = 0 AND f_int2 = 0
 
39007
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
39008
AND f_charbig = '#NULL#';
 
39009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39010
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39011
   FROM t0_template source_tab
 
39012
WHERE MOD(f_int1,3) = 0
 
39013
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
39014
ON DUPLICATE KEY
 
39015
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
39016
f_int2 = 2 * @max_row + source_tab.f_int1,
 
39017
f_charbig = 'was updated';
 
39018
        
 
39019
# check unique-1-a success:     1
 
39020
        
 
39021
# check unique-1-b success:     1
 
39022
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39023
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39024
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39025
f_charbig = CONCAT('===',f_char1,'===')
 
39026
WHERE f_charbig = 'was updated';
 
39027
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39028
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
39029
   FROM t0_template source_tab
 
39030
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39031
        
 
39032
# check replace success:        1
 
39033
DELETE FROM t1
 
39034
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
39035
DELETE FROM t1
 
39036
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
39037
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
39038
UPDATE t1 SET f_int2 = f_int1,
 
39039
f_char1 = CAST(f_int1 AS CHAR),
 
39040
f_char2 = CAST(f_int1 AS CHAR),
 
39041
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
39042
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
39043
SET AUTOCOMMIT= 0;
 
39044
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39045
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39046
FROM t0_template source_tab
 
39047
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39048
        
 
39049
# check transactions-1 success:         1
 
39050
COMMIT WORK;
 
39051
        
 
39052
# check transactions-2 success:         1
 
39053
ROLLBACK WORK;
 
39054
        
 
39055
# check transactions-3 success:         1
 
39056
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39057
COMMIT WORK;
 
39058
ROLLBACK WORK;
 
39059
        
 
39060
# check transactions-4 success:         1
 
39061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39062
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39063
FROM t0_template source_tab
 
39064
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39065
        
 
39066
# check transactions-5 success:         1
 
39067
ROLLBACK WORK;
 
39068
        
 
39069
# check transactions-6 success:         1
 
39070
# INFO: Storage engine used for t1 seems to be transactional.
 
39071
COMMIT;
 
39072
        
 
39073
# check transactions-7 success:         1
 
39074
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39075
COMMIT WORK;
 
39076
SET @@session.sql_mode = 'traditional';
 
39077
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
39078
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39079
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
39080
'', '', 'was inserted' FROM t0_template
 
39081
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39082
ERROR 22012: Division by 0
 
39083
COMMIT;
 
39084
        
 
39085
# check transactions-8 success:         1
 
39086
# INFO: Storage engine used for t1 seems to be able to revert
 
39087
#       changes made by the failing statement.
 
39088
SET @@session.sql_mode = '';
 
39089
SET AUTOCOMMIT= 1;
 
39090
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39091
COMMIT WORK;
 
39092
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
39093
        
 
39094
# check special-1 success:      1
 
39095
UPDATE t1 SET f_charbig = '';
 
39096
        
 
39097
# check special-2 success:      1
 
39098
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
39099
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39100
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
39101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39103
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39104
'just inserted' FROM t0_template
 
39105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39106
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
39107
BEGIN
 
39108
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39109
f_charbig = 'updated by trigger'
 
39110
      WHERE f_int1 = new.f_int1;
 
39111
END|
 
39112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39113
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
39114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39115
        
 
39116
# check trigger-1 success:      1
 
39117
DROP TRIGGER trg_1;
 
39118
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39119
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39120
f_charbig = 'just inserted'
 
39121
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39122
DELETE FROM t0_aux
 
39123
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39125
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39126
'just inserted' FROM t0_template
 
39127
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39128
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
39129
BEGIN
 
39130
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39131
f_charbig = 'updated by trigger'
 
39132
      WHERE f_int1 = new.f_int1;
 
39133
END|
 
39134
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39135
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
39136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39137
        
 
39138
# check trigger-2 success:      1
 
39139
DROP TRIGGER trg_1;
 
39140
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39141
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39142
f_charbig = 'just inserted'
 
39143
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39144
DELETE FROM t0_aux
 
39145
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39147
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39148
'just inserted' FROM t0_template
 
39149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39150
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
39151
BEGIN
 
39152
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39153
f_charbig = 'updated by trigger'
 
39154
      WHERE f_int1 = new.f_int1;
 
39155
END|
 
39156
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39157
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39158
        
 
39159
# check trigger-3 success:      1
 
39160
DROP TRIGGER trg_1;
 
39161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39163
f_charbig = 'just inserted'
 
39164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39165
DELETE FROM t0_aux
 
39166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39169
'just inserted' FROM t0_template
 
39170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39171
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
39172
BEGIN
 
39173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39174
f_charbig = 'updated by trigger'
 
39175
      WHERE f_int1 = - old.f_int1;
 
39176
END|
 
39177
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39178
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39179
        
 
39180
# check trigger-4 success:      1
 
39181
DROP TRIGGER trg_1;
 
39182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39184
f_charbig = 'just inserted'
 
39185
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39186
DELETE FROM t0_aux
 
39187
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39189
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39190
'just inserted' FROM t0_template
 
39191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39192
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
39193
BEGIN
 
39194
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39195
f_charbig = 'updated by trigger'
 
39196
      WHERE f_int1 = new.f_int1;
 
39197
END|
 
39198
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39199
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39200
        
 
39201
# check trigger-5 success:      1
 
39202
DROP TRIGGER trg_1;
 
39203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39205
f_charbig = 'just inserted'
 
39206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39207
DELETE FROM t0_aux
 
39208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39211
'just inserted' FROM t0_template
 
39212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39213
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
39214
BEGIN
 
39215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39216
f_charbig = 'updated by trigger'
 
39217
      WHERE f_int1 = - old.f_int1;
 
39218
END|
 
39219
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39221
        
 
39222
# check trigger-6 success:      1
 
39223
DROP TRIGGER trg_1;
 
39224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39226
f_charbig = 'just inserted'
 
39227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39228
DELETE FROM t0_aux
 
39229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39230
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39231
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39232
'just inserted' FROM t0_template
 
39233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39234
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
39235
BEGIN
 
39236
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39237
f_charbig = 'updated by trigger'
 
39238
      WHERE f_int1 = - old.f_int1;
 
39239
END|
 
39240
DELETE FROM t0_aux
 
39241
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39242
        
 
39243
# check trigger-7 success:      1
 
39244
DROP TRIGGER trg_1;
 
39245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39247
f_charbig = 'just inserted'
 
39248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39249
DELETE FROM t0_aux
 
39250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39253
'just inserted' FROM t0_template
 
39254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39255
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
39256
BEGIN
 
39257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39258
f_charbig = 'updated by trigger'
 
39259
      WHERE f_int1 = - old.f_int1;
 
39260
END|
 
39261
DELETE FROM t0_aux
 
39262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39263
        
 
39264
# check trigger-8 success:      1
 
39265
DROP TRIGGER trg_1;
 
39266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39268
f_charbig = 'just inserted'
 
39269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39270
DELETE FROM t0_aux
 
39271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39272
DELETE FROM t1
 
39273
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39274
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
39275
BEGIN
 
39276
SET new.f_int1 = old.f_int1 + @max_row,
 
39277
new.f_int2 = old.f_int2 - @max_row,
 
39278
new.f_charbig = '####updated per update trigger####';
 
39279
END|
 
39280
UPDATE t1
 
39281
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
39282
f_charbig = '####updated per update statement itself####';
 
39283
        
 
39284
# check trigger-9 success:      1
 
39285
DROP TRIGGER trg_2;
 
39286
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39287
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39288
f_charbig = CONCAT('===',f_char1,'===');
 
39289
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
39290
BEGIN
 
39291
SET new.f_int1 = new.f_int1 + @max_row,
 
39292
new.f_int2 = new.f_int2 - @max_row,
 
39293
new.f_charbig = '####updated per update trigger####';
 
39294
END|
 
39295
UPDATE t1
 
39296
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
39297
f_charbig = '####updated per update statement itself####';
 
39298
        
 
39299
# check trigger-10 success:     1
 
39300
DROP TRIGGER trg_2;
 
39301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39303
f_charbig = CONCAT('===',f_char1,'===');
 
39304
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
39305
BEGIN
 
39306
SET new.f_int1 = @my_max1 + @counter,
 
39307
new.f_int2 = @my_min2 - @counter,
 
39308
new.f_charbig = '####updated per insert trigger####';
 
39309
SET @counter = @counter + 1;
 
39310
END|
 
39311
SET @counter = 1;
 
39312
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
39313
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39314
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
39315
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
39316
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
39317
ORDER BY f_int1;
 
39318
DROP TRIGGER trg_3;
 
39319
        
 
39320
# check trigger-11 success:     1
 
39321
DELETE FROM t1
 
39322
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
39323
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
39324
AND f_charbig = '####updated per insert trigger####';
 
39325
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
39326
BEGIN
 
39327
SET new.f_int1 = @my_max1 + @counter,
 
39328
new.f_int2 = @my_min2 - @counter,
 
39329
new.f_charbig = '####updated per insert trigger####';
 
39330
SET @counter = @counter + 1;
 
39331
END|
 
39332
SET @counter = 1;
 
39333
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
39334
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
39335
SELECT CAST(f_int1 AS CHAR),
 
39336
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
39337
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
39338
ORDER BY f_int1;
 
39339
DROP TRIGGER trg_3;
 
39340
        
 
39341
# check trigger-12 success:     1
 
39342
DELETE FROM t1
 
39343
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
39344
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
39345
AND f_charbig = '####updated per insert trigger####';
 
39346
ANALYZE  TABLE t1;
 
39347
Table   Op      Msg_type        Msg_text
 
39348
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
39349
CHECK    TABLE t1 EXTENDED;
 
39350
Table   Op      Msg_type        Msg_text
 
39351
test.t1 check   note    The storage engine for the table doesn't support check
 
39352
CHECKSUM TABLE t1 EXTENDED;
 
39353
Table   Checksum
 
39354
test.t1 <some_value>
 
39355
OPTIMIZE TABLE t1;
 
39356
Table   Op      Msg_type        Msg_text
 
39357
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
39358
# check layout success:    1
 
39359
REPAIR   TABLE t1 EXTENDED;
 
39360
Table   Op      Msg_type        Msg_text
 
39361
test.t1 repair  note    The storage engine for the table doesn't support repair
 
39362
# check layout success:    1
 
39363
TRUNCATE t1;
 
39364
        
 
39365
# check TRUNCATE success:       1
 
39366
# check layout success:    1
 
39367
# End usability test (inc/partition_check.inc)
 
39368
DROP TABLE t1;
 
39369
CREATE TABLE t1 (
 
39370
f_int1 INTEGER,
 
39371
f_int2 INTEGER,
 
39372
f_char1 CHAR(20),
 
39373
f_char2 CHAR(20),
 
39374
f_charbig VARCHAR(1000)
 
39375
 
 
39376
)
 
39377
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
39378
(PARTITION part1 VALUES IN (0)
 
39379
(SUBPARTITION sp11, SUBPARTITION sp12),
 
39380
PARTITION part2 VALUES IN (1)
 
39381
(SUBPARTITION sp21, SUBPARTITION sp22),
 
39382
PARTITION part3 VALUES IN (2)
 
39383
(SUBPARTITION sp31, SUBPARTITION sp32),
 
39384
PARTITION part4 VALUES IN (NULL)
 
39385
(SUBPARTITION sp41, SUBPARTITION sp42));
 
39386
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39387
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39388
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39389
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
39390
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39391
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39392
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39393
# Start usability test (inc/partition_check.inc)
 
39394
create_command
 
39395
SHOW CREATE TABLE t1;
 
39396
Table   Create Table
 
39397
t1      CREATE TABLE `t1` (
 
39398
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
39399
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
39400
  `f_char1` char(20) DEFAULT NULL,
 
39401
  `f_char2` char(20) DEFAULT NULL,
 
39402
  `f_charbig` varchar(1000) DEFAULT NULL,
 
39403
  PRIMARY KEY (`f_int1`,`f_int2`),
 
39404
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
39405
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
39406
 
 
39407
# check prerequisites-1 success:    1
 
39408
# check COUNT(*) success:    1
 
39409
# check MIN/MAX(f_int1) success:    1
 
39410
# check MIN/MAX(f_int2) success:    1
 
39411
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39412
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
39413
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
39414
WHERE f_int1 IN (2,3);
 
39415
ERROR 23000: Can't write; duplicate key in table 't1'
 
39416
# check prerequisites-3 success:    1
 
39417
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
39418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39419
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
39420
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
39421
WHERE f_int1 IN (2,3);
 
39422
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
39423
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39424
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
39425
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
39426
WHERE f_int1 IN (2,3);
 
39427
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
39428
# check read via f_int1 success: 1
 
39429
# check read via f_int2 success: 1
 
39430
        
 
39431
# check multiple-1 success:     1
 
39432
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
39433
        
 
39434
# check multiple-2 success:     1
 
39435
INSERT INTO t1 SELECT * FROM t0_template
 
39436
WHERE MOD(f_int1,3) = 0;
 
39437
        
 
39438
# check multiple-3 success:     1
 
39439
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
39440
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
39441
AND @max_row_div2 + @max_row_div4;
 
39442
        
 
39443
# check multiple-4 success:     1
 
39444
DELETE FROM t1
 
39445
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
39446
AND @max_row_div2 + @max_row_div4 + @max_row;
 
39447
        
 
39448
# check multiple-5 success:     1
 
39449
SELECT COUNT(*) INTO @try_count FROM t0_template
 
39450
WHERE MOD(f_int1,3) = 0
 
39451
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39452
SELECT COUNT(*) INTO @clash_count
 
39453
FROM t1 INNER JOIN t0_template USING(f_int1)
 
39454
WHERE MOD(f_int1,3) = 0
 
39455
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39456
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
39457
INSERT INTO t1
 
39458
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39459
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39460
f_charbig = '#SINGLE#';
 
39461
        
 
39462
# check single-1 success:       1
 
39463
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
39464
INSERT INTO t1
 
39465
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39466
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39467
f_charbig = '#SINGLE#';
 
39468
        
 
39469
# check single-2 success:       1
 
39470
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
39471
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
39472
UPDATE t1 SET f_int1 = @cur_value2
 
39473
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
39474
        
 
39475
# check single-3 success:       1
 
39476
SET @cur_value1= -1;
 
39477
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
39478
UPDATE t1 SET f_int1 = @cur_value1
 
39479
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
39480
        
 
39481
# check single-4 success:       1
 
39482
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
39483
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
39484
        
 
39485
# check single-5 success:       1
 
39486
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
39487
        
 
39488
# check single-6 success:       1
 
39489
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
39490
        
 
39491
# check single-7 success:       1
 
39492
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
39493
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
39494
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
39495
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
39496
f_charbig = '#NULL#';
 
39497
INSERT INTO t1
 
39498
SET f_int1 = NULL , f_int2 = -@max_row,
 
39499
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
39500
f_charbig = '#NULL#';
 
39501
ERROR 23000: Column 'f_int1' cannot be null
 
39502
# check null success:    1
 
39503
DELETE FROM t1
 
39504
WHERE f_int1 = 0 AND f_int2 = 0
 
39505
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
39506
AND f_charbig = '#NULL#';
 
39507
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39508
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39509
   FROM t0_template source_tab
 
39510
WHERE MOD(f_int1,3) = 0
 
39511
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
39512
ON DUPLICATE KEY
 
39513
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
39514
f_int2 = 2 * @max_row + source_tab.f_int1,
 
39515
f_charbig = 'was updated';
 
39516
        
 
39517
# check unique-1-a success:     1
 
39518
        
 
39519
# check unique-1-b success:     1
 
39520
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39521
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39522
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39523
f_charbig = CONCAT('===',f_char1,'===')
 
39524
WHERE f_charbig = 'was updated';
 
39525
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39526
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
39527
   FROM t0_template source_tab
 
39528
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39529
        
 
39530
# check replace success:        1
 
39531
DELETE FROM t1
 
39532
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
39533
DELETE FROM t1
 
39534
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
39535
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
39536
UPDATE t1 SET f_int2 = f_int1,
 
39537
f_char1 = CAST(f_int1 AS CHAR),
 
39538
f_char2 = CAST(f_int1 AS CHAR),
 
39539
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
39540
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
39541
SET AUTOCOMMIT= 0;
 
39542
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39543
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39544
FROM t0_template source_tab
 
39545
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39546
        
 
39547
# check transactions-1 success:         1
 
39548
COMMIT WORK;
 
39549
        
 
39550
# check transactions-2 success:         1
 
39551
ROLLBACK WORK;
 
39552
        
 
39553
# check transactions-3 success:         1
 
39554
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39555
COMMIT WORK;
 
39556
ROLLBACK WORK;
 
39557
        
 
39558
# check transactions-4 success:         1
 
39559
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39560
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39561
FROM t0_template source_tab
 
39562
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39563
        
 
39564
# check transactions-5 success:         1
 
39565
ROLLBACK WORK;
 
39566
        
 
39567
# check transactions-6 success:         1
 
39568
# INFO: Storage engine used for t1 seems to be transactional.
 
39569
COMMIT;
 
39570
        
 
39571
# check transactions-7 success:         1
 
39572
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39573
COMMIT WORK;
 
39574
SET @@session.sql_mode = 'traditional';
 
39575
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
39576
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39577
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
39578
'', '', 'was inserted' FROM t0_template
 
39579
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39580
ERROR 22012: Division by 0
 
39581
COMMIT;
 
39582
        
 
39583
# check transactions-8 success:         1
 
39584
# INFO: Storage engine used for t1 seems to be able to revert
 
39585
#       changes made by the failing statement.
 
39586
SET @@session.sql_mode = '';
 
39587
SET AUTOCOMMIT= 1;
 
39588
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39589
COMMIT WORK;
 
39590
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
39591
        
 
39592
# check special-1 success:      1
 
39593
UPDATE t1 SET f_charbig = '';
 
39594
        
 
39595
# check special-2 success:      1
 
39596
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
39597
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39598
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
39599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39601
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39602
'just inserted' FROM t0_template
 
39603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39604
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
39605
BEGIN
 
39606
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39607
f_charbig = 'updated by trigger'
 
39608
      WHERE f_int1 = new.f_int1;
 
39609
END|
 
39610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39611
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
39612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39613
        
 
39614
# check trigger-1 success:      1
 
39615
DROP TRIGGER trg_1;
 
39616
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39617
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39618
f_charbig = 'just inserted'
 
39619
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39620
DELETE FROM t0_aux
 
39621
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39622
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39623
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39624
'just inserted' FROM t0_template
 
39625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39626
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
39627
BEGIN
 
39628
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39629
f_charbig = 'updated by trigger'
 
39630
      WHERE f_int1 = new.f_int1;
 
39631
END|
 
39632
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39633
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
39634
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39635
        
 
39636
# check trigger-2 success:      1
 
39637
DROP TRIGGER trg_1;
 
39638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39640
f_charbig = 'just inserted'
 
39641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39642
DELETE FROM t0_aux
 
39643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39646
'just inserted' FROM t0_template
 
39647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39648
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
39649
BEGIN
 
39650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39651
f_charbig = 'updated by trigger'
 
39652
      WHERE f_int1 = new.f_int1;
 
39653
END|
 
39654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39656
        
 
39657
# check trigger-3 success:      1
 
39658
DROP TRIGGER trg_1;
 
39659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39661
f_charbig = 'just inserted'
 
39662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39663
DELETE FROM t0_aux
 
39664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39667
'just inserted' FROM t0_template
 
39668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39669
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
39670
BEGIN
 
39671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39672
f_charbig = 'updated by trigger'
 
39673
      WHERE f_int1 = - old.f_int1;
 
39674
END|
 
39675
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39677
        
 
39678
# check trigger-4 success:      1
 
39679
DROP TRIGGER trg_1;
 
39680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39682
f_charbig = 'just inserted'
 
39683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39684
DELETE FROM t0_aux
 
39685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39688
'just inserted' FROM t0_template
 
39689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39690
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
39691
BEGIN
 
39692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39693
f_charbig = 'updated by trigger'
 
39694
      WHERE f_int1 = new.f_int1;
 
39695
END|
 
39696
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39698
        
 
39699
# check trigger-5 success:      1
 
39700
DROP TRIGGER trg_1;
 
39701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39703
f_charbig = 'just inserted'
 
39704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39705
DELETE FROM t0_aux
 
39706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39707
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39708
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39709
'just inserted' FROM t0_template
 
39710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39711
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
39712
BEGIN
 
39713
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39714
f_charbig = 'updated by trigger'
 
39715
      WHERE f_int1 = - old.f_int1;
 
39716
END|
 
39717
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39718
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39719
        
 
39720
# check trigger-6 success:      1
 
39721
DROP TRIGGER trg_1;
 
39722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39724
f_charbig = 'just inserted'
 
39725
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39726
DELETE FROM t0_aux
 
39727
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39728
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39729
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39730
'just inserted' FROM t0_template
 
39731
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39732
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
39733
BEGIN
 
39734
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39735
f_charbig = 'updated by trigger'
 
39736
      WHERE f_int1 = - old.f_int1;
 
39737
END|
 
39738
DELETE FROM t0_aux
 
39739
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39740
        
 
39741
# check trigger-7 success:      1
 
39742
DROP TRIGGER trg_1;
 
39743
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39744
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39745
f_charbig = 'just inserted'
 
39746
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39747
DELETE FROM t0_aux
 
39748
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39749
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39750
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39751
'just inserted' FROM t0_template
 
39752
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39753
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
39754
BEGIN
 
39755
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39756
f_charbig = 'updated by trigger'
 
39757
      WHERE f_int1 = - old.f_int1;
 
39758
END|
 
39759
DELETE FROM t0_aux
 
39760
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39761
        
 
39762
# check trigger-8 success:      1
 
39763
DROP TRIGGER trg_1;
 
39764
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39765
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39766
f_charbig = 'just inserted'
 
39767
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39768
DELETE FROM t0_aux
 
39769
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39770
DELETE FROM t1
 
39771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39772
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
39773
BEGIN
 
39774
SET new.f_int1 = old.f_int1 + @max_row,
 
39775
new.f_int2 = old.f_int2 - @max_row,
 
39776
new.f_charbig = '####updated per update trigger####';
 
39777
END|
 
39778
UPDATE t1
 
39779
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
39780
f_charbig = '####updated per update statement itself####';
 
39781
        
 
39782
# check trigger-9 success:      1
 
39783
DROP TRIGGER trg_2;
 
39784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39786
f_charbig = CONCAT('===',f_char1,'===');
 
39787
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
39788
BEGIN
 
39789
SET new.f_int1 = new.f_int1 + @max_row,
 
39790
new.f_int2 = new.f_int2 - @max_row,
 
39791
new.f_charbig = '####updated per update trigger####';
 
39792
END|
 
39793
UPDATE t1
 
39794
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
39795
f_charbig = '####updated per update statement itself####';
 
39796
        
 
39797
# check trigger-10 success:     1
 
39798
DROP TRIGGER trg_2;
 
39799
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39800
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39801
f_charbig = CONCAT('===',f_char1,'===');
 
39802
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
39803
BEGIN
 
39804
SET new.f_int1 = @my_max1 + @counter,
 
39805
new.f_int2 = @my_min2 - @counter,
 
39806
new.f_charbig = '####updated per insert trigger####';
 
39807
SET @counter = @counter + 1;
 
39808
END|
 
39809
SET @counter = 1;
 
39810
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
39811
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39812
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
39813
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
39814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
39815
ORDER BY f_int1;
 
39816
DROP TRIGGER trg_3;
 
39817
        
 
39818
# check trigger-11 success:     1
 
39819
DELETE FROM t1
 
39820
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
39821
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
39822
AND f_charbig = '####updated per insert trigger####';
 
39823
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
39824
BEGIN
 
39825
SET new.f_int1 = @my_max1 + @counter,
 
39826
new.f_int2 = @my_min2 - @counter,
 
39827
new.f_charbig = '####updated per insert trigger####';
 
39828
SET @counter = @counter + 1;
 
39829
END|
 
39830
SET @counter = 1;
 
39831
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
39832
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
39833
SELECT CAST(f_int1 AS CHAR),
 
39834
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
39835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
39836
ORDER BY f_int1;
 
39837
DROP TRIGGER trg_3;
 
39838
        
 
39839
# check trigger-12 success:     1
 
39840
DELETE FROM t1
 
39841
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
39842
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
39843
AND f_charbig = '####updated per insert trigger####';
 
39844
ANALYZE  TABLE t1;
 
39845
Table   Op      Msg_type        Msg_text
 
39846
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
39847
CHECK    TABLE t1 EXTENDED;
 
39848
Table   Op      Msg_type        Msg_text
 
39849
test.t1 check   note    The storage engine for the table doesn't support check
 
39850
CHECKSUM TABLE t1 EXTENDED;
 
39851
Table   Checksum
 
39852
test.t1 <some_value>
 
39853
OPTIMIZE TABLE t1;
 
39854
Table   Op      Msg_type        Msg_text
 
39855
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
39856
# check layout success:    1
 
39857
REPAIR   TABLE t1 EXTENDED;
 
39858
Table   Op      Msg_type        Msg_text
 
39859
test.t1 repair  note    The storage engine for the table doesn't support repair
 
39860
# check layout success:    1
 
39861
TRUNCATE t1;
 
39862
        
 
39863
# check TRUNCATE success:       1
 
39864
# check layout success:    1
 
39865
# End usability test (inc/partition_check.inc)
 
39866
DROP TABLE t1;
 
39867
CREATE TABLE t1 (
 
39868
f_int1 INTEGER,
 
39869
f_int2 INTEGER,
 
39870
f_char1 CHAR(20),
 
39871
f_char2 CHAR(20),
 
39872
f_charbig VARCHAR(1000)
 
39873
 
 
39874
)
 
39875
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
39876
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
39877
(PARTITION part1 VALUES IN (0),
 
39878
 PARTITION part2 VALUES IN (1),
 
39879
 PARTITION part3 VALUES IN (NULL));
 
39880
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39881
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39882
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39883
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
39884
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39885
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39886
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39887
# Start usability test (inc/partition_check.inc)
 
39888
create_command
 
39889
SHOW CREATE TABLE t1;
 
39890
Table   Create Table
 
39891
t1      CREATE TABLE `t1` (
 
39892
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
39893
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
39894
  `f_char1` char(20) DEFAULT NULL,
 
39895
  `f_char2` char(20) DEFAULT NULL,
 
39896
  `f_charbig` varchar(1000) DEFAULT NULL,
 
39897
  PRIMARY KEY (`f_int1`,`f_int2`),
 
39898
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
39899
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
39900
 
 
39901
# check prerequisites-1 success:    1
 
39902
# check COUNT(*) success:    1
 
39903
# check MIN/MAX(f_int1) success:    1
 
39904
# check MIN/MAX(f_int2) success:    1
 
39905
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39906
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
39907
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
39908
WHERE f_int1 IN (2,3);
 
39909
ERROR 23000: Can't write; duplicate key in table 't1'
 
39910
# check prerequisites-3 success:    1
 
39911
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
39912
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39913
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
39914
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
39915
WHERE f_int1 IN (2,3);
 
39916
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
39917
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39918
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
39919
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
39920
WHERE f_int1 IN (2,3);
 
39921
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
39922
# check read via f_int1 success: 1
 
39923
# check read via f_int2 success: 1
 
39924
        
 
39925
# check multiple-1 success:     1
 
39926
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
39927
        
 
39928
# check multiple-2 success:     1
 
39929
INSERT INTO t1 SELECT * FROM t0_template
 
39930
WHERE MOD(f_int1,3) = 0;
 
39931
        
 
39932
# check multiple-3 success:     1
 
39933
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
39934
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
39935
AND @max_row_div2 + @max_row_div4;
 
39936
        
 
39937
# check multiple-4 success:     1
 
39938
DELETE FROM t1
 
39939
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
39940
AND @max_row_div2 + @max_row_div4 + @max_row;
 
39941
        
 
39942
# check multiple-5 success:     1
 
39943
SELECT COUNT(*) INTO @try_count FROM t0_template
 
39944
WHERE MOD(f_int1,3) = 0
 
39945
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39946
SELECT COUNT(*) INTO @clash_count
 
39947
FROM t1 INNER JOIN t0_template USING(f_int1)
 
39948
WHERE MOD(f_int1,3) = 0
 
39949
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39950
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
39951
INSERT INTO t1
 
39952
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39953
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39954
f_charbig = '#SINGLE#';
 
39955
        
 
39956
# check single-1 success:       1
 
39957
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
39958
INSERT INTO t1
 
39959
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39960
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39961
f_charbig = '#SINGLE#';
 
39962
        
 
39963
# check single-2 success:       1
 
39964
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
39965
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
39966
UPDATE t1 SET f_int1 = @cur_value2
 
39967
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
39968
        
 
39969
# check single-3 success:       1
 
39970
SET @cur_value1= -1;
 
39971
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
39972
UPDATE t1 SET f_int1 = @cur_value1
 
39973
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
39974
        
 
39975
# check single-4 success:       1
 
39976
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
39977
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
39978
        
 
39979
# check single-5 success:       1
 
39980
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
39981
        
 
39982
# check single-6 success:       1
 
39983
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
39984
        
 
39985
# check single-7 success:       1
 
39986
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
39987
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
39988
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
39989
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
39990
f_charbig = '#NULL#';
 
39991
INSERT INTO t1
 
39992
SET f_int1 = NULL , f_int2 = -@max_row,
 
39993
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
39994
f_charbig = '#NULL#';
 
39995
ERROR 23000: Column 'f_int1' cannot be null
 
39996
# check null success:    1
 
39997
DELETE FROM t1
 
39998
WHERE f_int1 = 0 AND f_int2 = 0
 
39999
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
40000
AND f_charbig = '#NULL#';
 
40001
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40002
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40003
   FROM t0_template source_tab
 
40004
WHERE MOD(f_int1,3) = 0
 
40005
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
40006
ON DUPLICATE KEY
 
40007
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
40008
f_int2 = 2 * @max_row + source_tab.f_int1,
 
40009
f_charbig = 'was updated';
 
40010
        
 
40011
# check unique-1-a success:     1
 
40012
        
 
40013
# check unique-1-b success:     1
 
40014
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40015
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40016
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40017
f_charbig = CONCAT('===',f_char1,'===')
 
40018
WHERE f_charbig = 'was updated';
 
40019
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40020
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
40021
   FROM t0_template source_tab
 
40022
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40023
        
 
40024
# check replace success:        1
 
40025
DELETE FROM t1
 
40026
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
40027
DELETE FROM t1
 
40028
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
40029
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
40030
UPDATE t1 SET f_int2 = f_int1,
 
40031
f_char1 = CAST(f_int1 AS CHAR),
 
40032
f_char2 = CAST(f_int1 AS CHAR),
 
40033
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
40034
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
40035
SET AUTOCOMMIT= 0;
 
40036
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40037
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40038
FROM t0_template source_tab
 
40039
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40040
        
 
40041
# check transactions-1 success:         1
 
40042
COMMIT WORK;
 
40043
        
 
40044
# check transactions-2 success:         1
 
40045
ROLLBACK WORK;
 
40046
        
 
40047
# check transactions-3 success:         1
 
40048
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40049
COMMIT WORK;
 
40050
ROLLBACK WORK;
 
40051
        
 
40052
# check transactions-4 success:         1
 
40053
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40054
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40055
FROM t0_template source_tab
 
40056
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40057
        
 
40058
# check transactions-5 success:         1
 
40059
ROLLBACK WORK;
 
40060
        
 
40061
# check transactions-6 success:         1
 
40062
# INFO: Storage engine used for t1 seems to be transactional.
 
40063
COMMIT;
 
40064
        
 
40065
# check transactions-7 success:         1
 
40066
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40067
COMMIT WORK;
 
40068
SET @@session.sql_mode = 'traditional';
 
40069
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
40070
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40071
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
40072
'', '', 'was inserted' FROM t0_template
 
40073
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40074
ERROR 22012: Division by 0
 
40075
COMMIT;
 
40076
        
 
40077
# check transactions-8 success:         1
 
40078
# INFO: Storage engine used for t1 seems to be able to revert
 
40079
#       changes made by the failing statement.
 
40080
SET @@session.sql_mode = '';
 
40081
SET AUTOCOMMIT= 1;
 
40082
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40083
COMMIT WORK;
 
40084
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
40085
        
 
40086
# check special-1 success:      1
 
40087
UPDATE t1 SET f_charbig = '';
 
40088
        
 
40089
# check special-2 success:      1
 
40090
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
40091
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40092
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
40093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40096
'just inserted' FROM t0_template
 
40097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40098
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
40099
BEGIN
 
40100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40101
f_charbig = 'updated by trigger'
 
40102
      WHERE f_int1 = new.f_int1;
 
40103
END|
 
40104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40105
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40107
        
 
40108
# check trigger-1 success:      1
 
40109
DROP TRIGGER trg_1;
 
40110
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40111
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40112
f_charbig = 'just inserted'
 
40113
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40114
DELETE FROM t0_aux
 
40115
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40116
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40117
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40118
'just inserted' FROM t0_template
 
40119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40120
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
40121
BEGIN
 
40122
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40123
f_charbig = 'updated by trigger'
 
40124
      WHERE f_int1 = new.f_int1;
 
40125
END|
 
40126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40127
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40129
        
 
40130
# check trigger-2 success:      1
 
40131
DROP TRIGGER trg_1;
 
40132
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40133
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40134
f_charbig = 'just inserted'
 
40135
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40136
DELETE FROM t0_aux
 
40137
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40138
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40139
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40140
'just inserted' FROM t0_template
 
40141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40142
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40143
BEGIN
 
40144
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40145
f_charbig = 'updated by trigger'
 
40146
      WHERE f_int1 = new.f_int1;
 
40147
END|
 
40148
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40149
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40150
        
 
40151
# check trigger-3 success:      1
 
40152
DROP TRIGGER trg_1;
 
40153
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40154
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40155
f_charbig = 'just inserted'
 
40156
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40157
DELETE FROM t0_aux
 
40158
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40159
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40160
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40161
'just inserted' FROM t0_template
 
40162
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40163
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40164
BEGIN
 
40165
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40166
f_charbig = 'updated by trigger'
 
40167
      WHERE f_int1 = - old.f_int1;
 
40168
END|
 
40169
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40170
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40171
        
 
40172
# check trigger-4 success:      1
 
40173
DROP TRIGGER trg_1;
 
40174
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40175
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40176
f_charbig = 'just inserted'
 
40177
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40178
DELETE FROM t0_aux
 
40179
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40180
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40181
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40182
'just inserted' FROM t0_template
 
40183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40184
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40185
BEGIN
 
40186
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40187
f_charbig = 'updated by trigger'
 
40188
      WHERE f_int1 = new.f_int1;
 
40189
END|
 
40190
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40191
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40192
        
 
40193
# check trigger-5 success:      1
 
40194
DROP TRIGGER trg_1;
 
40195
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40196
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40197
f_charbig = 'just inserted'
 
40198
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40199
DELETE FROM t0_aux
 
40200
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40202
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40203
'just inserted' FROM t0_template
 
40204
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40205
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40206
BEGIN
 
40207
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40208
f_charbig = 'updated by trigger'
 
40209
      WHERE f_int1 = - old.f_int1;
 
40210
END|
 
40211
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40212
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40213
        
 
40214
# check trigger-6 success:      1
 
40215
DROP TRIGGER trg_1;
 
40216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40218
f_charbig = 'just inserted'
 
40219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40220
DELETE FROM t0_aux
 
40221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40222
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40223
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40224
'just inserted' FROM t0_template
 
40225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40226
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
40227
BEGIN
 
40228
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40229
f_charbig = 'updated by trigger'
 
40230
      WHERE f_int1 = - old.f_int1;
 
40231
END|
 
40232
DELETE FROM t0_aux
 
40233
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40234
        
 
40235
# check trigger-7 success:      1
 
40236
DROP TRIGGER trg_1;
 
40237
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40238
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40239
f_charbig = 'just inserted'
 
40240
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40241
DELETE FROM t0_aux
 
40242
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40243
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40244
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40245
'just inserted' FROM t0_template
 
40246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40247
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
40248
BEGIN
 
40249
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40250
f_charbig = 'updated by trigger'
 
40251
      WHERE f_int1 = - old.f_int1;
 
40252
END|
 
40253
DELETE FROM t0_aux
 
40254
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40255
        
 
40256
# check trigger-8 success:      1
 
40257
DROP TRIGGER trg_1;
 
40258
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40259
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40260
f_charbig = 'just inserted'
 
40261
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40262
DELETE FROM t0_aux
 
40263
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40264
DELETE FROM t1
 
40265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40266
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40267
BEGIN
 
40268
SET new.f_int1 = old.f_int1 + @max_row,
 
40269
new.f_int2 = old.f_int2 - @max_row,
 
40270
new.f_charbig = '####updated per update trigger####';
 
40271
END|
 
40272
UPDATE t1
 
40273
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40274
f_charbig = '####updated per update statement itself####';
 
40275
        
 
40276
# check trigger-9 success:      1
 
40277
DROP TRIGGER trg_2;
 
40278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40280
f_charbig = CONCAT('===',f_char1,'===');
 
40281
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40282
BEGIN
 
40283
SET new.f_int1 = new.f_int1 + @max_row,
 
40284
new.f_int2 = new.f_int2 - @max_row,
 
40285
new.f_charbig = '####updated per update trigger####';
 
40286
END|
 
40287
UPDATE t1
 
40288
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40289
f_charbig = '####updated per update statement itself####';
 
40290
        
 
40291
# check trigger-10 success:     1
 
40292
DROP TRIGGER trg_2;
 
40293
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40294
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40295
f_charbig = CONCAT('===',f_char1,'===');
 
40296
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40297
BEGIN
 
40298
SET new.f_int1 = @my_max1 + @counter,
 
40299
new.f_int2 = @my_min2 - @counter,
 
40300
new.f_charbig = '####updated per insert trigger####';
 
40301
SET @counter = @counter + 1;
 
40302
END|
 
40303
SET @counter = 1;
 
40304
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40305
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40306
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40307
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40309
ORDER BY f_int1;
 
40310
DROP TRIGGER trg_3;
 
40311
        
 
40312
# check trigger-11 success:     1
 
40313
DELETE FROM t1
 
40314
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40315
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40316
AND f_charbig = '####updated per insert trigger####';
 
40317
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40318
BEGIN
 
40319
SET new.f_int1 = @my_max1 + @counter,
 
40320
new.f_int2 = @my_min2 - @counter,
 
40321
new.f_charbig = '####updated per insert trigger####';
 
40322
SET @counter = @counter + 1;
 
40323
END|
 
40324
SET @counter = 1;
 
40325
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40326
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
40327
SELECT CAST(f_int1 AS CHAR),
 
40328
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40330
ORDER BY f_int1;
 
40331
DROP TRIGGER trg_3;
 
40332
        
 
40333
# check trigger-12 success:     1
 
40334
DELETE FROM t1
 
40335
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40336
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40337
AND f_charbig = '####updated per insert trigger####';
 
40338
ANALYZE  TABLE t1;
 
40339
Table   Op      Msg_type        Msg_text
 
40340
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
40341
CHECK    TABLE t1 EXTENDED;
 
40342
Table   Op      Msg_type        Msg_text
 
40343
test.t1 check   note    The storage engine for the table doesn't support check
 
40344
CHECKSUM TABLE t1 EXTENDED;
 
40345
Table   Checksum
 
40346
test.t1 <some_value>
 
40347
OPTIMIZE TABLE t1;
 
40348
Table   Op      Msg_type        Msg_text
 
40349
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
40350
# check layout success:    1
 
40351
REPAIR   TABLE t1 EXTENDED;
 
40352
Table   Op      Msg_type        Msg_text
 
40353
test.t1 repair  note    The storage engine for the table doesn't support repair
 
40354
# check layout success:    1
 
40355
TRUNCATE t1;
 
40356
        
 
40357
# check TRUNCATE success:       1
 
40358
# check layout success:    1
 
40359
# End usability test (inc/partition_check.inc)
 
40360
DROP TABLE t1;
 
40361
DROP TABLE IF EXISTS t1;
 
40362
CREATE TABLE t1 (
 
40363
f_int1 INTEGER,
 
40364
f_int2 INTEGER,
 
40365
f_char1 CHAR(20),
 
40366
f_char2 CHAR(20),
 
40367
f_charbig VARCHAR(1000)
 
40368
 
 
40369
)
 
40370
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
40371
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40372
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40373
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
40374
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
40375
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40376
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40377
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40378
# Start usability test (inc/partition_check.inc)
 
40379
create_command
 
40380
SHOW CREATE TABLE t1;
 
40381
Table   Create Table
 
40382
t1      CREATE TABLE `t1` (
 
40383
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
40384
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
40385
  `f_char1` char(20) DEFAULT NULL,
 
40386
  `f_char2` char(20) DEFAULT NULL,
 
40387
  `f_charbig` varchar(1000) DEFAULT NULL,
 
40388
  PRIMARY KEY (`f_int1`,`f_int2`),
 
40389
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
40390
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
40391
 
 
40392
# check prerequisites-1 success:    1
 
40393
# check COUNT(*) success:    1
 
40394
# check MIN/MAX(f_int1) success:    1
 
40395
# check MIN/MAX(f_int2) success:    1
 
40396
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40397
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40398
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
40399
WHERE f_int1 IN (2,3);
 
40400
ERROR 23000: Can't write; duplicate key in table 't1'
 
40401
# check prerequisites-3 success:    1
 
40402
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
40403
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40404
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
40405
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
40406
WHERE f_int1 IN (2,3);
 
40407
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
40408
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40409
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
40410
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
40411
WHERE f_int1 IN (2,3);
 
40412
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
40413
# check read via f_int1 success: 1
 
40414
# check read via f_int2 success: 1
 
40415
        
 
40416
# check multiple-1 success:     1
 
40417
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
40418
        
 
40419
# check multiple-2 success:     1
 
40420
INSERT INTO t1 SELECT * FROM t0_template
 
40421
WHERE MOD(f_int1,3) = 0;
 
40422
        
 
40423
# check multiple-3 success:     1
 
40424
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
40425
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
40426
AND @max_row_div2 + @max_row_div4;
 
40427
        
 
40428
# check multiple-4 success:     1
 
40429
DELETE FROM t1
 
40430
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
40431
AND @max_row_div2 + @max_row_div4 + @max_row;
 
40432
        
 
40433
# check multiple-5 success:     1
 
40434
SELECT COUNT(*) INTO @try_count FROM t0_template
 
40435
WHERE MOD(f_int1,3) = 0
 
40436
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40437
SELECT COUNT(*) INTO @clash_count
 
40438
FROM t1 INNER JOIN t0_template USING(f_int1)
 
40439
WHERE MOD(f_int1,3) = 0
 
40440
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40441
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
40442
INSERT INTO t1
 
40443
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40444
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40445
f_charbig = '#SINGLE#';
 
40446
        
 
40447
# check single-1 success:       1
 
40448
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
40449
INSERT INTO t1
 
40450
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40451
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40452
f_charbig = '#SINGLE#';
 
40453
        
 
40454
# check single-2 success:       1
 
40455
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
40456
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
40457
UPDATE t1 SET f_int1 = @cur_value2
 
40458
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
40459
        
 
40460
# check single-3 success:       1
 
40461
SET @cur_value1= -1;
 
40462
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
40463
UPDATE t1 SET f_int1 = @cur_value1
 
40464
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
40465
        
 
40466
# check single-4 success:       1
 
40467
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
40468
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
40469
        
 
40470
# check single-5 success:       1
 
40471
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
40472
        
 
40473
# check single-6 success:       1
 
40474
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
40475
        
 
40476
# check single-7 success:       1
 
40477
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
40478
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
40479
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
40480
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
40481
f_charbig = '#NULL#';
 
40482
INSERT INTO t1
 
40483
SET f_int1 = NULL , f_int2 = -@max_row,
 
40484
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
40485
f_charbig = '#NULL#';
 
40486
ERROR 23000: Column 'f_int1' cannot be null
 
40487
# check null success:    1
 
40488
DELETE FROM t1
 
40489
WHERE f_int1 = 0 AND f_int2 = 0
 
40490
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
40491
AND f_charbig = '#NULL#';
 
40492
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40493
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40494
   FROM t0_template source_tab
 
40495
WHERE MOD(f_int1,3) = 0
 
40496
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
40497
ON DUPLICATE KEY
 
40498
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
40499
f_int2 = 2 * @max_row + source_tab.f_int1,
 
40500
f_charbig = 'was updated';
 
40501
        
 
40502
# check unique-1-a success:     1
 
40503
        
 
40504
# check unique-1-b success:     1
 
40505
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40506
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40507
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40508
f_charbig = CONCAT('===',f_char1,'===')
 
40509
WHERE f_charbig = 'was updated';
 
40510
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40511
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
40512
   FROM t0_template source_tab
 
40513
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40514
        
 
40515
# check replace success:        1
 
40516
DELETE FROM t1
 
40517
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
40518
DELETE FROM t1
 
40519
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
40520
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
40521
UPDATE t1 SET f_int2 = f_int1,
 
40522
f_char1 = CAST(f_int1 AS CHAR),
 
40523
f_char2 = CAST(f_int1 AS CHAR),
 
40524
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
40525
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
40526
SET AUTOCOMMIT= 0;
 
40527
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40528
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40529
FROM t0_template source_tab
 
40530
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40531
        
 
40532
# check transactions-1 success:         1
 
40533
COMMIT WORK;
 
40534
        
 
40535
# check transactions-2 success:         1
 
40536
ROLLBACK WORK;
 
40537
        
 
40538
# check transactions-3 success:         1
 
40539
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40540
COMMIT WORK;
 
40541
ROLLBACK WORK;
 
40542
        
 
40543
# check transactions-4 success:         1
 
40544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40545
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40546
FROM t0_template source_tab
 
40547
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40548
        
 
40549
# check transactions-5 success:         1
 
40550
ROLLBACK WORK;
 
40551
        
 
40552
# check transactions-6 success:         1
 
40553
# INFO: Storage engine used for t1 seems to be transactional.
 
40554
COMMIT;
 
40555
        
 
40556
# check transactions-7 success:         1
 
40557
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40558
COMMIT WORK;
 
40559
SET @@session.sql_mode = 'traditional';
 
40560
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
40561
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40562
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
40563
'', '', 'was inserted' FROM t0_template
 
40564
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40565
ERROR 22012: Division by 0
 
40566
COMMIT;
 
40567
        
 
40568
# check transactions-8 success:         1
 
40569
# INFO: Storage engine used for t1 seems to be able to revert
 
40570
#       changes made by the failing statement.
 
40571
SET @@session.sql_mode = '';
 
40572
SET AUTOCOMMIT= 1;
 
40573
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40574
COMMIT WORK;
 
40575
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
40576
        
 
40577
# check special-1 success:      1
 
40578
UPDATE t1 SET f_charbig = '';
 
40579
        
 
40580
# check special-2 success:      1
 
40581
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
40582
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40583
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
40584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40586
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40587
'just inserted' FROM t0_template
 
40588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40589
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
40590
BEGIN
 
40591
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40592
f_charbig = 'updated by trigger'
 
40593
      WHERE f_int1 = new.f_int1;
 
40594
END|
 
40595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40596
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40598
        
 
40599
# check trigger-1 success:      1
 
40600
DROP TRIGGER trg_1;
 
40601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40602
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40603
f_charbig = 'just inserted'
 
40604
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40605
DELETE FROM t0_aux
 
40606
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40607
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40608
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40609
'just inserted' FROM t0_template
 
40610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40611
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
40612
BEGIN
 
40613
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40614
f_charbig = 'updated by trigger'
 
40615
      WHERE f_int1 = new.f_int1;
 
40616
END|
 
40617
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40618
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40620
        
 
40621
# check trigger-2 success:      1
 
40622
DROP TRIGGER trg_1;
 
40623
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40624
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40625
f_charbig = 'just inserted'
 
40626
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40627
DELETE FROM t0_aux
 
40628
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40629
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40630
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40631
'just inserted' FROM t0_template
 
40632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40633
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40634
BEGIN
 
40635
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40636
f_charbig = 'updated by trigger'
 
40637
      WHERE f_int1 = new.f_int1;
 
40638
END|
 
40639
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40640
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40641
        
 
40642
# check trigger-3 success:      1
 
40643
DROP TRIGGER trg_1;
 
40644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40646
f_charbig = 'just inserted'
 
40647
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40648
DELETE FROM t0_aux
 
40649
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40652
'just inserted' FROM t0_template
 
40653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40654
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40655
BEGIN
 
40656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40657
f_charbig = 'updated by trigger'
 
40658
      WHERE f_int1 = - old.f_int1;
 
40659
END|
 
40660
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40661
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40662
        
 
40663
# check trigger-4 success:      1
 
40664
DROP TRIGGER trg_1;
 
40665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40667
f_charbig = 'just inserted'
 
40668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40669
DELETE FROM t0_aux
 
40670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40672
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40673
'just inserted' FROM t0_template
 
40674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40675
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40676
BEGIN
 
40677
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40678
f_charbig = 'updated by trigger'
 
40679
      WHERE f_int1 = new.f_int1;
 
40680
END|
 
40681
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40682
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40683
        
 
40684
# check trigger-5 success:      1
 
40685
DROP TRIGGER trg_1;
 
40686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40688
f_charbig = 'just inserted'
 
40689
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40690
DELETE FROM t0_aux
 
40691
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40692
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40693
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40694
'just inserted' FROM t0_template
 
40695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40696
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40697
BEGIN
 
40698
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40699
f_charbig = 'updated by trigger'
 
40700
      WHERE f_int1 = - old.f_int1;
 
40701
END|
 
40702
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40703
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40704
        
 
40705
# check trigger-6 success:      1
 
40706
DROP TRIGGER trg_1;
 
40707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40709
f_charbig = 'just inserted'
 
40710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40711
DELETE FROM t0_aux
 
40712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40715
'just inserted' FROM t0_template
 
40716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40717
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
40718
BEGIN
 
40719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40720
f_charbig = 'updated by trigger'
 
40721
      WHERE f_int1 = - old.f_int1;
 
40722
END|
 
40723
DELETE FROM t0_aux
 
40724
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40725
        
 
40726
# check trigger-7 success:      1
 
40727
DROP TRIGGER trg_1;
 
40728
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40729
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40730
f_charbig = 'just inserted'
 
40731
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40732
DELETE FROM t0_aux
 
40733
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40736
'just inserted' FROM t0_template
 
40737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40738
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
40739
BEGIN
 
40740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40741
f_charbig = 'updated by trigger'
 
40742
      WHERE f_int1 = - old.f_int1;
 
40743
END|
 
40744
DELETE FROM t0_aux
 
40745
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40746
        
 
40747
# check trigger-8 success:      1
 
40748
DROP TRIGGER trg_1;
 
40749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40751
f_charbig = 'just inserted'
 
40752
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40753
DELETE FROM t0_aux
 
40754
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40755
DELETE FROM t1
 
40756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40757
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40758
BEGIN
 
40759
SET new.f_int1 = old.f_int1 + @max_row,
 
40760
new.f_int2 = old.f_int2 - @max_row,
 
40761
new.f_charbig = '####updated per update trigger####';
 
40762
END|
 
40763
UPDATE t1
 
40764
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40765
f_charbig = '####updated per update statement itself####';
 
40766
        
 
40767
# check trigger-9 success:      1
 
40768
DROP TRIGGER trg_2;
 
40769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40771
f_charbig = CONCAT('===',f_char1,'===');
 
40772
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40773
BEGIN
 
40774
SET new.f_int1 = new.f_int1 + @max_row,
 
40775
new.f_int2 = new.f_int2 - @max_row,
 
40776
new.f_charbig = '####updated per update trigger####';
 
40777
END|
 
40778
UPDATE t1
 
40779
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40780
f_charbig = '####updated per update statement itself####';
 
40781
        
 
40782
# check trigger-10 success:     1
 
40783
DROP TRIGGER trg_2;
 
40784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40786
f_charbig = CONCAT('===',f_char1,'===');
 
40787
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40788
BEGIN
 
40789
SET new.f_int1 = @my_max1 + @counter,
 
40790
new.f_int2 = @my_min2 - @counter,
 
40791
new.f_charbig = '####updated per insert trigger####';
 
40792
SET @counter = @counter + 1;
 
40793
END|
 
40794
SET @counter = 1;
 
40795
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40796
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40797
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40798
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40799
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40800
ORDER BY f_int1;
 
40801
DROP TRIGGER trg_3;
 
40802
        
 
40803
# check trigger-11 success:     1
 
40804
DELETE FROM t1
 
40805
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40806
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40807
AND f_charbig = '####updated per insert trigger####';
 
40808
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40809
BEGIN
 
40810
SET new.f_int1 = @my_max1 + @counter,
 
40811
new.f_int2 = @my_min2 - @counter,
 
40812
new.f_charbig = '####updated per insert trigger####';
 
40813
SET @counter = @counter + 1;
 
40814
END|
 
40815
SET @counter = 1;
 
40816
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40817
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
40818
SELECT CAST(f_int1 AS CHAR),
 
40819
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40820
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40821
ORDER BY f_int1;
 
40822
DROP TRIGGER trg_3;
 
40823
        
 
40824
# check trigger-12 success:     1
 
40825
DELETE FROM t1
 
40826
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40827
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40828
AND f_charbig = '####updated per insert trigger####';
 
40829
ANALYZE  TABLE t1;
 
40830
Table   Op      Msg_type        Msg_text
 
40831
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
40832
CHECK    TABLE t1 EXTENDED;
 
40833
Table   Op      Msg_type        Msg_text
 
40834
test.t1 check   note    The storage engine for the table doesn't support check
 
40835
CHECKSUM TABLE t1 EXTENDED;
 
40836
Table   Checksum
 
40837
test.t1 <some_value>
 
40838
OPTIMIZE TABLE t1;
 
40839
Table   Op      Msg_type        Msg_text
 
40840
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
40841
# check layout success:    1
 
40842
REPAIR   TABLE t1 EXTENDED;
 
40843
Table   Op      Msg_type        Msg_text
 
40844
test.t1 repair  note    The storage engine for the table doesn't support repair
 
40845
# check layout success:    1
 
40846
TRUNCATE t1;
 
40847
        
 
40848
# check TRUNCATE success:       1
 
40849
# check layout success:    1
 
40850
# End usability test (inc/partition_check.inc)
 
40851
DROP TABLE t1;
 
40852
CREATE TABLE t1 (
 
40853
f_int1 INTEGER,
 
40854
f_int2 INTEGER,
 
40855
f_char1 CHAR(20),
 
40856
f_char2 CHAR(20),
 
40857
f_charbig VARCHAR(1000)
 
40858
 
 
40859
)
 
40860
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
40861
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40862
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40863
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
40864
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
40865
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40866
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40867
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40868
# Start usability test (inc/partition_check.inc)
 
40869
create_command
 
40870
SHOW CREATE TABLE t1;
 
40871
Table   Create Table
 
40872
t1      CREATE TABLE `t1` (
 
40873
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
40874
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
40875
  `f_char1` char(20) DEFAULT NULL,
 
40876
  `f_char2` char(20) DEFAULT NULL,
 
40877
  `f_charbig` varchar(1000) DEFAULT NULL,
 
40878
  PRIMARY KEY (`f_int1`,`f_int2`),
 
40879
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
40880
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
40881
 
 
40882
# check prerequisites-1 success:    1
 
40883
# check COUNT(*) success:    1
 
40884
# check MIN/MAX(f_int1) success:    1
 
40885
# check MIN/MAX(f_int2) success:    1
 
40886
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40887
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40888
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
40889
WHERE f_int1 IN (2,3);
 
40890
ERROR 23000: Can't write; duplicate key in table 't1'
 
40891
# check prerequisites-3 success:    1
 
40892
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
40893
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40894
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
40895
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
40896
WHERE f_int1 IN (2,3);
 
40897
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
40898
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40899
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
40900
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
40901
WHERE f_int1 IN (2,3);
 
40902
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
40903
# check read via f_int1 success: 1
 
40904
# check read via f_int2 success: 1
 
40905
        
 
40906
# check multiple-1 success:     1
 
40907
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
40908
        
 
40909
# check multiple-2 success:     1
 
40910
INSERT INTO t1 SELECT * FROM t0_template
 
40911
WHERE MOD(f_int1,3) = 0;
 
40912
        
 
40913
# check multiple-3 success:     1
 
40914
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
40915
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
40916
AND @max_row_div2 + @max_row_div4;
 
40917
        
 
40918
# check multiple-4 success:     1
 
40919
DELETE FROM t1
 
40920
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
40921
AND @max_row_div2 + @max_row_div4 + @max_row;
 
40922
        
 
40923
# check multiple-5 success:     1
 
40924
SELECT COUNT(*) INTO @try_count FROM t0_template
 
40925
WHERE MOD(f_int1,3) = 0
 
40926
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40927
SELECT COUNT(*) INTO @clash_count
 
40928
FROM t1 INNER JOIN t0_template USING(f_int1)
 
40929
WHERE MOD(f_int1,3) = 0
 
40930
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40931
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
40932
INSERT INTO t1
 
40933
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40934
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40935
f_charbig = '#SINGLE#';
 
40936
        
 
40937
# check single-1 success:       1
 
40938
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
40939
INSERT INTO t1
 
40940
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40941
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40942
f_charbig = '#SINGLE#';
 
40943
        
 
40944
# check single-2 success:       1
 
40945
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
40946
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
40947
UPDATE t1 SET f_int1 = @cur_value2
 
40948
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
40949
        
 
40950
# check single-3 success:       1
 
40951
SET @cur_value1= -1;
 
40952
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
40953
UPDATE t1 SET f_int1 = @cur_value1
 
40954
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
40955
        
 
40956
# check single-4 success:       1
 
40957
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
40958
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
40959
        
 
40960
# check single-5 success:       1
 
40961
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
40962
        
 
40963
# check single-6 success:       1
 
40964
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
40965
        
 
40966
# check single-7 success:       1
 
40967
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
40968
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
40969
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
40970
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
40971
f_charbig = '#NULL#';
 
40972
INSERT INTO t1
 
40973
SET f_int1 = NULL , f_int2 = -@max_row,
 
40974
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
40975
f_charbig = '#NULL#';
 
40976
ERROR 23000: Column 'f_int1' cannot be null
 
40977
# check null success:    1
 
40978
DELETE FROM t1
 
40979
WHERE f_int1 = 0 AND f_int2 = 0
 
40980
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
40981
AND f_charbig = '#NULL#';
 
40982
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40983
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40984
   FROM t0_template source_tab
 
40985
WHERE MOD(f_int1,3) = 0
 
40986
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
40987
ON DUPLICATE KEY
 
40988
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
40989
f_int2 = 2 * @max_row + source_tab.f_int1,
 
40990
f_charbig = 'was updated';
 
40991
        
 
40992
# check unique-1-a success:     1
 
40993
        
 
40994
# check unique-1-b success:     1
 
40995
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40998
f_charbig = CONCAT('===',f_char1,'===')
 
40999
WHERE f_charbig = 'was updated';
 
41000
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41001
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
41002
   FROM t0_template source_tab
 
41003
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41004
        
 
41005
# check replace success:        1
 
41006
DELETE FROM t1
 
41007
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
41008
DELETE FROM t1
 
41009
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
41010
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
41011
UPDATE t1 SET f_int2 = f_int1,
 
41012
f_char1 = CAST(f_int1 AS CHAR),
 
41013
f_char2 = CAST(f_int1 AS CHAR),
 
41014
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
41015
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
41016
SET AUTOCOMMIT= 0;
 
41017
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41018
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41019
FROM t0_template source_tab
 
41020
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41021
        
 
41022
# check transactions-1 success:         1
 
41023
COMMIT WORK;
 
41024
        
 
41025
# check transactions-2 success:         1
 
41026
ROLLBACK WORK;
 
41027
        
 
41028
# check transactions-3 success:         1
 
41029
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41030
COMMIT WORK;
 
41031
ROLLBACK WORK;
 
41032
        
 
41033
# check transactions-4 success:         1
 
41034
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41035
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41036
FROM t0_template source_tab
 
41037
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41038
        
 
41039
# check transactions-5 success:         1
 
41040
ROLLBACK WORK;
 
41041
        
 
41042
# check transactions-6 success:         1
 
41043
# INFO: Storage engine used for t1 seems to be transactional.
 
41044
COMMIT;
 
41045
        
 
41046
# check transactions-7 success:         1
 
41047
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41048
COMMIT WORK;
 
41049
SET @@session.sql_mode = 'traditional';
 
41050
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
41051
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41052
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
41053
'', '', 'was inserted' FROM t0_template
 
41054
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41055
ERROR 22012: Division by 0
 
41056
COMMIT;
 
41057
        
 
41058
# check transactions-8 success:         1
 
41059
# INFO: Storage engine used for t1 seems to be able to revert
 
41060
#       changes made by the failing statement.
 
41061
SET @@session.sql_mode = '';
 
41062
SET AUTOCOMMIT= 1;
 
41063
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41064
COMMIT WORK;
 
41065
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
41066
        
 
41067
# check special-1 success:      1
 
41068
UPDATE t1 SET f_charbig = '';
 
41069
        
 
41070
# check special-2 success:      1
 
41071
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
41072
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41073
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
41074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41075
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41076
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41077
'just inserted' FROM t0_template
 
41078
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41079
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
41080
BEGIN
 
41081
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41082
f_charbig = 'updated by trigger'
 
41083
      WHERE f_int1 = new.f_int1;
 
41084
END|
 
41085
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41086
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41088
        
 
41089
# check trigger-1 success:      1
 
41090
DROP TRIGGER trg_1;
 
41091
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41092
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41093
f_charbig = 'just inserted'
 
41094
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41095
DELETE FROM t0_aux
 
41096
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41097
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41098
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41099
'just inserted' FROM t0_template
 
41100
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41101
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
41102
BEGIN
 
41103
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41104
f_charbig = 'updated by trigger'
 
41105
      WHERE f_int1 = new.f_int1;
 
41106
END|
 
41107
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41108
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41110
        
 
41111
# check trigger-2 success:      1
 
41112
DROP TRIGGER trg_1;
 
41113
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41114
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41115
f_charbig = 'just inserted'
 
41116
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41117
DELETE FROM t0_aux
 
41118
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41119
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41120
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41121
'just inserted' FROM t0_template
 
41122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41123
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41124
BEGIN
 
41125
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41126
f_charbig = 'updated by trigger'
 
41127
      WHERE f_int1 = new.f_int1;
 
41128
END|
 
41129
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41130
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41131
        
 
41132
# check trigger-3 success:      1
 
41133
DROP TRIGGER trg_1;
 
41134
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41135
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41136
f_charbig = 'just inserted'
 
41137
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41138
DELETE FROM t0_aux
 
41139
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41140
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41141
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41142
'just inserted' FROM t0_template
 
41143
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41144
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41145
BEGIN
 
41146
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41147
f_charbig = 'updated by trigger'
 
41148
      WHERE f_int1 = - old.f_int1;
 
41149
END|
 
41150
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41151
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41152
        
 
41153
# check trigger-4 success:      1
 
41154
DROP TRIGGER trg_1;
 
41155
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41156
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41157
f_charbig = 'just inserted'
 
41158
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41159
DELETE FROM t0_aux
 
41160
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41161
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41162
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41163
'just inserted' FROM t0_template
 
41164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41165
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41166
BEGIN
 
41167
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41168
f_charbig = 'updated by trigger'
 
41169
      WHERE f_int1 = new.f_int1;
 
41170
END|
 
41171
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41172
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41173
        
 
41174
# check trigger-5 success:      1
 
41175
DROP TRIGGER trg_1;
 
41176
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41177
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41178
f_charbig = 'just inserted'
 
41179
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41180
DELETE FROM t0_aux
 
41181
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41182
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41183
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41184
'just inserted' FROM t0_template
 
41185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41186
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41187
BEGIN
 
41188
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41189
f_charbig = 'updated by trigger'
 
41190
      WHERE f_int1 = - old.f_int1;
 
41191
END|
 
41192
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41193
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41194
        
 
41195
# check trigger-6 success:      1
 
41196
DROP TRIGGER trg_1;
 
41197
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41198
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41199
f_charbig = 'just inserted'
 
41200
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41201
DELETE FROM t0_aux
 
41202
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41203
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41204
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41205
'just inserted' FROM t0_template
 
41206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41207
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
41208
BEGIN
 
41209
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41210
f_charbig = 'updated by trigger'
 
41211
      WHERE f_int1 = - old.f_int1;
 
41212
END|
 
41213
DELETE FROM t0_aux
 
41214
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41215
        
 
41216
# check trigger-7 success:      1
 
41217
DROP TRIGGER trg_1;
 
41218
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41219
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41220
f_charbig = 'just inserted'
 
41221
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41222
DELETE FROM t0_aux
 
41223
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41224
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41225
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41226
'just inserted' FROM t0_template
 
41227
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41228
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
41229
BEGIN
 
41230
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41231
f_charbig = 'updated by trigger'
 
41232
      WHERE f_int1 = - old.f_int1;
 
41233
END|
 
41234
DELETE FROM t0_aux
 
41235
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41236
        
 
41237
# check trigger-8 success:      1
 
41238
DROP TRIGGER trg_1;
 
41239
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41240
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41241
f_charbig = 'just inserted'
 
41242
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41243
DELETE FROM t0_aux
 
41244
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41245
DELETE FROM t1
 
41246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41247
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41248
BEGIN
 
41249
SET new.f_int1 = old.f_int1 + @max_row,
 
41250
new.f_int2 = old.f_int2 - @max_row,
 
41251
new.f_charbig = '####updated per update trigger####';
 
41252
END|
 
41253
UPDATE t1
 
41254
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41255
f_charbig = '####updated per update statement itself####';
 
41256
        
 
41257
# check trigger-9 success:      1
 
41258
DROP TRIGGER trg_2;
 
41259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41261
f_charbig = CONCAT('===',f_char1,'===');
 
41262
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41263
BEGIN
 
41264
SET new.f_int1 = new.f_int1 + @max_row,
 
41265
new.f_int2 = new.f_int2 - @max_row,
 
41266
new.f_charbig = '####updated per update trigger####';
 
41267
END|
 
41268
UPDATE t1
 
41269
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41270
f_charbig = '####updated per update statement itself####';
 
41271
        
 
41272
# check trigger-10 success:     1
 
41273
DROP TRIGGER trg_2;
 
41274
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41275
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41276
f_charbig = CONCAT('===',f_char1,'===');
 
41277
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41278
BEGIN
 
41279
SET new.f_int1 = @my_max1 + @counter,
 
41280
new.f_int2 = @my_min2 - @counter,
 
41281
new.f_charbig = '####updated per insert trigger####';
 
41282
SET @counter = @counter + 1;
 
41283
END|
 
41284
SET @counter = 1;
 
41285
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41286
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41287
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41288
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41290
ORDER BY f_int1;
 
41291
DROP TRIGGER trg_3;
 
41292
        
 
41293
# check trigger-11 success:     1
 
41294
DELETE FROM t1
 
41295
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41296
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41297
AND f_charbig = '####updated per insert trigger####';
 
41298
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41299
BEGIN
 
41300
SET new.f_int1 = @my_max1 + @counter,
 
41301
new.f_int2 = @my_min2 - @counter,
 
41302
new.f_charbig = '####updated per insert trigger####';
 
41303
SET @counter = @counter + 1;
 
41304
END|
 
41305
SET @counter = 1;
 
41306
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41307
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
41308
SELECT CAST(f_int1 AS CHAR),
 
41309
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41311
ORDER BY f_int1;
 
41312
DROP TRIGGER trg_3;
 
41313
        
 
41314
# check trigger-12 success:     1
 
41315
DELETE FROM t1
 
41316
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41317
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41318
AND f_charbig = '####updated per insert trigger####';
 
41319
ANALYZE  TABLE t1;
 
41320
Table   Op      Msg_type        Msg_text
 
41321
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
41322
CHECK    TABLE t1 EXTENDED;
 
41323
Table   Op      Msg_type        Msg_text
 
41324
test.t1 check   note    The storage engine for the table doesn't support check
 
41325
CHECKSUM TABLE t1 EXTENDED;
 
41326
Table   Checksum
 
41327
test.t1 <some_value>
 
41328
OPTIMIZE TABLE t1;
 
41329
Table   Op      Msg_type        Msg_text
 
41330
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
41331
# check layout success:    1
 
41332
REPAIR   TABLE t1 EXTENDED;
 
41333
Table   Op      Msg_type        Msg_text
 
41334
test.t1 repair  note    The storage engine for the table doesn't support repair
 
41335
# check layout success:    1
 
41336
TRUNCATE t1;
 
41337
        
 
41338
# check TRUNCATE success:       1
 
41339
# check layout success:    1
 
41340
# End usability test (inc/partition_check.inc)
 
41341
DROP TABLE t1;
 
41342
CREATE TABLE t1 (
 
41343
f_int1 INTEGER,
 
41344
f_int2 INTEGER,
 
41345
f_char1 CHAR(20),
 
41346
f_char2 CHAR(20),
 
41347
f_charbig VARCHAR(1000)
 
41348
 
 
41349
)
 
41350
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
41351
(PARTITION part_3 VALUES IN (-3),
 
41352
PARTITION part_2 VALUES IN (-2),
 
41353
PARTITION part_1 VALUES IN (-1),
 
41354
PARTITION part_N VALUES IN (NULL),
 
41355
PARTITION part0 VALUES IN (0),
 
41356
PARTITION part1 VALUES IN (1),
 
41357
PARTITION part2 VALUES IN (2),
 
41358
PARTITION part3 VALUES IN (3));
 
41359
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41360
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41361
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
41362
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
41363
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41364
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41365
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41366
# Start usability test (inc/partition_check.inc)
 
41367
create_command
 
41368
SHOW CREATE TABLE t1;
 
41369
Table   Create Table
 
41370
t1      CREATE TABLE `t1` (
 
41371
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
41372
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
41373
  `f_char1` char(20) DEFAULT NULL,
 
41374
  `f_char2` char(20) DEFAULT NULL,
 
41375
  `f_charbig` varchar(1000) DEFAULT NULL,
 
41376
  PRIMARY KEY (`f_int1`,`f_int2`),
 
41377
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
41378
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
41379
 
 
41380
# check prerequisites-1 success:    1
 
41381
# check COUNT(*) success:    1
 
41382
# check MIN/MAX(f_int1) success:    1
 
41383
# check MIN/MAX(f_int2) success:    1
 
41384
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41385
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41386
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
41387
WHERE f_int1 IN (2,3);
 
41388
ERROR 23000: Can't write; duplicate key in table 't1'
 
41389
# check prerequisites-3 success:    1
 
41390
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
41391
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41392
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
41393
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
41394
WHERE f_int1 IN (2,3);
 
41395
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
41396
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41397
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
41398
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
41399
WHERE f_int1 IN (2,3);
 
41400
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
41401
# check read via f_int1 success: 1
 
41402
# check read via f_int2 success: 1
 
41403
        
 
41404
# check multiple-1 success:     1
 
41405
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
41406
        
 
41407
# check multiple-2 success:     1
 
41408
INSERT INTO t1 SELECT * FROM t0_template
 
41409
WHERE MOD(f_int1,3) = 0;
 
41410
        
 
41411
# check multiple-3 success:     1
 
41412
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
41413
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
41414
AND @max_row_div2 + @max_row_div4;
 
41415
        
 
41416
# check multiple-4 success:     1
 
41417
DELETE FROM t1
 
41418
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
41419
AND @max_row_div2 + @max_row_div4 + @max_row;
 
41420
        
 
41421
# check multiple-5 success:     1
 
41422
SELECT COUNT(*) INTO @try_count FROM t0_template
 
41423
WHERE MOD(f_int1,3) = 0
 
41424
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41425
SELECT COUNT(*) INTO @clash_count
 
41426
FROM t1 INNER JOIN t0_template USING(f_int1)
 
41427
WHERE MOD(f_int1,3) = 0
 
41428
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41429
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
41430
INSERT INTO t1
 
41431
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41432
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41433
f_charbig = '#SINGLE#';
 
41434
        
 
41435
# check single-1 success:       1
 
41436
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
41437
INSERT INTO t1
 
41438
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41439
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41440
f_charbig = '#SINGLE#';
 
41441
        
 
41442
# check single-2 success:       1
 
41443
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
41444
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
41445
UPDATE t1 SET f_int1 = @cur_value2
 
41446
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
41447
        
 
41448
# check single-3 success:       1
 
41449
SET @cur_value1= -1;
 
41450
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
41451
UPDATE t1 SET f_int1 = @cur_value1
 
41452
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
41453
        
 
41454
# check single-4 success:       1
 
41455
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
41456
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
41457
        
 
41458
# check single-5 success:       1
 
41459
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
41460
        
 
41461
# check single-6 success:       1
 
41462
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
41463
        
 
41464
# check single-7 success:       1
 
41465
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
41466
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
41467
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
41468
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
41469
f_charbig = '#NULL#';
 
41470
INSERT INTO t1
 
41471
SET f_int1 = NULL , f_int2 = -@max_row,
 
41472
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
41473
f_charbig = '#NULL#';
 
41474
ERROR 23000: Column 'f_int1' cannot be null
 
41475
# check null success:    1
 
41476
DELETE FROM t1
 
41477
WHERE f_int1 = 0 AND f_int2 = 0
 
41478
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
41479
AND f_charbig = '#NULL#';
 
41480
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41481
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41482
   FROM t0_template source_tab
 
41483
WHERE MOD(f_int1,3) = 0
 
41484
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
41485
ON DUPLICATE KEY
 
41486
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
41487
f_int2 = 2 * @max_row + source_tab.f_int1,
 
41488
f_charbig = 'was updated';
 
41489
        
 
41490
# check unique-1-a success:     1
 
41491
        
 
41492
# check unique-1-b success:     1
 
41493
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41494
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41495
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41496
f_charbig = CONCAT('===',f_char1,'===')
 
41497
WHERE f_charbig = 'was updated';
 
41498
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41499
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
41500
   FROM t0_template source_tab
 
41501
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41502
        
 
41503
# check replace success:        1
 
41504
DELETE FROM t1
 
41505
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
41506
DELETE FROM t1
 
41507
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
41508
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
41509
UPDATE t1 SET f_int2 = f_int1,
 
41510
f_char1 = CAST(f_int1 AS CHAR),
 
41511
f_char2 = CAST(f_int1 AS CHAR),
 
41512
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
41513
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
41514
SET AUTOCOMMIT= 0;
 
41515
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41516
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41517
FROM t0_template source_tab
 
41518
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41519
        
 
41520
# check transactions-1 success:         1
 
41521
COMMIT WORK;
 
41522
        
 
41523
# check transactions-2 success:         1
 
41524
ROLLBACK WORK;
 
41525
        
 
41526
# check transactions-3 success:         1
 
41527
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41528
COMMIT WORK;
 
41529
ROLLBACK WORK;
 
41530
        
 
41531
# check transactions-4 success:         1
 
41532
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41533
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41534
FROM t0_template source_tab
 
41535
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41536
        
 
41537
# check transactions-5 success:         1
 
41538
ROLLBACK WORK;
 
41539
        
 
41540
# check transactions-6 success:         1
 
41541
# INFO: Storage engine used for t1 seems to be transactional.
 
41542
COMMIT;
 
41543
        
 
41544
# check transactions-7 success:         1
 
41545
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41546
COMMIT WORK;
 
41547
SET @@session.sql_mode = 'traditional';
 
41548
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
41549
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41550
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
41551
'', '', 'was inserted' FROM t0_template
 
41552
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41553
ERROR 22012: Division by 0
 
41554
COMMIT;
 
41555
        
 
41556
# check transactions-8 success:         1
 
41557
# INFO: Storage engine used for t1 seems to be able to revert
 
41558
#       changes made by the failing statement.
 
41559
SET @@session.sql_mode = '';
 
41560
SET AUTOCOMMIT= 1;
 
41561
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41562
COMMIT WORK;
 
41563
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
41564
        
 
41565
# check special-1 success:      1
 
41566
UPDATE t1 SET f_charbig = '';
 
41567
        
 
41568
# check special-2 success:      1
 
41569
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
41570
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41571
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
41572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41573
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41574
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41575
'just inserted' FROM t0_template
 
41576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41577
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
41578
BEGIN
 
41579
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41580
f_charbig = 'updated by trigger'
 
41581
      WHERE f_int1 = new.f_int1;
 
41582
END|
 
41583
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41584
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41586
        
 
41587
# check trigger-1 success:      1
 
41588
DROP TRIGGER trg_1;
 
41589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41591
f_charbig = 'just inserted'
 
41592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41593
DELETE FROM t0_aux
 
41594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41596
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41597
'just inserted' FROM t0_template
 
41598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41599
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
41600
BEGIN
 
41601
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41602
f_charbig = 'updated by trigger'
 
41603
      WHERE f_int1 = new.f_int1;
 
41604
END|
 
41605
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41606
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41607
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41608
        
 
41609
# check trigger-2 success:      1
 
41610
DROP TRIGGER trg_1;
 
41611
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41612
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41613
f_charbig = 'just inserted'
 
41614
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41615
DELETE FROM t0_aux
 
41616
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41617
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41618
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41619
'just inserted' FROM t0_template
 
41620
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41621
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41622
BEGIN
 
41623
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41624
f_charbig = 'updated by trigger'
 
41625
      WHERE f_int1 = new.f_int1;
 
41626
END|
 
41627
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41628
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41629
        
 
41630
# check trigger-3 success:      1
 
41631
DROP TRIGGER trg_1;
 
41632
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41633
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41634
f_charbig = 'just inserted'
 
41635
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41636
DELETE FROM t0_aux
 
41637
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41638
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41639
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41640
'just inserted' FROM t0_template
 
41641
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41642
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41643
BEGIN
 
41644
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41645
f_charbig = 'updated by trigger'
 
41646
      WHERE f_int1 = - old.f_int1;
 
41647
END|
 
41648
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41649
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41650
        
 
41651
# check trigger-4 success:      1
 
41652
DROP TRIGGER trg_1;
 
41653
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41654
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41655
f_charbig = 'just inserted'
 
41656
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41657
DELETE FROM t0_aux
 
41658
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41659
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41660
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41661
'just inserted' FROM t0_template
 
41662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41663
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41664
BEGIN
 
41665
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41666
f_charbig = 'updated by trigger'
 
41667
      WHERE f_int1 = new.f_int1;
 
41668
END|
 
41669
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41670
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41671
        
 
41672
# check trigger-5 success:      1
 
41673
DROP TRIGGER trg_1;
 
41674
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41675
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41676
f_charbig = 'just inserted'
 
41677
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41678
DELETE FROM t0_aux
 
41679
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41680
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41681
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41682
'just inserted' FROM t0_template
 
41683
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41684
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41685
BEGIN
 
41686
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41687
f_charbig = 'updated by trigger'
 
41688
      WHERE f_int1 = - old.f_int1;
 
41689
END|
 
41690
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41691
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41692
        
 
41693
# check trigger-6 success:      1
 
41694
DROP TRIGGER trg_1;
 
41695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41697
f_charbig = 'just inserted'
 
41698
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41699
DELETE FROM t0_aux
 
41700
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41702
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41703
'just inserted' FROM t0_template
 
41704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41705
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
41706
BEGIN
 
41707
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41708
f_charbig = 'updated by trigger'
 
41709
      WHERE f_int1 = - old.f_int1;
 
41710
END|
 
41711
DELETE FROM t0_aux
 
41712
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41713
        
 
41714
# check trigger-7 success:      1
 
41715
DROP TRIGGER trg_1;
 
41716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41718
f_charbig = 'just inserted'
 
41719
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41720
DELETE FROM t0_aux
 
41721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41722
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41723
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41724
'just inserted' FROM t0_template
 
41725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41726
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
41727
BEGIN
 
41728
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41729
f_charbig = 'updated by trigger'
 
41730
      WHERE f_int1 = - old.f_int1;
 
41731
END|
 
41732
DELETE FROM t0_aux
 
41733
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41734
        
 
41735
# check trigger-8 success:      1
 
41736
DROP TRIGGER trg_1;
 
41737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41739
f_charbig = 'just inserted'
 
41740
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41741
DELETE FROM t0_aux
 
41742
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41743
DELETE FROM t1
 
41744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41745
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41746
BEGIN
 
41747
SET new.f_int1 = old.f_int1 + @max_row,
 
41748
new.f_int2 = old.f_int2 - @max_row,
 
41749
new.f_charbig = '####updated per update trigger####';
 
41750
END|
 
41751
UPDATE t1
 
41752
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41753
f_charbig = '####updated per update statement itself####';
 
41754
        
 
41755
# check trigger-9 success:      1
 
41756
DROP TRIGGER trg_2;
 
41757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41759
f_charbig = CONCAT('===',f_char1,'===');
 
41760
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41761
BEGIN
 
41762
SET new.f_int1 = new.f_int1 + @max_row,
 
41763
new.f_int2 = new.f_int2 - @max_row,
 
41764
new.f_charbig = '####updated per update trigger####';
 
41765
END|
 
41766
UPDATE t1
 
41767
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41768
f_charbig = '####updated per update statement itself####';
 
41769
        
 
41770
# check trigger-10 success:     1
 
41771
DROP TRIGGER trg_2;
 
41772
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41773
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41774
f_charbig = CONCAT('===',f_char1,'===');
 
41775
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41776
BEGIN
 
41777
SET new.f_int1 = @my_max1 + @counter,
 
41778
new.f_int2 = @my_min2 - @counter,
 
41779
new.f_charbig = '####updated per insert trigger####';
 
41780
SET @counter = @counter + 1;
 
41781
END|
 
41782
SET @counter = 1;
 
41783
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41784
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41785
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41786
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41788
ORDER BY f_int1;
 
41789
DROP TRIGGER trg_3;
 
41790
        
 
41791
# check trigger-11 success:     1
 
41792
DELETE FROM t1
 
41793
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41794
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41795
AND f_charbig = '####updated per insert trigger####';
 
41796
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41797
BEGIN
 
41798
SET new.f_int1 = @my_max1 + @counter,
 
41799
new.f_int2 = @my_min2 - @counter,
 
41800
new.f_charbig = '####updated per insert trigger####';
 
41801
SET @counter = @counter + 1;
 
41802
END|
 
41803
SET @counter = 1;
 
41804
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41805
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
41806
SELECT CAST(f_int1 AS CHAR),
 
41807
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41809
ORDER BY f_int1;
 
41810
DROP TRIGGER trg_3;
 
41811
        
 
41812
# check trigger-12 success:     1
 
41813
DELETE FROM t1
 
41814
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41815
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41816
AND f_charbig = '####updated per insert trigger####';
 
41817
ANALYZE  TABLE t1;
 
41818
Table   Op      Msg_type        Msg_text
 
41819
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
41820
CHECK    TABLE t1 EXTENDED;
 
41821
Table   Op      Msg_type        Msg_text
 
41822
test.t1 check   note    The storage engine for the table doesn't support check
 
41823
CHECKSUM TABLE t1 EXTENDED;
 
41824
Table   Checksum
 
41825
test.t1 <some_value>
 
41826
OPTIMIZE TABLE t1;
 
41827
Table   Op      Msg_type        Msg_text
 
41828
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
41829
# check layout success:    1
 
41830
REPAIR   TABLE t1 EXTENDED;
 
41831
Table   Op      Msg_type        Msg_text
 
41832
test.t1 repair  note    The storage engine for the table doesn't support repair
 
41833
# check layout success:    1
 
41834
TRUNCATE t1;
 
41835
        
 
41836
# check TRUNCATE success:       1
 
41837
# check layout success:    1
 
41838
# End usability test (inc/partition_check.inc)
 
41839
DROP TABLE t1;
 
41840
CREATE TABLE t1 (
 
41841
f_int1 INTEGER,
 
41842
f_int2 INTEGER,
 
41843
f_char1 CHAR(20),
 
41844
f_char2 CHAR(20),
 
41845
f_charbig VARCHAR(1000)
 
41846
 
 
41847
)
 
41848
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
41849
(PARTITION parta VALUES LESS THAN (0),
 
41850
PARTITION partb VALUES LESS THAN (5),
 
41851
PARTITION partc VALUES LESS THAN (10),
 
41852
PARTITION partd VALUES LESS THAN (10 + 5),
 
41853
PARTITION parte VALUES LESS THAN (20),
 
41854
PARTITION partf VALUES LESS THAN (2147483646));
 
41855
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41856
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41857
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
41858
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
41859
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41860
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41861
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41862
# Start usability test (inc/partition_check.inc)
 
41863
create_command
 
41864
SHOW CREATE TABLE t1;
 
41865
Table   Create Table
 
41866
t1      CREATE TABLE `t1` (
 
41867
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
41868
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
41869
  `f_char1` char(20) DEFAULT NULL,
 
41870
  `f_char2` char(20) DEFAULT NULL,
 
41871
  `f_charbig` varchar(1000) DEFAULT NULL,
 
41872
  PRIMARY KEY (`f_int1`,`f_int2`),
 
41873
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
41874
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
41875
 
 
41876
# check prerequisites-1 success:    1
 
41877
# check COUNT(*) success:    1
 
41878
# check MIN/MAX(f_int1) success:    1
 
41879
# check MIN/MAX(f_int2) success:    1
 
41880
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41881
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41882
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
41883
WHERE f_int1 IN (2,3);
 
41884
ERROR 23000: Can't write; duplicate key in table 't1'
 
41885
# check prerequisites-3 success:    1
 
41886
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
41887
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41888
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
41889
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
41890
WHERE f_int1 IN (2,3);
 
41891
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
41892
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41893
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
41894
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
41895
WHERE f_int1 IN (2,3);
 
41896
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
41897
# check read via f_int1 success: 1
 
41898
# check read via f_int2 success: 1
 
41899
        
 
41900
# check multiple-1 success:     1
 
41901
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
41902
        
 
41903
# check multiple-2 success:     1
 
41904
INSERT INTO t1 SELECT * FROM t0_template
 
41905
WHERE MOD(f_int1,3) = 0;
 
41906
        
 
41907
# check multiple-3 success:     1
 
41908
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
41909
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
41910
AND @max_row_div2 + @max_row_div4;
 
41911
        
 
41912
# check multiple-4 success:     1
 
41913
DELETE FROM t1
 
41914
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
41915
AND @max_row_div2 + @max_row_div4 + @max_row;
 
41916
        
 
41917
# check multiple-5 success:     1
 
41918
SELECT COUNT(*) INTO @try_count FROM t0_template
 
41919
WHERE MOD(f_int1,3) = 0
 
41920
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41921
SELECT COUNT(*) INTO @clash_count
 
41922
FROM t1 INNER JOIN t0_template USING(f_int1)
 
41923
WHERE MOD(f_int1,3) = 0
 
41924
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41925
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
41926
INSERT INTO t1
 
41927
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41928
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41929
f_charbig = '#SINGLE#';
 
41930
        
 
41931
# check single-1 success:       1
 
41932
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
41933
INSERT INTO t1
 
41934
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41935
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41936
f_charbig = '#SINGLE#';
 
41937
        
 
41938
# check single-2 success:       1
 
41939
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
41940
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
41941
UPDATE t1 SET f_int1 = @cur_value2
 
41942
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
41943
        
 
41944
# check single-3 success:       1
 
41945
SET @cur_value1= -1;
 
41946
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
41947
UPDATE t1 SET f_int1 = @cur_value1
 
41948
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
41949
        
 
41950
# check single-4 success:       1
 
41951
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
41952
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
41953
        
 
41954
# check single-5 success:       1
 
41955
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
41956
        
 
41957
# check single-6 success:       1
 
41958
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
41959
ERROR HY000: Table has no partition for value 2147483647
 
41960
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
41961
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
41962
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
41963
f_charbig = '#NULL#';
 
41964
INSERT INTO t1
 
41965
SET f_int1 = NULL , f_int2 = -@max_row,
 
41966
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
41967
f_charbig = '#NULL#';
 
41968
ERROR 23000: Column 'f_int1' cannot be null
 
41969
# check null success:    1
 
41970
DELETE FROM t1
 
41971
WHERE f_int1 = 0 AND f_int2 = 0
 
41972
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
41973
AND f_charbig = '#NULL#';
 
41974
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41975
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41976
   FROM t0_template source_tab
 
41977
WHERE MOD(f_int1,3) = 0
 
41978
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
41979
ON DUPLICATE KEY
 
41980
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
41981
f_int2 = 2 * @max_row + source_tab.f_int1,
 
41982
f_charbig = 'was updated';
 
41983
        
 
41984
# check unique-1-a success:     1
 
41985
        
 
41986
# check unique-1-b success:     1
 
41987
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41988
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41989
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41990
f_charbig = CONCAT('===',f_char1,'===')
 
41991
WHERE f_charbig = 'was updated';
 
41992
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41993
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
41994
   FROM t0_template source_tab
 
41995
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41996
        
 
41997
# check replace success:        1
 
41998
DELETE FROM t1
 
41999
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
42000
DELETE FROM t1
 
42001
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
42002
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
42003
UPDATE t1 SET f_int2 = f_int1,
 
42004
f_char1 = CAST(f_int1 AS CHAR),
 
42005
f_char2 = CAST(f_int1 AS CHAR),
 
42006
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
42007
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
42008
SET AUTOCOMMIT= 0;
 
42009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42010
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42011
FROM t0_template source_tab
 
42012
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42013
        
 
42014
# check transactions-1 success:         1
 
42015
COMMIT WORK;
 
42016
        
 
42017
# check transactions-2 success:         1
 
42018
ROLLBACK WORK;
 
42019
        
 
42020
# check transactions-3 success:         1
 
42021
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42022
COMMIT WORK;
 
42023
ROLLBACK WORK;
 
42024
        
 
42025
# check transactions-4 success:         1
 
42026
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42027
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42028
FROM t0_template source_tab
 
42029
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42030
        
 
42031
# check transactions-5 success:         1
 
42032
ROLLBACK WORK;
 
42033
        
 
42034
# check transactions-6 success:         1
 
42035
# INFO: Storage engine used for t1 seems to be transactional.
 
42036
COMMIT;
 
42037
        
 
42038
# check transactions-7 success:         1
 
42039
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42040
COMMIT WORK;
 
42041
SET @@session.sql_mode = 'traditional';
 
42042
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
42043
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42044
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
42045
'', '', 'was inserted' FROM t0_template
 
42046
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42047
ERROR 22012: Division by 0
 
42048
COMMIT;
 
42049
        
 
42050
# check transactions-8 success:         1
 
42051
# INFO: Storage engine used for t1 seems to be able to revert
 
42052
#       changes made by the failing statement.
 
42053
SET @@session.sql_mode = '';
 
42054
SET AUTOCOMMIT= 1;
 
42055
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42056
COMMIT WORK;
 
42057
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
42058
        
 
42059
# check special-1 success:      1
 
42060
UPDATE t1 SET f_charbig = '';
 
42061
        
 
42062
# check special-2 success:      1
 
42063
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
42064
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42065
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
42066
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42067
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42068
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42069
'just inserted' FROM t0_template
 
42070
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42071
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
42072
BEGIN
 
42073
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42074
f_charbig = 'updated by trigger'
 
42075
      WHERE f_int1 = new.f_int1;
 
42076
END|
 
42077
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42078
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42079
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42080
        
 
42081
# check trigger-1 success:      1
 
42082
DROP TRIGGER trg_1;
 
42083
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42084
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42085
f_charbig = 'just inserted'
 
42086
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42087
DELETE FROM t0_aux
 
42088
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42090
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42091
'just inserted' FROM t0_template
 
42092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42093
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
42094
BEGIN
 
42095
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42096
f_charbig = 'updated by trigger'
 
42097
      WHERE f_int1 = new.f_int1;
 
42098
END|
 
42099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42100
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42102
        
 
42103
# check trigger-2 success:      1
 
42104
DROP TRIGGER trg_1;
 
42105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42107
f_charbig = 'just inserted'
 
42108
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42109
DELETE FROM t0_aux
 
42110
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42111
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42112
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42113
'just inserted' FROM t0_template
 
42114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42115
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42116
BEGIN
 
42117
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42118
f_charbig = 'updated by trigger'
 
42119
      WHERE f_int1 = new.f_int1;
 
42120
END|
 
42121
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42122
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42123
        
 
42124
# check trigger-3 success:      1
 
42125
DROP TRIGGER trg_1;
 
42126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42128
f_charbig = 'just inserted'
 
42129
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42130
DELETE FROM t0_aux
 
42131
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42133
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42134
'just inserted' FROM t0_template
 
42135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42136
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42137
BEGIN
 
42138
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42139
f_charbig = 'updated by trigger'
 
42140
      WHERE f_int1 = - old.f_int1;
 
42141
END|
 
42142
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42143
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42144
        
 
42145
# check trigger-4 success:      1
 
42146
DROP TRIGGER trg_1;
 
42147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42149
f_charbig = 'just inserted'
 
42150
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42151
DELETE FROM t0_aux
 
42152
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42155
'just inserted' FROM t0_template
 
42156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42157
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42158
BEGIN
 
42159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42160
f_charbig = 'updated by trigger'
 
42161
      WHERE f_int1 = new.f_int1;
 
42162
END|
 
42163
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42164
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42165
        
 
42166
# check trigger-5 success:      1
 
42167
DROP TRIGGER trg_1;
 
42168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42169
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42170
f_charbig = 'just inserted'
 
42171
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42172
DELETE FROM t0_aux
 
42173
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42174
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42175
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42176
'just inserted' FROM t0_template
 
42177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42178
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42179
BEGIN
 
42180
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42181
f_charbig = 'updated by trigger'
 
42182
      WHERE f_int1 = - old.f_int1;
 
42183
END|
 
42184
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42185
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42186
        
 
42187
# check trigger-6 success:      1
 
42188
DROP TRIGGER trg_1;
 
42189
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42190
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42191
f_charbig = 'just inserted'
 
42192
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42193
DELETE FROM t0_aux
 
42194
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42195
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42196
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42197
'just inserted' FROM t0_template
 
42198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42199
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
42200
BEGIN
 
42201
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42202
f_charbig = 'updated by trigger'
 
42203
      WHERE f_int1 = - old.f_int1;
 
42204
END|
 
42205
DELETE FROM t0_aux
 
42206
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42207
        
 
42208
# check trigger-7 success:      1
 
42209
DROP TRIGGER trg_1;
 
42210
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42211
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42212
f_charbig = 'just inserted'
 
42213
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42214
DELETE FROM t0_aux
 
42215
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42216
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42217
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42218
'just inserted' FROM t0_template
 
42219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42220
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
42221
BEGIN
 
42222
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42223
f_charbig = 'updated by trigger'
 
42224
      WHERE f_int1 = - old.f_int1;
 
42225
END|
 
42226
DELETE FROM t0_aux
 
42227
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42228
        
 
42229
# check trigger-8 success:      1
 
42230
DROP TRIGGER trg_1;
 
42231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42233
f_charbig = 'just inserted'
 
42234
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42235
DELETE FROM t0_aux
 
42236
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42237
DELETE FROM t1
 
42238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42239
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42240
BEGIN
 
42241
SET new.f_int1 = old.f_int1 + @max_row,
 
42242
new.f_int2 = old.f_int2 - @max_row,
 
42243
new.f_charbig = '####updated per update trigger####';
 
42244
END|
 
42245
UPDATE t1
 
42246
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42247
f_charbig = '####updated per update statement itself####';
 
42248
        
 
42249
# check trigger-9 success:      1
 
42250
DROP TRIGGER trg_2;
 
42251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42253
f_charbig = CONCAT('===',f_char1,'===');
 
42254
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42255
BEGIN
 
42256
SET new.f_int1 = new.f_int1 + @max_row,
 
42257
new.f_int2 = new.f_int2 - @max_row,
 
42258
new.f_charbig = '####updated per update trigger####';
 
42259
END|
 
42260
UPDATE t1
 
42261
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42262
f_charbig = '####updated per update statement itself####';
 
42263
        
 
42264
# check trigger-10 success:     1
 
42265
DROP TRIGGER trg_2;
 
42266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42268
f_charbig = CONCAT('===',f_char1,'===');
 
42269
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42270
BEGIN
 
42271
SET new.f_int1 = @my_max1 + @counter,
 
42272
new.f_int2 = @my_min2 - @counter,
 
42273
new.f_charbig = '####updated per insert trigger####';
 
42274
SET @counter = @counter + 1;
 
42275
END|
 
42276
SET @counter = 1;
 
42277
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42278
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42279
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42280
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42282
ORDER BY f_int1;
 
42283
DROP TRIGGER trg_3;
 
42284
        
 
42285
# check trigger-11 success:     1
 
42286
DELETE FROM t1
 
42287
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42288
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42289
AND f_charbig = '####updated per insert trigger####';
 
42290
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42291
BEGIN
 
42292
SET new.f_int1 = @my_max1 + @counter,
 
42293
new.f_int2 = @my_min2 - @counter,
 
42294
new.f_charbig = '####updated per insert trigger####';
 
42295
SET @counter = @counter + 1;
 
42296
END|
 
42297
SET @counter = 1;
 
42298
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42299
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
42300
SELECT CAST(f_int1 AS CHAR),
 
42301
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42303
ORDER BY f_int1;
 
42304
DROP TRIGGER trg_3;
 
42305
        
 
42306
# check trigger-12 success:     1
 
42307
DELETE FROM t1
 
42308
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42309
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42310
AND f_charbig = '####updated per insert trigger####';
 
42311
ANALYZE  TABLE t1;
 
42312
Table   Op      Msg_type        Msg_text
 
42313
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
42314
CHECK    TABLE t1 EXTENDED;
 
42315
Table   Op      Msg_type        Msg_text
 
42316
test.t1 check   note    The storage engine for the table doesn't support check
 
42317
CHECKSUM TABLE t1 EXTENDED;
 
42318
Table   Checksum
 
42319
test.t1 <some_value>
 
42320
OPTIMIZE TABLE t1;
 
42321
Table   Op      Msg_type        Msg_text
 
42322
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
42323
# check layout success:    1
 
42324
REPAIR   TABLE t1 EXTENDED;
 
42325
Table   Op      Msg_type        Msg_text
 
42326
test.t1 repair  note    The storage engine for the table doesn't support repair
 
42327
# check layout success:    1
 
42328
TRUNCATE t1;
 
42329
        
 
42330
# check TRUNCATE success:       1
 
42331
# check layout success:    1
 
42332
# End usability test (inc/partition_check.inc)
 
42333
DROP TABLE t1;
 
42334
CREATE TABLE t1 (
 
42335
f_int1 INTEGER,
 
42336
f_int2 INTEGER,
 
42337
f_char1 CHAR(20),
 
42338
f_char2 CHAR(20),
 
42339
f_charbig VARCHAR(1000)
 
42340
 
 
42341
)
 
42342
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
42343
(PARTITION parta VALUES LESS THAN (0),
 
42344
PARTITION partb VALUES LESS THAN (5),
 
42345
PARTITION partc VALUES LESS THAN (10),
 
42346
PARTITION partd VALUES LESS THAN (2147483646));
 
42347
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42348
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42349
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
42350
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
42351
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42352
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42353
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42354
# Start usability test (inc/partition_check.inc)
 
42355
create_command
 
42356
SHOW CREATE TABLE t1;
 
42357
Table   Create Table
 
42358
t1      CREATE TABLE `t1` (
 
42359
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
42360
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
42361
  `f_char1` char(20) DEFAULT NULL,
 
42362
  `f_char2` char(20) DEFAULT NULL,
 
42363
  `f_charbig` varchar(1000) DEFAULT NULL,
 
42364
  PRIMARY KEY (`f_int1`,`f_int2`),
 
42365
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
42366
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
42367
 
 
42368
# check prerequisites-1 success:    1
 
42369
# check COUNT(*) success:    1
 
42370
# check MIN/MAX(f_int1) success:    1
 
42371
# check MIN/MAX(f_int2) success:    1
 
42372
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42373
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42374
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
42375
WHERE f_int1 IN (2,3);
 
42376
ERROR 23000: Can't write; duplicate key in table 't1'
 
42377
# check prerequisites-3 success:    1
 
42378
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
42379
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42380
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
42381
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
42382
WHERE f_int1 IN (2,3);
 
42383
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
42384
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42385
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
42386
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
42387
WHERE f_int1 IN (2,3);
 
42388
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
42389
# check read via f_int1 success: 1
 
42390
# check read via f_int2 success: 1
 
42391
        
 
42392
# check multiple-1 success:     1
 
42393
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
42394
        
 
42395
# check multiple-2 success:     1
 
42396
INSERT INTO t1 SELECT * FROM t0_template
 
42397
WHERE MOD(f_int1,3) = 0;
 
42398
        
 
42399
# check multiple-3 success:     1
 
42400
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
42401
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
42402
AND @max_row_div2 + @max_row_div4;
 
42403
        
 
42404
# check multiple-4 success:     1
 
42405
DELETE FROM t1
 
42406
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
42407
AND @max_row_div2 + @max_row_div4 + @max_row;
 
42408
        
 
42409
# check multiple-5 success:     1
 
42410
SELECT COUNT(*) INTO @try_count FROM t0_template
 
42411
WHERE MOD(f_int1,3) = 0
 
42412
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42413
SELECT COUNT(*) INTO @clash_count
 
42414
FROM t1 INNER JOIN t0_template USING(f_int1)
 
42415
WHERE MOD(f_int1,3) = 0
 
42416
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42417
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
42418
INSERT INTO t1
 
42419
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42420
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42421
f_charbig = '#SINGLE#';
 
42422
        
 
42423
# check single-1 success:       1
 
42424
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
42425
INSERT INTO t1
 
42426
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42427
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42428
f_charbig = '#SINGLE#';
 
42429
        
 
42430
# check single-2 success:       1
 
42431
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
42432
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
42433
UPDATE t1 SET f_int1 = @cur_value2
 
42434
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
42435
        
 
42436
# check single-3 success:       1
 
42437
SET @cur_value1= -1;
 
42438
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
42439
UPDATE t1 SET f_int1 = @cur_value1
 
42440
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
42441
        
 
42442
# check single-4 success:       1
 
42443
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
42444
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
42445
        
 
42446
# check single-5 success:       1
 
42447
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
42448
        
 
42449
# check single-6 success:       1
 
42450
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
42451
ERROR HY000: Table has no partition for value 2147483647
 
42452
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
42453
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
42454
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
42455
f_charbig = '#NULL#';
 
42456
INSERT INTO t1
 
42457
SET f_int1 = NULL , f_int2 = -@max_row,
 
42458
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
42459
f_charbig = '#NULL#';
 
42460
ERROR 23000: Column 'f_int1' cannot be null
 
42461
# check null success:    1
 
42462
DELETE FROM t1
 
42463
WHERE f_int1 = 0 AND f_int2 = 0
 
42464
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
42465
AND f_charbig = '#NULL#';
 
42466
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42467
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42468
   FROM t0_template source_tab
 
42469
WHERE MOD(f_int1,3) = 0
 
42470
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
42471
ON DUPLICATE KEY
 
42472
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
42473
f_int2 = 2 * @max_row + source_tab.f_int1,
 
42474
f_charbig = 'was updated';
 
42475
        
 
42476
# check unique-1-a success:     1
 
42477
        
 
42478
# check unique-1-b success:     1
 
42479
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42480
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42481
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42482
f_charbig = CONCAT('===',f_char1,'===')
 
42483
WHERE f_charbig = 'was updated';
 
42484
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42485
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
42486
   FROM t0_template source_tab
 
42487
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42488
        
 
42489
# check replace success:        1
 
42490
DELETE FROM t1
 
42491
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
42492
DELETE FROM t1
 
42493
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
42494
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
42495
UPDATE t1 SET f_int2 = f_int1,
 
42496
f_char1 = CAST(f_int1 AS CHAR),
 
42497
f_char2 = CAST(f_int1 AS CHAR),
 
42498
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
42499
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
42500
SET AUTOCOMMIT= 0;
 
42501
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42502
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42503
FROM t0_template source_tab
 
42504
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42505
        
 
42506
# check transactions-1 success:         1
 
42507
COMMIT WORK;
 
42508
        
 
42509
# check transactions-2 success:         1
 
42510
ROLLBACK WORK;
 
42511
        
 
42512
# check transactions-3 success:         1
 
42513
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42514
COMMIT WORK;
 
42515
ROLLBACK WORK;
 
42516
        
 
42517
# check transactions-4 success:         1
 
42518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42519
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42520
FROM t0_template source_tab
 
42521
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42522
        
 
42523
# check transactions-5 success:         1
 
42524
ROLLBACK WORK;
 
42525
        
 
42526
# check transactions-6 success:         1
 
42527
# INFO: Storage engine used for t1 seems to be transactional.
 
42528
COMMIT;
 
42529
        
 
42530
# check transactions-7 success:         1
 
42531
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42532
COMMIT WORK;
 
42533
SET @@session.sql_mode = 'traditional';
 
42534
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
42535
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42536
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
42537
'', '', 'was inserted' FROM t0_template
 
42538
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42539
ERROR 22012: Division by 0
 
42540
COMMIT;
 
42541
        
 
42542
# check transactions-8 success:         1
 
42543
# INFO: Storage engine used for t1 seems to be able to revert
 
42544
#       changes made by the failing statement.
 
42545
SET @@session.sql_mode = '';
 
42546
SET AUTOCOMMIT= 1;
 
42547
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42548
COMMIT WORK;
 
42549
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
42550
        
 
42551
# check special-1 success:      1
 
42552
UPDATE t1 SET f_charbig = '';
 
42553
        
 
42554
# check special-2 success:      1
 
42555
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
42556
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42557
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
42558
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42559
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42560
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42561
'just inserted' FROM t0_template
 
42562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42563
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
42564
BEGIN
 
42565
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42566
f_charbig = 'updated by trigger'
 
42567
      WHERE f_int1 = new.f_int1;
 
42568
END|
 
42569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42570
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42572
        
 
42573
# check trigger-1 success:      1
 
42574
DROP TRIGGER trg_1;
 
42575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42577
f_charbig = 'just inserted'
 
42578
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42579
DELETE FROM t0_aux
 
42580
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42582
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42583
'just inserted' FROM t0_template
 
42584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42585
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
42586
BEGIN
 
42587
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42588
f_charbig = 'updated by trigger'
 
42589
      WHERE f_int1 = new.f_int1;
 
42590
END|
 
42591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42592
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42593
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42594
        
 
42595
# check trigger-2 success:      1
 
42596
DROP TRIGGER trg_1;
 
42597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42599
f_charbig = 'just inserted'
 
42600
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42601
DELETE FROM t0_aux
 
42602
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42604
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42605
'just inserted' FROM t0_template
 
42606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42607
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42608
BEGIN
 
42609
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42610
f_charbig = 'updated by trigger'
 
42611
      WHERE f_int1 = new.f_int1;
 
42612
END|
 
42613
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42614
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42615
        
 
42616
# check trigger-3 success:      1
 
42617
DROP TRIGGER trg_1;
 
42618
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42619
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42620
f_charbig = 'just inserted'
 
42621
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42622
DELETE FROM t0_aux
 
42623
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42625
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42626
'just inserted' FROM t0_template
 
42627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42628
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42629
BEGIN
 
42630
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42631
f_charbig = 'updated by trigger'
 
42632
      WHERE f_int1 = - old.f_int1;
 
42633
END|
 
42634
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42635
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42636
        
 
42637
# check trigger-4 success:      1
 
42638
DROP TRIGGER trg_1;
 
42639
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42640
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42641
f_charbig = 'just inserted'
 
42642
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42643
DELETE FROM t0_aux
 
42644
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42645
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42646
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42647
'just inserted' FROM t0_template
 
42648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42649
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42650
BEGIN
 
42651
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42652
f_charbig = 'updated by trigger'
 
42653
      WHERE f_int1 = new.f_int1;
 
42654
END|
 
42655
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42656
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42657
        
 
42658
# check trigger-5 success:      1
 
42659
DROP TRIGGER trg_1;
 
42660
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42661
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42662
f_charbig = 'just inserted'
 
42663
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42664
DELETE FROM t0_aux
 
42665
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42666
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42667
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42668
'just inserted' FROM t0_template
 
42669
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42670
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42671
BEGIN
 
42672
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42673
f_charbig = 'updated by trigger'
 
42674
      WHERE f_int1 = - old.f_int1;
 
42675
END|
 
42676
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42677
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42678
        
 
42679
# check trigger-6 success:      1
 
42680
DROP TRIGGER trg_1;
 
42681
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42682
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42683
f_charbig = 'just inserted'
 
42684
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42685
DELETE FROM t0_aux
 
42686
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42687
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42688
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42689
'just inserted' FROM t0_template
 
42690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42691
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
42692
BEGIN
 
42693
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42694
f_charbig = 'updated by trigger'
 
42695
      WHERE f_int1 = - old.f_int1;
 
42696
END|
 
42697
DELETE FROM t0_aux
 
42698
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42699
        
 
42700
# check trigger-7 success:      1
 
42701
DROP TRIGGER trg_1;
 
42702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42704
f_charbig = 'just inserted'
 
42705
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42706
DELETE FROM t0_aux
 
42707
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42709
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42710
'just inserted' FROM t0_template
 
42711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42712
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
42713
BEGIN
 
42714
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42715
f_charbig = 'updated by trigger'
 
42716
      WHERE f_int1 = - old.f_int1;
 
42717
END|
 
42718
DELETE FROM t0_aux
 
42719
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42720
        
 
42721
# check trigger-8 success:      1
 
42722
DROP TRIGGER trg_1;
 
42723
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42724
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42725
f_charbig = 'just inserted'
 
42726
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42727
DELETE FROM t0_aux
 
42728
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42729
DELETE FROM t1
 
42730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42731
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42732
BEGIN
 
42733
SET new.f_int1 = old.f_int1 + @max_row,
 
42734
new.f_int2 = old.f_int2 - @max_row,
 
42735
new.f_charbig = '####updated per update trigger####';
 
42736
END|
 
42737
UPDATE t1
 
42738
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42739
f_charbig = '####updated per update statement itself####';
 
42740
        
 
42741
# check trigger-9 success:      1
 
42742
DROP TRIGGER trg_2;
 
42743
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42744
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42745
f_charbig = CONCAT('===',f_char1,'===');
 
42746
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42747
BEGIN
 
42748
SET new.f_int1 = new.f_int1 + @max_row,
 
42749
new.f_int2 = new.f_int2 - @max_row,
 
42750
new.f_charbig = '####updated per update trigger####';
 
42751
END|
 
42752
UPDATE t1
 
42753
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42754
f_charbig = '####updated per update statement itself####';
 
42755
        
 
42756
# check trigger-10 success:     1
 
42757
DROP TRIGGER trg_2;
 
42758
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42759
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42760
f_charbig = CONCAT('===',f_char1,'===');
 
42761
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42762
BEGIN
 
42763
SET new.f_int1 = @my_max1 + @counter,
 
42764
new.f_int2 = @my_min2 - @counter,
 
42765
new.f_charbig = '####updated per insert trigger####';
 
42766
SET @counter = @counter + 1;
 
42767
END|
 
42768
SET @counter = 1;
 
42769
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42770
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42771
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42772
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42773
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42774
ORDER BY f_int1;
 
42775
DROP TRIGGER trg_3;
 
42776
        
 
42777
# check trigger-11 success:     1
 
42778
DELETE FROM t1
 
42779
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42780
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42781
AND f_charbig = '####updated per insert trigger####';
 
42782
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42783
BEGIN
 
42784
SET new.f_int1 = @my_max1 + @counter,
 
42785
new.f_int2 = @my_min2 - @counter,
 
42786
new.f_charbig = '####updated per insert trigger####';
 
42787
SET @counter = @counter + 1;
 
42788
END|
 
42789
SET @counter = 1;
 
42790
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42791
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
42792
SELECT CAST(f_int1 AS CHAR),
 
42793
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42795
ORDER BY f_int1;
 
42796
DROP TRIGGER trg_3;
 
42797
        
 
42798
# check trigger-12 success:     1
 
42799
DELETE FROM t1
 
42800
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42801
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42802
AND f_charbig = '####updated per insert trigger####';
 
42803
ANALYZE  TABLE t1;
 
42804
Table   Op      Msg_type        Msg_text
 
42805
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
42806
CHECK    TABLE t1 EXTENDED;
 
42807
Table   Op      Msg_type        Msg_text
 
42808
test.t1 check   note    The storage engine for the table doesn't support check
 
42809
CHECKSUM TABLE t1 EXTENDED;
 
42810
Table   Checksum
 
42811
test.t1 <some_value>
 
42812
OPTIMIZE TABLE t1;
 
42813
Table   Op      Msg_type        Msg_text
 
42814
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
42815
# check layout success:    1
 
42816
REPAIR   TABLE t1 EXTENDED;
 
42817
Table   Op      Msg_type        Msg_text
 
42818
test.t1 repair  note    The storage engine for the table doesn't support repair
 
42819
# check layout success:    1
 
42820
TRUNCATE t1;
 
42821
        
 
42822
# check TRUNCATE success:       1
 
42823
# check layout success:    1
 
42824
# End usability test (inc/partition_check.inc)
 
42825
DROP TABLE t1;
 
42826
CREATE TABLE t1 (
 
42827
f_int1 INTEGER,
 
42828
f_int2 INTEGER,
 
42829
f_char1 CHAR(20),
 
42830
f_char2 CHAR(20),
 
42831
f_charbig VARCHAR(1000)
 
42832
 
 
42833
)
 
42834
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
42835
(PARTITION part1 VALUES LESS THAN (0)
 
42836
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
42837
PARTITION part2 VALUES LESS THAN (5)
 
42838
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
42839
PARTITION part3 VALUES LESS THAN (10)
 
42840
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
42841
PARTITION part4 VALUES LESS THAN (2147483646)
 
42842
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
42843
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42844
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42845
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
42846
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
42847
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42848
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42849
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42850
# Start usability test (inc/partition_check.inc)
 
42851
create_command
 
42852
SHOW CREATE TABLE t1;
 
42853
Table   Create Table
 
42854
t1      CREATE TABLE `t1` (
 
42855
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
42856
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
42857
  `f_char1` char(20) DEFAULT NULL,
 
42858
  `f_char2` char(20) DEFAULT NULL,
 
42859
  `f_charbig` varchar(1000) DEFAULT NULL,
 
42860
  PRIMARY KEY (`f_int1`,`f_int2`),
 
42861
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
42862
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
42863
 
 
42864
# check prerequisites-1 success:    1
 
42865
# check COUNT(*) success:    1
 
42866
# check MIN/MAX(f_int1) success:    1
 
42867
# check MIN/MAX(f_int2) success:    1
 
42868
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42869
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42870
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
42871
WHERE f_int1 IN (2,3);
 
42872
ERROR 23000: Can't write; duplicate key in table 't1'
 
42873
# check prerequisites-3 success:    1
 
42874
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
42875
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42876
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
42877
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
42878
WHERE f_int1 IN (2,3);
 
42879
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
42880
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42881
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
42882
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
42883
WHERE f_int1 IN (2,3);
 
42884
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
42885
# check read via f_int1 success: 1
 
42886
# check read via f_int2 success: 1
 
42887
        
 
42888
# check multiple-1 success:     1
 
42889
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
42890
        
 
42891
# check multiple-2 success:     1
 
42892
INSERT INTO t1 SELECT * FROM t0_template
 
42893
WHERE MOD(f_int1,3) = 0;
 
42894
        
 
42895
# check multiple-3 success:     1
 
42896
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
42897
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
42898
AND @max_row_div2 + @max_row_div4;
 
42899
        
 
42900
# check multiple-4 success:     1
 
42901
DELETE FROM t1
 
42902
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
42903
AND @max_row_div2 + @max_row_div4 + @max_row;
 
42904
        
 
42905
# check multiple-5 success:     1
 
42906
SELECT COUNT(*) INTO @try_count FROM t0_template
 
42907
WHERE MOD(f_int1,3) = 0
 
42908
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42909
SELECT COUNT(*) INTO @clash_count
 
42910
FROM t1 INNER JOIN t0_template USING(f_int1)
 
42911
WHERE MOD(f_int1,3) = 0
 
42912
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42913
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
42914
INSERT INTO t1
 
42915
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42916
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42917
f_charbig = '#SINGLE#';
 
42918
        
 
42919
# check single-1 success:       1
 
42920
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
42921
INSERT INTO t1
 
42922
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42923
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42924
f_charbig = '#SINGLE#';
 
42925
        
 
42926
# check single-2 success:       1
 
42927
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
42928
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
42929
UPDATE t1 SET f_int1 = @cur_value2
 
42930
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
42931
        
 
42932
# check single-3 success:       1
 
42933
SET @cur_value1= -1;
 
42934
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
42935
UPDATE t1 SET f_int1 = @cur_value1
 
42936
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
42937
        
 
42938
# check single-4 success:       1
 
42939
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
42940
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
42941
        
 
42942
# check single-5 success:       1
 
42943
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
42944
        
 
42945
# check single-6 success:       1
 
42946
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
42947
ERROR HY000: Table has no partition for value 2147483647
 
42948
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
42949
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
42950
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
42951
f_charbig = '#NULL#';
 
42952
INSERT INTO t1
 
42953
SET f_int1 = NULL , f_int2 = -@max_row,
 
42954
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
42955
f_charbig = '#NULL#';
 
42956
ERROR 23000: Column 'f_int1' cannot be null
 
42957
# check null success:    1
 
42958
DELETE FROM t1
 
42959
WHERE f_int1 = 0 AND f_int2 = 0
 
42960
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
42961
AND f_charbig = '#NULL#';
 
42962
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42963
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42964
   FROM t0_template source_tab
 
42965
WHERE MOD(f_int1,3) = 0
 
42966
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
42967
ON DUPLICATE KEY
 
42968
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
42969
f_int2 = 2 * @max_row + source_tab.f_int1,
 
42970
f_charbig = 'was updated';
 
42971
        
 
42972
# check unique-1-a success:     1
 
42973
        
 
42974
# check unique-1-b success:     1
 
42975
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42976
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42977
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42978
f_charbig = CONCAT('===',f_char1,'===')
 
42979
WHERE f_charbig = 'was updated';
 
42980
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42981
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
42982
   FROM t0_template source_tab
 
42983
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42984
        
 
42985
# check replace success:        1
 
42986
DELETE FROM t1
 
42987
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
42988
DELETE FROM t1
 
42989
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
42990
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
42991
UPDATE t1 SET f_int2 = f_int1,
 
42992
f_char1 = CAST(f_int1 AS CHAR),
 
42993
f_char2 = CAST(f_int1 AS CHAR),
 
42994
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
42995
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
42996
SET AUTOCOMMIT= 0;
 
42997
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42998
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42999
FROM t0_template source_tab
 
43000
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43001
        
 
43002
# check transactions-1 success:         1
 
43003
COMMIT WORK;
 
43004
        
 
43005
# check transactions-2 success:         1
 
43006
ROLLBACK WORK;
 
43007
        
 
43008
# check transactions-3 success:         1
 
43009
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43010
COMMIT WORK;
 
43011
ROLLBACK WORK;
 
43012
        
 
43013
# check transactions-4 success:         1
 
43014
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43015
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43016
FROM t0_template source_tab
 
43017
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43018
        
 
43019
# check transactions-5 success:         1
 
43020
ROLLBACK WORK;
 
43021
        
 
43022
# check transactions-6 success:         1
 
43023
# INFO: Storage engine used for t1 seems to be transactional.
 
43024
COMMIT;
 
43025
        
 
43026
# check transactions-7 success:         1
 
43027
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43028
COMMIT WORK;
 
43029
SET @@session.sql_mode = 'traditional';
 
43030
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
43031
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43032
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
43033
'', '', 'was inserted' FROM t0_template
 
43034
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43035
ERROR 22012: Division by 0
 
43036
COMMIT;
 
43037
        
 
43038
# check transactions-8 success:         1
 
43039
# INFO: Storage engine used for t1 seems to be able to revert
 
43040
#       changes made by the failing statement.
 
43041
SET @@session.sql_mode = '';
 
43042
SET AUTOCOMMIT= 1;
 
43043
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43044
COMMIT WORK;
 
43045
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
43046
        
 
43047
# check special-1 success:      1
 
43048
UPDATE t1 SET f_charbig = '';
 
43049
        
 
43050
# check special-2 success:      1
 
43051
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
43052
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43053
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
43054
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43055
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43056
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43057
'just inserted' FROM t0_template
 
43058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43059
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
43060
BEGIN
 
43061
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43062
f_charbig = 'updated by trigger'
 
43063
      WHERE f_int1 = new.f_int1;
 
43064
END|
 
43065
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43066
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
43067
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43068
        
 
43069
# check trigger-1 success:      1
 
43070
DROP TRIGGER trg_1;
 
43071
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43072
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43073
f_charbig = 'just inserted'
 
43074
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43075
DELETE FROM t0_aux
 
43076
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43077
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43078
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43079
'just inserted' FROM t0_template
 
43080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43081
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
43082
BEGIN
 
43083
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43084
f_charbig = 'updated by trigger'
 
43085
      WHERE f_int1 = new.f_int1;
 
43086
END|
 
43087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43088
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
43089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43090
        
 
43091
# check trigger-2 success:      1
 
43092
DROP TRIGGER trg_1;
 
43093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43095
f_charbig = 'just inserted'
 
43096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43097
DELETE FROM t0_aux
 
43098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43100
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43101
'just inserted' FROM t0_template
 
43102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43103
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
43104
BEGIN
 
43105
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43106
f_charbig = 'updated by trigger'
 
43107
      WHERE f_int1 = new.f_int1;
 
43108
END|
 
43109
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43110
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43111
        
 
43112
# check trigger-3 success:      1
 
43113
DROP TRIGGER trg_1;
 
43114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43116
f_charbig = 'just inserted'
 
43117
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43118
DELETE FROM t0_aux
 
43119
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43121
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43122
'just inserted' FROM t0_template
 
43123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43124
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
43125
BEGIN
 
43126
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43127
f_charbig = 'updated by trigger'
 
43128
      WHERE f_int1 = - old.f_int1;
 
43129
END|
 
43130
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43131
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43132
        
 
43133
# check trigger-4 success:      1
 
43134
DROP TRIGGER trg_1;
 
43135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43137
f_charbig = 'just inserted'
 
43138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43139
DELETE FROM t0_aux
 
43140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43143
'just inserted' FROM t0_template
 
43144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43145
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
43146
BEGIN
 
43147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43148
f_charbig = 'updated by trigger'
 
43149
      WHERE f_int1 = new.f_int1;
 
43150
END|
 
43151
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43152
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43153
        
 
43154
# check trigger-5 success:      1
 
43155
DROP TRIGGER trg_1;
 
43156
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43157
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43158
f_charbig = 'just inserted'
 
43159
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43160
DELETE FROM t0_aux
 
43161
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43162
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43163
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43164
'just inserted' FROM t0_template
 
43165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43166
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
43167
BEGIN
 
43168
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43169
f_charbig = 'updated by trigger'
 
43170
      WHERE f_int1 = - old.f_int1;
 
43171
END|
 
43172
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43173
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43174
        
 
43175
# check trigger-6 success:      1
 
43176
DROP TRIGGER trg_1;
 
43177
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43178
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43179
f_charbig = 'just inserted'
 
43180
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43181
DELETE FROM t0_aux
 
43182
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43183
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43184
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43185
'just inserted' FROM t0_template
 
43186
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43187
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
43188
BEGIN
 
43189
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43190
f_charbig = 'updated by trigger'
 
43191
      WHERE f_int1 = - old.f_int1;
 
43192
END|
 
43193
DELETE FROM t0_aux
 
43194
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43195
        
 
43196
# check trigger-7 success:      1
 
43197
DROP TRIGGER trg_1;
 
43198
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43199
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43200
f_charbig = 'just inserted'
 
43201
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43202
DELETE FROM t0_aux
 
43203
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43204
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43205
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43206
'just inserted' FROM t0_template
 
43207
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43208
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
43209
BEGIN
 
43210
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43211
f_charbig = 'updated by trigger'
 
43212
      WHERE f_int1 = - old.f_int1;
 
43213
END|
 
43214
DELETE FROM t0_aux
 
43215
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43216
        
 
43217
# check trigger-8 success:      1
 
43218
DROP TRIGGER trg_1;
 
43219
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43220
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43221
f_charbig = 'just inserted'
 
43222
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43223
DELETE FROM t0_aux
 
43224
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43225
DELETE FROM t1
 
43226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43227
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
43228
BEGIN
 
43229
SET new.f_int1 = old.f_int1 + @max_row,
 
43230
new.f_int2 = old.f_int2 - @max_row,
 
43231
new.f_charbig = '####updated per update trigger####';
 
43232
END|
 
43233
UPDATE t1
 
43234
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
43235
f_charbig = '####updated per update statement itself####';
 
43236
        
 
43237
# check trigger-9 success:      1
 
43238
DROP TRIGGER trg_2;
 
43239
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43240
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43241
f_charbig = CONCAT('===',f_char1,'===');
 
43242
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
43243
BEGIN
 
43244
SET new.f_int1 = new.f_int1 + @max_row,
 
43245
new.f_int2 = new.f_int2 - @max_row,
 
43246
new.f_charbig = '####updated per update trigger####';
 
43247
END|
 
43248
UPDATE t1
 
43249
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
43250
f_charbig = '####updated per update statement itself####';
 
43251
        
 
43252
# check trigger-10 success:     1
 
43253
DROP TRIGGER trg_2;
 
43254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43256
f_charbig = CONCAT('===',f_char1,'===');
 
43257
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43258
BEGIN
 
43259
SET new.f_int1 = @my_max1 + @counter,
 
43260
new.f_int2 = @my_min2 - @counter,
 
43261
new.f_charbig = '####updated per insert trigger####';
 
43262
SET @counter = @counter + 1;
 
43263
END|
 
43264
SET @counter = 1;
 
43265
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43266
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43267
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
43268
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43270
ORDER BY f_int1;
 
43271
DROP TRIGGER trg_3;
 
43272
        
 
43273
# check trigger-11 success:     1
 
43274
DELETE FROM t1
 
43275
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43276
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43277
AND f_charbig = '####updated per insert trigger####';
 
43278
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43279
BEGIN
 
43280
SET new.f_int1 = @my_max1 + @counter,
 
43281
new.f_int2 = @my_min2 - @counter,
 
43282
new.f_charbig = '####updated per insert trigger####';
 
43283
SET @counter = @counter + 1;
 
43284
END|
 
43285
SET @counter = 1;
 
43286
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43287
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
43288
SELECT CAST(f_int1 AS CHAR),
 
43289
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43291
ORDER BY f_int1;
 
43292
DROP TRIGGER trg_3;
 
43293
        
 
43294
# check trigger-12 success:     1
 
43295
DELETE FROM t1
 
43296
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43297
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43298
AND f_charbig = '####updated per insert trigger####';
 
43299
ANALYZE  TABLE t1;
 
43300
Table   Op      Msg_type        Msg_text
 
43301
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
43302
CHECK    TABLE t1 EXTENDED;
 
43303
Table   Op      Msg_type        Msg_text
 
43304
test.t1 check   note    The storage engine for the table doesn't support check
 
43305
CHECKSUM TABLE t1 EXTENDED;
 
43306
Table   Checksum
 
43307
test.t1 <some_value>
 
43308
OPTIMIZE TABLE t1;
 
43309
Table   Op      Msg_type        Msg_text
 
43310
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
43311
# check layout success:    1
 
43312
REPAIR   TABLE t1 EXTENDED;
 
43313
Table   Op      Msg_type        Msg_text
 
43314
test.t1 repair  note    The storage engine for the table doesn't support repair
 
43315
# check layout success:    1
 
43316
TRUNCATE t1;
 
43317
        
 
43318
# check TRUNCATE success:       1
 
43319
# check layout success:    1
 
43320
# End usability test (inc/partition_check.inc)
 
43321
DROP TABLE t1;
 
43322
CREATE TABLE t1 (
 
43323
f_int1 INTEGER,
 
43324
f_int2 INTEGER,
 
43325
f_char1 CHAR(20),
 
43326
f_char2 CHAR(20),
 
43327
f_charbig VARCHAR(1000)
 
43328
 
 
43329
)
 
43330
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
43331
(PARTITION part1 VALUES IN (0)
 
43332
(SUBPARTITION sp11, SUBPARTITION sp12),
 
43333
PARTITION part2 VALUES IN (1)
 
43334
(SUBPARTITION sp21, SUBPARTITION sp22),
 
43335
PARTITION part3 VALUES IN (2)
 
43336
(SUBPARTITION sp31, SUBPARTITION sp32),
 
43337
PARTITION part4 VALUES IN (NULL)
 
43338
(SUBPARTITION sp41, SUBPARTITION sp42));
 
43339
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43340
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
43341
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
43342
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
43343
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43344
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
43345
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43346
# Start usability test (inc/partition_check.inc)
 
43347
create_command
 
43348
SHOW CREATE TABLE t1;
 
43349
Table   Create Table
 
43350
t1      CREATE TABLE `t1` (
 
43351
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
43352
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
43353
  `f_char1` char(20) DEFAULT NULL,
 
43354
  `f_char2` char(20) DEFAULT NULL,
 
43355
  `f_charbig` varchar(1000) DEFAULT NULL,
 
43356
  PRIMARY KEY (`f_int1`,`f_int2`),
 
43357
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
43358
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
43359
 
 
43360
# check prerequisites-1 success:    1
 
43361
# check COUNT(*) success:    1
 
43362
# check MIN/MAX(f_int1) success:    1
 
43363
# check MIN/MAX(f_int2) success:    1
 
43364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
43366
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
43367
WHERE f_int1 IN (2,3);
 
43368
ERROR 23000: Can't write; duplicate key in table 't1'
 
43369
# check prerequisites-3 success:    1
 
43370
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
43371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43372
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
43373
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
43374
WHERE f_int1 IN (2,3);
 
43375
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
43376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43377
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
43378
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
43379
WHERE f_int1 IN (2,3);
 
43380
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
43381
# check read via f_int1 success: 1
 
43382
# check read via f_int2 success: 1
 
43383
        
 
43384
# check multiple-1 success:     1
 
43385
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
43386
        
 
43387
# check multiple-2 success:     1
 
43388
INSERT INTO t1 SELECT * FROM t0_template
 
43389
WHERE MOD(f_int1,3) = 0;
 
43390
        
 
43391
# check multiple-3 success:     1
 
43392
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
43393
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
43394
AND @max_row_div2 + @max_row_div4;
 
43395
        
 
43396
# check multiple-4 success:     1
 
43397
DELETE FROM t1
 
43398
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
43399
AND @max_row_div2 + @max_row_div4 + @max_row;
 
43400
        
 
43401
# check multiple-5 success:     1
 
43402
SELECT COUNT(*) INTO @try_count FROM t0_template
 
43403
WHERE MOD(f_int1,3) = 0
 
43404
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43405
SELECT COUNT(*) INTO @clash_count
 
43406
FROM t1 INNER JOIN t0_template USING(f_int1)
 
43407
WHERE MOD(f_int1,3) = 0
 
43408
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43409
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
43410
INSERT INTO t1
 
43411
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
43412
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
43413
f_charbig = '#SINGLE#';
 
43414
        
 
43415
# check single-1 success:       1
 
43416
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
43417
INSERT INTO t1
 
43418
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
43419
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
43420
f_charbig = '#SINGLE#';
 
43421
        
 
43422
# check single-2 success:       1
 
43423
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
43424
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
43425
UPDATE t1 SET f_int1 = @cur_value2
 
43426
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
43427
        
 
43428
# check single-3 success:       1
 
43429
SET @cur_value1= -1;
 
43430
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
43431
UPDATE t1 SET f_int1 = @cur_value1
 
43432
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
43433
        
 
43434
# check single-4 success:       1
 
43435
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
43436
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
43437
        
 
43438
# check single-5 success:       1
 
43439
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
43440
        
 
43441
# check single-6 success:       1
 
43442
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
43443
        
 
43444
# check single-7 success:       1
 
43445
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
43446
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
43447
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
43448
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
43449
f_charbig = '#NULL#';
 
43450
INSERT INTO t1
 
43451
SET f_int1 = NULL , f_int2 = -@max_row,
 
43452
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
43453
f_charbig = '#NULL#';
 
43454
ERROR 23000: Column 'f_int1' cannot be null
 
43455
# check null success:    1
 
43456
DELETE FROM t1
 
43457
WHERE f_int1 = 0 AND f_int2 = 0
 
43458
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
43459
AND f_charbig = '#NULL#';
 
43460
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43461
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43462
   FROM t0_template source_tab
 
43463
WHERE MOD(f_int1,3) = 0
 
43464
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
43465
ON DUPLICATE KEY
 
43466
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
43467
f_int2 = 2 * @max_row + source_tab.f_int1,
 
43468
f_charbig = 'was updated';
 
43469
        
 
43470
# check unique-1-a success:     1
 
43471
        
 
43472
# check unique-1-b success:     1
 
43473
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43474
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43475
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43476
f_charbig = CONCAT('===',f_char1,'===')
 
43477
WHERE f_charbig = 'was updated';
 
43478
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43479
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
43480
   FROM t0_template source_tab
 
43481
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43482
        
 
43483
# check replace success:        1
 
43484
DELETE FROM t1
 
43485
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
43486
DELETE FROM t1
 
43487
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
43488
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
43489
UPDATE t1 SET f_int2 = f_int1,
 
43490
f_char1 = CAST(f_int1 AS CHAR),
 
43491
f_char2 = CAST(f_int1 AS CHAR),
 
43492
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
43493
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
43494
SET AUTOCOMMIT= 0;
 
43495
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43496
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43497
FROM t0_template source_tab
 
43498
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43499
        
 
43500
# check transactions-1 success:         1
 
43501
COMMIT WORK;
 
43502
        
 
43503
# check transactions-2 success:         1
 
43504
ROLLBACK WORK;
 
43505
        
 
43506
# check transactions-3 success:         1
 
43507
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43508
COMMIT WORK;
 
43509
ROLLBACK WORK;
 
43510
        
 
43511
# check transactions-4 success:         1
 
43512
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43513
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43514
FROM t0_template source_tab
 
43515
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43516
        
 
43517
# check transactions-5 success:         1
 
43518
ROLLBACK WORK;
 
43519
        
 
43520
# check transactions-6 success:         1
 
43521
# INFO: Storage engine used for t1 seems to be transactional.
 
43522
COMMIT;
 
43523
        
 
43524
# check transactions-7 success:         1
 
43525
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43526
COMMIT WORK;
 
43527
SET @@session.sql_mode = 'traditional';
 
43528
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
43529
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43530
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
43531
'', '', 'was inserted' FROM t0_template
 
43532
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43533
ERROR 22012: Division by 0
 
43534
COMMIT;
 
43535
        
 
43536
# check transactions-8 success:         1
 
43537
# INFO: Storage engine used for t1 seems to be able to revert
 
43538
#       changes made by the failing statement.
 
43539
SET @@session.sql_mode = '';
 
43540
SET AUTOCOMMIT= 1;
 
43541
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43542
COMMIT WORK;
 
43543
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
43544
        
 
43545
# check special-1 success:      1
 
43546
UPDATE t1 SET f_charbig = '';
 
43547
        
 
43548
# check special-2 success:      1
 
43549
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
43550
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43551
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
43552
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43553
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43554
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43555
'just inserted' FROM t0_template
 
43556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43557
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
43558
BEGIN
 
43559
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43560
f_charbig = 'updated by trigger'
 
43561
      WHERE f_int1 = new.f_int1;
 
43562
END|
 
43563
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43564
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
43565
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43566
        
 
43567
# check trigger-1 success:      1
 
43568
DROP TRIGGER trg_1;
 
43569
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43570
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43571
f_charbig = 'just inserted'
 
43572
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43573
DELETE FROM t0_aux
 
43574
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43575
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43576
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43577
'just inserted' FROM t0_template
 
43578
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43579
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
43580
BEGIN
 
43581
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43582
f_charbig = 'updated by trigger'
 
43583
      WHERE f_int1 = new.f_int1;
 
43584
END|
 
43585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43586
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
43587
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43588
        
 
43589
# check trigger-2 success:      1
 
43590
DROP TRIGGER trg_1;
 
43591
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43592
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43593
f_charbig = 'just inserted'
 
43594
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43595
DELETE FROM t0_aux
 
43596
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43598
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43599
'just inserted' FROM t0_template
 
43600
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43601
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
43602
BEGIN
 
43603
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43604
f_charbig = 'updated by trigger'
 
43605
      WHERE f_int1 = new.f_int1;
 
43606
END|
 
43607
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43608
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43609
        
 
43610
# check trigger-3 success:      1
 
43611
DROP TRIGGER trg_1;
 
43612
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43613
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43614
f_charbig = 'just inserted'
 
43615
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43616
DELETE FROM t0_aux
 
43617
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43618
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43619
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43620
'just inserted' FROM t0_template
 
43621
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43622
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
43623
BEGIN
 
43624
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43625
f_charbig = 'updated by trigger'
 
43626
      WHERE f_int1 = - old.f_int1;
 
43627
END|
 
43628
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43629
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43630
        
 
43631
# check trigger-4 success:      1
 
43632
DROP TRIGGER trg_1;
 
43633
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43634
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43635
f_charbig = 'just inserted'
 
43636
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43637
DELETE FROM t0_aux
 
43638
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43639
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43640
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43641
'just inserted' FROM t0_template
 
43642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43643
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
43644
BEGIN
 
43645
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43646
f_charbig = 'updated by trigger'
 
43647
      WHERE f_int1 = new.f_int1;
 
43648
END|
 
43649
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43650
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43651
        
 
43652
# check trigger-5 success:      1
 
43653
DROP TRIGGER trg_1;
 
43654
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43655
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43656
f_charbig = 'just inserted'
 
43657
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43658
DELETE FROM t0_aux
 
43659
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43660
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43661
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43662
'just inserted' FROM t0_template
 
43663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43664
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
43665
BEGIN
 
43666
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43667
f_charbig = 'updated by trigger'
 
43668
      WHERE f_int1 = - old.f_int1;
 
43669
END|
 
43670
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43671
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43672
        
 
43673
# check trigger-6 success:      1
 
43674
DROP TRIGGER trg_1;
 
43675
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43676
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43677
f_charbig = 'just inserted'
 
43678
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43679
DELETE FROM t0_aux
 
43680
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43681
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43682
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43683
'just inserted' FROM t0_template
 
43684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43685
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
43686
BEGIN
 
43687
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43688
f_charbig = 'updated by trigger'
 
43689
      WHERE f_int1 = - old.f_int1;
 
43690
END|
 
43691
DELETE FROM t0_aux
 
43692
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43693
        
 
43694
# check trigger-7 success:      1
 
43695
DROP TRIGGER trg_1;
 
43696
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43697
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43698
f_charbig = 'just inserted'
 
43699
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43700
DELETE FROM t0_aux
 
43701
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43702
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43703
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43704
'just inserted' FROM t0_template
 
43705
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43706
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
43707
BEGIN
 
43708
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43709
f_charbig = 'updated by trigger'
 
43710
      WHERE f_int1 = - old.f_int1;
 
43711
END|
 
43712
DELETE FROM t0_aux
 
43713
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43714
        
 
43715
# check trigger-8 success:      1
 
43716
DROP TRIGGER trg_1;
 
43717
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43718
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43719
f_charbig = 'just inserted'
 
43720
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43721
DELETE FROM t0_aux
 
43722
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43723
DELETE FROM t1
 
43724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43725
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
43726
BEGIN
 
43727
SET new.f_int1 = old.f_int1 + @max_row,
 
43728
new.f_int2 = old.f_int2 - @max_row,
 
43729
new.f_charbig = '####updated per update trigger####';
 
43730
END|
 
43731
UPDATE t1
 
43732
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
43733
f_charbig = '####updated per update statement itself####';
 
43734
        
 
43735
# check trigger-9 success:      1
 
43736
DROP TRIGGER trg_2;
 
43737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43739
f_charbig = CONCAT('===',f_char1,'===');
 
43740
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
43741
BEGIN
 
43742
SET new.f_int1 = new.f_int1 + @max_row,
 
43743
new.f_int2 = new.f_int2 - @max_row,
 
43744
new.f_charbig = '####updated per update trigger####';
 
43745
END|
 
43746
UPDATE t1
 
43747
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
43748
f_charbig = '####updated per update statement itself####';
 
43749
        
 
43750
# check trigger-10 success:     1
 
43751
DROP TRIGGER trg_2;
 
43752
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43753
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43754
f_charbig = CONCAT('===',f_char1,'===');
 
43755
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43756
BEGIN
 
43757
SET new.f_int1 = @my_max1 + @counter,
 
43758
new.f_int2 = @my_min2 - @counter,
 
43759
new.f_charbig = '####updated per insert trigger####';
 
43760
SET @counter = @counter + 1;
 
43761
END|
 
43762
SET @counter = 1;
 
43763
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43764
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43765
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
43766
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43768
ORDER BY f_int1;
 
43769
DROP TRIGGER trg_3;
 
43770
        
 
43771
# check trigger-11 success:     1
 
43772
DELETE FROM t1
 
43773
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43774
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43775
AND f_charbig = '####updated per insert trigger####';
 
43776
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43777
BEGIN
 
43778
SET new.f_int1 = @my_max1 + @counter,
 
43779
new.f_int2 = @my_min2 - @counter,
 
43780
new.f_charbig = '####updated per insert trigger####';
 
43781
SET @counter = @counter + 1;
 
43782
END|
 
43783
SET @counter = 1;
 
43784
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43785
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
43786
SELECT CAST(f_int1 AS CHAR),
 
43787
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43789
ORDER BY f_int1;
 
43790
DROP TRIGGER trg_3;
 
43791
        
 
43792
# check trigger-12 success:     1
 
43793
DELETE FROM t1
 
43794
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43795
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43796
AND f_charbig = '####updated per insert trigger####';
 
43797
ANALYZE  TABLE t1;
 
43798
Table   Op      Msg_type        Msg_text
 
43799
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
43800
CHECK    TABLE t1 EXTENDED;
 
43801
Table   Op      Msg_type        Msg_text
 
43802
test.t1 check   note    The storage engine for the table doesn't support check
 
43803
CHECKSUM TABLE t1 EXTENDED;
 
43804
Table   Checksum
 
43805
test.t1 <some_value>
 
43806
OPTIMIZE TABLE t1;
 
43807
Table   Op      Msg_type        Msg_text
 
43808
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
43809
# check layout success:    1
 
43810
REPAIR   TABLE t1 EXTENDED;
 
43811
Table   Op      Msg_type        Msg_text
 
43812
test.t1 repair  note    The storage engine for the table doesn't support repair
 
43813
# check layout success:    1
 
43814
TRUNCATE t1;
 
43815
        
 
43816
# check TRUNCATE success:       1
 
43817
# check layout success:    1
 
43818
# End usability test (inc/partition_check.inc)
 
43819
DROP TABLE t1;
 
43820
CREATE TABLE t1 (
 
43821
f_int1 INTEGER,
 
43822
f_int2 INTEGER,
 
43823
f_char1 CHAR(20),
 
43824
f_char2 CHAR(20),
 
43825
f_charbig VARCHAR(1000)
 
43826
 
 
43827
)
 
43828
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
43829
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
43830
(PARTITION part1 VALUES IN (0),
 
43831
 PARTITION part2 VALUES IN (1),
 
43832
 PARTITION part3 VALUES IN (NULL));
 
43833
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43834
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
43835
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
43836
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
 
43837
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43838
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
43839
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43840
# Start usability test (inc/partition_check.inc)
 
43841
create_command
 
43842
SHOW CREATE TABLE t1;
 
43843
Table   Create Table
 
43844
t1      CREATE TABLE `t1` (
 
43845
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
43846
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
43847
  `f_char1` char(20) DEFAULT NULL,
 
43848
  `f_char2` char(20) DEFAULT NULL,
 
43849
  `f_charbig` varchar(1000) DEFAULT NULL,
 
43850
  PRIMARY KEY (`f_int1`,`f_int2`),
 
43851
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
43852
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
43853
 
 
43854
# check prerequisites-1 success:    1
 
43855
# check COUNT(*) success:    1
 
43856
# check MIN/MAX(f_int1) success:    1
 
43857
# check MIN/MAX(f_int2) success:    1
 
43858
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43859
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
43860
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
43861
WHERE f_int1 IN (2,3);
 
43862
ERROR 23000: Can't write; duplicate key in table 't1'
 
43863
# check prerequisites-3 success:    1
 
43864
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
43865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43866
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
43867
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
43868
WHERE f_int1 IN (2,3);
 
43869
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
43870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43871
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
43872
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
43873
WHERE f_int1 IN (2,3);
 
43874
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
43875
# check read via f_int1 success: 1
 
43876
# check read via f_int2 success: 1
 
43877
        
 
43878
# check multiple-1 success:     1
 
43879
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
43880
        
 
43881
# check multiple-2 success:     1
 
43882
INSERT INTO t1 SELECT * FROM t0_template
 
43883
WHERE MOD(f_int1,3) = 0;
 
43884
        
 
43885
# check multiple-3 success:     1
 
43886
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
43887
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
43888
AND @max_row_div2 + @max_row_div4;
 
43889
        
 
43890
# check multiple-4 success:     1
 
43891
DELETE FROM t1
 
43892
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
43893
AND @max_row_div2 + @max_row_div4 + @max_row;
 
43894
        
 
43895
# check multiple-5 success:     1
 
43896
SELECT COUNT(*) INTO @try_count FROM t0_template
 
43897
WHERE MOD(f_int1,3) = 0
 
43898
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43899
SELECT COUNT(*) INTO @clash_count
 
43900
FROM t1 INNER JOIN t0_template USING(f_int1)
 
43901
WHERE MOD(f_int1,3) = 0
 
43902
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43903
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
43904
INSERT INTO t1
 
43905
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
43906
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
43907
f_charbig = '#SINGLE#';
 
43908
        
 
43909
# check single-1 success:       1
 
43910
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
43911
INSERT INTO t1
 
43912
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
43913
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
43914
f_charbig = '#SINGLE#';
 
43915
        
 
43916
# check single-2 success:       1
 
43917
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
43918
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
43919
UPDATE t1 SET f_int1 = @cur_value2
 
43920
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
43921
        
 
43922
# check single-3 success:       1
 
43923
SET @cur_value1= -1;
 
43924
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
43925
UPDATE t1 SET f_int1 = @cur_value1
 
43926
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
43927
        
 
43928
# check single-4 success:       1
 
43929
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
43930
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
43931
        
 
43932
# check single-5 success:       1
 
43933
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
43934
        
 
43935
# check single-6 success:       1
 
43936
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
43937
        
 
43938
# check single-7 success:       1
 
43939
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
43940
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
43941
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
43942
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
43943
f_charbig = '#NULL#';
 
43944
INSERT INTO t1
 
43945
SET f_int1 = NULL , f_int2 = -@max_row,
 
43946
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
43947
f_charbig = '#NULL#';
 
43948
ERROR 23000: Column 'f_int1' cannot be null
 
43949
# check null success:    1
 
43950
DELETE FROM t1
 
43951
WHERE f_int1 = 0 AND f_int2 = 0
 
43952
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
43953
AND f_charbig = '#NULL#';
 
43954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43955
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43956
   FROM t0_template source_tab
 
43957
WHERE MOD(f_int1,3) = 0
 
43958
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
43959
ON DUPLICATE KEY
 
43960
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
43961
f_int2 = 2 * @max_row + source_tab.f_int1,
 
43962
f_charbig = 'was updated';
 
43963
        
 
43964
# check unique-1-a success:     1
 
43965
        
 
43966
# check unique-1-b success:     1
 
43967
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43968
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43969
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43970
f_charbig = CONCAT('===',f_char1,'===')
 
43971
WHERE f_charbig = 'was updated';
 
43972
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43973
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
43974
   FROM t0_template source_tab
 
43975
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43976
        
 
43977
# check replace success:        1
 
43978
DELETE FROM t1
 
43979
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
43980
DELETE FROM t1
 
43981
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
43982
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
43983
UPDATE t1 SET f_int2 = f_int1,
 
43984
f_char1 = CAST(f_int1 AS CHAR),
 
43985
f_char2 = CAST(f_int1 AS CHAR),
 
43986
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
43987
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
43988
SET AUTOCOMMIT= 0;
 
43989
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43990
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43991
FROM t0_template source_tab
 
43992
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43993
        
 
43994
# check transactions-1 success:         1
 
43995
COMMIT WORK;
 
43996
        
 
43997
# check transactions-2 success:         1
 
43998
ROLLBACK WORK;
 
43999
        
 
44000
# check transactions-3 success:         1
 
44001
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44002
COMMIT WORK;
 
44003
ROLLBACK WORK;
 
44004
        
 
44005
# check transactions-4 success:         1
 
44006
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44007
SELECT f_int1, f_int1, '', '', 'was inserted'
 
44008
FROM t0_template source_tab
 
44009
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44010
        
 
44011
# check transactions-5 success:         1
 
44012
ROLLBACK WORK;
 
44013
        
 
44014
# check transactions-6 success:         1
 
44015
# INFO: Storage engine used for t1 seems to be transactional.
 
44016
COMMIT;
 
44017
        
 
44018
# check transactions-7 success:         1
 
44019
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44020
COMMIT WORK;
 
44021
SET @@session.sql_mode = 'traditional';
 
44022
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
44023
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44024
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
44025
'', '', 'was inserted' FROM t0_template
 
44026
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44027
ERROR 22012: Division by 0
 
44028
COMMIT;
 
44029
        
 
44030
# check transactions-8 success:         1
 
44031
# INFO: Storage engine used for t1 seems to be able to revert
 
44032
#       changes made by the failing statement.
 
44033
SET @@session.sql_mode = '';
 
44034
SET AUTOCOMMIT= 1;
 
44035
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44036
COMMIT WORK;
 
44037
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
44038
        
 
44039
# check special-1 success:      1
 
44040
UPDATE t1 SET f_charbig = '';
 
44041
        
 
44042
# check special-2 success:      1
 
44043
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
44044
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44045
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
44046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44048
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44049
'just inserted' FROM t0_template
 
44050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44051
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
44052
BEGIN
 
44053
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44054
f_charbig = 'updated by trigger'
 
44055
      WHERE f_int1 = new.f_int1;
 
44056
END|
 
44057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44058
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
44059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44060
        
 
44061
# check trigger-1 success:      1
 
44062
DROP TRIGGER trg_1;
 
44063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44065
f_charbig = 'just inserted'
 
44066
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44067
DELETE FROM t0_aux
 
44068
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44071
'just inserted' FROM t0_template
 
44072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44073
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
44074
BEGIN
 
44075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44076
f_charbig = 'updated by trigger'
 
44077
      WHERE f_int1 = new.f_int1;
 
44078
END|
 
44079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44080
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
44081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44082
        
 
44083
# check trigger-2 success:      1
 
44084
DROP TRIGGER trg_1;
 
44085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44087
f_charbig = 'just inserted'
 
44088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44089
DELETE FROM t0_aux
 
44090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44093
'just inserted' FROM t0_template
 
44094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44095
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
44096
BEGIN
 
44097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44098
f_charbig = 'updated by trigger'
 
44099
      WHERE f_int1 = new.f_int1;
 
44100
END|
 
44101
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44103
        
 
44104
# check trigger-3 success:      1
 
44105
DROP TRIGGER trg_1;
 
44106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44108
f_charbig = 'just inserted'
 
44109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44110
DELETE FROM t0_aux
 
44111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44114
'just inserted' FROM t0_template
 
44115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44116
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
44117
BEGIN
 
44118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44119
f_charbig = 'updated by trigger'
 
44120
      WHERE f_int1 = - old.f_int1;
 
44121
END|
 
44122
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44124
        
 
44125
# check trigger-4 success:      1
 
44126
DROP TRIGGER trg_1;
 
44127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44129
f_charbig = 'just inserted'
 
44130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44131
DELETE FROM t0_aux
 
44132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44135
'just inserted' FROM t0_template
 
44136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44137
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
44138
BEGIN
 
44139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44140
f_charbig = 'updated by trigger'
 
44141
      WHERE f_int1 = new.f_int1;
 
44142
END|
 
44143
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44144
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44145
        
 
44146
# check trigger-5 success:      1
 
44147
DROP TRIGGER trg_1;
 
44148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44150
f_charbig = 'just inserted'
 
44151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44152
DELETE FROM t0_aux
 
44153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44156
'just inserted' FROM t0_template
 
44157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44158
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
44159
BEGIN
 
44160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44161
f_charbig = 'updated by trigger'
 
44162
      WHERE f_int1 = - old.f_int1;
 
44163
END|
 
44164
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44166
        
 
44167
# check trigger-6 success:      1
 
44168
DROP TRIGGER trg_1;
 
44169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44171
f_charbig = 'just inserted'
 
44172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44173
DELETE FROM t0_aux
 
44174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44177
'just inserted' FROM t0_template
 
44178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44179
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
44180
BEGIN
 
44181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44182
f_charbig = 'updated by trigger'
 
44183
      WHERE f_int1 = - old.f_int1;
 
44184
END|
 
44185
DELETE FROM t0_aux
 
44186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44187
        
 
44188
# check trigger-7 success:      1
 
44189
DROP TRIGGER trg_1;
 
44190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44192
f_charbig = 'just inserted'
 
44193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44194
DELETE FROM t0_aux
 
44195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44198
'just inserted' FROM t0_template
 
44199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44200
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
44201
BEGIN
 
44202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44203
f_charbig = 'updated by trigger'
 
44204
      WHERE f_int1 = - old.f_int1;
 
44205
END|
 
44206
DELETE FROM t0_aux
 
44207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44208
        
 
44209
# check trigger-8 success:      1
 
44210
DROP TRIGGER trg_1;
 
44211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44213
f_charbig = 'just inserted'
 
44214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44215
DELETE FROM t0_aux
 
44216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44217
DELETE FROM t1
 
44218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44219
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
44220
BEGIN
 
44221
SET new.f_int1 = old.f_int1 + @max_row,
 
44222
new.f_int2 = old.f_int2 - @max_row,
 
44223
new.f_charbig = '####updated per update trigger####';
 
44224
END|
 
44225
UPDATE t1
 
44226
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
44227
f_charbig = '####updated per update statement itself####';
 
44228
        
 
44229
# check trigger-9 success:      1
 
44230
DROP TRIGGER trg_2;
 
44231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44233
f_charbig = CONCAT('===',f_char1,'===');
 
44234
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
44235
BEGIN
 
44236
SET new.f_int1 = new.f_int1 + @max_row,
 
44237
new.f_int2 = new.f_int2 - @max_row,
 
44238
new.f_charbig = '####updated per update trigger####';
 
44239
END|
 
44240
UPDATE t1
 
44241
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
44242
f_charbig = '####updated per update statement itself####';
 
44243
        
 
44244
# check trigger-10 success:     1
 
44245
DROP TRIGGER trg_2;
 
44246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44248
f_charbig = CONCAT('===',f_char1,'===');
 
44249
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
44250
BEGIN
 
44251
SET new.f_int1 = @my_max1 + @counter,
 
44252
new.f_int2 = @my_min2 - @counter,
 
44253
new.f_charbig = '####updated per insert trigger####';
 
44254
SET @counter = @counter + 1;
 
44255
END|
 
44256
SET @counter = 1;
 
44257
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
44258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44259
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
44260
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
44261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
44262
ORDER BY f_int1;
 
44263
DROP TRIGGER trg_3;
 
44264
        
 
44265
# check trigger-11 success:     1
 
44266
DELETE FROM t1
 
44267
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
44268
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
44269
AND f_charbig = '####updated per insert trigger####';
 
44270
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
44271
BEGIN
 
44272
SET new.f_int1 = @my_max1 + @counter,
 
44273
new.f_int2 = @my_min2 - @counter,
 
44274
new.f_charbig = '####updated per insert trigger####';
 
44275
SET @counter = @counter + 1;
 
44276
END|
 
44277
SET @counter = 1;
 
44278
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
44279
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
44280
SELECT CAST(f_int1 AS CHAR),
 
44281
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
44282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
44283
ORDER BY f_int1;
 
44284
DROP TRIGGER trg_3;
 
44285
        
 
44286
# check trigger-12 success:     1
 
44287
DELETE FROM t1
 
44288
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
44289
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
44290
AND f_charbig = '####updated per insert trigger####';
 
44291
ANALYZE  TABLE t1;
 
44292
Table   Op      Msg_type        Msg_text
 
44293
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
44294
CHECK    TABLE t1 EXTENDED;
 
44295
Table   Op      Msg_type        Msg_text
 
44296
test.t1 check   note    The storage engine for the table doesn't support check
 
44297
CHECKSUM TABLE t1 EXTENDED;
 
44298
Table   Checksum
 
44299
test.t1 <some_value>
 
44300
OPTIMIZE TABLE t1;
 
44301
Table   Op      Msg_type        Msg_text
 
44302
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
44303
# check layout success:    1
 
44304
REPAIR   TABLE t1 EXTENDED;
 
44305
Table   Op      Msg_type        Msg_text
 
44306
test.t1 repair  note    The storage engine for the table doesn't support repair
 
44307
# check layout success:    1
 
44308
TRUNCATE t1;
 
44309
        
 
44310
# check TRUNCATE success:       1
 
44311
# check layout success:    1
 
44312
# End usability test (inc/partition_check.inc)
 
44313
DROP TABLE t1;
 
44314
 
 
44315
#========================================================================
 
44316
#  2     DROP PRIMARY KEY or UNIQUE INDEX
 
44317
#========================================================================
 
44318
#------------------------------------------------------------------------
 
44319
#  2.1   Partitioning function contains one column(f_int1)
 
44320
#------------------------------------------------------------------------
 
44321
#  2.1.5 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns
 
44322
DROP TABLE IF EXISTS t1;
 
44323
CREATE TABLE t1 (
 
44324
f_int1 INTEGER,
 
44325
f_int2 INTEGER,
 
44326
f_char1 CHAR(20),
 
44327
f_char2 CHAR(20),
 
44328
f_charbig VARCHAR(1000)
 
44329
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
44330
)
 
44331
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
44332
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44333
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
44334
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
44335
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
44336
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44337
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
44338
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
44339
# Start usability test (inc/partition_check.inc)
 
44340
create_command
 
44341
SHOW CREATE TABLE t1;
 
44342
Table   Create Table
 
44343
t1      CREATE TABLE `t1` (
 
44344
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
44345
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
44346
  `f_char1` char(20) DEFAULT NULL,
 
44347
  `f_char2` char(20) DEFAULT NULL,
 
44348
  `f_charbig` varchar(1000) DEFAULT NULL
 
44349
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
44350
 
 
44351
# check prerequisites-1 success:    1
 
44352
# check COUNT(*) success:    1
 
44353
# check MIN/MAX(f_int1) success:    1
 
44354
# check MIN/MAX(f_int2) success:    1
 
44355
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44356
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
44357
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
44358
WHERE f_int1 IN (2,3);
 
44359
# check prerequisites-3 success:    1
 
44360
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
44361
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
44362
# check read via f_int1 success: 1
 
44363
# check read via f_int2 success: 1
 
44364
        
 
44365
# check multiple-1 success:     1
 
44366
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
44367
        
 
44368
# check multiple-2 success:     1
 
44369
INSERT INTO t1 SELECT * FROM t0_template
 
44370
WHERE MOD(f_int1,3) = 0;
 
44371
        
 
44372
# check multiple-3 success:     1
 
44373
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
44374
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
44375
AND @max_row_div2 + @max_row_div4;
 
44376
        
 
44377
# check multiple-4 success:     1
 
44378
DELETE FROM t1
 
44379
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
44380
AND @max_row_div2 + @max_row_div4 + @max_row;
 
44381
        
 
44382
# check multiple-5 success:     1
 
44383
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
44384
INSERT INTO t1
 
44385
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
44386
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
44387
f_charbig = '#SINGLE#';
 
44388
        
 
44389
# check single-1 success:       1
 
44390
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
44391
INSERT INTO t1
 
44392
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
44393
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
44394
f_charbig = '#SINGLE#';
 
44395
        
 
44396
# check single-2 success:       1
 
44397
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
44398
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
44399
UPDATE t1 SET f_int1 = @cur_value2
 
44400
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
44401
        
 
44402
# check single-3 success:       1
 
44403
SET @cur_value1= -1;
 
44404
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
44405
UPDATE t1 SET f_int1 = @cur_value1
 
44406
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
44407
        
 
44408
# check single-4 success:       1
 
44409
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
44410
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
44411
        
 
44412
# check single-5 success:       1
 
44413
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
44414
        
 
44415
# check single-6 success:       1
 
44416
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
44417
        
 
44418
# check single-7 success:       1
 
44419
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
44420
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
44421
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
44422
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
44423
f_charbig = '#NULL#';
 
44424
INSERT INTO t1
 
44425
SET f_int1 = NULL , f_int2 = -@max_row,
 
44426
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
44427
f_charbig = '#NULL#';
 
44428
ERROR 23000: Column 'f_int1' cannot be null
 
44429
# check null success:    1
 
44430
DELETE FROM t1
 
44431
WHERE f_int1 = 0 AND f_int2 = 0
 
44432
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
44433
AND f_charbig = '#NULL#';
 
44434
SET AUTOCOMMIT= 0;
 
44435
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44436
SELECT f_int1, f_int1, '', '', 'was inserted'
 
44437
FROM t0_template source_tab
 
44438
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44439
        
 
44440
# check transactions-1 success:         1
 
44441
COMMIT WORK;
 
44442
        
 
44443
# check transactions-2 success:         1
 
44444
ROLLBACK WORK;
 
44445
        
 
44446
# check transactions-3 success:         1
 
44447
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44448
COMMIT WORK;
 
44449
ROLLBACK WORK;
 
44450
        
 
44451
# check transactions-4 success:         1
 
44452
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44453
SELECT f_int1, f_int1, '', '', 'was inserted'
 
44454
FROM t0_template source_tab
 
44455
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44456
        
 
44457
# check transactions-5 success:         1
 
44458
ROLLBACK WORK;
 
44459
        
 
44460
# check transactions-6 success:         1
 
44461
# INFO: Storage engine used for t1 seems to be transactional.
 
44462
COMMIT;
 
44463
        
 
44464
# check transactions-7 success:         1
 
44465
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44466
COMMIT WORK;
 
44467
SET @@session.sql_mode = 'traditional';
 
44468
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
44469
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44470
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
44471
'', '', 'was inserted' FROM t0_template
 
44472
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44473
ERROR 22012: Division by 0
 
44474
COMMIT;
 
44475
        
 
44476
# check transactions-8 success:         1
 
44477
# INFO: Storage engine used for t1 seems to be able to revert
 
44478
#       changes made by the failing statement.
 
44479
SET @@session.sql_mode = '';
 
44480
SET AUTOCOMMIT= 1;
 
44481
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44482
COMMIT WORK;
 
44483
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
44484
        
 
44485
# check special-1 success:      1
 
44486
UPDATE t1 SET f_charbig = '';
 
44487
        
 
44488
# check special-2 success:      1
 
44489
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
44490
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44491
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
44492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44494
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44495
'just inserted' FROM t0_template
 
44496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44497
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
44498
BEGIN
 
44499
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44500
f_charbig = 'updated by trigger'
 
44501
      WHERE f_int1 = new.f_int1;
 
44502
END|
 
44503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44504
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
44505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44506
        
 
44507
# check trigger-1 success:      1
 
44508
DROP TRIGGER trg_1;
 
44509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44511
f_charbig = 'just inserted'
 
44512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44513
DELETE FROM t0_aux
 
44514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44517
'just inserted' FROM t0_template
 
44518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44519
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
44520
BEGIN
 
44521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44522
f_charbig = 'updated by trigger'
 
44523
      WHERE f_int1 = new.f_int1;
 
44524
END|
 
44525
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44526
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
44527
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44528
        
 
44529
# check trigger-2 success:      1
 
44530
DROP TRIGGER trg_1;
 
44531
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44532
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44533
f_charbig = 'just inserted'
 
44534
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44535
DELETE FROM t0_aux
 
44536
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44537
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44538
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44539
'just inserted' FROM t0_template
 
44540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44541
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
44542
BEGIN
 
44543
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44544
f_charbig = 'updated by trigger'
 
44545
      WHERE f_int1 = new.f_int1;
 
44546
END|
 
44547
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44548
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44549
        
 
44550
# check trigger-3 success:      1
 
44551
DROP TRIGGER trg_1;
 
44552
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44553
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44554
f_charbig = 'just inserted'
 
44555
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44556
DELETE FROM t0_aux
 
44557
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44558
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44559
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44560
'just inserted' FROM t0_template
 
44561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44562
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
44563
BEGIN
 
44564
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44565
f_charbig = 'updated by trigger'
 
44566
      WHERE f_int1 = - old.f_int1;
 
44567
END|
 
44568
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44569
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44570
        
 
44571
# check trigger-4 success:      1
 
44572
DROP TRIGGER trg_1;
 
44573
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44574
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44575
f_charbig = 'just inserted'
 
44576
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44577
DELETE FROM t0_aux
 
44578
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44580
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44581
'just inserted' FROM t0_template
 
44582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44583
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
44584
BEGIN
 
44585
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44586
f_charbig = 'updated by trigger'
 
44587
      WHERE f_int1 = new.f_int1;
 
44588
END|
 
44589
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44590
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44591
        
 
44592
# check trigger-5 success:      1
 
44593
DROP TRIGGER trg_1;
 
44594
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44595
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44596
f_charbig = 'just inserted'
 
44597
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44598
DELETE FROM t0_aux
 
44599
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44601
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44602
'just inserted' FROM t0_template
 
44603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44604
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
44605
BEGIN
 
44606
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44607
f_charbig = 'updated by trigger'
 
44608
      WHERE f_int1 = - old.f_int1;
 
44609
END|
 
44610
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44611
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44612
        
 
44613
# check trigger-6 success:      1
 
44614
DROP TRIGGER trg_1;
 
44615
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44616
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44617
f_charbig = 'just inserted'
 
44618
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44619
DELETE FROM t0_aux
 
44620
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44621
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44622
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44623
'just inserted' FROM t0_template
 
44624
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44625
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
44626
BEGIN
 
44627
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44628
f_charbig = 'updated by trigger'
 
44629
      WHERE f_int1 = - old.f_int1;
 
44630
END|
 
44631
DELETE FROM t0_aux
 
44632
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44633
        
 
44634
# check trigger-7 success:      1
 
44635
DROP TRIGGER trg_1;
 
44636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44638
f_charbig = 'just inserted'
 
44639
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44640
DELETE FROM t0_aux
 
44641
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44642
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44643
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44644
'just inserted' FROM t0_template
 
44645
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44646
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
44647
BEGIN
 
44648
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44649
f_charbig = 'updated by trigger'
 
44650
      WHERE f_int1 = - old.f_int1;
 
44651
END|
 
44652
DELETE FROM t0_aux
 
44653
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44654
        
 
44655
# check trigger-8 success:      1
 
44656
DROP TRIGGER trg_1;
 
44657
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44658
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44659
f_charbig = 'just inserted'
 
44660
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44661
DELETE FROM t0_aux
 
44662
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44663
DELETE FROM t1
 
44664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44665
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
44666
BEGIN
 
44667
SET new.f_int1 = old.f_int1 + @max_row,
 
44668
new.f_int2 = old.f_int2 - @max_row,
 
44669
new.f_charbig = '####updated per update trigger####';
 
44670
END|
 
44671
UPDATE t1
 
44672
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
44673
f_charbig = '####updated per update statement itself####';
 
44674
        
 
44675
# check trigger-9 success:      1
 
44676
DROP TRIGGER trg_2;
 
44677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44679
f_charbig = CONCAT('===',f_char1,'===');
 
44680
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
44681
BEGIN
 
44682
SET new.f_int1 = new.f_int1 + @max_row,
 
44683
new.f_int2 = new.f_int2 - @max_row,
 
44684
new.f_charbig = '####updated per update trigger####';
 
44685
END|
 
44686
UPDATE t1
 
44687
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
44688
f_charbig = '####updated per update statement itself####';
 
44689
        
 
44690
# check trigger-10 success:     1
 
44691
DROP TRIGGER trg_2;
 
44692
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44693
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44694
f_charbig = CONCAT('===',f_char1,'===');
 
44695
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
44696
BEGIN
 
44697
SET new.f_int1 = @my_max1 + @counter,
 
44698
new.f_int2 = @my_min2 - @counter,
 
44699
new.f_charbig = '####updated per insert trigger####';
 
44700
SET @counter = @counter + 1;
 
44701
END|
 
44702
SET @counter = 1;
 
44703
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
44704
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44705
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
44706
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
44707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
44708
ORDER BY f_int1;
 
44709
DROP TRIGGER trg_3;
 
44710
        
 
44711
# check trigger-11 success:     1
 
44712
DELETE FROM t1
 
44713
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
44714
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
44715
AND f_charbig = '####updated per insert trigger####';
 
44716
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
44717
BEGIN
 
44718
SET new.f_int1 = @my_max1 + @counter,
 
44719
new.f_int2 = @my_min2 - @counter,
 
44720
new.f_charbig = '####updated per insert trigger####';
 
44721
SET @counter = @counter + 1;
 
44722
END|
 
44723
SET @counter = 1;
 
44724
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
44725
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
44726
SELECT CAST(f_int1 AS CHAR),
 
44727
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
44728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
44729
ORDER BY f_int1;
 
44730
DROP TRIGGER trg_3;
 
44731
        
 
44732
# check trigger-12 success:     1
 
44733
DELETE FROM t1
 
44734
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
44735
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
44736
AND f_charbig = '####updated per insert trigger####';
 
44737
ANALYZE  TABLE t1;
 
44738
Table   Op      Msg_type        Msg_text
 
44739
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
44740
CHECK    TABLE t1 EXTENDED;
 
44741
Table   Op      Msg_type        Msg_text
 
44742
test.t1 check   note    The storage engine for the table doesn't support check
 
44743
CHECKSUM TABLE t1 EXTENDED;
 
44744
Table   Checksum
 
44745
test.t1 <some_value>
 
44746
OPTIMIZE TABLE t1;
 
44747
Table   Op      Msg_type        Msg_text
 
44748
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
44749
# check layout success:    1
 
44750
REPAIR   TABLE t1 EXTENDED;
 
44751
Table   Op      Msg_type        Msg_text
 
44752
test.t1 repair  note    The storage engine for the table doesn't support repair
 
44753
# check layout success:    1
 
44754
TRUNCATE t1;
 
44755
        
 
44756
# check TRUNCATE success:       1
 
44757
# check layout success:    1
 
44758
# End usability test (inc/partition_check.inc)
 
44759
DROP TABLE t1;
 
44760
CREATE TABLE t1 (
 
44761
f_int1 INTEGER,
 
44762
f_int2 INTEGER,
 
44763
f_char1 CHAR(20),
 
44764
f_char2 CHAR(20),
 
44765
f_charbig VARCHAR(1000)
 
44766
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
44767
)
 
44768
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
44769
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44770
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
44771
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
44772
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
44773
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44774
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
44775
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
44776
# Start usability test (inc/partition_check.inc)
 
44777
create_command
 
44778
SHOW CREATE TABLE t1;
 
44779
Table   Create Table
 
44780
t1      CREATE TABLE `t1` (
 
44781
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
44782
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
44783
  `f_char1` char(20) DEFAULT NULL,
 
44784
  `f_char2` char(20) DEFAULT NULL,
 
44785
  `f_charbig` varchar(1000) DEFAULT NULL
 
44786
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
44787
 
 
44788
# check prerequisites-1 success:    1
 
44789
# check COUNT(*) success:    1
 
44790
# check MIN/MAX(f_int1) success:    1
 
44791
# check MIN/MAX(f_int2) success:    1
 
44792
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44793
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
44794
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
44795
WHERE f_int1 IN (2,3);
 
44796
# check prerequisites-3 success:    1
 
44797
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
44798
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
44799
# check read via f_int1 success: 1
 
44800
# check read via f_int2 success: 1
 
44801
        
 
44802
# check multiple-1 success:     1
 
44803
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
44804
        
 
44805
# check multiple-2 success:     1
 
44806
INSERT INTO t1 SELECT * FROM t0_template
 
44807
WHERE MOD(f_int1,3) = 0;
 
44808
        
 
44809
# check multiple-3 success:     1
 
44810
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
44811
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
44812
AND @max_row_div2 + @max_row_div4;
 
44813
        
 
44814
# check multiple-4 success:     1
 
44815
DELETE FROM t1
 
44816
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
44817
AND @max_row_div2 + @max_row_div4 + @max_row;
 
44818
        
 
44819
# check multiple-5 success:     1
 
44820
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
44821
INSERT INTO t1
 
44822
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
44823
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
44824
f_charbig = '#SINGLE#';
 
44825
        
 
44826
# check single-1 success:       1
 
44827
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
44828
INSERT INTO t1
 
44829
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
44830
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
44831
f_charbig = '#SINGLE#';
 
44832
        
 
44833
# check single-2 success:       1
 
44834
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
44835
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
44836
UPDATE t1 SET f_int1 = @cur_value2
 
44837
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
44838
        
 
44839
# check single-3 success:       1
 
44840
SET @cur_value1= -1;
 
44841
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
44842
UPDATE t1 SET f_int1 = @cur_value1
 
44843
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
44844
        
 
44845
# check single-4 success:       1
 
44846
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
44847
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
44848
        
 
44849
# check single-5 success:       1
 
44850
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
44851
        
 
44852
# check single-6 success:       1
 
44853
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
44854
        
 
44855
# check single-7 success:       1
 
44856
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
44857
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
44858
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
44859
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
44860
f_charbig = '#NULL#';
 
44861
INSERT INTO t1
 
44862
SET f_int1 = NULL , f_int2 = -@max_row,
 
44863
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
44864
f_charbig = '#NULL#';
 
44865
ERROR 23000: Column 'f_int1' cannot be null
 
44866
# check null success:    1
 
44867
DELETE FROM t1
 
44868
WHERE f_int1 = 0 AND f_int2 = 0
 
44869
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
44870
AND f_charbig = '#NULL#';
 
44871
SET AUTOCOMMIT= 0;
 
44872
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44873
SELECT f_int1, f_int1, '', '', 'was inserted'
 
44874
FROM t0_template source_tab
 
44875
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44876
        
 
44877
# check transactions-1 success:         1
 
44878
COMMIT WORK;
 
44879
        
 
44880
# check transactions-2 success:         1
 
44881
ROLLBACK WORK;
 
44882
        
 
44883
# check transactions-3 success:         1
 
44884
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44885
COMMIT WORK;
 
44886
ROLLBACK WORK;
 
44887
        
 
44888
# check transactions-4 success:         1
 
44889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44890
SELECT f_int1, f_int1, '', '', 'was inserted'
 
44891
FROM t0_template source_tab
 
44892
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44893
        
 
44894
# check transactions-5 success:         1
 
44895
ROLLBACK WORK;
 
44896
        
 
44897
# check transactions-6 success:         1
 
44898
# INFO: Storage engine used for t1 seems to be transactional.
 
44899
COMMIT;
 
44900
        
 
44901
# check transactions-7 success:         1
 
44902
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44903
COMMIT WORK;
 
44904
SET @@session.sql_mode = 'traditional';
 
44905
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
44906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
44907
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
44908
'', '', 'was inserted' FROM t0_template
 
44909
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
44910
ERROR 22012: Division by 0
 
44911
COMMIT;
 
44912
        
 
44913
# check transactions-8 success:         1
 
44914
# INFO: Storage engine used for t1 seems to be able to revert
 
44915
#       changes made by the failing statement.
 
44916
SET @@session.sql_mode = '';
 
44917
SET AUTOCOMMIT= 1;
 
44918
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
44919
COMMIT WORK;
 
44920
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
44921
        
 
44922
# check special-1 success:      1
 
44923
UPDATE t1 SET f_charbig = '';
 
44924
        
 
44925
# check special-2 success:      1
 
44926
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
44927
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44928
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
44929
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44932
'just inserted' FROM t0_template
 
44933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44934
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
44935
BEGIN
 
44936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44937
f_charbig = 'updated by trigger'
 
44938
      WHERE f_int1 = new.f_int1;
 
44939
END|
 
44940
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44941
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
44942
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44943
        
 
44944
# check trigger-1 success:      1
 
44945
DROP TRIGGER trg_1;
 
44946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44948
f_charbig = 'just inserted'
 
44949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44950
DELETE FROM t0_aux
 
44951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44954
'just inserted' FROM t0_template
 
44955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44956
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
44957
BEGIN
 
44958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44959
f_charbig = 'updated by trigger'
 
44960
      WHERE f_int1 = new.f_int1;
 
44961
END|
 
44962
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44963
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
44964
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44965
        
 
44966
# check trigger-2 success:      1
 
44967
DROP TRIGGER trg_1;
 
44968
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44969
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44970
f_charbig = 'just inserted'
 
44971
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44972
DELETE FROM t0_aux
 
44973
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44974
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44975
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44976
'just inserted' FROM t0_template
 
44977
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44978
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
44979
BEGIN
 
44980
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
44981
f_charbig = 'updated by trigger'
 
44982
      WHERE f_int1 = new.f_int1;
 
44983
END|
 
44984
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
44985
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
44986
        
 
44987
# check trigger-3 success:      1
 
44988
DROP TRIGGER trg_1;
 
44989
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
44990
f_int2 = CAST(f_char1 AS SIGNED INT),
 
44991
f_charbig = 'just inserted'
 
44992
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
44993
DELETE FROM t0_aux
 
44994
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44995
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
44996
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
44997
'just inserted' FROM t0_template
 
44998
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
44999
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
45000
BEGIN
 
45001
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45002
f_charbig = 'updated by trigger'
 
45003
      WHERE f_int1 = - old.f_int1;
 
45004
END|
 
45005
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45006
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45007
        
 
45008
# check trigger-4 success:      1
 
45009
DROP TRIGGER trg_1;
 
45010
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45011
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45012
f_charbig = 'just inserted'
 
45013
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45014
DELETE FROM t0_aux
 
45015
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45018
'just inserted' FROM t0_template
 
45019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45020
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
45021
BEGIN
 
45022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45023
f_charbig = 'updated by trigger'
 
45024
      WHERE f_int1 = new.f_int1;
 
45025
END|
 
45026
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45027
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45028
        
 
45029
# check trigger-5 success:      1
 
45030
DROP TRIGGER trg_1;
 
45031
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45032
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45033
f_charbig = 'just inserted'
 
45034
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45035
DELETE FROM t0_aux
 
45036
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45037
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45038
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45039
'just inserted' FROM t0_template
 
45040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45041
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
45042
BEGIN
 
45043
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45044
f_charbig = 'updated by trigger'
 
45045
      WHERE f_int1 = - old.f_int1;
 
45046
END|
 
45047
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45048
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45049
        
 
45050
# check trigger-6 success:      1
 
45051
DROP TRIGGER trg_1;
 
45052
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45053
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45054
f_charbig = 'just inserted'
 
45055
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45056
DELETE FROM t0_aux
 
45057
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45059
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45060
'just inserted' FROM t0_template
 
45061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45062
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
45063
BEGIN
 
45064
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45065
f_charbig = 'updated by trigger'
 
45066
      WHERE f_int1 = - old.f_int1;
 
45067
END|
 
45068
DELETE FROM t0_aux
 
45069
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45070
        
 
45071
# check trigger-7 success:      1
 
45072
DROP TRIGGER trg_1;
 
45073
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45074
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45075
f_charbig = 'just inserted'
 
45076
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45077
DELETE FROM t0_aux
 
45078
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45080
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45081
'just inserted' FROM t0_template
 
45082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45083
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
45084
BEGIN
 
45085
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45086
f_charbig = 'updated by trigger'
 
45087
      WHERE f_int1 = - old.f_int1;
 
45088
END|
 
45089
DELETE FROM t0_aux
 
45090
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45091
        
 
45092
# check trigger-8 success:      1
 
45093
DROP TRIGGER trg_1;
 
45094
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45095
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45096
f_charbig = 'just inserted'
 
45097
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45098
DELETE FROM t0_aux
 
45099
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45100
DELETE FROM t1
 
45101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45102
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
45103
BEGIN
 
45104
SET new.f_int1 = old.f_int1 + @max_row,
 
45105
new.f_int2 = old.f_int2 - @max_row,
 
45106
new.f_charbig = '####updated per update trigger####';
 
45107
END|
 
45108
UPDATE t1
 
45109
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
45110
f_charbig = '####updated per update statement itself####';
 
45111
        
 
45112
# check trigger-9 success:      1
 
45113
DROP TRIGGER trg_2;
 
45114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45116
f_charbig = CONCAT('===',f_char1,'===');
 
45117
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
45118
BEGIN
 
45119
SET new.f_int1 = new.f_int1 + @max_row,
 
45120
new.f_int2 = new.f_int2 - @max_row,
 
45121
new.f_charbig = '####updated per update trigger####';
 
45122
END|
 
45123
UPDATE t1
 
45124
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
45125
f_charbig = '####updated per update statement itself####';
 
45126
        
 
45127
# check trigger-10 success:     1
 
45128
DROP TRIGGER trg_2;
 
45129
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45130
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45131
f_charbig = CONCAT('===',f_char1,'===');
 
45132
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
45133
BEGIN
 
45134
SET new.f_int1 = @my_max1 + @counter,
 
45135
new.f_int2 = @my_min2 - @counter,
 
45136
new.f_charbig = '####updated per insert trigger####';
 
45137
SET @counter = @counter + 1;
 
45138
END|
 
45139
SET @counter = 1;
 
45140
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
45141
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45142
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
45143
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
45144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
45145
ORDER BY f_int1;
 
45146
DROP TRIGGER trg_3;
 
45147
        
 
45148
# check trigger-11 success:     1
 
45149
DELETE FROM t1
 
45150
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
45151
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
45152
AND f_charbig = '####updated per insert trigger####';
 
45153
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
45154
BEGIN
 
45155
SET new.f_int1 = @my_max1 + @counter,
 
45156
new.f_int2 = @my_min2 - @counter,
 
45157
new.f_charbig = '####updated per insert trigger####';
 
45158
SET @counter = @counter + 1;
 
45159
END|
 
45160
SET @counter = 1;
 
45161
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
45162
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
45163
SELECT CAST(f_int1 AS CHAR),
 
45164
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
45165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
45166
ORDER BY f_int1;
 
45167
DROP TRIGGER trg_3;
 
45168
        
 
45169
# check trigger-12 success:     1
 
45170
DELETE FROM t1
 
45171
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
45172
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
45173
AND f_charbig = '####updated per insert trigger####';
 
45174
ANALYZE  TABLE t1;
 
45175
Table   Op      Msg_type        Msg_text
 
45176
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
45177
CHECK    TABLE t1 EXTENDED;
 
45178
Table   Op      Msg_type        Msg_text
 
45179
test.t1 check   note    The storage engine for the table doesn't support check
 
45180
CHECKSUM TABLE t1 EXTENDED;
 
45181
Table   Checksum
 
45182
test.t1 <some_value>
 
45183
OPTIMIZE TABLE t1;
 
45184
Table   Op      Msg_type        Msg_text
 
45185
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
45186
# check layout success:    1
 
45187
REPAIR   TABLE t1 EXTENDED;
 
45188
Table   Op      Msg_type        Msg_text
 
45189
test.t1 repair  note    The storage engine for the table doesn't support repair
 
45190
# check layout success:    1
 
45191
TRUNCATE t1;
 
45192
        
 
45193
# check TRUNCATE success:       1
 
45194
# check layout success:    1
 
45195
# End usability test (inc/partition_check.inc)
 
45196
DROP TABLE t1;
 
45197
CREATE TABLE t1 (
 
45198
f_int1 INTEGER,
 
45199
f_int2 INTEGER,
 
45200
f_char1 CHAR(20),
 
45201
f_char2 CHAR(20),
 
45202
f_charbig VARCHAR(1000)
 
45203
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
45204
)
 
45205
PARTITION BY LIST(MOD(f_int1,4))
 
45206
(PARTITION part_3 VALUES IN (-3),
 
45207
PARTITION part_2 VALUES IN (-2),
 
45208
PARTITION part_1 VALUES IN (-1),
 
45209
PARTITION part_N VALUES IN (NULL),
 
45210
PARTITION part0 VALUES IN (0),
 
45211
PARTITION part1 VALUES IN (1),
 
45212
PARTITION part2 VALUES IN (2),
 
45213
PARTITION part3 VALUES IN (3));
 
45214
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45215
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
45216
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
45217
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
45218
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45219
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
45220
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
45221
# Start usability test (inc/partition_check.inc)
 
45222
create_command
 
45223
SHOW CREATE TABLE t1;
 
45224
Table   Create Table
 
45225
t1      CREATE TABLE `t1` (
 
45226
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
45227
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
45228
  `f_char1` char(20) DEFAULT NULL,
 
45229
  `f_char2` char(20) DEFAULT NULL,
 
45230
  `f_charbig` varchar(1000) DEFAULT NULL
 
45231
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
45232
 
 
45233
# check prerequisites-1 success:    1
 
45234
# check COUNT(*) success:    1
 
45235
# check MIN/MAX(f_int1) success:    1
 
45236
# check MIN/MAX(f_int2) success:    1
 
45237
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45238
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
45239
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
45240
WHERE f_int1 IN (2,3);
 
45241
# check prerequisites-3 success:    1
 
45242
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
45243
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
45244
# check read via f_int1 success: 1
 
45245
# check read via f_int2 success: 1
 
45246
        
 
45247
# check multiple-1 success:     1
 
45248
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
45249
        
 
45250
# check multiple-2 success:     1
 
45251
INSERT INTO t1 SELECT * FROM t0_template
 
45252
WHERE MOD(f_int1,3) = 0;
 
45253
        
 
45254
# check multiple-3 success:     1
 
45255
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
45256
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
45257
AND @max_row_div2 + @max_row_div4;
 
45258
        
 
45259
# check multiple-4 success:     1
 
45260
DELETE FROM t1
 
45261
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
45262
AND @max_row_div2 + @max_row_div4 + @max_row;
 
45263
        
 
45264
# check multiple-5 success:     1
 
45265
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
45266
INSERT INTO t1
 
45267
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
45268
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
45269
f_charbig = '#SINGLE#';
 
45270
        
 
45271
# check single-1 success:       1
 
45272
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
45273
INSERT INTO t1
 
45274
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
45275
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
45276
f_charbig = '#SINGLE#';
 
45277
        
 
45278
# check single-2 success:       1
 
45279
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
45280
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
45281
UPDATE t1 SET f_int1 = @cur_value2
 
45282
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
45283
        
 
45284
# check single-3 success:       1
 
45285
SET @cur_value1= -1;
 
45286
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
45287
UPDATE t1 SET f_int1 = @cur_value1
 
45288
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
45289
        
 
45290
# check single-4 success:       1
 
45291
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
45292
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
45293
        
 
45294
# check single-5 success:       1
 
45295
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
45296
        
 
45297
# check single-6 success:       1
 
45298
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
45299
        
 
45300
# check single-7 success:       1
 
45301
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
45302
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
45303
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
45304
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
45305
f_charbig = '#NULL#';
 
45306
INSERT INTO t1
 
45307
SET f_int1 = NULL , f_int2 = -@max_row,
 
45308
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
45309
f_charbig = '#NULL#';
 
45310
ERROR 23000: Column 'f_int1' cannot be null
 
45311
# check null success:    1
 
45312
DELETE FROM t1
 
45313
WHERE f_int1 = 0 AND f_int2 = 0
 
45314
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
45315
AND f_charbig = '#NULL#';
 
45316
SET AUTOCOMMIT= 0;
 
45317
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45318
SELECT f_int1, f_int1, '', '', 'was inserted'
 
45319
FROM t0_template source_tab
 
45320
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
45321
        
 
45322
# check transactions-1 success:         1
 
45323
COMMIT WORK;
 
45324
        
 
45325
# check transactions-2 success:         1
 
45326
ROLLBACK WORK;
 
45327
        
 
45328
# check transactions-3 success:         1
 
45329
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
45330
COMMIT WORK;
 
45331
ROLLBACK WORK;
 
45332
        
 
45333
# check transactions-4 success:         1
 
45334
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45335
SELECT f_int1, f_int1, '', '', 'was inserted'
 
45336
FROM t0_template source_tab
 
45337
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
45338
        
 
45339
# check transactions-5 success:         1
 
45340
ROLLBACK WORK;
 
45341
        
 
45342
# check transactions-6 success:         1
 
45343
# INFO: Storage engine used for t1 seems to be transactional.
 
45344
COMMIT;
 
45345
        
 
45346
# check transactions-7 success:         1
 
45347
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
45348
COMMIT WORK;
 
45349
SET @@session.sql_mode = 'traditional';
 
45350
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
45351
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45352
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
45353
'', '', 'was inserted' FROM t0_template
 
45354
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
45355
ERROR 22012: Division by 0
 
45356
COMMIT;
 
45357
        
 
45358
# check transactions-8 success:         1
 
45359
# INFO: Storage engine used for t1 seems to be able to revert
 
45360
#       changes made by the failing statement.
 
45361
SET @@session.sql_mode = '';
 
45362
SET AUTOCOMMIT= 1;
 
45363
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
45364
COMMIT WORK;
 
45365
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
45366
        
 
45367
# check special-1 success:      1
 
45368
UPDATE t1 SET f_charbig = '';
 
45369
        
 
45370
# check special-2 success:      1
 
45371
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
45372
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45373
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
45374
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45377
'just inserted' FROM t0_template
 
45378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45379
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
45380
BEGIN
 
45381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45382
f_charbig = 'updated by trigger'
 
45383
      WHERE f_int1 = new.f_int1;
 
45384
END|
 
45385
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45386
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
45387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45388
        
 
45389
# check trigger-1 success:      1
 
45390
DROP TRIGGER trg_1;
 
45391
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45392
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45393
f_charbig = 'just inserted'
 
45394
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45395
DELETE FROM t0_aux
 
45396
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45397
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45398
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45399
'just inserted' FROM t0_template
 
45400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45401
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
45402
BEGIN
 
45403
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45404
f_charbig = 'updated by trigger'
 
45405
      WHERE f_int1 = new.f_int1;
 
45406
END|
 
45407
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45408
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
45409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45410
        
 
45411
# check trigger-2 success:      1
 
45412
DROP TRIGGER trg_1;
 
45413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45415
f_charbig = 'just inserted'
 
45416
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45417
DELETE FROM t0_aux
 
45418
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45419
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45420
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45421
'just inserted' FROM t0_template
 
45422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45423
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
45424
BEGIN
 
45425
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45426
f_charbig = 'updated by trigger'
 
45427
      WHERE f_int1 = new.f_int1;
 
45428
END|
 
45429
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45430
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45431
        
 
45432
# check trigger-3 success:      1
 
45433
DROP TRIGGER trg_1;
 
45434
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45435
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45436
f_charbig = 'just inserted'
 
45437
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45438
DELETE FROM t0_aux
 
45439
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45442
'just inserted' FROM t0_template
 
45443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45444
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
45445
BEGIN
 
45446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45447
f_charbig = 'updated by trigger'
 
45448
      WHERE f_int1 = - old.f_int1;
 
45449
END|
 
45450
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45451
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45452
        
 
45453
# check trigger-4 success:      1
 
45454
DROP TRIGGER trg_1;
 
45455
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45456
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45457
f_charbig = 'just inserted'
 
45458
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45459
DELETE FROM t0_aux
 
45460
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45463
'just inserted' FROM t0_template
 
45464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45465
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
45466
BEGIN
 
45467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45468
f_charbig = 'updated by trigger'
 
45469
      WHERE f_int1 = new.f_int1;
 
45470
END|
 
45471
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45472
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45473
        
 
45474
# check trigger-5 success:      1
 
45475
DROP TRIGGER trg_1;
 
45476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45478
f_charbig = 'just inserted'
 
45479
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45480
DELETE FROM t0_aux
 
45481
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45483
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45484
'just inserted' FROM t0_template
 
45485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45486
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
45487
BEGIN
 
45488
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45489
f_charbig = 'updated by trigger'
 
45490
      WHERE f_int1 = - old.f_int1;
 
45491
END|
 
45492
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45493
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45494
        
 
45495
# check trigger-6 success:      1
 
45496
DROP TRIGGER trg_1;
 
45497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45499
f_charbig = 'just inserted'
 
45500
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45501
DELETE FROM t0_aux
 
45502
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45504
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45505
'just inserted' FROM t0_template
 
45506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45507
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
45508
BEGIN
 
45509
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45510
f_charbig = 'updated by trigger'
 
45511
      WHERE f_int1 = - old.f_int1;
 
45512
END|
 
45513
DELETE FROM t0_aux
 
45514
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45515
        
 
45516
# check trigger-7 success:      1
 
45517
DROP TRIGGER trg_1;
 
45518
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45519
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45520
f_charbig = 'just inserted'
 
45521
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45522
DELETE FROM t0_aux
 
45523
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45524
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45525
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45526
'just inserted' FROM t0_template
 
45527
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45528
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
45529
BEGIN
 
45530
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45531
f_charbig = 'updated by trigger'
 
45532
      WHERE f_int1 = - old.f_int1;
 
45533
END|
 
45534
DELETE FROM t0_aux
 
45535
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45536
        
 
45537
# check trigger-8 success:      1
 
45538
DROP TRIGGER trg_1;
 
45539
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45540
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45541
f_charbig = 'just inserted'
 
45542
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45543
DELETE FROM t0_aux
 
45544
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45545
DELETE FROM t1
 
45546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45547
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
45548
BEGIN
 
45549
SET new.f_int1 = old.f_int1 + @max_row,
 
45550
new.f_int2 = old.f_int2 - @max_row,
 
45551
new.f_charbig = '####updated per update trigger####';
 
45552
END|
 
45553
UPDATE t1
 
45554
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
45555
f_charbig = '####updated per update statement itself####';
 
45556
        
 
45557
# check trigger-9 success:      1
 
45558
DROP TRIGGER trg_2;
 
45559
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45560
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45561
f_charbig = CONCAT('===',f_char1,'===');
 
45562
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
45563
BEGIN
 
45564
SET new.f_int1 = new.f_int1 + @max_row,
 
45565
new.f_int2 = new.f_int2 - @max_row,
 
45566
new.f_charbig = '####updated per update trigger####';
 
45567
END|
 
45568
UPDATE t1
 
45569
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
45570
f_charbig = '####updated per update statement itself####';
 
45571
        
 
45572
# check trigger-10 success:     1
 
45573
DROP TRIGGER trg_2;
 
45574
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45575
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45576
f_charbig = CONCAT('===',f_char1,'===');
 
45577
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
45578
BEGIN
 
45579
SET new.f_int1 = @my_max1 + @counter,
 
45580
new.f_int2 = @my_min2 - @counter,
 
45581
new.f_charbig = '####updated per insert trigger####';
 
45582
SET @counter = @counter + 1;
 
45583
END|
 
45584
SET @counter = 1;
 
45585
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
45586
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45587
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
45588
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
45589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
45590
ORDER BY f_int1;
 
45591
DROP TRIGGER trg_3;
 
45592
        
 
45593
# check trigger-11 success:     1
 
45594
DELETE FROM t1
 
45595
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
45596
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
45597
AND f_charbig = '####updated per insert trigger####';
 
45598
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
45599
BEGIN
 
45600
SET new.f_int1 = @my_max1 + @counter,
 
45601
new.f_int2 = @my_min2 - @counter,
 
45602
new.f_charbig = '####updated per insert trigger####';
 
45603
SET @counter = @counter + 1;
 
45604
END|
 
45605
SET @counter = 1;
 
45606
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
45607
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
45608
SELECT CAST(f_int1 AS CHAR),
 
45609
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
45610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
45611
ORDER BY f_int1;
 
45612
DROP TRIGGER trg_3;
 
45613
        
 
45614
# check trigger-12 success:     1
 
45615
DELETE FROM t1
 
45616
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
45617
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
45618
AND f_charbig = '####updated per insert trigger####';
 
45619
ANALYZE  TABLE t1;
 
45620
Table   Op      Msg_type        Msg_text
 
45621
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
45622
CHECK    TABLE t1 EXTENDED;
 
45623
Table   Op      Msg_type        Msg_text
 
45624
test.t1 check   note    The storage engine for the table doesn't support check
 
45625
CHECKSUM TABLE t1 EXTENDED;
 
45626
Table   Checksum
 
45627
test.t1 <some_value>
 
45628
OPTIMIZE TABLE t1;
 
45629
Table   Op      Msg_type        Msg_text
 
45630
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
45631
# check layout success:    1
 
45632
REPAIR   TABLE t1 EXTENDED;
 
45633
Table   Op      Msg_type        Msg_text
 
45634
test.t1 repair  note    The storage engine for the table doesn't support repair
 
45635
# check layout success:    1
 
45636
TRUNCATE t1;
 
45637
        
 
45638
# check TRUNCATE success:       1
 
45639
# check layout success:    1
 
45640
# End usability test (inc/partition_check.inc)
 
45641
DROP TABLE t1;
 
45642
CREATE TABLE t1 (
 
45643
f_int1 INTEGER,
 
45644
f_int2 INTEGER,
 
45645
f_char1 CHAR(20),
 
45646
f_char2 CHAR(20),
 
45647
f_charbig VARCHAR(1000)
 
45648
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
45649
)
 
45650
PARTITION BY RANGE(f_int1)
 
45651
(PARTITION parta VALUES LESS THAN (0),
 
45652
PARTITION partb VALUES LESS THAN (5),
 
45653
PARTITION partc VALUES LESS THAN (10),
 
45654
PARTITION partd VALUES LESS THAN (10 + 5),
 
45655
PARTITION parte VALUES LESS THAN (20),
 
45656
PARTITION partf VALUES LESS THAN (2147483646));
 
45657
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45658
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
45659
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
45660
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
45661
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45662
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
45663
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
45664
# Start usability test (inc/partition_check.inc)
 
45665
create_command
 
45666
SHOW CREATE TABLE t1;
 
45667
Table   Create Table
 
45668
t1      CREATE TABLE `t1` (
 
45669
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
45670
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
45671
  `f_char1` char(20) DEFAULT NULL,
 
45672
  `f_char2` char(20) DEFAULT NULL,
 
45673
  `f_charbig` varchar(1000) DEFAULT NULL
 
45674
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
45675
 
 
45676
# check prerequisites-1 success:    1
 
45677
# check COUNT(*) success:    1
 
45678
# check MIN/MAX(f_int1) success:    1
 
45679
# check MIN/MAX(f_int2) success:    1
 
45680
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45681
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
45682
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
45683
WHERE f_int1 IN (2,3);
 
45684
# check prerequisites-3 success:    1
 
45685
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
45686
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
45687
# check read via f_int1 success: 1
 
45688
# check read via f_int2 success: 1
 
45689
        
 
45690
# check multiple-1 success:     1
 
45691
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
45692
        
 
45693
# check multiple-2 success:     1
 
45694
INSERT INTO t1 SELECT * FROM t0_template
 
45695
WHERE MOD(f_int1,3) = 0;
 
45696
        
 
45697
# check multiple-3 success:     1
 
45698
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
45699
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
45700
AND @max_row_div2 + @max_row_div4;
 
45701
        
 
45702
# check multiple-4 success:     1
 
45703
DELETE FROM t1
 
45704
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
45705
AND @max_row_div2 + @max_row_div4 + @max_row;
 
45706
        
 
45707
# check multiple-5 success:     1
 
45708
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
45709
INSERT INTO t1
 
45710
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
45711
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
45712
f_charbig = '#SINGLE#';
 
45713
        
 
45714
# check single-1 success:       1
 
45715
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
45716
INSERT INTO t1
 
45717
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
45718
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
45719
f_charbig = '#SINGLE#';
 
45720
        
 
45721
# check single-2 success:       1
 
45722
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
45723
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
45724
UPDATE t1 SET f_int1 = @cur_value2
 
45725
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
45726
        
 
45727
# check single-3 success:       1
 
45728
SET @cur_value1= -1;
 
45729
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
45730
UPDATE t1 SET f_int1 = @cur_value1
 
45731
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
45732
        
 
45733
# check single-4 success:       1
 
45734
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
45735
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
45736
        
 
45737
# check single-5 success:       1
 
45738
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
45739
        
 
45740
# check single-6 success:       1
 
45741
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
45742
ERROR HY000: Table has no partition for value 2147483647
 
45743
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
45744
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
45745
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
45746
f_charbig = '#NULL#';
 
45747
INSERT INTO t1
 
45748
SET f_int1 = NULL , f_int2 = -@max_row,
 
45749
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
45750
f_charbig = '#NULL#';
 
45751
ERROR 23000: Column 'f_int1' cannot be null
 
45752
# check null success:    1
 
45753
DELETE FROM t1
 
45754
WHERE f_int1 = 0 AND f_int2 = 0
 
45755
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
45756
AND f_charbig = '#NULL#';
 
45757
SET AUTOCOMMIT= 0;
 
45758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45759
SELECT f_int1, f_int1, '', '', 'was inserted'
 
45760
FROM t0_template source_tab
 
45761
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
45762
        
 
45763
# check transactions-1 success:         1
 
45764
COMMIT WORK;
 
45765
        
 
45766
# check transactions-2 success:         1
 
45767
ROLLBACK WORK;
 
45768
        
 
45769
# check transactions-3 success:         1
 
45770
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
45771
COMMIT WORK;
 
45772
ROLLBACK WORK;
 
45773
        
 
45774
# check transactions-4 success:         1
 
45775
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45776
SELECT f_int1, f_int1, '', '', 'was inserted'
 
45777
FROM t0_template source_tab
 
45778
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
45779
        
 
45780
# check transactions-5 success:         1
 
45781
ROLLBACK WORK;
 
45782
        
 
45783
# check transactions-6 success:         1
 
45784
# INFO: Storage engine used for t1 seems to be transactional.
 
45785
COMMIT;
 
45786
        
 
45787
# check transactions-7 success:         1
 
45788
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
45789
COMMIT WORK;
 
45790
SET @@session.sql_mode = 'traditional';
 
45791
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
45792
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
45793
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
45794
'', '', 'was inserted' FROM t0_template
 
45795
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
45796
ERROR 22012: Division by 0
 
45797
COMMIT;
 
45798
        
 
45799
# check transactions-8 success:         1
 
45800
# INFO: Storage engine used for t1 seems to be able to revert
 
45801
#       changes made by the failing statement.
 
45802
SET @@session.sql_mode = '';
 
45803
SET AUTOCOMMIT= 1;
 
45804
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
45805
COMMIT WORK;
 
45806
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
45807
        
 
45808
# check special-1 success:      1
 
45809
UPDATE t1 SET f_charbig = '';
 
45810
        
 
45811
# check special-2 success:      1
 
45812
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
45813
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45814
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
45815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45818
'just inserted' FROM t0_template
 
45819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45820
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
45821
BEGIN
 
45822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45823
f_charbig = 'updated by trigger'
 
45824
      WHERE f_int1 = new.f_int1;
 
45825
END|
 
45826
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45827
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
45828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45829
        
 
45830
# check trigger-1 success:      1
 
45831
DROP TRIGGER trg_1;
 
45832
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45833
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45834
f_charbig = 'just inserted'
 
45835
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45836
DELETE FROM t0_aux
 
45837
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45838
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45839
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45840
'just inserted' FROM t0_template
 
45841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45842
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
45843
BEGIN
 
45844
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45845
f_charbig = 'updated by trigger'
 
45846
      WHERE f_int1 = new.f_int1;
 
45847
END|
 
45848
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45849
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
45850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45851
        
 
45852
# check trigger-2 success:      1
 
45853
DROP TRIGGER trg_1;
 
45854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45856
f_charbig = 'just inserted'
 
45857
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45858
DELETE FROM t0_aux
 
45859
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45860
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45861
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45862
'just inserted' FROM t0_template
 
45863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45864
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
45865
BEGIN
 
45866
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45867
f_charbig = 'updated by trigger'
 
45868
      WHERE f_int1 = new.f_int1;
 
45869
END|
 
45870
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45871
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45872
        
 
45873
# check trigger-3 success:      1
 
45874
DROP TRIGGER trg_1;
 
45875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45877
f_charbig = 'just inserted'
 
45878
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45879
DELETE FROM t0_aux
 
45880
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45881
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45882
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45883
'just inserted' FROM t0_template
 
45884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45885
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
45886
BEGIN
 
45887
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45888
f_charbig = 'updated by trigger'
 
45889
      WHERE f_int1 = - old.f_int1;
 
45890
END|
 
45891
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45892
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45893
        
 
45894
# check trigger-4 success:      1
 
45895
DROP TRIGGER trg_1;
 
45896
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45897
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45898
f_charbig = 'just inserted'
 
45899
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45900
DELETE FROM t0_aux
 
45901
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45903
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45904
'just inserted' FROM t0_template
 
45905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45906
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
45907
BEGIN
 
45908
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45909
f_charbig = 'updated by trigger'
 
45910
      WHERE f_int1 = new.f_int1;
 
45911
END|
 
45912
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45913
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45914
        
 
45915
# check trigger-5 success:      1
 
45916
DROP TRIGGER trg_1;
 
45917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45918
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45919
f_charbig = 'just inserted'
 
45920
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45921
DELETE FROM t0_aux
 
45922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45925
'just inserted' FROM t0_template
 
45926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45927
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
45928
BEGIN
 
45929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45930
f_charbig = 'updated by trigger'
 
45931
      WHERE f_int1 = - old.f_int1;
 
45932
END|
 
45933
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
45934
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45935
        
 
45936
# check trigger-6 success:      1
 
45937
DROP TRIGGER trg_1;
 
45938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45940
f_charbig = 'just inserted'
 
45941
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45942
DELETE FROM t0_aux
 
45943
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45945
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45946
'just inserted' FROM t0_template
 
45947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45948
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
45949
BEGIN
 
45950
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45951
f_charbig = 'updated by trigger'
 
45952
      WHERE f_int1 = - old.f_int1;
 
45953
END|
 
45954
DELETE FROM t0_aux
 
45955
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45956
        
 
45957
# check trigger-7 success:      1
 
45958
DROP TRIGGER trg_1;
 
45959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45961
f_charbig = 'just inserted'
 
45962
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45963
DELETE FROM t0_aux
 
45964
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45965
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
45966
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
45967
'just inserted' FROM t0_template
 
45968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45969
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
45970
BEGIN
 
45971
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
45972
f_charbig = 'updated by trigger'
 
45973
      WHERE f_int1 = - old.f_int1;
 
45974
END|
 
45975
DELETE FROM t0_aux
 
45976
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
45977
        
 
45978
# check trigger-8 success:      1
 
45979
DROP TRIGGER trg_1;
 
45980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
45981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
45982
f_charbig = 'just inserted'
 
45983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
45984
DELETE FROM t0_aux
 
45985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45986
DELETE FROM t1
 
45987
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
45988
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
45989
BEGIN
 
45990
SET new.f_int1 = old.f_int1 + @max_row,
 
45991
new.f_int2 = old.f_int2 - @max_row,
 
45992
new.f_charbig = '####updated per update trigger####';
 
45993
END|
 
45994
UPDATE t1
 
45995
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
45996
f_charbig = '####updated per update statement itself####';
 
45997
        
 
45998
# check trigger-9 success:      1
 
45999
DROP TRIGGER trg_2;
 
46000
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46001
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46002
f_charbig = CONCAT('===',f_char1,'===');
 
46003
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
46004
BEGIN
 
46005
SET new.f_int1 = new.f_int1 + @max_row,
 
46006
new.f_int2 = new.f_int2 - @max_row,
 
46007
new.f_charbig = '####updated per update trigger####';
 
46008
END|
 
46009
UPDATE t1
 
46010
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
46011
f_charbig = '####updated per update statement itself####';
 
46012
        
 
46013
# check trigger-10 success:     1
 
46014
DROP TRIGGER trg_2;
 
46015
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46016
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46017
f_charbig = CONCAT('===',f_char1,'===');
 
46018
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
46019
BEGIN
 
46020
SET new.f_int1 = @my_max1 + @counter,
 
46021
new.f_int2 = @my_min2 - @counter,
 
46022
new.f_charbig = '####updated per insert trigger####';
 
46023
SET @counter = @counter + 1;
 
46024
END|
 
46025
SET @counter = 1;
 
46026
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
46027
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46028
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
46029
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
46030
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
46031
ORDER BY f_int1;
 
46032
DROP TRIGGER trg_3;
 
46033
        
 
46034
# check trigger-11 success:     1
 
46035
DELETE FROM t1
 
46036
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
46037
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
46038
AND f_charbig = '####updated per insert trigger####';
 
46039
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
46040
BEGIN
 
46041
SET new.f_int1 = @my_max1 + @counter,
 
46042
new.f_int2 = @my_min2 - @counter,
 
46043
new.f_charbig = '####updated per insert trigger####';
 
46044
SET @counter = @counter + 1;
 
46045
END|
 
46046
SET @counter = 1;
 
46047
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
46048
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
46049
SELECT CAST(f_int1 AS CHAR),
 
46050
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
46051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
46052
ORDER BY f_int1;
 
46053
DROP TRIGGER trg_3;
 
46054
        
 
46055
# check trigger-12 success:     1
 
46056
DELETE FROM t1
 
46057
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
46058
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
46059
AND f_charbig = '####updated per insert trigger####';
 
46060
ANALYZE  TABLE t1;
 
46061
Table   Op      Msg_type        Msg_text
 
46062
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
46063
CHECK    TABLE t1 EXTENDED;
 
46064
Table   Op      Msg_type        Msg_text
 
46065
test.t1 check   note    The storage engine for the table doesn't support check
 
46066
CHECKSUM TABLE t1 EXTENDED;
 
46067
Table   Checksum
 
46068
test.t1 <some_value>
 
46069
OPTIMIZE TABLE t1;
 
46070
Table   Op      Msg_type        Msg_text
 
46071
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
46072
# check layout success:    1
 
46073
REPAIR   TABLE t1 EXTENDED;
 
46074
Table   Op      Msg_type        Msg_text
 
46075
test.t1 repair  note    The storage engine for the table doesn't support repair
 
46076
# check layout success:    1
 
46077
TRUNCATE t1;
 
46078
        
 
46079
# check TRUNCATE success:       1
 
46080
# check layout success:    1
 
46081
# End usability test (inc/partition_check.inc)
 
46082
DROP TABLE t1;
 
46083
CREATE TABLE t1 (
 
46084
f_int1 INTEGER,
 
46085
f_int2 INTEGER,
 
46086
f_char1 CHAR(20),
 
46087
f_char2 CHAR(20),
 
46088
f_charbig VARCHAR(1000)
 
46089
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
46090
)
 
46091
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
46092
(PARTITION parta VALUES LESS THAN (0),
 
46093
PARTITION partb VALUES LESS THAN (5),
 
46094
PARTITION partc VALUES LESS THAN (10),
 
46095
PARTITION partd VALUES LESS THAN (2147483646));
 
46096
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46097
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
46098
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
46099
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
46100
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46101
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
46102
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
46103
# Start usability test (inc/partition_check.inc)
 
46104
create_command
 
46105
SHOW CREATE TABLE t1;
 
46106
Table   Create Table
 
46107
t1      CREATE TABLE `t1` (
 
46108
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
46109
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
46110
  `f_char1` char(20) DEFAULT NULL,
 
46111
  `f_char2` char(20) DEFAULT NULL,
 
46112
  `f_charbig` varchar(1000) DEFAULT NULL
 
46113
) ENGINE=InnoDB 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 = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
46114
 
 
46115
# check prerequisites-1 success:    1
 
46116
# check COUNT(*) success:    1
 
46117
# check MIN/MAX(f_int1) success:    1
 
46118
# check MIN/MAX(f_int2) success:    1
 
46119
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46120
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
46121
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
46122
WHERE f_int1 IN (2,3);
 
46123
# check prerequisites-3 success:    1
 
46124
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
46125
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
46126
# check read via f_int1 success: 1
 
46127
# check read via f_int2 success: 1
 
46128
        
 
46129
# check multiple-1 success:     1
 
46130
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
46131
        
 
46132
# check multiple-2 success:     1
 
46133
INSERT INTO t1 SELECT * FROM t0_template
 
46134
WHERE MOD(f_int1,3) = 0;
 
46135
        
 
46136
# check multiple-3 success:     1
 
46137
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
46138
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
46139
AND @max_row_div2 + @max_row_div4;
 
46140
        
 
46141
# check multiple-4 success:     1
 
46142
DELETE FROM t1
 
46143
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
46144
AND @max_row_div2 + @max_row_div4 + @max_row;
 
46145
        
 
46146
# check multiple-5 success:     1
 
46147
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
46148
INSERT INTO t1
 
46149
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
46150
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
46151
f_charbig = '#SINGLE#';
 
46152
        
 
46153
# check single-1 success:       1
 
46154
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
46155
INSERT INTO t1
 
46156
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
46157
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
46158
f_charbig = '#SINGLE#';
 
46159
        
 
46160
# check single-2 success:       1
 
46161
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
46162
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
46163
UPDATE t1 SET f_int1 = @cur_value2
 
46164
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
46165
        
 
46166
# check single-3 success:       1
 
46167
SET @cur_value1= -1;
 
46168
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
46169
UPDATE t1 SET f_int1 = @cur_value1
 
46170
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
46171
        
 
46172
# check single-4 success:       1
 
46173
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
46174
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
46175
        
 
46176
# check single-5 success:       1
 
46177
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
46178
        
 
46179
# check single-6 success:       1
 
46180
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
46181
        
 
46182
# check single-7 success:       1
 
46183
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
46184
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
46185
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
46186
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
46187
f_charbig = '#NULL#';
 
46188
INSERT INTO t1
 
46189
SET f_int1 = NULL , f_int2 = -@max_row,
 
46190
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
46191
f_charbig = '#NULL#';
 
46192
ERROR 23000: Column 'f_int1' cannot be null
 
46193
# check null success:    1
 
46194
DELETE FROM t1
 
46195
WHERE f_int1 = 0 AND f_int2 = 0
 
46196
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
46197
AND f_charbig = '#NULL#';
 
46198
SET AUTOCOMMIT= 0;
 
46199
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46200
SELECT f_int1, f_int1, '', '', 'was inserted'
 
46201
FROM t0_template source_tab
 
46202
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
46203
        
 
46204
# check transactions-1 success:         1
 
46205
COMMIT WORK;
 
46206
        
 
46207
# check transactions-2 success:         1
 
46208
ROLLBACK WORK;
 
46209
        
 
46210
# check transactions-3 success:         1
 
46211
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
46212
COMMIT WORK;
 
46213
ROLLBACK WORK;
 
46214
        
 
46215
# check transactions-4 success:         1
 
46216
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46217
SELECT f_int1, f_int1, '', '', 'was inserted'
 
46218
FROM t0_template source_tab
 
46219
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
46220
        
 
46221
# check transactions-5 success:         1
 
46222
ROLLBACK WORK;
 
46223
        
 
46224
# check transactions-6 success:         1
 
46225
# INFO: Storage engine used for t1 seems to be transactional.
 
46226
COMMIT;
 
46227
        
 
46228
# check transactions-7 success:         1
 
46229
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
46230
COMMIT WORK;
 
46231
SET @@session.sql_mode = 'traditional';
 
46232
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
46233
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46234
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
46235
'', '', 'was inserted' FROM t0_template
 
46236
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
46237
ERROR 22012: Division by 0
 
46238
COMMIT;
 
46239
        
 
46240
# check transactions-8 success:         1
 
46241
# INFO: Storage engine used for t1 seems to be able to revert
 
46242
#       changes made by the failing statement.
 
46243
SET @@session.sql_mode = '';
 
46244
SET AUTOCOMMIT= 1;
 
46245
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
46246
COMMIT WORK;
 
46247
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
46248
        
 
46249
# check special-1 success:      1
 
46250
UPDATE t1 SET f_charbig = '';
 
46251
        
 
46252
# check special-2 success:      1
 
46253
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
46254
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46255
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
46256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46259
'just inserted' FROM t0_template
 
46260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46261
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
46262
BEGIN
 
46263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46264
f_charbig = 'updated by trigger'
 
46265
      WHERE f_int1 = new.f_int1;
 
46266
END|
 
46267
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46268
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
46269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46270
        
 
46271
# check trigger-1 success:      1
 
46272
DROP TRIGGER trg_1;
 
46273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46275
f_charbig = 'just inserted'
 
46276
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46277
DELETE FROM t0_aux
 
46278
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46280
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46281
'just inserted' FROM t0_template
 
46282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46283
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
46284
BEGIN
 
46285
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46286
f_charbig = 'updated by trigger'
 
46287
      WHERE f_int1 = new.f_int1;
 
46288
END|
 
46289
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46290
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
46291
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46292
        
 
46293
# check trigger-2 success:      1
 
46294
DROP TRIGGER trg_1;
 
46295
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46296
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46297
f_charbig = 'just inserted'
 
46298
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46299
DELETE FROM t0_aux
 
46300
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46301
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46302
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46303
'just inserted' FROM t0_template
 
46304
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46305
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
46306
BEGIN
 
46307
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46308
f_charbig = 'updated by trigger'
 
46309
      WHERE f_int1 = new.f_int1;
 
46310
END|
 
46311
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46312
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46313
        
 
46314
# check trigger-3 success:      1
 
46315
DROP TRIGGER trg_1;
 
46316
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46317
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46318
f_charbig = 'just inserted'
 
46319
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46320
DELETE FROM t0_aux
 
46321
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46322
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46323
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46324
'just inserted' FROM t0_template
 
46325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46326
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
46327
BEGIN
 
46328
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46329
f_charbig = 'updated by trigger'
 
46330
      WHERE f_int1 = - old.f_int1;
 
46331
END|
 
46332
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46333
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46334
        
 
46335
# check trigger-4 success:      1
 
46336
DROP TRIGGER trg_1;
 
46337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46339
f_charbig = 'just inserted'
 
46340
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46341
DELETE FROM t0_aux
 
46342
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46343
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46344
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46345
'just inserted' FROM t0_template
 
46346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46347
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
46348
BEGIN
 
46349
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46350
f_charbig = 'updated by trigger'
 
46351
      WHERE f_int1 = new.f_int1;
 
46352
END|
 
46353
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46354
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46355
        
 
46356
# check trigger-5 success:      1
 
46357
DROP TRIGGER trg_1;
 
46358
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46359
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46360
f_charbig = 'just inserted'
 
46361
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46362
DELETE FROM t0_aux
 
46363
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46364
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46365
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46366
'just inserted' FROM t0_template
 
46367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46368
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
46369
BEGIN
 
46370
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46371
f_charbig = 'updated by trigger'
 
46372
      WHERE f_int1 = - old.f_int1;
 
46373
END|
 
46374
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46375
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46376
        
 
46377
# check trigger-6 success:      1
 
46378
DROP TRIGGER trg_1;
 
46379
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46380
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46381
f_charbig = 'just inserted'
 
46382
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46383
DELETE FROM t0_aux
 
46384
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46385
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46386
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46387
'just inserted' FROM t0_template
 
46388
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46389
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
46390
BEGIN
 
46391
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46392
f_charbig = 'updated by trigger'
 
46393
      WHERE f_int1 = - old.f_int1;
 
46394
END|
 
46395
DELETE FROM t0_aux
 
46396
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46397
        
 
46398
# check trigger-7 success:      1
 
46399
DROP TRIGGER trg_1;
 
46400
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46401
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46402
f_charbig = 'just inserted'
 
46403
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46404
DELETE FROM t0_aux
 
46405
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46406
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46407
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46408
'just inserted' FROM t0_template
 
46409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46410
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
46411
BEGIN
 
46412
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46413
f_charbig = 'updated by trigger'
 
46414
      WHERE f_int1 = - old.f_int1;
 
46415
END|
 
46416
DELETE FROM t0_aux
 
46417
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46418
        
 
46419
# check trigger-8 success:      1
 
46420
DROP TRIGGER trg_1;
 
46421
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46422
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46423
f_charbig = 'just inserted'
 
46424
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46425
DELETE FROM t0_aux
 
46426
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46427
DELETE FROM t1
 
46428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46429
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
46430
BEGIN
 
46431
SET new.f_int1 = old.f_int1 + @max_row,
 
46432
new.f_int2 = old.f_int2 - @max_row,
 
46433
new.f_charbig = '####updated per update trigger####';
 
46434
END|
 
46435
UPDATE t1
 
46436
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
46437
f_charbig = '####updated per update statement itself####';
 
46438
        
 
46439
# check trigger-9 success:      1
 
46440
DROP TRIGGER trg_2;
 
46441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46443
f_charbig = CONCAT('===',f_char1,'===');
 
46444
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
46445
BEGIN
 
46446
SET new.f_int1 = new.f_int1 + @max_row,
 
46447
new.f_int2 = new.f_int2 - @max_row,
 
46448
new.f_charbig = '####updated per update trigger####';
 
46449
END|
 
46450
UPDATE t1
 
46451
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
46452
f_charbig = '####updated per update statement itself####';
 
46453
        
 
46454
# check trigger-10 success:     1
 
46455
DROP TRIGGER trg_2;
 
46456
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46457
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46458
f_charbig = CONCAT('===',f_char1,'===');
 
46459
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
46460
BEGIN
 
46461
SET new.f_int1 = @my_max1 + @counter,
 
46462
new.f_int2 = @my_min2 - @counter,
 
46463
new.f_charbig = '####updated per insert trigger####';
 
46464
SET @counter = @counter + 1;
 
46465
END|
 
46466
SET @counter = 1;
 
46467
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
46468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46469
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
46470
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
46471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
46472
ORDER BY f_int1;
 
46473
DROP TRIGGER trg_3;
 
46474
        
 
46475
# check trigger-11 success:     1
 
46476
DELETE FROM t1
 
46477
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
46478
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
46479
AND f_charbig = '####updated per insert trigger####';
 
46480
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
46481
BEGIN
 
46482
SET new.f_int1 = @my_max1 + @counter,
 
46483
new.f_int2 = @my_min2 - @counter,
 
46484
new.f_charbig = '####updated per insert trigger####';
 
46485
SET @counter = @counter + 1;
 
46486
END|
 
46487
SET @counter = 1;
 
46488
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
46489
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
46490
SELECT CAST(f_int1 AS CHAR),
 
46491
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
46492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
46493
ORDER BY f_int1;
 
46494
DROP TRIGGER trg_3;
 
46495
        
 
46496
# check trigger-12 success:     1
 
46497
DELETE FROM t1
 
46498
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
46499
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
46500
AND f_charbig = '####updated per insert trigger####';
 
46501
ANALYZE  TABLE t1;
 
46502
Table   Op      Msg_type        Msg_text
 
46503
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
46504
CHECK    TABLE t1 EXTENDED;
 
46505
Table   Op      Msg_type        Msg_text
 
46506
test.t1 check   note    The storage engine for the table doesn't support check
 
46507
CHECKSUM TABLE t1 EXTENDED;
 
46508
Table   Checksum
 
46509
test.t1 <some_value>
 
46510
OPTIMIZE TABLE t1;
 
46511
Table   Op      Msg_type        Msg_text
 
46512
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
46513
# check layout success:    1
 
46514
REPAIR   TABLE t1 EXTENDED;
 
46515
Table   Op      Msg_type        Msg_text
 
46516
test.t1 repair  note    The storage engine for the table doesn't support repair
 
46517
# check layout success:    1
 
46518
TRUNCATE t1;
 
46519
        
 
46520
# check TRUNCATE success:       1
 
46521
# check layout success:    1
 
46522
# End usability test (inc/partition_check.inc)
 
46523
DROP TABLE t1;
 
46524
CREATE TABLE t1 (
 
46525
f_int1 INTEGER,
 
46526
f_int2 INTEGER,
 
46527
f_char1 CHAR(20),
 
46528
f_char2 CHAR(20),
 
46529
f_charbig VARCHAR(1000)
 
46530
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
46531
)
 
46532
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
46533
(PARTITION part1 VALUES LESS THAN (0)
 
46534
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
46535
PARTITION part2 VALUES LESS THAN (5)
 
46536
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
46537
PARTITION part3 VALUES LESS THAN (10)
 
46538
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
46539
PARTITION part4 VALUES LESS THAN (2147483646)
 
46540
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
46541
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46542
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
46543
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
46544
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
46545
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46546
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
46547
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
46548
# Start usability test (inc/partition_check.inc)
 
46549
create_command
 
46550
SHOW CREATE TABLE t1;
 
46551
Table   Create Table
 
46552
t1      CREATE TABLE `t1` (
 
46553
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
46554
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
46555
  `f_char1` char(20) DEFAULT NULL,
 
46556
  `f_char2` char(20) DEFAULT NULL,
 
46557
  `f_charbig` varchar(1000) DEFAULT NULL
 
46558
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
46559
 
 
46560
# check prerequisites-1 success:    1
 
46561
# check COUNT(*) success:    1
 
46562
# check MIN/MAX(f_int1) success:    1
 
46563
# check MIN/MAX(f_int2) success:    1
 
46564
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46565
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
46566
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
46567
WHERE f_int1 IN (2,3);
 
46568
# check prerequisites-3 success:    1
 
46569
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
46570
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
46571
# check read via f_int1 success: 1
 
46572
# check read via f_int2 success: 1
 
46573
        
 
46574
# check multiple-1 success:     1
 
46575
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
46576
        
 
46577
# check multiple-2 success:     1
 
46578
INSERT INTO t1 SELECT * FROM t0_template
 
46579
WHERE MOD(f_int1,3) = 0;
 
46580
        
 
46581
# check multiple-3 success:     1
 
46582
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
46583
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
46584
AND @max_row_div2 + @max_row_div4;
 
46585
        
 
46586
# check multiple-4 success:     1
 
46587
DELETE FROM t1
 
46588
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
46589
AND @max_row_div2 + @max_row_div4 + @max_row;
 
46590
        
 
46591
# check multiple-5 success:     1
 
46592
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
46593
INSERT INTO t1
 
46594
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
46595
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
46596
f_charbig = '#SINGLE#';
 
46597
        
 
46598
# check single-1 success:       1
 
46599
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
46600
INSERT INTO t1
 
46601
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
46602
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
46603
f_charbig = '#SINGLE#';
 
46604
        
 
46605
# check single-2 success:       1
 
46606
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
46607
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
46608
UPDATE t1 SET f_int1 = @cur_value2
 
46609
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
46610
        
 
46611
# check single-3 success:       1
 
46612
SET @cur_value1= -1;
 
46613
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
46614
UPDATE t1 SET f_int1 = @cur_value1
 
46615
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
46616
        
 
46617
# check single-4 success:       1
 
46618
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
46619
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
46620
        
 
46621
# check single-5 success:       1
 
46622
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
46623
        
 
46624
# check single-6 success:       1
 
46625
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
46626
ERROR HY000: Table has no partition for value 2147483647
 
46627
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
46628
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
46629
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
46630
f_charbig = '#NULL#';
 
46631
INSERT INTO t1
 
46632
SET f_int1 = NULL , f_int2 = -@max_row,
 
46633
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
46634
f_charbig = '#NULL#';
 
46635
ERROR 23000: Column 'f_int1' cannot be null
 
46636
# check null success:    1
 
46637
DELETE FROM t1
 
46638
WHERE f_int1 = 0 AND f_int2 = 0
 
46639
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
46640
AND f_charbig = '#NULL#';
 
46641
SET AUTOCOMMIT= 0;
 
46642
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46643
SELECT f_int1, f_int1, '', '', 'was inserted'
 
46644
FROM t0_template source_tab
 
46645
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
46646
        
 
46647
# check transactions-1 success:         1
 
46648
COMMIT WORK;
 
46649
        
 
46650
# check transactions-2 success:         1
 
46651
ROLLBACK WORK;
 
46652
        
 
46653
# check transactions-3 success:         1
 
46654
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
46655
COMMIT WORK;
 
46656
ROLLBACK WORK;
 
46657
        
 
46658
# check transactions-4 success:         1
 
46659
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46660
SELECT f_int1, f_int1, '', '', 'was inserted'
 
46661
FROM t0_template source_tab
 
46662
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
46663
        
 
46664
# check transactions-5 success:         1
 
46665
ROLLBACK WORK;
 
46666
        
 
46667
# check transactions-6 success:         1
 
46668
# INFO: Storage engine used for t1 seems to be transactional.
 
46669
COMMIT;
 
46670
        
 
46671
# check transactions-7 success:         1
 
46672
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
46673
COMMIT WORK;
 
46674
SET @@session.sql_mode = 'traditional';
 
46675
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
46676
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46677
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
46678
'', '', 'was inserted' FROM t0_template
 
46679
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
46680
ERROR 22012: Division by 0
 
46681
COMMIT;
 
46682
        
 
46683
# check transactions-8 success:         1
 
46684
# INFO: Storage engine used for t1 seems to be able to revert
 
46685
#       changes made by the failing statement.
 
46686
SET @@session.sql_mode = '';
 
46687
SET AUTOCOMMIT= 1;
 
46688
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
46689
COMMIT WORK;
 
46690
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
46691
        
 
46692
# check special-1 success:      1
 
46693
UPDATE t1 SET f_charbig = '';
 
46694
        
 
46695
# check special-2 success:      1
 
46696
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
46697
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46698
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
46699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46702
'just inserted' FROM t0_template
 
46703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46704
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
46705
BEGIN
 
46706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46707
f_charbig = 'updated by trigger'
 
46708
      WHERE f_int1 = new.f_int1;
 
46709
END|
 
46710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46711
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
46712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46713
        
 
46714
# check trigger-1 success:      1
 
46715
DROP TRIGGER trg_1;
 
46716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46718
f_charbig = 'just inserted'
 
46719
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46720
DELETE FROM t0_aux
 
46721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46722
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46723
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46724
'just inserted' FROM t0_template
 
46725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46726
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
46727
BEGIN
 
46728
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46729
f_charbig = 'updated by trigger'
 
46730
      WHERE f_int1 = new.f_int1;
 
46731
END|
 
46732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46733
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
46734
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46735
        
 
46736
# check trigger-2 success:      1
 
46737
DROP TRIGGER trg_1;
 
46738
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46739
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46740
f_charbig = 'just inserted'
 
46741
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46742
DELETE FROM t0_aux
 
46743
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46744
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46745
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46746
'just inserted' FROM t0_template
 
46747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46748
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
46749
BEGIN
 
46750
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46751
f_charbig = 'updated by trigger'
 
46752
      WHERE f_int1 = new.f_int1;
 
46753
END|
 
46754
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46755
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46756
        
 
46757
# check trigger-3 success:      1
 
46758
DROP TRIGGER trg_1;
 
46759
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46760
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46761
f_charbig = 'just inserted'
 
46762
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46763
DELETE FROM t0_aux
 
46764
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46765
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46766
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46767
'just inserted' FROM t0_template
 
46768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46769
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
46770
BEGIN
 
46771
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46772
f_charbig = 'updated by trigger'
 
46773
      WHERE f_int1 = - old.f_int1;
 
46774
END|
 
46775
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46776
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46777
        
 
46778
# check trigger-4 success:      1
 
46779
DROP TRIGGER trg_1;
 
46780
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46781
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46782
f_charbig = 'just inserted'
 
46783
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46784
DELETE FROM t0_aux
 
46785
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46787
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46788
'just inserted' FROM t0_template
 
46789
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46790
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
46791
BEGIN
 
46792
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46793
f_charbig = 'updated by trigger'
 
46794
      WHERE f_int1 = new.f_int1;
 
46795
END|
 
46796
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46797
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46798
        
 
46799
# check trigger-5 success:      1
 
46800
DROP TRIGGER trg_1;
 
46801
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46802
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46803
f_charbig = 'just inserted'
 
46804
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46805
DELETE FROM t0_aux
 
46806
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46807
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46808
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46809
'just inserted' FROM t0_template
 
46810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46811
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
46812
BEGIN
 
46813
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46814
f_charbig = 'updated by trigger'
 
46815
      WHERE f_int1 = - old.f_int1;
 
46816
END|
 
46817
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
46818
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46819
        
 
46820
# check trigger-6 success:      1
 
46821
DROP TRIGGER trg_1;
 
46822
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46823
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46824
f_charbig = 'just inserted'
 
46825
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46826
DELETE FROM t0_aux
 
46827
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46828
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46829
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46830
'just inserted' FROM t0_template
 
46831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46832
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
46833
BEGIN
 
46834
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46835
f_charbig = 'updated by trigger'
 
46836
      WHERE f_int1 = - old.f_int1;
 
46837
END|
 
46838
DELETE FROM t0_aux
 
46839
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46840
        
 
46841
# check trigger-7 success:      1
 
46842
DROP TRIGGER trg_1;
 
46843
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46844
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46845
f_charbig = 'just inserted'
 
46846
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46847
DELETE FROM t0_aux
 
46848
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46849
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46850
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
46851
'just inserted' FROM t0_template
 
46852
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46853
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
46854
BEGIN
 
46855
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
46856
f_charbig = 'updated by trigger'
 
46857
      WHERE f_int1 = - old.f_int1;
 
46858
END|
 
46859
DELETE FROM t0_aux
 
46860
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
46861
        
 
46862
# check trigger-8 success:      1
 
46863
DROP TRIGGER trg_1;
 
46864
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46865
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46866
f_charbig = 'just inserted'
 
46867
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
46868
DELETE FROM t0_aux
 
46869
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46870
DELETE FROM t1
 
46871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
46872
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
46873
BEGIN
 
46874
SET new.f_int1 = old.f_int1 + @max_row,
 
46875
new.f_int2 = old.f_int2 - @max_row,
 
46876
new.f_charbig = '####updated per update trigger####';
 
46877
END|
 
46878
UPDATE t1
 
46879
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
46880
f_charbig = '####updated per update statement itself####';
 
46881
        
 
46882
# check trigger-9 success:      1
 
46883
DROP TRIGGER trg_2;
 
46884
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46885
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46886
f_charbig = CONCAT('===',f_char1,'===');
 
46887
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
46888
BEGIN
 
46889
SET new.f_int1 = new.f_int1 + @max_row,
 
46890
new.f_int2 = new.f_int2 - @max_row,
 
46891
new.f_charbig = '####updated per update trigger####';
 
46892
END|
 
46893
UPDATE t1
 
46894
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
46895
f_charbig = '####updated per update statement itself####';
 
46896
        
 
46897
# check trigger-10 success:     1
 
46898
DROP TRIGGER trg_2;
 
46899
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
46900
f_int2 = CAST(f_char1 AS SIGNED INT),
 
46901
f_charbig = CONCAT('===',f_char1,'===');
 
46902
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
46903
BEGIN
 
46904
SET new.f_int1 = @my_max1 + @counter,
 
46905
new.f_int2 = @my_min2 - @counter,
 
46906
new.f_charbig = '####updated per insert trigger####';
 
46907
SET @counter = @counter + 1;
 
46908
END|
 
46909
SET @counter = 1;
 
46910
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
46911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
46912
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
46913
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
46914
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
46915
ORDER BY f_int1;
 
46916
DROP TRIGGER trg_3;
 
46917
        
 
46918
# check trigger-11 success:     1
 
46919
DELETE FROM t1
 
46920
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
46921
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
46922
AND f_charbig = '####updated per insert trigger####';
 
46923
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
46924
BEGIN
 
46925
SET new.f_int1 = @my_max1 + @counter,
 
46926
new.f_int2 = @my_min2 - @counter,
 
46927
new.f_charbig = '####updated per insert trigger####';
 
46928
SET @counter = @counter + 1;
 
46929
END|
 
46930
SET @counter = 1;
 
46931
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
46932
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
46933
SELECT CAST(f_int1 AS CHAR),
 
46934
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
46935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
46936
ORDER BY f_int1;
 
46937
DROP TRIGGER trg_3;
 
46938
        
 
46939
# check trigger-12 success:     1
 
46940
DELETE FROM t1
 
46941
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
46942
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
46943
AND f_charbig = '####updated per insert trigger####';
 
46944
ANALYZE  TABLE t1;
 
46945
Table   Op      Msg_type        Msg_text
 
46946
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
46947
CHECK    TABLE t1 EXTENDED;
 
46948
Table   Op      Msg_type        Msg_text
 
46949
test.t1 check   note    The storage engine for the table doesn't support check
 
46950
CHECKSUM TABLE t1 EXTENDED;
 
46951
Table   Checksum
 
46952
test.t1 <some_value>
 
46953
OPTIMIZE TABLE t1;
 
46954
Table   Op      Msg_type        Msg_text
 
46955
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
46956
# check layout success:    1
 
46957
REPAIR   TABLE t1 EXTENDED;
 
46958
Table   Op      Msg_type        Msg_text
 
46959
test.t1 repair  note    The storage engine for the table doesn't support repair
 
46960
# check layout success:    1
 
46961
TRUNCATE t1;
 
46962
        
 
46963
# check TRUNCATE success:       1
 
46964
# check layout success:    1
 
46965
# End usability test (inc/partition_check.inc)
 
46966
DROP TABLE t1;
 
46967
CREATE TABLE t1 (
 
46968
f_int1 INTEGER,
 
46969
f_int2 INTEGER,
 
46970
f_char1 CHAR(20),
 
46971
f_char2 CHAR(20),
 
46972
f_charbig VARCHAR(1000)
 
46973
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
46974
)
 
46975
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
46976
(PARTITION part1 VALUES IN (0)
 
46977
(SUBPARTITION sp11, SUBPARTITION sp12),
 
46978
PARTITION part2 VALUES IN (1)
 
46979
(SUBPARTITION sp21, SUBPARTITION sp22),
 
46980
PARTITION part3 VALUES IN (2)
 
46981
(SUBPARTITION sp31, SUBPARTITION sp32),
 
46982
PARTITION part4 VALUES IN (NULL)
 
46983
(SUBPARTITION sp41, SUBPARTITION sp42));
 
46984
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46985
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
46986
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
46987
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
46988
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
46989
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
46990
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
46991
# Start usability test (inc/partition_check.inc)
 
46992
create_command
 
46993
SHOW CREATE TABLE t1;
 
46994
Table   Create Table
 
46995
t1      CREATE TABLE `t1` (
 
46996
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
46997
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
46998
  `f_char1` char(20) DEFAULT NULL,
 
46999
  `f_char2` char(20) DEFAULT NULL,
 
47000
  `f_charbig` varchar(1000) DEFAULT NULL
 
47001
) ENGINE=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
47002
 
 
47003
# check prerequisites-1 success:    1
 
47004
# check COUNT(*) success:    1
 
47005
# check MIN/MAX(f_int1) success:    1
 
47006
# check MIN/MAX(f_int2) success:    1
 
47007
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47008
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
47009
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
47010
WHERE f_int1 IN (2,3);
 
47011
# check prerequisites-3 success:    1
 
47012
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
47013
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
47014
# check read via f_int1 success: 1
 
47015
# check read via f_int2 success: 1
 
47016
        
 
47017
# check multiple-1 success:     1
 
47018
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
47019
        
 
47020
# check multiple-2 success:     1
 
47021
INSERT INTO t1 SELECT * FROM t0_template
 
47022
WHERE MOD(f_int1,3) = 0;
 
47023
        
 
47024
# check multiple-3 success:     1
 
47025
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
47026
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
47027
AND @max_row_div2 + @max_row_div4;
 
47028
        
 
47029
# check multiple-4 success:     1
 
47030
DELETE FROM t1
 
47031
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
47032
AND @max_row_div2 + @max_row_div4 + @max_row;
 
47033
        
 
47034
# check multiple-5 success:     1
 
47035
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
47036
INSERT INTO t1
 
47037
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
47038
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
47039
f_charbig = '#SINGLE#';
 
47040
        
 
47041
# check single-1 success:       1
 
47042
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
47043
INSERT INTO t1
 
47044
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
47045
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
47046
f_charbig = '#SINGLE#';
 
47047
        
 
47048
# check single-2 success:       1
 
47049
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
47050
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
47051
UPDATE t1 SET f_int1 = @cur_value2
 
47052
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
47053
        
 
47054
# check single-3 success:       1
 
47055
SET @cur_value1= -1;
 
47056
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
47057
UPDATE t1 SET f_int1 = @cur_value1
 
47058
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
47059
        
 
47060
# check single-4 success:       1
 
47061
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
47062
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
47063
        
 
47064
# check single-5 success:       1
 
47065
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
47066
        
 
47067
# check single-6 success:       1
 
47068
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
47069
        
 
47070
# check single-7 success:       1
 
47071
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
47072
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
47073
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
47074
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
47075
f_charbig = '#NULL#';
 
47076
INSERT INTO t1
 
47077
SET f_int1 = NULL , f_int2 = -@max_row,
 
47078
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
47079
f_charbig = '#NULL#';
 
47080
ERROR 23000: Column 'f_int1' cannot be null
 
47081
# check null success:    1
 
47082
DELETE FROM t1
 
47083
WHERE f_int1 = 0 AND f_int2 = 0
 
47084
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
47085
AND f_charbig = '#NULL#';
 
47086
SET AUTOCOMMIT= 0;
 
47087
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47088
SELECT f_int1, f_int1, '', '', 'was inserted'
 
47089
FROM t0_template source_tab
 
47090
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47091
        
 
47092
# check transactions-1 success:         1
 
47093
COMMIT WORK;
 
47094
        
 
47095
# check transactions-2 success:         1
 
47096
ROLLBACK WORK;
 
47097
        
 
47098
# check transactions-3 success:         1
 
47099
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47100
COMMIT WORK;
 
47101
ROLLBACK WORK;
 
47102
        
 
47103
# check transactions-4 success:         1
 
47104
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47105
SELECT f_int1, f_int1, '', '', 'was inserted'
 
47106
FROM t0_template source_tab
 
47107
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47108
        
 
47109
# check transactions-5 success:         1
 
47110
ROLLBACK WORK;
 
47111
        
 
47112
# check transactions-6 success:         1
 
47113
# INFO: Storage engine used for t1 seems to be transactional.
 
47114
COMMIT;
 
47115
        
 
47116
# check transactions-7 success:         1
 
47117
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47118
COMMIT WORK;
 
47119
SET @@session.sql_mode = 'traditional';
 
47120
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
47121
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47122
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
47123
'', '', 'was inserted' FROM t0_template
 
47124
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47125
ERROR 22012: Division by 0
 
47126
COMMIT;
 
47127
        
 
47128
# check transactions-8 success:         1
 
47129
# INFO: Storage engine used for t1 seems to be able to revert
 
47130
#       changes made by the failing statement.
 
47131
SET @@session.sql_mode = '';
 
47132
SET AUTOCOMMIT= 1;
 
47133
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47134
COMMIT WORK;
 
47135
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
47136
        
 
47137
# check special-1 success:      1
 
47138
UPDATE t1 SET f_charbig = '';
 
47139
        
 
47140
# check special-2 success:      1
 
47141
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
47142
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47143
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
47144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47146
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47147
'just inserted' FROM t0_template
 
47148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47149
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
47150
BEGIN
 
47151
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47152
f_charbig = 'updated by trigger'
 
47153
      WHERE f_int1 = new.f_int1;
 
47154
END|
 
47155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47156
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
47157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47158
        
 
47159
# check trigger-1 success:      1
 
47160
DROP TRIGGER trg_1;
 
47161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47163
f_charbig = 'just inserted'
 
47164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47165
DELETE FROM t0_aux
 
47166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47169
'just inserted' FROM t0_template
 
47170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47171
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
47172
BEGIN
 
47173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47174
f_charbig = 'updated by trigger'
 
47175
      WHERE f_int1 = new.f_int1;
 
47176
END|
 
47177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47178
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
47179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47180
        
 
47181
# check trigger-2 success:      1
 
47182
DROP TRIGGER trg_1;
 
47183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47185
f_charbig = 'just inserted'
 
47186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47187
DELETE FROM t0_aux
 
47188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47191
'just inserted' FROM t0_template
 
47192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47193
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
47194
BEGIN
 
47195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47196
f_charbig = 'updated by trigger'
 
47197
      WHERE f_int1 = new.f_int1;
 
47198
END|
 
47199
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47201
        
 
47202
# check trigger-3 success:      1
 
47203
DROP TRIGGER trg_1;
 
47204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47206
f_charbig = 'just inserted'
 
47207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47208
DELETE FROM t0_aux
 
47209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47211
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47212
'just inserted' FROM t0_template
 
47213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47214
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
47215
BEGIN
 
47216
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47217
f_charbig = 'updated by trigger'
 
47218
      WHERE f_int1 = - old.f_int1;
 
47219
END|
 
47220
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47221
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47222
        
 
47223
# check trigger-4 success:      1
 
47224
DROP TRIGGER trg_1;
 
47225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47227
f_charbig = 'just inserted'
 
47228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47229
DELETE FROM t0_aux
 
47230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47233
'just inserted' FROM t0_template
 
47234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47235
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
47236
BEGIN
 
47237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47238
f_charbig = 'updated by trigger'
 
47239
      WHERE f_int1 = new.f_int1;
 
47240
END|
 
47241
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47242
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47243
        
 
47244
# check trigger-5 success:      1
 
47245
DROP TRIGGER trg_1;
 
47246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47248
f_charbig = 'just inserted'
 
47249
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47250
DELETE FROM t0_aux
 
47251
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47252
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47253
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47254
'just inserted' FROM t0_template
 
47255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47256
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
47257
BEGIN
 
47258
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47259
f_charbig = 'updated by trigger'
 
47260
      WHERE f_int1 = - old.f_int1;
 
47261
END|
 
47262
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47263
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47264
        
 
47265
# check trigger-6 success:      1
 
47266
DROP TRIGGER trg_1;
 
47267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47269
f_charbig = 'just inserted'
 
47270
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47271
DELETE FROM t0_aux
 
47272
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47273
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47274
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47275
'just inserted' FROM t0_template
 
47276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47277
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
47278
BEGIN
 
47279
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47280
f_charbig = 'updated by trigger'
 
47281
      WHERE f_int1 = - old.f_int1;
 
47282
END|
 
47283
DELETE FROM t0_aux
 
47284
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47285
        
 
47286
# check trigger-7 success:      1
 
47287
DROP TRIGGER trg_1;
 
47288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47290
f_charbig = 'just inserted'
 
47291
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47292
DELETE FROM t0_aux
 
47293
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47294
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47295
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47296
'just inserted' FROM t0_template
 
47297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47298
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
47299
BEGIN
 
47300
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47301
f_charbig = 'updated by trigger'
 
47302
      WHERE f_int1 = - old.f_int1;
 
47303
END|
 
47304
DELETE FROM t0_aux
 
47305
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47306
        
 
47307
# check trigger-8 success:      1
 
47308
DROP TRIGGER trg_1;
 
47309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47311
f_charbig = 'just inserted'
 
47312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47313
DELETE FROM t0_aux
 
47314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47315
DELETE FROM t1
 
47316
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47317
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
47318
BEGIN
 
47319
SET new.f_int1 = old.f_int1 + @max_row,
 
47320
new.f_int2 = old.f_int2 - @max_row,
 
47321
new.f_charbig = '####updated per update trigger####';
 
47322
END|
 
47323
UPDATE t1
 
47324
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
47325
f_charbig = '####updated per update statement itself####';
 
47326
        
 
47327
# check trigger-9 success:      1
 
47328
DROP TRIGGER trg_2;
 
47329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47331
f_charbig = CONCAT('===',f_char1,'===');
 
47332
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
47333
BEGIN
 
47334
SET new.f_int1 = new.f_int1 + @max_row,
 
47335
new.f_int2 = new.f_int2 - @max_row,
 
47336
new.f_charbig = '####updated per update trigger####';
 
47337
END|
 
47338
UPDATE t1
 
47339
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
47340
f_charbig = '####updated per update statement itself####';
 
47341
        
 
47342
# check trigger-10 success:     1
 
47343
DROP TRIGGER trg_2;
 
47344
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47345
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47346
f_charbig = CONCAT('===',f_char1,'===');
 
47347
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
47348
BEGIN
 
47349
SET new.f_int1 = @my_max1 + @counter,
 
47350
new.f_int2 = @my_min2 - @counter,
 
47351
new.f_charbig = '####updated per insert trigger####';
 
47352
SET @counter = @counter + 1;
 
47353
END|
 
47354
SET @counter = 1;
 
47355
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
47356
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47357
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
47358
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
47359
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
47360
ORDER BY f_int1;
 
47361
DROP TRIGGER trg_3;
 
47362
        
 
47363
# check trigger-11 success:     1
 
47364
DELETE FROM t1
 
47365
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
47366
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
47367
AND f_charbig = '####updated per insert trigger####';
 
47368
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
47369
BEGIN
 
47370
SET new.f_int1 = @my_max1 + @counter,
 
47371
new.f_int2 = @my_min2 - @counter,
 
47372
new.f_charbig = '####updated per insert trigger####';
 
47373
SET @counter = @counter + 1;
 
47374
END|
 
47375
SET @counter = 1;
 
47376
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
47377
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
47378
SELECT CAST(f_int1 AS CHAR),
 
47379
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
47380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
47381
ORDER BY f_int1;
 
47382
DROP TRIGGER trg_3;
 
47383
        
 
47384
# check trigger-12 success:     1
 
47385
DELETE FROM t1
 
47386
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
47387
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
47388
AND f_charbig = '####updated per insert trigger####';
 
47389
ANALYZE  TABLE t1;
 
47390
Table   Op      Msg_type        Msg_text
 
47391
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
47392
CHECK    TABLE t1 EXTENDED;
 
47393
Table   Op      Msg_type        Msg_text
 
47394
test.t1 check   note    The storage engine for the table doesn't support check
 
47395
CHECKSUM TABLE t1 EXTENDED;
 
47396
Table   Checksum
 
47397
test.t1 <some_value>
 
47398
OPTIMIZE TABLE t1;
 
47399
Table   Op      Msg_type        Msg_text
 
47400
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
47401
# check layout success:    1
 
47402
REPAIR   TABLE t1 EXTENDED;
 
47403
Table   Op      Msg_type        Msg_text
 
47404
test.t1 repair  note    The storage engine for the table doesn't support repair
 
47405
# check layout success:    1
 
47406
TRUNCATE t1;
 
47407
        
 
47408
# check TRUNCATE success:       1
 
47409
# check layout success:    1
 
47410
# End usability test (inc/partition_check.inc)
 
47411
DROP TABLE t1;
 
47412
CREATE TABLE t1 (
 
47413
f_int1 INTEGER,
 
47414
f_int2 INTEGER,
 
47415
f_char1 CHAR(20),
 
47416
f_char2 CHAR(20),
 
47417
f_charbig VARCHAR(1000)
 
47418
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
47419
)
 
47420
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
47421
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
47422
(PARTITION part1 VALUES IN (0),
 
47423
 PARTITION part2 VALUES IN (1),
 
47424
 PARTITION part3 VALUES IN (NULL));
 
47425
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47426
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
47427
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
47428
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
47429
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47430
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
47431
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
47432
# Start usability test (inc/partition_check.inc)
 
47433
create_command
 
47434
SHOW CREATE TABLE t1;
 
47435
Table   Create Table
 
47436
t1      CREATE TABLE `t1` (
 
47437
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
47438
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
47439
  `f_char1` char(20) DEFAULT NULL,
 
47440
  `f_char2` char(20) DEFAULT NULL,
 
47441
  `f_charbig` varchar(1000) DEFAULT NULL
 
47442
) ENGINE=InnoDB 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 = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
47443
 
 
47444
# check prerequisites-1 success:    1
 
47445
# check COUNT(*) success:    1
 
47446
# check MIN/MAX(f_int1) success:    1
 
47447
# check MIN/MAX(f_int2) success:    1
 
47448
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47449
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
47450
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
47451
WHERE f_int1 IN (2,3);
 
47452
# check prerequisites-3 success:    1
 
47453
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
47454
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
47455
# check read via f_int1 success: 1
 
47456
# check read via f_int2 success: 1
 
47457
        
 
47458
# check multiple-1 success:     1
 
47459
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
47460
        
 
47461
# check multiple-2 success:     1
 
47462
INSERT INTO t1 SELECT * FROM t0_template
 
47463
WHERE MOD(f_int1,3) = 0;
 
47464
        
 
47465
# check multiple-3 success:     1
 
47466
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
47467
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
47468
AND @max_row_div2 + @max_row_div4;
 
47469
        
 
47470
# check multiple-4 success:     1
 
47471
DELETE FROM t1
 
47472
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
47473
AND @max_row_div2 + @max_row_div4 + @max_row;
 
47474
        
 
47475
# check multiple-5 success:     1
 
47476
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
47477
INSERT INTO t1
 
47478
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
47479
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
47480
f_charbig = '#SINGLE#';
 
47481
        
 
47482
# check single-1 success:       1
 
47483
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
47484
INSERT INTO t1
 
47485
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
47486
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
47487
f_charbig = '#SINGLE#';
 
47488
        
 
47489
# check single-2 success:       1
 
47490
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
47491
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
47492
UPDATE t1 SET f_int1 = @cur_value2
 
47493
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
47494
        
 
47495
# check single-3 success:       1
 
47496
SET @cur_value1= -1;
 
47497
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
47498
UPDATE t1 SET f_int1 = @cur_value1
 
47499
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
47500
        
 
47501
# check single-4 success:       1
 
47502
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
47503
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
47504
        
 
47505
# check single-5 success:       1
 
47506
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
47507
        
 
47508
# check single-6 success:       1
 
47509
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
47510
        
 
47511
# check single-7 success:       1
 
47512
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
47513
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
47514
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
47515
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
47516
f_charbig = '#NULL#';
 
47517
INSERT INTO t1
 
47518
SET f_int1 = NULL , f_int2 = -@max_row,
 
47519
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
47520
f_charbig = '#NULL#';
 
47521
ERROR 23000: Column 'f_int1' cannot be null
 
47522
# check null success:    1
 
47523
DELETE FROM t1
 
47524
WHERE f_int1 = 0 AND f_int2 = 0
 
47525
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
47526
AND f_charbig = '#NULL#';
 
47527
SET AUTOCOMMIT= 0;
 
47528
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47529
SELECT f_int1, f_int1, '', '', 'was inserted'
 
47530
FROM t0_template source_tab
 
47531
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47532
        
 
47533
# check transactions-1 success:         1
 
47534
COMMIT WORK;
 
47535
        
 
47536
# check transactions-2 success:         1
 
47537
ROLLBACK WORK;
 
47538
        
 
47539
# check transactions-3 success:         1
 
47540
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47541
COMMIT WORK;
 
47542
ROLLBACK WORK;
 
47543
        
 
47544
# check transactions-4 success:         1
 
47545
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47546
SELECT f_int1, f_int1, '', '', 'was inserted'
 
47547
FROM t0_template source_tab
 
47548
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47549
        
 
47550
# check transactions-5 success:         1
 
47551
ROLLBACK WORK;
 
47552
        
 
47553
# check transactions-6 success:         1
 
47554
# INFO: Storage engine used for t1 seems to be transactional.
 
47555
COMMIT;
 
47556
        
 
47557
# check transactions-7 success:         1
 
47558
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47559
COMMIT WORK;
 
47560
SET @@session.sql_mode = 'traditional';
 
47561
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
47562
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47563
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
47564
'', '', 'was inserted' FROM t0_template
 
47565
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47566
ERROR 22012: Division by 0
 
47567
COMMIT;
 
47568
        
 
47569
# check transactions-8 success:         1
 
47570
# INFO: Storage engine used for t1 seems to be able to revert
 
47571
#       changes made by the failing statement.
 
47572
SET @@session.sql_mode = '';
 
47573
SET AUTOCOMMIT= 1;
 
47574
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47575
COMMIT WORK;
 
47576
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
47577
        
 
47578
# check special-1 success:      1
 
47579
UPDATE t1 SET f_charbig = '';
 
47580
        
 
47581
# check special-2 success:      1
 
47582
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
47583
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47584
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
47585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47587
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47588
'just inserted' FROM t0_template
 
47589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47590
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
47591
BEGIN
 
47592
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47593
f_charbig = 'updated by trigger'
 
47594
      WHERE f_int1 = new.f_int1;
 
47595
END|
 
47596
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47597
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
47598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47599
        
 
47600
# check trigger-1 success:      1
 
47601
DROP TRIGGER trg_1;
 
47602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47604
f_charbig = 'just inserted'
 
47605
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47606
DELETE FROM t0_aux
 
47607
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47608
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47609
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47610
'just inserted' FROM t0_template
 
47611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47612
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
47613
BEGIN
 
47614
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47615
f_charbig = 'updated by trigger'
 
47616
      WHERE f_int1 = new.f_int1;
 
47617
END|
 
47618
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47619
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
47620
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47621
        
 
47622
# check trigger-2 success:      1
 
47623
DROP TRIGGER trg_1;
 
47624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47626
f_charbig = 'just inserted'
 
47627
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47628
DELETE FROM t0_aux
 
47629
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47630
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47631
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47632
'just inserted' FROM t0_template
 
47633
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47634
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
47635
BEGIN
 
47636
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47637
f_charbig = 'updated by trigger'
 
47638
      WHERE f_int1 = new.f_int1;
 
47639
END|
 
47640
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47641
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47642
        
 
47643
# check trigger-3 success:      1
 
47644
DROP TRIGGER trg_1;
 
47645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47647
f_charbig = 'just inserted'
 
47648
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47649
DELETE FROM t0_aux
 
47650
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47651
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47652
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47653
'just inserted' FROM t0_template
 
47654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47655
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
47656
BEGIN
 
47657
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47658
f_charbig = 'updated by trigger'
 
47659
      WHERE f_int1 = - old.f_int1;
 
47660
END|
 
47661
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47662
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47663
        
 
47664
# check trigger-4 success:      1
 
47665
DROP TRIGGER trg_1;
 
47666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47668
f_charbig = 'just inserted'
 
47669
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47670
DELETE FROM t0_aux
 
47671
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47674
'just inserted' FROM t0_template
 
47675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47676
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
47677
BEGIN
 
47678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47679
f_charbig = 'updated by trigger'
 
47680
      WHERE f_int1 = new.f_int1;
 
47681
END|
 
47682
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47683
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47684
        
 
47685
# check trigger-5 success:      1
 
47686
DROP TRIGGER trg_1;
 
47687
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47688
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47689
f_charbig = 'just inserted'
 
47690
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47691
DELETE FROM t0_aux
 
47692
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47693
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47694
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47695
'just inserted' FROM t0_template
 
47696
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47697
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
47698
BEGIN
 
47699
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47700
f_charbig = 'updated by trigger'
 
47701
      WHERE f_int1 = - old.f_int1;
 
47702
END|
 
47703
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
47704
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47705
        
 
47706
# check trigger-6 success:      1
 
47707
DROP TRIGGER trg_1;
 
47708
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47709
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47710
f_charbig = 'just inserted'
 
47711
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47712
DELETE FROM t0_aux
 
47713
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47714
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47715
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47716
'just inserted' FROM t0_template
 
47717
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47718
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
47719
BEGIN
 
47720
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47721
f_charbig = 'updated by trigger'
 
47722
      WHERE f_int1 = - old.f_int1;
 
47723
END|
 
47724
DELETE FROM t0_aux
 
47725
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47726
        
 
47727
# check trigger-7 success:      1
 
47728
DROP TRIGGER trg_1;
 
47729
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47730
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47731
f_charbig = 'just inserted'
 
47732
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47733
DELETE FROM t0_aux
 
47734
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47735
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47736
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
47737
'just inserted' FROM t0_template
 
47738
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47739
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
47740
BEGIN
 
47741
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
47742
f_charbig = 'updated by trigger'
 
47743
      WHERE f_int1 = - old.f_int1;
 
47744
END|
 
47745
DELETE FROM t0_aux
 
47746
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
47747
        
 
47748
# check trigger-8 success:      1
 
47749
DROP TRIGGER trg_1;
 
47750
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47751
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47752
f_charbig = 'just inserted'
 
47753
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
47754
DELETE FROM t0_aux
 
47755
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47756
DELETE FROM t1
 
47757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
47758
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
47759
BEGIN
 
47760
SET new.f_int1 = old.f_int1 + @max_row,
 
47761
new.f_int2 = old.f_int2 - @max_row,
 
47762
new.f_charbig = '####updated per update trigger####';
 
47763
END|
 
47764
UPDATE t1
 
47765
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
47766
f_charbig = '####updated per update statement itself####';
 
47767
        
 
47768
# check trigger-9 success:      1
 
47769
DROP TRIGGER trg_2;
 
47770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47772
f_charbig = CONCAT('===',f_char1,'===');
 
47773
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
47774
BEGIN
 
47775
SET new.f_int1 = new.f_int1 + @max_row,
 
47776
new.f_int2 = new.f_int2 - @max_row,
 
47777
new.f_charbig = '####updated per update trigger####';
 
47778
END|
 
47779
UPDATE t1
 
47780
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
47781
f_charbig = '####updated per update statement itself####';
 
47782
        
 
47783
# check trigger-10 success:     1
 
47784
DROP TRIGGER trg_2;
 
47785
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
47786
f_int2 = CAST(f_char1 AS SIGNED INT),
 
47787
f_charbig = CONCAT('===',f_char1,'===');
 
47788
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
47789
BEGIN
 
47790
SET new.f_int1 = @my_max1 + @counter,
 
47791
new.f_int2 = @my_min2 - @counter,
 
47792
new.f_charbig = '####updated per insert trigger####';
 
47793
SET @counter = @counter + 1;
 
47794
END|
 
47795
SET @counter = 1;
 
47796
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
47797
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47798
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
47799
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
47800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
47801
ORDER BY f_int1;
 
47802
DROP TRIGGER trg_3;
 
47803
        
 
47804
# check trigger-11 success:     1
 
47805
DELETE FROM t1
 
47806
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
47807
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
47808
AND f_charbig = '####updated per insert trigger####';
 
47809
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
47810
BEGIN
 
47811
SET new.f_int1 = @my_max1 + @counter,
 
47812
new.f_int2 = @my_min2 - @counter,
 
47813
new.f_charbig = '####updated per insert trigger####';
 
47814
SET @counter = @counter + 1;
 
47815
END|
 
47816
SET @counter = 1;
 
47817
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
47818
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
47819
SELECT CAST(f_int1 AS CHAR),
 
47820
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
47821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
47822
ORDER BY f_int1;
 
47823
DROP TRIGGER trg_3;
 
47824
        
 
47825
# check trigger-12 success:     1
 
47826
DELETE FROM t1
 
47827
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
47828
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
47829
AND f_charbig = '####updated per insert trigger####';
 
47830
ANALYZE  TABLE t1;
 
47831
Table   Op      Msg_type        Msg_text
 
47832
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
47833
CHECK    TABLE t1 EXTENDED;
 
47834
Table   Op      Msg_type        Msg_text
 
47835
test.t1 check   note    The storage engine for the table doesn't support check
 
47836
CHECKSUM TABLE t1 EXTENDED;
 
47837
Table   Checksum
 
47838
test.t1 <some_value>
 
47839
OPTIMIZE TABLE t1;
 
47840
Table   Op      Msg_type        Msg_text
 
47841
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
47842
# check layout success:    1
 
47843
REPAIR   TABLE t1 EXTENDED;
 
47844
Table   Op      Msg_type        Msg_text
 
47845
test.t1 repair  note    The storage engine for the table doesn't support repair
 
47846
# check layout success:    1
 
47847
TRUNCATE t1;
 
47848
        
 
47849
# check TRUNCATE success:       1
 
47850
# check layout success:    1
 
47851
# End usability test (inc/partition_check.inc)
 
47852
DROP TABLE t1;
 
47853
DROP TABLE IF EXISTS t1;
 
47854
CREATE TABLE t1 (
 
47855
f_int1 INTEGER,
 
47856
f_int2 INTEGER,
 
47857
f_char1 CHAR(20),
 
47858
f_char2 CHAR(20),
 
47859
f_charbig VARCHAR(1000)
 
47860
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
47861
)
 
47862
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
47863
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47864
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
47865
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
47866
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
47867
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
47868
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
47869
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
47870
# Start usability test (inc/partition_check.inc)
 
47871
create_command
 
47872
SHOW CREATE TABLE t1;
 
47873
Table   Create Table
 
47874
t1      CREATE TABLE `t1` (
 
47875
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
47876
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
47877
  `f_char1` char(20) DEFAULT NULL,
 
47878
  `f_char2` char(20) DEFAULT NULL,
 
47879
  `f_charbig` varchar(1000) DEFAULT NULL
 
47880
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
47881
 
 
47882
# check prerequisites-1 success:    1
 
47883
# check COUNT(*) success:    1
 
47884
# check MIN/MAX(f_int1) success:    1
 
47885
# check MIN/MAX(f_int2) success:    1
 
47886
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47887
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
47888
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
47889
WHERE f_int1 IN (2,3);
 
47890
# check prerequisites-3 success:    1
 
47891
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
47892
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
47893
# check read via f_int1 success: 1
 
47894
# check read via f_int2 success: 1
 
47895
        
 
47896
# check multiple-1 success:     1
 
47897
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
47898
        
 
47899
# check multiple-2 success:     1
 
47900
INSERT INTO t1 SELECT * FROM t0_template
 
47901
WHERE MOD(f_int1,3) = 0;
 
47902
        
 
47903
# check multiple-3 success:     1
 
47904
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
47905
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
47906
AND @max_row_div2 + @max_row_div4;
 
47907
        
 
47908
# check multiple-4 success:     1
 
47909
DELETE FROM t1
 
47910
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
47911
AND @max_row_div2 + @max_row_div4 + @max_row;
 
47912
        
 
47913
# check multiple-5 success:     1
 
47914
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
47915
INSERT INTO t1
 
47916
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
47917
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
47918
f_charbig = '#SINGLE#';
 
47919
        
 
47920
# check single-1 success:       1
 
47921
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
47922
INSERT INTO t1
 
47923
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
47924
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
47925
f_charbig = '#SINGLE#';
 
47926
        
 
47927
# check single-2 success:       1
 
47928
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
47929
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
47930
UPDATE t1 SET f_int1 = @cur_value2
 
47931
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
47932
        
 
47933
# check single-3 success:       1
 
47934
SET @cur_value1= -1;
 
47935
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
47936
UPDATE t1 SET f_int1 = @cur_value1
 
47937
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
47938
        
 
47939
# check single-4 success:       1
 
47940
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
47941
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
47942
        
 
47943
# check single-5 success:       1
 
47944
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
47945
        
 
47946
# check single-6 success:       1
 
47947
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
47948
        
 
47949
# check single-7 success:       1
 
47950
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
47951
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
47952
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
47953
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
47954
f_charbig = '#NULL#';
 
47955
INSERT INTO t1
 
47956
SET f_int1 = NULL , f_int2 = -@max_row,
 
47957
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
47958
f_charbig = '#NULL#';
 
47959
ERROR 23000: Column 'f_int1' cannot be null
 
47960
# check null success:    1
 
47961
DELETE FROM t1
 
47962
WHERE f_int1 = 0 AND f_int2 = 0
 
47963
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
47964
AND f_charbig = '#NULL#';
 
47965
SET AUTOCOMMIT= 0;
 
47966
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47967
SELECT f_int1, f_int1, '', '', 'was inserted'
 
47968
FROM t0_template source_tab
 
47969
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47970
        
 
47971
# check transactions-1 success:         1
 
47972
COMMIT WORK;
 
47973
        
 
47974
# check transactions-2 success:         1
 
47975
ROLLBACK WORK;
 
47976
        
 
47977
# check transactions-3 success:         1
 
47978
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47979
COMMIT WORK;
 
47980
ROLLBACK WORK;
 
47981
        
 
47982
# check transactions-4 success:         1
 
47983
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
47984
SELECT f_int1, f_int1, '', '', 'was inserted'
 
47985
FROM t0_template source_tab
 
47986
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
47987
        
 
47988
# check transactions-5 success:         1
 
47989
ROLLBACK WORK;
 
47990
        
 
47991
# check transactions-6 success:         1
 
47992
# INFO: Storage engine used for t1 seems to be transactional.
 
47993
COMMIT;
 
47994
        
 
47995
# check transactions-7 success:         1
 
47996
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
47997
COMMIT WORK;
 
47998
SET @@session.sql_mode = 'traditional';
 
47999
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
48000
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48001
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
48002
'', '', 'was inserted' FROM t0_template
 
48003
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
48004
ERROR 22012: Division by 0
 
48005
COMMIT;
 
48006
        
 
48007
# check transactions-8 success:         1
 
48008
# INFO: Storage engine used for t1 seems to be able to revert
 
48009
#       changes made by the failing statement.
 
48010
SET @@session.sql_mode = '';
 
48011
SET AUTOCOMMIT= 1;
 
48012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
48013
COMMIT WORK;
 
48014
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
48015
        
 
48016
# check special-1 success:      1
 
48017
UPDATE t1 SET f_charbig = '';
 
48018
        
 
48019
# check special-2 success:      1
 
48020
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
48021
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48022
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
48023
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48026
'just inserted' FROM t0_template
 
48027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48028
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
48029
BEGIN
 
48030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48031
f_charbig = 'updated by trigger'
 
48032
      WHERE f_int1 = new.f_int1;
 
48033
END|
 
48034
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48035
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
48036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48037
        
 
48038
# check trigger-1 success:      1
 
48039
DROP TRIGGER trg_1;
 
48040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48042
f_charbig = 'just inserted'
 
48043
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48044
DELETE FROM t0_aux
 
48045
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48047
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48048
'just inserted' FROM t0_template
 
48049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48050
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
48051
BEGIN
 
48052
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48053
f_charbig = 'updated by trigger'
 
48054
      WHERE f_int1 = new.f_int1;
 
48055
END|
 
48056
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48057
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
48058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48059
        
 
48060
# check trigger-2 success:      1
 
48061
DROP TRIGGER trg_1;
 
48062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48064
f_charbig = 'just inserted'
 
48065
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48066
DELETE FROM t0_aux
 
48067
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48068
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48069
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48070
'just inserted' FROM t0_template
 
48071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48072
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
48073
BEGIN
 
48074
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48075
f_charbig = 'updated by trigger'
 
48076
      WHERE f_int1 = new.f_int1;
 
48077
END|
 
48078
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48079
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48080
        
 
48081
# check trigger-3 success:      1
 
48082
DROP TRIGGER trg_1;
 
48083
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48084
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48085
f_charbig = 'just inserted'
 
48086
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48087
DELETE FROM t0_aux
 
48088
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48090
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48091
'just inserted' FROM t0_template
 
48092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48093
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
48094
BEGIN
 
48095
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48096
f_charbig = 'updated by trigger'
 
48097
      WHERE f_int1 = - old.f_int1;
 
48098
END|
 
48099
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48100
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48101
        
 
48102
# check trigger-4 success:      1
 
48103
DROP TRIGGER trg_1;
 
48104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48106
f_charbig = 'just inserted'
 
48107
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48108
DELETE FROM t0_aux
 
48109
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48111
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48112
'just inserted' FROM t0_template
 
48113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48114
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
48115
BEGIN
 
48116
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48117
f_charbig = 'updated by trigger'
 
48118
      WHERE f_int1 = new.f_int1;
 
48119
END|
 
48120
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48121
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48122
        
 
48123
# check trigger-5 success:      1
 
48124
DROP TRIGGER trg_1;
 
48125
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48126
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48127
f_charbig = 'just inserted'
 
48128
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48129
DELETE FROM t0_aux
 
48130
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48131
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48132
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48133
'just inserted' FROM t0_template
 
48134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48135
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
48136
BEGIN
 
48137
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48138
f_charbig = 'updated by trigger'
 
48139
      WHERE f_int1 = - old.f_int1;
 
48140
END|
 
48141
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48142
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48143
        
 
48144
# check trigger-6 success:      1
 
48145
DROP TRIGGER trg_1;
 
48146
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48147
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48148
f_charbig = 'just inserted'
 
48149
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48150
DELETE FROM t0_aux
 
48151
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48152
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48153
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48154
'just inserted' FROM t0_template
 
48155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48156
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
48157
BEGIN
 
48158
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48159
f_charbig = 'updated by trigger'
 
48160
      WHERE f_int1 = - old.f_int1;
 
48161
END|
 
48162
DELETE FROM t0_aux
 
48163
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48164
        
 
48165
# check trigger-7 success:      1
 
48166
DROP TRIGGER trg_1;
 
48167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48169
f_charbig = 'just inserted'
 
48170
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48171
DELETE FROM t0_aux
 
48172
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48173
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48174
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48175
'just inserted' FROM t0_template
 
48176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48177
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
48178
BEGIN
 
48179
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48180
f_charbig = 'updated by trigger'
 
48181
      WHERE f_int1 = - old.f_int1;
 
48182
END|
 
48183
DELETE FROM t0_aux
 
48184
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48185
        
 
48186
# check trigger-8 success:      1
 
48187
DROP TRIGGER trg_1;
 
48188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48190
f_charbig = 'just inserted'
 
48191
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48192
DELETE FROM t0_aux
 
48193
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48194
DELETE FROM t1
 
48195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48196
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
48197
BEGIN
 
48198
SET new.f_int1 = old.f_int1 + @max_row,
 
48199
new.f_int2 = old.f_int2 - @max_row,
 
48200
new.f_charbig = '####updated per update trigger####';
 
48201
END|
 
48202
UPDATE t1
 
48203
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
48204
f_charbig = '####updated per update statement itself####';
 
48205
        
 
48206
# check trigger-9 success:      1
 
48207
DROP TRIGGER trg_2;
 
48208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48210
f_charbig = CONCAT('===',f_char1,'===');
 
48211
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
48212
BEGIN
 
48213
SET new.f_int1 = new.f_int1 + @max_row,
 
48214
new.f_int2 = new.f_int2 - @max_row,
 
48215
new.f_charbig = '####updated per update trigger####';
 
48216
END|
 
48217
UPDATE t1
 
48218
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
48219
f_charbig = '####updated per update statement itself####';
 
48220
        
 
48221
# check trigger-10 success:     1
 
48222
DROP TRIGGER trg_2;
 
48223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48225
f_charbig = CONCAT('===',f_char1,'===');
 
48226
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
48227
BEGIN
 
48228
SET new.f_int1 = @my_max1 + @counter,
 
48229
new.f_int2 = @my_min2 - @counter,
 
48230
new.f_charbig = '####updated per insert trigger####';
 
48231
SET @counter = @counter + 1;
 
48232
END|
 
48233
SET @counter = 1;
 
48234
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
48235
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48236
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
48237
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
48238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
48239
ORDER BY f_int1;
 
48240
DROP TRIGGER trg_3;
 
48241
        
 
48242
# check trigger-11 success:     1
 
48243
DELETE FROM t1
 
48244
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
48245
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
48246
AND f_charbig = '####updated per insert trigger####';
 
48247
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
48248
BEGIN
 
48249
SET new.f_int1 = @my_max1 + @counter,
 
48250
new.f_int2 = @my_min2 - @counter,
 
48251
new.f_charbig = '####updated per insert trigger####';
 
48252
SET @counter = @counter + 1;
 
48253
END|
 
48254
SET @counter = 1;
 
48255
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
48256
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
48257
SELECT CAST(f_int1 AS CHAR),
 
48258
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
48259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
48260
ORDER BY f_int1;
 
48261
DROP TRIGGER trg_3;
 
48262
        
 
48263
# check trigger-12 success:     1
 
48264
DELETE FROM t1
 
48265
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
48266
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
48267
AND f_charbig = '####updated per insert trigger####';
 
48268
ANALYZE  TABLE t1;
 
48269
Table   Op      Msg_type        Msg_text
 
48270
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
48271
CHECK    TABLE t1 EXTENDED;
 
48272
Table   Op      Msg_type        Msg_text
 
48273
test.t1 check   note    The storage engine for the table doesn't support check
 
48274
CHECKSUM TABLE t1 EXTENDED;
 
48275
Table   Checksum
 
48276
test.t1 <some_value>
 
48277
OPTIMIZE TABLE t1;
 
48278
Table   Op      Msg_type        Msg_text
 
48279
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
48280
# check layout success:    1
 
48281
REPAIR   TABLE t1 EXTENDED;
 
48282
Table   Op      Msg_type        Msg_text
 
48283
test.t1 repair  note    The storage engine for the table doesn't support repair
 
48284
# check layout success:    1
 
48285
TRUNCATE t1;
 
48286
        
 
48287
# check TRUNCATE success:       1
 
48288
# check layout success:    1
 
48289
# End usability test (inc/partition_check.inc)
 
48290
DROP TABLE t1;
 
48291
CREATE TABLE t1 (
 
48292
f_int1 INTEGER,
 
48293
f_int2 INTEGER,
 
48294
f_char1 CHAR(20),
 
48295
f_char2 CHAR(20),
 
48296
f_charbig VARCHAR(1000)
 
48297
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
48298
)
 
48299
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
48300
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48301
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
48302
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
48303
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
48304
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48305
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
48306
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
48307
# Start usability test (inc/partition_check.inc)
 
48308
create_command
 
48309
SHOW CREATE TABLE t1;
 
48310
Table   Create Table
 
48311
t1      CREATE TABLE `t1` (
 
48312
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
48313
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
48314
  `f_char1` char(20) DEFAULT NULL,
 
48315
  `f_char2` char(20) DEFAULT NULL,
 
48316
  `f_charbig` varchar(1000) DEFAULT NULL
 
48317
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
48318
 
 
48319
# check prerequisites-1 success:    1
 
48320
# check COUNT(*) success:    1
 
48321
# check MIN/MAX(f_int1) success:    1
 
48322
# check MIN/MAX(f_int2) success:    1
 
48323
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48324
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
48325
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
48326
WHERE f_int1 IN (2,3);
 
48327
# check prerequisites-3 success:    1
 
48328
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
48329
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
48330
# check read via f_int1 success: 1
 
48331
# check read via f_int2 success: 1
 
48332
        
 
48333
# check multiple-1 success:     1
 
48334
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
48335
        
 
48336
# check multiple-2 success:     1
 
48337
INSERT INTO t1 SELECT * FROM t0_template
 
48338
WHERE MOD(f_int1,3) = 0;
 
48339
        
 
48340
# check multiple-3 success:     1
 
48341
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
48342
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
48343
AND @max_row_div2 + @max_row_div4;
 
48344
        
 
48345
# check multiple-4 success:     1
 
48346
DELETE FROM t1
 
48347
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
48348
AND @max_row_div2 + @max_row_div4 + @max_row;
 
48349
        
 
48350
# check multiple-5 success:     1
 
48351
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
48352
INSERT INTO t1
 
48353
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
48354
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
48355
f_charbig = '#SINGLE#';
 
48356
        
 
48357
# check single-1 success:       1
 
48358
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
48359
INSERT INTO t1
 
48360
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
48361
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
48362
f_charbig = '#SINGLE#';
 
48363
        
 
48364
# check single-2 success:       1
 
48365
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
48366
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
48367
UPDATE t1 SET f_int1 = @cur_value2
 
48368
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
48369
        
 
48370
# check single-3 success:       1
 
48371
SET @cur_value1= -1;
 
48372
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
48373
UPDATE t1 SET f_int1 = @cur_value1
 
48374
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
48375
        
 
48376
# check single-4 success:       1
 
48377
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
48378
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
48379
        
 
48380
# check single-5 success:       1
 
48381
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
48382
        
 
48383
# check single-6 success:       1
 
48384
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
48385
        
 
48386
# check single-7 success:       1
 
48387
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
48388
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
48389
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
48390
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
48391
f_charbig = '#NULL#';
 
48392
INSERT INTO t1
 
48393
SET f_int1 = NULL , f_int2 = -@max_row,
 
48394
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
48395
f_charbig = '#NULL#';
 
48396
ERROR 23000: Column 'f_int1' cannot be null
 
48397
# check null success:    1
 
48398
DELETE FROM t1
 
48399
WHERE f_int1 = 0 AND f_int2 = 0
 
48400
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
48401
AND f_charbig = '#NULL#';
 
48402
SET AUTOCOMMIT= 0;
 
48403
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48404
SELECT f_int1, f_int1, '', '', 'was inserted'
 
48405
FROM t0_template source_tab
 
48406
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
48407
        
 
48408
# check transactions-1 success:         1
 
48409
COMMIT WORK;
 
48410
        
 
48411
# check transactions-2 success:         1
 
48412
ROLLBACK WORK;
 
48413
        
 
48414
# check transactions-3 success:         1
 
48415
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
48416
COMMIT WORK;
 
48417
ROLLBACK WORK;
 
48418
        
 
48419
# check transactions-4 success:         1
 
48420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48421
SELECT f_int1, f_int1, '', '', 'was inserted'
 
48422
FROM t0_template source_tab
 
48423
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
48424
        
 
48425
# check transactions-5 success:         1
 
48426
ROLLBACK WORK;
 
48427
        
 
48428
# check transactions-6 success:         1
 
48429
# INFO: Storage engine used for t1 seems to be transactional.
 
48430
COMMIT;
 
48431
        
 
48432
# check transactions-7 success:         1
 
48433
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
48434
COMMIT WORK;
 
48435
SET @@session.sql_mode = 'traditional';
 
48436
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
48437
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48438
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
48439
'', '', 'was inserted' FROM t0_template
 
48440
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
48441
ERROR 22012: Division by 0
 
48442
COMMIT;
 
48443
        
 
48444
# check transactions-8 success:         1
 
48445
# INFO: Storage engine used for t1 seems to be able to revert
 
48446
#       changes made by the failing statement.
 
48447
SET @@session.sql_mode = '';
 
48448
SET AUTOCOMMIT= 1;
 
48449
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
48450
COMMIT WORK;
 
48451
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
48452
        
 
48453
# check special-1 success:      1
 
48454
UPDATE t1 SET f_charbig = '';
 
48455
        
 
48456
# check special-2 success:      1
 
48457
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
48458
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48459
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
48460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48463
'just inserted' FROM t0_template
 
48464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48465
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
48466
BEGIN
 
48467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48468
f_charbig = 'updated by trigger'
 
48469
      WHERE f_int1 = new.f_int1;
 
48470
END|
 
48471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48472
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
48473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48474
        
 
48475
# check trigger-1 success:      1
 
48476
DROP TRIGGER trg_1;
 
48477
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48478
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48479
f_charbig = 'just inserted'
 
48480
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48481
DELETE FROM t0_aux
 
48482
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48483
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48484
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48485
'just inserted' FROM t0_template
 
48486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48487
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
48488
BEGIN
 
48489
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48490
f_charbig = 'updated by trigger'
 
48491
      WHERE f_int1 = new.f_int1;
 
48492
END|
 
48493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48494
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
48495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48496
        
 
48497
# check trigger-2 success:      1
 
48498
DROP TRIGGER trg_1;
 
48499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48501
f_charbig = 'just inserted'
 
48502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48503
DELETE FROM t0_aux
 
48504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48507
'just inserted' FROM t0_template
 
48508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48509
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
48510
BEGIN
 
48511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48512
f_charbig = 'updated by trigger'
 
48513
      WHERE f_int1 = new.f_int1;
 
48514
END|
 
48515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48517
        
 
48518
# check trigger-3 success:      1
 
48519
DROP TRIGGER trg_1;
 
48520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48522
f_charbig = 'just inserted'
 
48523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48524
DELETE FROM t0_aux
 
48525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48528
'just inserted' FROM t0_template
 
48529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48530
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
48531
BEGIN
 
48532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48533
f_charbig = 'updated by trigger'
 
48534
      WHERE f_int1 = - old.f_int1;
 
48535
END|
 
48536
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48538
        
 
48539
# check trigger-4 success:      1
 
48540
DROP TRIGGER trg_1;
 
48541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48543
f_charbig = 'just inserted'
 
48544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48545
DELETE FROM t0_aux
 
48546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48549
'just inserted' FROM t0_template
 
48550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48551
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
48552
BEGIN
 
48553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48554
f_charbig = 'updated by trigger'
 
48555
      WHERE f_int1 = new.f_int1;
 
48556
END|
 
48557
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48559
        
 
48560
# check trigger-5 success:      1
 
48561
DROP TRIGGER trg_1;
 
48562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48564
f_charbig = 'just inserted'
 
48565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48566
DELETE FROM t0_aux
 
48567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48570
'just inserted' FROM t0_template
 
48571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48572
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
48573
BEGIN
 
48574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48575
f_charbig = 'updated by trigger'
 
48576
      WHERE f_int1 = - old.f_int1;
 
48577
END|
 
48578
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48580
        
 
48581
# check trigger-6 success:      1
 
48582
DROP TRIGGER trg_1;
 
48583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48585
f_charbig = 'just inserted'
 
48586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48587
DELETE FROM t0_aux
 
48588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48590
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48591
'just inserted' FROM t0_template
 
48592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48593
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
48594
BEGIN
 
48595
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48596
f_charbig = 'updated by trigger'
 
48597
      WHERE f_int1 = - old.f_int1;
 
48598
END|
 
48599
DELETE FROM t0_aux
 
48600
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48601
        
 
48602
# check trigger-7 success:      1
 
48603
DROP TRIGGER trg_1;
 
48604
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48605
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48606
f_charbig = 'just inserted'
 
48607
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48608
DELETE FROM t0_aux
 
48609
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48611
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48612
'just inserted' FROM t0_template
 
48613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48614
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
48615
BEGIN
 
48616
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48617
f_charbig = 'updated by trigger'
 
48618
      WHERE f_int1 = - old.f_int1;
 
48619
END|
 
48620
DELETE FROM t0_aux
 
48621
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48622
        
 
48623
# check trigger-8 success:      1
 
48624
DROP TRIGGER trg_1;
 
48625
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48626
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48627
f_charbig = 'just inserted'
 
48628
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48629
DELETE FROM t0_aux
 
48630
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48631
DELETE FROM t1
 
48632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48633
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
48634
BEGIN
 
48635
SET new.f_int1 = old.f_int1 + @max_row,
 
48636
new.f_int2 = old.f_int2 - @max_row,
 
48637
new.f_charbig = '####updated per update trigger####';
 
48638
END|
 
48639
UPDATE t1
 
48640
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
48641
f_charbig = '####updated per update statement itself####';
 
48642
        
 
48643
# check trigger-9 success:      1
 
48644
DROP TRIGGER trg_2;
 
48645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48647
f_charbig = CONCAT('===',f_char1,'===');
 
48648
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
48649
BEGIN
 
48650
SET new.f_int1 = new.f_int1 + @max_row,
 
48651
new.f_int2 = new.f_int2 - @max_row,
 
48652
new.f_charbig = '####updated per update trigger####';
 
48653
END|
 
48654
UPDATE t1
 
48655
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
48656
f_charbig = '####updated per update statement itself####';
 
48657
        
 
48658
# check trigger-10 success:     1
 
48659
DROP TRIGGER trg_2;
 
48660
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48661
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48662
f_charbig = CONCAT('===',f_char1,'===');
 
48663
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
48664
BEGIN
 
48665
SET new.f_int1 = @my_max1 + @counter,
 
48666
new.f_int2 = @my_min2 - @counter,
 
48667
new.f_charbig = '####updated per insert trigger####';
 
48668
SET @counter = @counter + 1;
 
48669
END|
 
48670
SET @counter = 1;
 
48671
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
48672
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48673
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
48674
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
48675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
48676
ORDER BY f_int1;
 
48677
DROP TRIGGER trg_3;
 
48678
        
 
48679
# check trigger-11 success:     1
 
48680
DELETE FROM t1
 
48681
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
48682
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
48683
AND f_charbig = '####updated per insert trigger####';
 
48684
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
48685
BEGIN
 
48686
SET new.f_int1 = @my_max1 + @counter,
 
48687
new.f_int2 = @my_min2 - @counter,
 
48688
new.f_charbig = '####updated per insert trigger####';
 
48689
SET @counter = @counter + 1;
 
48690
END|
 
48691
SET @counter = 1;
 
48692
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
48693
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
48694
SELECT CAST(f_int1 AS CHAR),
 
48695
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
48696
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
48697
ORDER BY f_int1;
 
48698
DROP TRIGGER trg_3;
 
48699
        
 
48700
# check trigger-12 success:     1
 
48701
DELETE FROM t1
 
48702
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
48703
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
48704
AND f_charbig = '####updated per insert trigger####';
 
48705
ANALYZE  TABLE t1;
 
48706
Table   Op      Msg_type        Msg_text
 
48707
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
48708
CHECK    TABLE t1 EXTENDED;
 
48709
Table   Op      Msg_type        Msg_text
 
48710
test.t1 check   note    The storage engine for the table doesn't support check
 
48711
CHECKSUM TABLE t1 EXTENDED;
 
48712
Table   Checksum
 
48713
test.t1 <some_value>
 
48714
OPTIMIZE TABLE t1;
 
48715
Table   Op      Msg_type        Msg_text
 
48716
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
48717
# check layout success:    1
 
48718
REPAIR   TABLE t1 EXTENDED;
 
48719
Table   Op      Msg_type        Msg_text
 
48720
test.t1 repair  note    The storage engine for the table doesn't support repair
 
48721
# check layout success:    1
 
48722
TRUNCATE t1;
 
48723
        
 
48724
# check TRUNCATE success:       1
 
48725
# check layout success:    1
 
48726
# End usability test (inc/partition_check.inc)
 
48727
DROP TABLE t1;
 
48728
CREATE TABLE t1 (
 
48729
f_int1 INTEGER,
 
48730
f_int2 INTEGER,
 
48731
f_char1 CHAR(20),
 
48732
f_char2 CHAR(20),
 
48733
f_charbig VARCHAR(1000)
 
48734
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
48735
)
 
48736
PARTITION BY LIST(MOD(f_int1,4))
 
48737
(PARTITION part_3 VALUES IN (-3),
 
48738
PARTITION part_2 VALUES IN (-2),
 
48739
PARTITION part_1 VALUES IN (-1),
 
48740
PARTITION part_N VALUES IN (NULL),
 
48741
PARTITION part0 VALUES IN (0),
 
48742
PARTITION part1 VALUES IN (1),
 
48743
PARTITION part2 VALUES IN (2),
 
48744
PARTITION part3 VALUES IN (3));
 
48745
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48746
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
48747
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
48748
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
48749
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48750
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
48751
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
48752
# Start usability test (inc/partition_check.inc)
 
48753
create_command
 
48754
SHOW CREATE TABLE t1;
 
48755
Table   Create Table
 
48756
t1      CREATE TABLE `t1` (
 
48757
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
48758
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
48759
  `f_char1` char(20) DEFAULT NULL,
 
48760
  `f_char2` char(20) DEFAULT NULL,
 
48761
  `f_charbig` varchar(1000) DEFAULT NULL
 
48762
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
48763
 
 
48764
# check prerequisites-1 success:    1
 
48765
# check COUNT(*) success:    1
 
48766
# check MIN/MAX(f_int1) success:    1
 
48767
# check MIN/MAX(f_int2) success:    1
 
48768
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48769
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
48770
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
48771
WHERE f_int1 IN (2,3);
 
48772
# check prerequisites-3 success:    1
 
48773
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
48774
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
48775
# check read via f_int1 success: 1
 
48776
# check read via f_int2 success: 1
 
48777
        
 
48778
# check multiple-1 success:     1
 
48779
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
48780
        
 
48781
# check multiple-2 success:     1
 
48782
INSERT INTO t1 SELECT * FROM t0_template
 
48783
WHERE MOD(f_int1,3) = 0;
 
48784
        
 
48785
# check multiple-3 success:     1
 
48786
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
48787
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
48788
AND @max_row_div2 + @max_row_div4;
 
48789
        
 
48790
# check multiple-4 success:     1
 
48791
DELETE FROM t1
 
48792
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
48793
AND @max_row_div2 + @max_row_div4 + @max_row;
 
48794
        
 
48795
# check multiple-5 success:     1
 
48796
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
48797
INSERT INTO t1
 
48798
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
48799
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
48800
f_charbig = '#SINGLE#';
 
48801
        
 
48802
# check single-1 success:       1
 
48803
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
48804
INSERT INTO t1
 
48805
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
48806
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
48807
f_charbig = '#SINGLE#';
 
48808
        
 
48809
# check single-2 success:       1
 
48810
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
48811
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
48812
UPDATE t1 SET f_int1 = @cur_value2
 
48813
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
48814
        
 
48815
# check single-3 success:       1
 
48816
SET @cur_value1= -1;
 
48817
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
48818
UPDATE t1 SET f_int1 = @cur_value1
 
48819
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
48820
        
 
48821
# check single-4 success:       1
 
48822
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
48823
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
48824
        
 
48825
# check single-5 success:       1
 
48826
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
48827
        
 
48828
# check single-6 success:       1
 
48829
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
48830
        
 
48831
# check single-7 success:       1
 
48832
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
48833
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
48834
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
48835
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
48836
f_charbig = '#NULL#';
 
48837
INSERT INTO t1
 
48838
SET f_int1 = NULL , f_int2 = -@max_row,
 
48839
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
48840
f_charbig = '#NULL#';
 
48841
ERROR 23000: Column 'f_int1' cannot be null
 
48842
# check null success:    1
 
48843
DELETE FROM t1
 
48844
WHERE f_int1 = 0 AND f_int2 = 0
 
48845
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
48846
AND f_charbig = '#NULL#';
 
48847
SET AUTOCOMMIT= 0;
 
48848
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48849
SELECT f_int1, f_int1, '', '', 'was inserted'
 
48850
FROM t0_template source_tab
 
48851
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
48852
        
 
48853
# check transactions-1 success:         1
 
48854
COMMIT WORK;
 
48855
        
 
48856
# check transactions-2 success:         1
 
48857
ROLLBACK WORK;
 
48858
        
 
48859
# check transactions-3 success:         1
 
48860
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
48861
COMMIT WORK;
 
48862
ROLLBACK WORK;
 
48863
        
 
48864
# check transactions-4 success:         1
 
48865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48866
SELECT f_int1, f_int1, '', '', 'was inserted'
 
48867
FROM t0_template source_tab
 
48868
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
48869
        
 
48870
# check transactions-5 success:         1
 
48871
ROLLBACK WORK;
 
48872
        
 
48873
# check transactions-6 success:         1
 
48874
# INFO: Storage engine used for t1 seems to be transactional.
 
48875
COMMIT;
 
48876
        
 
48877
# check transactions-7 success:         1
 
48878
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
48879
COMMIT WORK;
 
48880
SET @@session.sql_mode = 'traditional';
 
48881
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
48882
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
48883
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
48884
'', '', 'was inserted' FROM t0_template
 
48885
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
48886
ERROR 22012: Division by 0
 
48887
COMMIT;
 
48888
        
 
48889
# check transactions-8 success:         1
 
48890
# INFO: Storage engine used for t1 seems to be able to revert
 
48891
#       changes made by the failing statement.
 
48892
SET @@session.sql_mode = '';
 
48893
SET AUTOCOMMIT= 1;
 
48894
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
48895
COMMIT WORK;
 
48896
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
48897
        
 
48898
# check special-1 success:      1
 
48899
UPDATE t1 SET f_charbig = '';
 
48900
        
 
48901
# check special-2 success:      1
 
48902
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
48903
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48904
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
48905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48906
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48907
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48908
'just inserted' FROM t0_template
 
48909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48910
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
48911
BEGIN
 
48912
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48913
f_charbig = 'updated by trigger'
 
48914
      WHERE f_int1 = new.f_int1;
 
48915
END|
 
48916
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48917
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
48918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48919
        
 
48920
# check trigger-1 success:      1
 
48921
DROP TRIGGER trg_1;
 
48922
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48923
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48924
f_charbig = 'just inserted'
 
48925
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48926
DELETE FROM t0_aux
 
48927
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48928
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48929
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48930
'just inserted' FROM t0_template
 
48931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48932
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
48933
BEGIN
 
48934
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48935
f_charbig = 'updated by trigger'
 
48936
      WHERE f_int1 = new.f_int1;
 
48937
END|
 
48938
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48939
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
48940
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48941
        
 
48942
# check trigger-2 success:      1
 
48943
DROP TRIGGER trg_1;
 
48944
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48945
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48946
f_charbig = 'just inserted'
 
48947
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48948
DELETE FROM t0_aux
 
48949
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48950
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48951
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48952
'just inserted' FROM t0_template
 
48953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48954
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
48955
BEGIN
 
48956
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48957
f_charbig = 'updated by trigger'
 
48958
      WHERE f_int1 = new.f_int1;
 
48959
END|
 
48960
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48961
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48962
        
 
48963
# check trigger-3 success:      1
 
48964
DROP TRIGGER trg_1;
 
48965
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48966
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48967
f_charbig = 'just inserted'
 
48968
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48969
DELETE FROM t0_aux
 
48970
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48971
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48972
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48973
'just inserted' FROM t0_template
 
48974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48975
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
48976
BEGIN
 
48977
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48978
f_charbig = 'updated by trigger'
 
48979
      WHERE f_int1 = - old.f_int1;
 
48980
END|
 
48981
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
48982
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
48983
        
 
48984
# check trigger-4 success:      1
 
48985
DROP TRIGGER trg_1;
 
48986
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
48987
f_int2 = CAST(f_char1 AS SIGNED INT),
 
48988
f_charbig = 'just inserted'
 
48989
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
48990
DELETE FROM t0_aux
 
48991
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48992
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
48993
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
48994
'just inserted' FROM t0_template
 
48995
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
48996
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
48997
BEGIN
 
48998
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
48999
f_charbig = 'updated by trigger'
 
49000
      WHERE f_int1 = new.f_int1;
 
49001
END|
 
49002
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49003
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49004
        
 
49005
# check trigger-5 success:      1
 
49006
DROP TRIGGER trg_1;
 
49007
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49008
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49009
f_charbig = 'just inserted'
 
49010
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49011
DELETE FROM t0_aux
 
49012
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49013
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49014
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49015
'just inserted' FROM t0_template
 
49016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49017
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
49018
BEGIN
 
49019
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49020
f_charbig = 'updated by trigger'
 
49021
      WHERE f_int1 = - old.f_int1;
 
49022
END|
 
49023
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49024
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49025
        
 
49026
# check trigger-6 success:      1
 
49027
DROP TRIGGER trg_1;
 
49028
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49029
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49030
f_charbig = 'just inserted'
 
49031
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49032
DELETE FROM t0_aux
 
49033
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49034
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49035
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49036
'just inserted' FROM t0_template
 
49037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49038
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
49039
BEGIN
 
49040
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49041
f_charbig = 'updated by trigger'
 
49042
      WHERE f_int1 = - old.f_int1;
 
49043
END|
 
49044
DELETE FROM t0_aux
 
49045
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49046
        
 
49047
# check trigger-7 success:      1
 
49048
DROP TRIGGER trg_1;
 
49049
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49050
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49051
f_charbig = 'just inserted'
 
49052
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49053
DELETE FROM t0_aux
 
49054
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49055
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49056
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49057
'just inserted' FROM t0_template
 
49058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49059
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
49060
BEGIN
 
49061
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49062
f_charbig = 'updated by trigger'
 
49063
      WHERE f_int1 = - old.f_int1;
 
49064
END|
 
49065
DELETE FROM t0_aux
 
49066
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49067
        
 
49068
# check trigger-8 success:      1
 
49069
DROP TRIGGER trg_1;
 
49070
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49071
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49072
f_charbig = 'just inserted'
 
49073
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49074
DELETE FROM t0_aux
 
49075
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49076
DELETE FROM t1
 
49077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49078
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
49079
BEGIN
 
49080
SET new.f_int1 = old.f_int1 + @max_row,
 
49081
new.f_int2 = old.f_int2 - @max_row,
 
49082
new.f_charbig = '####updated per update trigger####';
 
49083
END|
 
49084
UPDATE t1
 
49085
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
49086
f_charbig = '####updated per update statement itself####';
 
49087
        
 
49088
# check trigger-9 success:      1
 
49089
DROP TRIGGER trg_2;
 
49090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49092
f_charbig = CONCAT('===',f_char1,'===');
 
49093
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
49094
BEGIN
 
49095
SET new.f_int1 = new.f_int1 + @max_row,
 
49096
new.f_int2 = new.f_int2 - @max_row,
 
49097
new.f_charbig = '####updated per update trigger####';
 
49098
END|
 
49099
UPDATE t1
 
49100
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
49101
f_charbig = '####updated per update statement itself####';
 
49102
        
 
49103
# check trigger-10 success:     1
 
49104
DROP TRIGGER trg_2;
 
49105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49107
f_charbig = CONCAT('===',f_char1,'===');
 
49108
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
49109
BEGIN
 
49110
SET new.f_int1 = @my_max1 + @counter,
 
49111
new.f_int2 = @my_min2 - @counter,
 
49112
new.f_charbig = '####updated per insert trigger####';
 
49113
SET @counter = @counter + 1;
 
49114
END|
 
49115
SET @counter = 1;
 
49116
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
49117
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49118
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
49119
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
49120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
49121
ORDER BY f_int1;
 
49122
DROP TRIGGER trg_3;
 
49123
        
 
49124
# check trigger-11 success:     1
 
49125
DELETE FROM t1
 
49126
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
49127
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
49128
AND f_charbig = '####updated per insert trigger####';
 
49129
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
49130
BEGIN
 
49131
SET new.f_int1 = @my_max1 + @counter,
 
49132
new.f_int2 = @my_min2 - @counter,
 
49133
new.f_charbig = '####updated per insert trigger####';
 
49134
SET @counter = @counter + 1;
 
49135
END|
 
49136
SET @counter = 1;
 
49137
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
49138
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
49139
SELECT CAST(f_int1 AS CHAR),
 
49140
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
49141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
49142
ORDER BY f_int1;
 
49143
DROP TRIGGER trg_3;
 
49144
        
 
49145
# check trigger-12 success:     1
 
49146
DELETE FROM t1
 
49147
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
49148
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
49149
AND f_charbig = '####updated per insert trigger####';
 
49150
ANALYZE  TABLE t1;
 
49151
Table   Op      Msg_type        Msg_text
 
49152
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
49153
CHECK    TABLE t1 EXTENDED;
 
49154
Table   Op      Msg_type        Msg_text
 
49155
test.t1 check   note    The storage engine for the table doesn't support check
 
49156
CHECKSUM TABLE t1 EXTENDED;
 
49157
Table   Checksum
 
49158
test.t1 <some_value>
 
49159
OPTIMIZE TABLE t1;
 
49160
Table   Op      Msg_type        Msg_text
 
49161
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
49162
# check layout success:    1
 
49163
REPAIR   TABLE t1 EXTENDED;
 
49164
Table   Op      Msg_type        Msg_text
 
49165
test.t1 repair  note    The storage engine for the table doesn't support repair
 
49166
# check layout success:    1
 
49167
TRUNCATE t1;
 
49168
        
 
49169
# check TRUNCATE success:       1
 
49170
# check layout success:    1
 
49171
# End usability test (inc/partition_check.inc)
 
49172
DROP TABLE t1;
 
49173
CREATE TABLE t1 (
 
49174
f_int1 INTEGER,
 
49175
f_int2 INTEGER,
 
49176
f_char1 CHAR(20),
 
49177
f_char2 CHAR(20),
 
49178
f_charbig VARCHAR(1000)
 
49179
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
49180
)
 
49181
PARTITION BY RANGE(f_int1)
 
49182
(PARTITION parta VALUES LESS THAN (0),
 
49183
PARTITION partb VALUES LESS THAN (5),
 
49184
PARTITION partc VALUES LESS THAN (10),
 
49185
PARTITION partd VALUES LESS THAN (10 + 5),
 
49186
PARTITION parte VALUES LESS THAN (20),
 
49187
PARTITION partf VALUES LESS THAN (2147483646));
 
49188
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49189
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
49190
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
49191
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
49192
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49193
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
49194
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
49195
# Start usability test (inc/partition_check.inc)
 
49196
create_command
 
49197
SHOW CREATE TABLE t1;
 
49198
Table   Create Table
 
49199
t1      CREATE TABLE `t1` (
 
49200
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
49201
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
49202
  `f_char1` char(20) DEFAULT NULL,
 
49203
  `f_char2` char(20) DEFAULT NULL,
 
49204
  `f_charbig` varchar(1000) DEFAULT NULL
 
49205
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
49206
 
 
49207
# check prerequisites-1 success:    1
 
49208
# check COUNT(*) success:    1
 
49209
# check MIN/MAX(f_int1) success:    1
 
49210
# check MIN/MAX(f_int2) success:    1
 
49211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49212
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
49213
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
49214
WHERE f_int1 IN (2,3);
 
49215
# check prerequisites-3 success:    1
 
49216
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
49217
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
49218
# check read via f_int1 success: 1
 
49219
# check read via f_int2 success: 1
 
49220
        
 
49221
# check multiple-1 success:     1
 
49222
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
49223
        
 
49224
# check multiple-2 success:     1
 
49225
INSERT INTO t1 SELECT * FROM t0_template
 
49226
WHERE MOD(f_int1,3) = 0;
 
49227
        
 
49228
# check multiple-3 success:     1
 
49229
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
49230
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
49231
AND @max_row_div2 + @max_row_div4;
 
49232
        
 
49233
# check multiple-4 success:     1
 
49234
DELETE FROM t1
 
49235
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
49236
AND @max_row_div2 + @max_row_div4 + @max_row;
 
49237
        
 
49238
# check multiple-5 success:     1
 
49239
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
49240
INSERT INTO t1
 
49241
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
49242
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
49243
f_charbig = '#SINGLE#';
 
49244
        
 
49245
# check single-1 success:       1
 
49246
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
49247
INSERT INTO t1
 
49248
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
49249
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
49250
f_charbig = '#SINGLE#';
 
49251
        
 
49252
# check single-2 success:       1
 
49253
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
49254
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
49255
UPDATE t1 SET f_int1 = @cur_value2
 
49256
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
49257
        
 
49258
# check single-3 success:       1
 
49259
SET @cur_value1= -1;
 
49260
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
49261
UPDATE t1 SET f_int1 = @cur_value1
 
49262
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
49263
        
 
49264
# check single-4 success:       1
 
49265
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
49266
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
49267
        
 
49268
# check single-5 success:       1
 
49269
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
49270
        
 
49271
# check single-6 success:       1
 
49272
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
49273
ERROR HY000: Table has no partition for value 2147483647
 
49274
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
49275
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
49276
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
49277
f_charbig = '#NULL#';
 
49278
INSERT INTO t1
 
49279
SET f_int1 = NULL , f_int2 = -@max_row,
 
49280
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
49281
f_charbig = '#NULL#';
 
49282
ERROR 23000: Column 'f_int1' cannot be null
 
49283
# check null success:    1
 
49284
DELETE FROM t1
 
49285
WHERE f_int1 = 0 AND f_int2 = 0
 
49286
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
49287
AND f_charbig = '#NULL#';
 
49288
SET AUTOCOMMIT= 0;
 
49289
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49290
SELECT f_int1, f_int1, '', '', 'was inserted'
 
49291
FROM t0_template source_tab
 
49292
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
49293
        
 
49294
# check transactions-1 success:         1
 
49295
COMMIT WORK;
 
49296
        
 
49297
# check transactions-2 success:         1
 
49298
ROLLBACK WORK;
 
49299
        
 
49300
# check transactions-3 success:         1
 
49301
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
49302
COMMIT WORK;
 
49303
ROLLBACK WORK;
 
49304
        
 
49305
# check transactions-4 success:         1
 
49306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49307
SELECT f_int1, f_int1, '', '', 'was inserted'
 
49308
FROM t0_template source_tab
 
49309
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
49310
        
 
49311
# check transactions-5 success:         1
 
49312
ROLLBACK WORK;
 
49313
        
 
49314
# check transactions-6 success:         1
 
49315
# INFO: Storage engine used for t1 seems to be transactional.
 
49316
COMMIT;
 
49317
        
 
49318
# check transactions-7 success:         1
 
49319
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
49320
COMMIT WORK;
 
49321
SET @@session.sql_mode = 'traditional';
 
49322
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
49323
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49324
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
49325
'', '', 'was inserted' FROM t0_template
 
49326
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
49327
ERROR 22012: Division by 0
 
49328
COMMIT;
 
49329
        
 
49330
# check transactions-8 success:         1
 
49331
# INFO: Storage engine used for t1 seems to be able to revert
 
49332
#       changes made by the failing statement.
 
49333
SET @@session.sql_mode = '';
 
49334
SET AUTOCOMMIT= 1;
 
49335
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
49336
COMMIT WORK;
 
49337
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
49338
        
 
49339
# check special-1 success:      1
 
49340
UPDATE t1 SET f_charbig = '';
 
49341
        
 
49342
# check special-2 success:      1
 
49343
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
49344
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49345
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
49346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49347
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49348
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49349
'just inserted' FROM t0_template
 
49350
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49351
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
49352
BEGIN
 
49353
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49354
f_charbig = 'updated by trigger'
 
49355
      WHERE f_int1 = new.f_int1;
 
49356
END|
 
49357
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49358
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
49359
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49360
        
 
49361
# check trigger-1 success:      1
 
49362
DROP TRIGGER trg_1;
 
49363
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49364
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49365
f_charbig = 'just inserted'
 
49366
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49367
DELETE FROM t0_aux
 
49368
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49369
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49370
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49371
'just inserted' FROM t0_template
 
49372
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49373
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
49374
BEGIN
 
49375
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49376
f_charbig = 'updated by trigger'
 
49377
      WHERE f_int1 = new.f_int1;
 
49378
END|
 
49379
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49380
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
49381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49382
        
 
49383
# check trigger-2 success:      1
 
49384
DROP TRIGGER trg_1;
 
49385
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49386
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49387
f_charbig = 'just inserted'
 
49388
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49389
DELETE FROM t0_aux
 
49390
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49391
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49392
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49393
'just inserted' FROM t0_template
 
49394
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49395
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
49396
BEGIN
 
49397
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49398
f_charbig = 'updated by trigger'
 
49399
      WHERE f_int1 = new.f_int1;
 
49400
END|
 
49401
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49402
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49403
        
 
49404
# check trigger-3 success:      1
 
49405
DROP TRIGGER trg_1;
 
49406
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49407
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49408
f_charbig = 'just inserted'
 
49409
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49410
DELETE FROM t0_aux
 
49411
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49412
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49413
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49414
'just inserted' FROM t0_template
 
49415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49416
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
49417
BEGIN
 
49418
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49419
f_charbig = 'updated by trigger'
 
49420
      WHERE f_int1 = - old.f_int1;
 
49421
END|
 
49422
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49423
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49424
        
 
49425
# check trigger-4 success:      1
 
49426
DROP TRIGGER trg_1;
 
49427
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49428
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49429
f_charbig = 'just inserted'
 
49430
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49431
DELETE FROM t0_aux
 
49432
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49434
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49435
'just inserted' FROM t0_template
 
49436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49437
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
49438
BEGIN
 
49439
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49440
f_charbig = 'updated by trigger'
 
49441
      WHERE f_int1 = new.f_int1;
 
49442
END|
 
49443
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49444
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49445
        
 
49446
# check trigger-5 success:      1
 
49447
DROP TRIGGER trg_1;
 
49448
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49449
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49450
f_charbig = 'just inserted'
 
49451
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49452
DELETE FROM t0_aux
 
49453
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49454
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49455
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49456
'just inserted' FROM t0_template
 
49457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49458
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
49459
BEGIN
 
49460
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49461
f_charbig = 'updated by trigger'
 
49462
      WHERE f_int1 = - old.f_int1;
 
49463
END|
 
49464
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49465
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49466
        
 
49467
# check trigger-6 success:      1
 
49468
DROP TRIGGER trg_1;
 
49469
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49470
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49471
f_charbig = 'just inserted'
 
49472
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49473
DELETE FROM t0_aux
 
49474
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49475
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49476
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49477
'just inserted' FROM t0_template
 
49478
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49479
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
49480
BEGIN
 
49481
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49482
f_charbig = 'updated by trigger'
 
49483
      WHERE f_int1 = - old.f_int1;
 
49484
END|
 
49485
DELETE FROM t0_aux
 
49486
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49487
        
 
49488
# check trigger-7 success:      1
 
49489
DROP TRIGGER trg_1;
 
49490
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49491
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49492
f_charbig = 'just inserted'
 
49493
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49494
DELETE FROM t0_aux
 
49495
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49496
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49497
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49498
'just inserted' FROM t0_template
 
49499
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49500
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
49501
BEGIN
 
49502
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49503
f_charbig = 'updated by trigger'
 
49504
      WHERE f_int1 = - old.f_int1;
 
49505
END|
 
49506
DELETE FROM t0_aux
 
49507
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49508
        
 
49509
# check trigger-8 success:      1
 
49510
DROP TRIGGER trg_1;
 
49511
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49512
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49513
f_charbig = 'just inserted'
 
49514
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49515
DELETE FROM t0_aux
 
49516
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49517
DELETE FROM t1
 
49518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49519
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
49520
BEGIN
 
49521
SET new.f_int1 = old.f_int1 + @max_row,
 
49522
new.f_int2 = old.f_int2 - @max_row,
 
49523
new.f_charbig = '####updated per update trigger####';
 
49524
END|
 
49525
UPDATE t1
 
49526
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
49527
f_charbig = '####updated per update statement itself####';
 
49528
        
 
49529
# check trigger-9 success:      1
 
49530
DROP TRIGGER trg_2;
 
49531
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49532
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49533
f_charbig = CONCAT('===',f_char1,'===');
 
49534
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
49535
BEGIN
 
49536
SET new.f_int1 = new.f_int1 + @max_row,
 
49537
new.f_int2 = new.f_int2 - @max_row,
 
49538
new.f_charbig = '####updated per update trigger####';
 
49539
END|
 
49540
UPDATE t1
 
49541
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
49542
f_charbig = '####updated per update statement itself####';
 
49543
        
 
49544
# check trigger-10 success:     1
 
49545
DROP TRIGGER trg_2;
 
49546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49548
f_charbig = CONCAT('===',f_char1,'===');
 
49549
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
49550
BEGIN
 
49551
SET new.f_int1 = @my_max1 + @counter,
 
49552
new.f_int2 = @my_min2 - @counter,
 
49553
new.f_charbig = '####updated per insert trigger####';
 
49554
SET @counter = @counter + 1;
 
49555
END|
 
49556
SET @counter = 1;
 
49557
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
49558
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49559
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
49560
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
49561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
49562
ORDER BY f_int1;
 
49563
DROP TRIGGER trg_3;
 
49564
        
 
49565
# check trigger-11 success:     1
 
49566
DELETE FROM t1
 
49567
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
49568
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
49569
AND f_charbig = '####updated per insert trigger####';
 
49570
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
49571
BEGIN
 
49572
SET new.f_int1 = @my_max1 + @counter,
 
49573
new.f_int2 = @my_min2 - @counter,
 
49574
new.f_charbig = '####updated per insert trigger####';
 
49575
SET @counter = @counter + 1;
 
49576
END|
 
49577
SET @counter = 1;
 
49578
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
49579
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
49580
SELECT CAST(f_int1 AS CHAR),
 
49581
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
49582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
49583
ORDER BY f_int1;
 
49584
DROP TRIGGER trg_3;
 
49585
        
 
49586
# check trigger-12 success:     1
 
49587
DELETE FROM t1
 
49588
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
49589
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
49590
AND f_charbig = '####updated per insert trigger####';
 
49591
ANALYZE  TABLE t1;
 
49592
Table   Op      Msg_type        Msg_text
 
49593
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
49594
CHECK    TABLE t1 EXTENDED;
 
49595
Table   Op      Msg_type        Msg_text
 
49596
test.t1 check   note    The storage engine for the table doesn't support check
 
49597
CHECKSUM TABLE t1 EXTENDED;
 
49598
Table   Checksum
 
49599
test.t1 <some_value>
 
49600
OPTIMIZE TABLE t1;
 
49601
Table   Op      Msg_type        Msg_text
 
49602
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
49603
# check layout success:    1
 
49604
REPAIR   TABLE t1 EXTENDED;
 
49605
Table   Op      Msg_type        Msg_text
 
49606
test.t1 repair  note    The storage engine for the table doesn't support repair
 
49607
# check layout success:    1
 
49608
TRUNCATE t1;
 
49609
        
 
49610
# check TRUNCATE success:       1
 
49611
# check layout success:    1
 
49612
# End usability test (inc/partition_check.inc)
 
49613
DROP TABLE t1;
 
49614
CREATE TABLE t1 (
 
49615
f_int1 INTEGER,
 
49616
f_int2 INTEGER,
 
49617
f_char1 CHAR(20),
 
49618
f_char2 CHAR(20),
 
49619
f_charbig VARCHAR(1000)
 
49620
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
49621
)
 
49622
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
49623
(PARTITION parta VALUES LESS THAN (0),
 
49624
PARTITION partb VALUES LESS THAN (5),
 
49625
PARTITION partc VALUES LESS THAN (10),
 
49626
PARTITION partd VALUES LESS THAN (2147483646));
 
49627
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49628
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
49629
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
49630
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
49631
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49632
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
49633
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
49634
# Start usability test (inc/partition_check.inc)
 
49635
create_command
 
49636
SHOW CREATE TABLE t1;
 
49637
Table   Create Table
 
49638
t1      CREATE TABLE `t1` (
 
49639
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
49640
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
49641
  `f_char1` char(20) DEFAULT NULL,
 
49642
  `f_char2` char(20) DEFAULT NULL,
 
49643
  `f_charbig` varchar(1000) DEFAULT NULL
 
49644
) ENGINE=InnoDB 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 = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
49645
 
 
49646
# check prerequisites-1 success:    1
 
49647
# check COUNT(*) success:    1
 
49648
# check MIN/MAX(f_int1) success:    1
 
49649
# check MIN/MAX(f_int2) success:    1
 
49650
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49651
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
49652
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
49653
WHERE f_int1 IN (2,3);
 
49654
# check prerequisites-3 success:    1
 
49655
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
49656
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
49657
# check read via f_int1 success: 1
 
49658
# check read via f_int2 success: 1
 
49659
        
 
49660
# check multiple-1 success:     1
 
49661
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
49662
        
 
49663
# check multiple-2 success:     1
 
49664
INSERT INTO t1 SELECT * FROM t0_template
 
49665
WHERE MOD(f_int1,3) = 0;
 
49666
        
 
49667
# check multiple-3 success:     1
 
49668
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
49669
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
49670
AND @max_row_div2 + @max_row_div4;
 
49671
        
 
49672
# check multiple-4 success:     1
 
49673
DELETE FROM t1
 
49674
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
49675
AND @max_row_div2 + @max_row_div4 + @max_row;
 
49676
        
 
49677
# check multiple-5 success:     1
 
49678
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
49679
INSERT INTO t1
 
49680
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
49681
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
49682
f_charbig = '#SINGLE#';
 
49683
        
 
49684
# check single-1 success:       1
 
49685
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
49686
INSERT INTO t1
 
49687
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
49688
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
49689
f_charbig = '#SINGLE#';
 
49690
        
 
49691
# check single-2 success:       1
 
49692
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
49693
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
49694
UPDATE t1 SET f_int1 = @cur_value2
 
49695
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
49696
        
 
49697
# check single-3 success:       1
 
49698
SET @cur_value1= -1;
 
49699
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
49700
UPDATE t1 SET f_int1 = @cur_value1
 
49701
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
49702
        
 
49703
# check single-4 success:       1
 
49704
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
49705
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
49706
        
 
49707
# check single-5 success:       1
 
49708
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
49709
        
 
49710
# check single-6 success:       1
 
49711
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
49712
        
 
49713
# check single-7 success:       1
 
49714
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
49715
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
49716
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
49717
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
49718
f_charbig = '#NULL#';
 
49719
INSERT INTO t1
 
49720
SET f_int1 = NULL , f_int2 = -@max_row,
 
49721
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
49722
f_charbig = '#NULL#';
 
49723
ERROR 23000: Column 'f_int1' cannot be null
 
49724
# check null success:    1
 
49725
DELETE FROM t1
 
49726
WHERE f_int1 = 0 AND f_int2 = 0
 
49727
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
49728
AND f_charbig = '#NULL#';
 
49729
SET AUTOCOMMIT= 0;
 
49730
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49731
SELECT f_int1, f_int1, '', '', 'was inserted'
 
49732
FROM t0_template source_tab
 
49733
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
49734
        
 
49735
# check transactions-1 success:         1
 
49736
COMMIT WORK;
 
49737
        
 
49738
# check transactions-2 success:         1
 
49739
ROLLBACK WORK;
 
49740
        
 
49741
# check transactions-3 success:         1
 
49742
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
49743
COMMIT WORK;
 
49744
ROLLBACK WORK;
 
49745
        
 
49746
# check transactions-4 success:         1
 
49747
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49748
SELECT f_int1, f_int1, '', '', 'was inserted'
 
49749
FROM t0_template source_tab
 
49750
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
49751
        
 
49752
# check transactions-5 success:         1
 
49753
ROLLBACK WORK;
 
49754
        
 
49755
# check transactions-6 success:         1
 
49756
# INFO: Storage engine used for t1 seems to be transactional.
 
49757
COMMIT;
 
49758
        
 
49759
# check transactions-7 success:         1
 
49760
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
49761
COMMIT WORK;
 
49762
SET @@session.sql_mode = 'traditional';
 
49763
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
49764
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
49765
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
49766
'', '', 'was inserted' FROM t0_template
 
49767
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
49768
ERROR 22012: Division by 0
 
49769
COMMIT;
 
49770
        
 
49771
# check transactions-8 success:         1
 
49772
# INFO: Storage engine used for t1 seems to be able to revert
 
49773
#       changes made by the failing statement.
 
49774
SET @@session.sql_mode = '';
 
49775
SET AUTOCOMMIT= 1;
 
49776
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
49777
COMMIT WORK;
 
49778
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
49779
        
 
49780
# check special-1 success:      1
 
49781
UPDATE t1 SET f_charbig = '';
 
49782
        
 
49783
# check special-2 success:      1
 
49784
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
49785
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49786
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
49787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49788
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49789
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49790
'just inserted' FROM t0_template
 
49791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49792
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
49793
BEGIN
 
49794
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49795
f_charbig = 'updated by trigger'
 
49796
      WHERE f_int1 = new.f_int1;
 
49797
END|
 
49798
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49799
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
49800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49801
        
 
49802
# check trigger-1 success:      1
 
49803
DROP TRIGGER trg_1;
 
49804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49806
f_charbig = 'just inserted'
 
49807
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49808
DELETE FROM t0_aux
 
49809
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49810
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49811
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49812
'just inserted' FROM t0_template
 
49813
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49814
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
49815
BEGIN
 
49816
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49817
f_charbig = 'updated by trigger'
 
49818
      WHERE f_int1 = new.f_int1;
 
49819
END|
 
49820
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49821
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
49822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49823
        
 
49824
# check trigger-2 success:      1
 
49825
DROP TRIGGER trg_1;
 
49826
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49827
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49828
f_charbig = 'just inserted'
 
49829
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49830
DELETE FROM t0_aux
 
49831
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49832
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49833
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49834
'just inserted' FROM t0_template
 
49835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49836
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
49837
BEGIN
 
49838
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49839
f_charbig = 'updated by trigger'
 
49840
      WHERE f_int1 = new.f_int1;
 
49841
END|
 
49842
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49843
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49844
        
 
49845
# check trigger-3 success:      1
 
49846
DROP TRIGGER trg_1;
 
49847
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49848
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49849
f_charbig = 'just inserted'
 
49850
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49851
DELETE FROM t0_aux
 
49852
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49853
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49854
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49855
'just inserted' FROM t0_template
 
49856
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49857
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
49858
BEGIN
 
49859
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49860
f_charbig = 'updated by trigger'
 
49861
      WHERE f_int1 = - old.f_int1;
 
49862
END|
 
49863
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49864
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49865
        
 
49866
# check trigger-4 success:      1
 
49867
DROP TRIGGER trg_1;
 
49868
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49869
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49870
f_charbig = 'just inserted'
 
49871
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49872
DELETE FROM t0_aux
 
49873
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49874
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49875
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49876
'just inserted' FROM t0_template
 
49877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49878
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
49879
BEGIN
 
49880
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49881
f_charbig = 'updated by trigger'
 
49882
      WHERE f_int1 = new.f_int1;
 
49883
END|
 
49884
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49885
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49886
        
 
49887
# check trigger-5 success:      1
 
49888
DROP TRIGGER trg_1;
 
49889
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49890
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49891
f_charbig = 'just inserted'
 
49892
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49893
DELETE FROM t0_aux
 
49894
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49895
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49896
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49897
'just inserted' FROM t0_template
 
49898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49899
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
49900
BEGIN
 
49901
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49902
f_charbig = 'updated by trigger'
 
49903
      WHERE f_int1 = - old.f_int1;
 
49904
END|
 
49905
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
49906
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49907
        
 
49908
# check trigger-6 success:      1
 
49909
DROP TRIGGER trg_1;
 
49910
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49911
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49912
f_charbig = 'just inserted'
 
49913
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49914
DELETE FROM t0_aux
 
49915
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49916
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49917
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49918
'just inserted' FROM t0_template
 
49919
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49920
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
49921
BEGIN
 
49922
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49923
f_charbig = 'updated by trigger'
 
49924
      WHERE f_int1 = - old.f_int1;
 
49925
END|
 
49926
DELETE FROM t0_aux
 
49927
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49928
        
 
49929
# check trigger-7 success:      1
 
49930
DROP TRIGGER trg_1;
 
49931
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49932
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49933
f_charbig = 'just inserted'
 
49934
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49935
DELETE FROM t0_aux
 
49936
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49937
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
49938
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
49939
'just inserted' FROM t0_template
 
49940
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49941
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
49942
BEGIN
 
49943
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
49944
f_charbig = 'updated by trigger'
 
49945
      WHERE f_int1 = - old.f_int1;
 
49946
END|
 
49947
DELETE FROM t0_aux
 
49948
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
49949
        
 
49950
# check trigger-8 success:      1
 
49951
DROP TRIGGER trg_1;
 
49952
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49953
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49954
f_charbig = 'just inserted'
 
49955
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
49956
DELETE FROM t0_aux
 
49957
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49958
DELETE FROM t1
 
49959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
49960
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
49961
BEGIN
 
49962
SET new.f_int1 = old.f_int1 + @max_row,
 
49963
new.f_int2 = old.f_int2 - @max_row,
 
49964
new.f_charbig = '####updated per update trigger####';
 
49965
END|
 
49966
UPDATE t1
 
49967
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
49968
f_charbig = '####updated per update statement itself####';
 
49969
        
 
49970
# check trigger-9 success:      1
 
49971
DROP TRIGGER trg_2;
 
49972
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49973
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49974
f_charbig = CONCAT('===',f_char1,'===');
 
49975
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
49976
BEGIN
 
49977
SET new.f_int1 = new.f_int1 + @max_row,
 
49978
new.f_int2 = new.f_int2 - @max_row,
 
49979
new.f_charbig = '####updated per update trigger####';
 
49980
END|
 
49981
UPDATE t1
 
49982
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
49983
f_charbig = '####updated per update statement itself####';
 
49984
        
 
49985
# check trigger-10 success:     1
 
49986
DROP TRIGGER trg_2;
 
49987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
49988
f_int2 = CAST(f_char1 AS SIGNED INT),
 
49989
f_charbig = CONCAT('===',f_char1,'===');
 
49990
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
49991
BEGIN
 
49992
SET new.f_int1 = @my_max1 + @counter,
 
49993
new.f_int2 = @my_min2 - @counter,
 
49994
new.f_charbig = '####updated per insert trigger####';
 
49995
SET @counter = @counter + 1;
 
49996
END|
 
49997
SET @counter = 1;
 
49998
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
49999
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50000
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
50001
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
50002
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
50003
ORDER BY f_int1;
 
50004
DROP TRIGGER trg_3;
 
50005
        
 
50006
# check trigger-11 success:     1
 
50007
DELETE FROM t1
 
50008
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
50009
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
50010
AND f_charbig = '####updated per insert trigger####';
 
50011
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
50012
BEGIN
 
50013
SET new.f_int1 = @my_max1 + @counter,
 
50014
new.f_int2 = @my_min2 - @counter,
 
50015
new.f_charbig = '####updated per insert trigger####';
 
50016
SET @counter = @counter + 1;
 
50017
END|
 
50018
SET @counter = 1;
 
50019
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
50020
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
50021
SELECT CAST(f_int1 AS CHAR),
 
50022
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
50023
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
50024
ORDER BY f_int1;
 
50025
DROP TRIGGER trg_3;
 
50026
        
 
50027
# check trigger-12 success:     1
 
50028
DELETE FROM t1
 
50029
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
50030
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
50031
AND f_charbig = '####updated per insert trigger####';
 
50032
ANALYZE  TABLE t1;
 
50033
Table   Op      Msg_type        Msg_text
 
50034
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
50035
CHECK    TABLE t1 EXTENDED;
 
50036
Table   Op      Msg_type        Msg_text
 
50037
test.t1 check   note    The storage engine for the table doesn't support check
 
50038
CHECKSUM TABLE t1 EXTENDED;
 
50039
Table   Checksum
 
50040
test.t1 <some_value>
 
50041
OPTIMIZE TABLE t1;
 
50042
Table   Op      Msg_type        Msg_text
 
50043
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
50044
# check layout success:    1
 
50045
REPAIR   TABLE t1 EXTENDED;
 
50046
Table   Op      Msg_type        Msg_text
 
50047
test.t1 repair  note    The storage engine for the table doesn't support repair
 
50048
# check layout success:    1
 
50049
TRUNCATE t1;
 
50050
        
 
50051
# check TRUNCATE success:       1
 
50052
# check layout success:    1
 
50053
# End usability test (inc/partition_check.inc)
 
50054
DROP TABLE t1;
 
50055
CREATE TABLE t1 (
 
50056
f_int1 INTEGER,
 
50057
f_int2 INTEGER,
 
50058
f_char1 CHAR(20),
 
50059
f_char2 CHAR(20),
 
50060
f_charbig VARCHAR(1000)
 
50061
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
50062
)
 
50063
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
50064
(PARTITION part1 VALUES LESS THAN (0)
 
50065
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
50066
PARTITION part2 VALUES LESS THAN (5)
 
50067
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
50068
PARTITION part3 VALUES LESS THAN (10)
 
50069
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
50070
PARTITION part4 VALUES LESS THAN (2147483646)
 
50071
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
50072
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50073
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
50074
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
50075
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
50076
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50077
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
50078
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
50079
# Start usability test (inc/partition_check.inc)
 
50080
create_command
 
50081
SHOW CREATE TABLE t1;
 
50082
Table   Create Table
 
50083
t1      CREATE TABLE `t1` (
 
50084
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
50085
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
50086
  `f_char1` char(20) DEFAULT NULL,
 
50087
  `f_char2` char(20) DEFAULT NULL,
 
50088
  `f_charbig` varchar(1000) DEFAULT NULL
 
50089
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
50090
 
 
50091
# check prerequisites-1 success:    1
 
50092
# check COUNT(*) success:    1
 
50093
# check MIN/MAX(f_int1) success:    1
 
50094
# check MIN/MAX(f_int2) success:    1
 
50095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50096
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
50097
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
50098
WHERE f_int1 IN (2,3);
 
50099
# check prerequisites-3 success:    1
 
50100
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
50101
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
50102
# check read via f_int1 success: 1
 
50103
# check read via f_int2 success: 1
 
50104
        
 
50105
# check multiple-1 success:     1
 
50106
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
50107
        
 
50108
# check multiple-2 success:     1
 
50109
INSERT INTO t1 SELECT * FROM t0_template
 
50110
WHERE MOD(f_int1,3) = 0;
 
50111
        
 
50112
# check multiple-3 success:     1
 
50113
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
50114
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
50115
AND @max_row_div2 + @max_row_div4;
 
50116
        
 
50117
# check multiple-4 success:     1
 
50118
DELETE FROM t1
 
50119
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
50120
AND @max_row_div2 + @max_row_div4 + @max_row;
 
50121
        
 
50122
# check multiple-5 success:     1
 
50123
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
50124
INSERT INTO t1
 
50125
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
50126
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
50127
f_charbig = '#SINGLE#';
 
50128
        
 
50129
# check single-1 success:       1
 
50130
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
50131
INSERT INTO t1
 
50132
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
50133
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
50134
f_charbig = '#SINGLE#';
 
50135
        
 
50136
# check single-2 success:       1
 
50137
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
50138
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
50139
UPDATE t1 SET f_int1 = @cur_value2
 
50140
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
50141
        
 
50142
# check single-3 success:       1
 
50143
SET @cur_value1= -1;
 
50144
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
50145
UPDATE t1 SET f_int1 = @cur_value1
 
50146
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
50147
        
 
50148
# check single-4 success:       1
 
50149
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
50150
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
50151
        
 
50152
# check single-5 success:       1
 
50153
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
50154
        
 
50155
# check single-6 success:       1
 
50156
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
50157
ERROR HY000: Table has no partition for value 2147483647
 
50158
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
50159
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
50160
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
50161
f_charbig = '#NULL#';
 
50162
INSERT INTO t1
 
50163
SET f_int1 = NULL , f_int2 = -@max_row,
 
50164
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
50165
f_charbig = '#NULL#';
 
50166
ERROR 23000: Column 'f_int1' cannot be null
 
50167
# check null success:    1
 
50168
DELETE FROM t1
 
50169
WHERE f_int1 = 0 AND f_int2 = 0
 
50170
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
50171
AND f_charbig = '#NULL#';
 
50172
SET AUTOCOMMIT= 0;
 
50173
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50174
SELECT f_int1, f_int1, '', '', 'was inserted'
 
50175
FROM t0_template source_tab
 
50176
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
50177
        
 
50178
# check transactions-1 success:         1
 
50179
COMMIT WORK;
 
50180
        
 
50181
# check transactions-2 success:         1
 
50182
ROLLBACK WORK;
 
50183
        
 
50184
# check transactions-3 success:         1
 
50185
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
50186
COMMIT WORK;
 
50187
ROLLBACK WORK;
 
50188
        
 
50189
# check transactions-4 success:         1
 
50190
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50191
SELECT f_int1, f_int1, '', '', 'was inserted'
 
50192
FROM t0_template source_tab
 
50193
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
50194
        
 
50195
# check transactions-5 success:         1
 
50196
ROLLBACK WORK;
 
50197
        
 
50198
# check transactions-6 success:         1
 
50199
# INFO: Storage engine used for t1 seems to be transactional.
 
50200
COMMIT;
 
50201
        
 
50202
# check transactions-7 success:         1
 
50203
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
50204
COMMIT WORK;
 
50205
SET @@session.sql_mode = 'traditional';
 
50206
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
50207
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50208
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
50209
'', '', 'was inserted' FROM t0_template
 
50210
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
50211
ERROR 22012: Division by 0
 
50212
COMMIT;
 
50213
        
 
50214
# check transactions-8 success:         1
 
50215
# INFO: Storage engine used for t1 seems to be able to revert
 
50216
#       changes made by the failing statement.
 
50217
SET @@session.sql_mode = '';
 
50218
SET AUTOCOMMIT= 1;
 
50219
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
50220
COMMIT WORK;
 
50221
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
50222
        
 
50223
# check special-1 success:      1
 
50224
UPDATE t1 SET f_charbig = '';
 
50225
        
 
50226
# check special-2 success:      1
 
50227
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
50228
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50229
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
50230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50233
'just inserted' FROM t0_template
 
50234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50235
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
50236
BEGIN
 
50237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50238
f_charbig = 'updated by trigger'
 
50239
      WHERE f_int1 = new.f_int1;
 
50240
END|
 
50241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50242
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
50243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50244
        
 
50245
# check trigger-1 success:      1
 
50246
DROP TRIGGER trg_1;
 
50247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50249
f_charbig = 'just inserted'
 
50250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50251
DELETE FROM t0_aux
 
50252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50255
'just inserted' FROM t0_template
 
50256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50257
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
50258
BEGIN
 
50259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50260
f_charbig = 'updated by trigger'
 
50261
      WHERE f_int1 = new.f_int1;
 
50262
END|
 
50263
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50264
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
50265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50266
        
 
50267
# check trigger-2 success:      1
 
50268
DROP TRIGGER trg_1;
 
50269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50271
f_charbig = 'just inserted'
 
50272
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50273
DELETE FROM t0_aux
 
50274
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50276
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50277
'just inserted' FROM t0_template
 
50278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50279
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
50280
BEGIN
 
50281
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50282
f_charbig = 'updated by trigger'
 
50283
      WHERE f_int1 = new.f_int1;
 
50284
END|
 
50285
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50286
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50287
        
 
50288
# check trigger-3 success:      1
 
50289
DROP TRIGGER trg_1;
 
50290
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50291
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50292
f_charbig = 'just inserted'
 
50293
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50294
DELETE FROM t0_aux
 
50295
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50296
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50297
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50298
'just inserted' FROM t0_template
 
50299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50300
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
50301
BEGIN
 
50302
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50303
f_charbig = 'updated by trigger'
 
50304
      WHERE f_int1 = - old.f_int1;
 
50305
END|
 
50306
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50307
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50308
        
 
50309
# check trigger-4 success:      1
 
50310
DROP TRIGGER trg_1;
 
50311
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50312
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50313
f_charbig = 'just inserted'
 
50314
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50315
DELETE FROM t0_aux
 
50316
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50317
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50318
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50319
'just inserted' FROM t0_template
 
50320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50321
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
50322
BEGIN
 
50323
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50324
f_charbig = 'updated by trigger'
 
50325
      WHERE f_int1 = new.f_int1;
 
50326
END|
 
50327
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50328
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50329
        
 
50330
# check trigger-5 success:      1
 
50331
DROP TRIGGER trg_1;
 
50332
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50333
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50334
f_charbig = 'just inserted'
 
50335
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50336
DELETE FROM t0_aux
 
50337
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50338
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50339
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50340
'just inserted' FROM t0_template
 
50341
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50342
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
50343
BEGIN
 
50344
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50345
f_charbig = 'updated by trigger'
 
50346
      WHERE f_int1 = - old.f_int1;
 
50347
END|
 
50348
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50349
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50350
        
 
50351
# check trigger-6 success:      1
 
50352
DROP TRIGGER trg_1;
 
50353
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50354
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50355
f_charbig = 'just inserted'
 
50356
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50357
DELETE FROM t0_aux
 
50358
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50359
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50360
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50361
'just inserted' FROM t0_template
 
50362
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50363
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
50364
BEGIN
 
50365
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50366
f_charbig = 'updated by trigger'
 
50367
      WHERE f_int1 = - old.f_int1;
 
50368
END|
 
50369
DELETE FROM t0_aux
 
50370
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50371
        
 
50372
# check trigger-7 success:      1
 
50373
DROP TRIGGER trg_1;
 
50374
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50375
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50376
f_charbig = 'just inserted'
 
50377
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50378
DELETE FROM t0_aux
 
50379
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50380
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50381
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50382
'just inserted' FROM t0_template
 
50383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50384
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
50385
BEGIN
 
50386
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50387
f_charbig = 'updated by trigger'
 
50388
      WHERE f_int1 = - old.f_int1;
 
50389
END|
 
50390
DELETE FROM t0_aux
 
50391
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50392
        
 
50393
# check trigger-8 success:      1
 
50394
DROP TRIGGER trg_1;
 
50395
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50396
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50397
f_charbig = 'just inserted'
 
50398
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50399
DELETE FROM t0_aux
 
50400
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50401
DELETE FROM t1
 
50402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50403
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
50404
BEGIN
 
50405
SET new.f_int1 = old.f_int1 + @max_row,
 
50406
new.f_int2 = old.f_int2 - @max_row,
 
50407
new.f_charbig = '####updated per update trigger####';
 
50408
END|
 
50409
UPDATE t1
 
50410
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
50411
f_charbig = '####updated per update statement itself####';
 
50412
        
 
50413
# check trigger-9 success:      1
 
50414
DROP TRIGGER trg_2;
 
50415
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50416
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50417
f_charbig = CONCAT('===',f_char1,'===');
 
50418
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
50419
BEGIN
 
50420
SET new.f_int1 = new.f_int1 + @max_row,
 
50421
new.f_int2 = new.f_int2 - @max_row,
 
50422
new.f_charbig = '####updated per update trigger####';
 
50423
END|
 
50424
UPDATE t1
 
50425
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
50426
f_charbig = '####updated per update statement itself####';
 
50427
        
 
50428
# check trigger-10 success:     1
 
50429
DROP TRIGGER trg_2;
 
50430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50432
f_charbig = CONCAT('===',f_char1,'===');
 
50433
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
50434
BEGIN
 
50435
SET new.f_int1 = @my_max1 + @counter,
 
50436
new.f_int2 = @my_min2 - @counter,
 
50437
new.f_charbig = '####updated per insert trigger####';
 
50438
SET @counter = @counter + 1;
 
50439
END|
 
50440
SET @counter = 1;
 
50441
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
50442
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50443
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
50444
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
50445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
50446
ORDER BY f_int1;
 
50447
DROP TRIGGER trg_3;
 
50448
        
 
50449
# check trigger-11 success:     1
 
50450
DELETE FROM t1
 
50451
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
50452
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
50453
AND f_charbig = '####updated per insert trigger####';
 
50454
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
50455
BEGIN
 
50456
SET new.f_int1 = @my_max1 + @counter,
 
50457
new.f_int2 = @my_min2 - @counter,
 
50458
new.f_charbig = '####updated per insert trigger####';
 
50459
SET @counter = @counter + 1;
 
50460
END|
 
50461
SET @counter = 1;
 
50462
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
50463
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
50464
SELECT CAST(f_int1 AS CHAR),
 
50465
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
50466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
50467
ORDER BY f_int1;
 
50468
DROP TRIGGER trg_3;
 
50469
        
 
50470
# check trigger-12 success:     1
 
50471
DELETE FROM t1
 
50472
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
50473
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
50474
AND f_charbig = '####updated per insert trigger####';
 
50475
ANALYZE  TABLE t1;
 
50476
Table   Op      Msg_type        Msg_text
 
50477
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
50478
CHECK    TABLE t1 EXTENDED;
 
50479
Table   Op      Msg_type        Msg_text
 
50480
test.t1 check   note    The storage engine for the table doesn't support check
 
50481
CHECKSUM TABLE t1 EXTENDED;
 
50482
Table   Checksum
 
50483
test.t1 <some_value>
 
50484
OPTIMIZE TABLE t1;
 
50485
Table   Op      Msg_type        Msg_text
 
50486
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
50487
# check layout success:    1
 
50488
REPAIR   TABLE t1 EXTENDED;
 
50489
Table   Op      Msg_type        Msg_text
 
50490
test.t1 repair  note    The storage engine for the table doesn't support repair
 
50491
# check layout success:    1
 
50492
TRUNCATE t1;
 
50493
        
 
50494
# check TRUNCATE success:       1
 
50495
# check layout success:    1
 
50496
# End usability test (inc/partition_check.inc)
 
50497
DROP TABLE t1;
 
50498
CREATE TABLE t1 (
 
50499
f_int1 INTEGER,
 
50500
f_int2 INTEGER,
 
50501
f_char1 CHAR(20),
 
50502
f_char2 CHAR(20),
 
50503
f_charbig VARCHAR(1000)
 
50504
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
50505
)
 
50506
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
50507
(PARTITION part1 VALUES IN (0)
 
50508
(SUBPARTITION sp11, SUBPARTITION sp12),
 
50509
PARTITION part2 VALUES IN (1)
 
50510
(SUBPARTITION sp21, SUBPARTITION sp22),
 
50511
PARTITION part3 VALUES IN (2)
 
50512
(SUBPARTITION sp31, SUBPARTITION sp32),
 
50513
PARTITION part4 VALUES IN (NULL)
 
50514
(SUBPARTITION sp41, SUBPARTITION sp42));
 
50515
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50516
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
50517
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
50518
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
50519
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50520
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
50521
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
50522
# Start usability test (inc/partition_check.inc)
 
50523
create_command
 
50524
SHOW CREATE TABLE t1;
 
50525
Table   Create Table
 
50526
t1      CREATE TABLE `t1` (
 
50527
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
50528
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
50529
  `f_char1` char(20) DEFAULT NULL,
 
50530
  `f_char2` char(20) DEFAULT NULL,
 
50531
  `f_charbig` varchar(1000) DEFAULT NULL
 
50532
) ENGINE=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
50533
 
 
50534
# check prerequisites-1 success:    1
 
50535
# check COUNT(*) success:    1
 
50536
# check MIN/MAX(f_int1) success:    1
 
50537
# check MIN/MAX(f_int2) success:    1
 
50538
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50539
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
50540
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
50541
WHERE f_int1 IN (2,3);
 
50542
# check prerequisites-3 success:    1
 
50543
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
50544
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
50545
# check read via f_int1 success: 1
 
50546
# check read via f_int2 success: 1
 
50547
        
 
50548
# check multiple-1 success:     1
 
50549
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
50550
        
 
50551
# check multiple-2 success:     1
 
50552
INSERT INTO t1 SELECT * FROM t0_template
 
50553
WHERE MOD(f_int1,3) = 0;
 
50554
        
 
50555
# check multiple-3 success:     1
 
50556
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
50557
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
50558
AND @max_row_div2 + @max_row_div4;
 
50559
        
 
50560
# check multiple-4 success:     1
 
50561
DELETE FROM t1
 
50562
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
50563
AND @max_row_div2 + @max_row_div4 + @max_row;
 
50564
        
 
50565
# check multiple-5 success:     1
 
50566
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
50567
INSERT INTO t1
 
50568
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
50569
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
50570
f_charbig = '#SINGLE#';
 
50571
        
 
50572
# check single-1 success:       1
 
50573
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
50574
INSERT INTO t1
 
50575
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
50576
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
50577
f_charbig = '#SINGLE#';
 
50578
        
 
50579
# check single-2 success:       1
 
50580
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
50581
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
50582
UPDATE t1 SET f_int1 = @cur_value2
 
50583
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
50584
        
 
50585
# check single-3 success:       1
 
50586
SET @cur_value1= -1;
 
50587
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
50588
UPDATE t1 SET f_int1 = @cur_value1
 
50589
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
50590
        
 
50591
# check single-4 success:       1
 
50592
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
50593
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
50594
        
 
50595
# check single-5 success:       1
 
50596
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
50597
        
 
50598
# check single-6 success:       1
 
50599
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
50600
        
 
50601
# check single-7 success:       1
 
50602
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
50603
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
50604
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
50605
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
50606
f_charbig = '#NULL#';
 
50607
INSERT INTO t1
 
50608
SET f_int1 = NULL , f_int2 = -@max_row,
 
50609
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
50610
f_charbig = '#NULL#';
 
50611
ERROR 23000: Column 'f_int1' cannot be null
 
50612
# check null success:    1
 
50613
DELETE FROM t1
 
50614
WHERE f_int1 = 0 AND f_int2 = 0
 
50615
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
50616
AND f_charbig = '#NULL#';
 
50617
SET AUTOCOMMIT= 0;
 
50618
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50619
SELECT f_int1, f_int1, '', '', 'was inserted'
 
50620
FROM t0_template source_tab
 
50621
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
50622
        
 
50623
# check transactions-1 success:         1
 
50624
COMMIT WORK;
 
50625
        
 
50626
# check transactions-2 success:         1
 
50627
ROLLBACK WORK;
 
50628
        
 
50629
# check transactions-3 success:         1
 
50630
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
50631
COMMIT WORK;
 
50632
ROLLBACK WORK;
 
50633
        
 
50634
# check transactions-4 success:         1
 
50635
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50636
SELECT f_int1, f_int1, '', '', 'was inserted'
 
50637
FROM t0_template source_tab
 
50638
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
50639
        
 
50640
# check transactions-5 success:         1
 
50641
ROLLBACK WORK;
 
50642
        
 
50643
# check transactions-6 success:         1
 
50644
# INFO: Storage engine used for t1 seems to be transactional.
 
50645
COMMIT;
 
50646
        
 
50647
# check transactions-7 success:         1
 
50648
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
50649
COMMIT WORK;
 
50650
SET @@session.sql_mode = 'traditional';
 
50651
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
50652
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50653
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
50654
'', '', 'was inserted' FROM t0_template
 
50655
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
50656
ERROR 22012: Division by 0
 
50657
COMMIT;
 
50658
        
 
50659
# check transactions-8 success:         1
 
50660
# INFO: Storage engine used for t1 seems to be able to revert
 
50661
#       changes made by the failing statement.
 
50662
SET @@session.sql_mode = '';
 
50663
SET AUTOCOMMIT= 1;
 
50664
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
50665
COMMIT WORK;
 
50666
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
50667
        
 
50668
# check special-1 success:      1
 
50669
UPDATE t1 SET f_charbig = '';
 
50670
        
 
50671
# check special-2 success:      1
 
50672
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
50673
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50674
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
50675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50678
'just inserted' FROM t0_template
 
50679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50680
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
50681
BEGIN
 
50682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50683
f_charbig = 'updated by trigger'
 
50684
      WHERE f_int1 = new.f_int1;
 
50685
END|
 
50686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50687
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
50688
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50689
        
 
50690
# check trigger-1 success:      1
 
50691
DROP TRIGGER trg_1;
 
50692
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50693
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50694
f_charbig = 'just inserted'
 
50695
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50696
DELETE FROM t0_aux
 
50697
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50699
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50700
'just inserted' FROM t0_template
 
50701
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50702
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
50703
BEGIN
 
50704
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50705
f_charbig = 'updated by trigger'
 
50706
      WHERE f_int1 = new.f_int1;
 
50707
END|
 
50708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50709
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
50710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50711
        
 
50712
# check trigger-2 success:      1
 
50713
DROP TRIGGER trg_1;
 
50714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50716
f_charbig = 'just inserted'
 
50717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50718
DELETE FROM t0_aux
 
50719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50722
'just inserted' FROM t0_template
 
50723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50724
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
50725
BEGIN
 
50726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50727
f_charbig = 'updated by trigger'
 
50728
      WHERE f_int1 = new.f_int1;
 
50729
END|
 
50730
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50732
        
 
50733
# check trigger-3 success:      1
 
50734
DROP TRIGGER trg_1;
 
50735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50737
f_charbig = 'just inserted'
 
50738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50739
DELETE FROM t0_aux
 
50740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50741
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50742
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50743
'just inserted' FROM t0_template
 
50744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50745
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
50746
BEGIN
 
50747
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50748
f_charbig = 'updated by trigger'
 
50749
      WHERE f_int1 = - old.f_int1;
 
50750
END|
 
50751
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50752
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50753
        
 
50754
# check trigger-4 success:      1
 
50755
DROP TRIGGER trg_1;
 
50756
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50757
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50758
f_charbig = 'just inserted'
 
50759
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50760
DELETE FROM t0_aux
 
50761
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50762
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50763
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50764
'just inserted' FROM t0_template
 
50765
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50766
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
50767
BEGIN
 
50768
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50769
f_charbig = 'updated by trigger'
 
50770
      WHERE f_int1 = new.f_int1;
 
50771
END|
 
50772
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50773
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50774
        
 
50775
# check trigger-5 success:      1
 
50776
DROP TRIGGER trg_1;
 
50777
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50778
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50779
f_charbig = 'just inserted'
 
50780
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50781
DELETE FROM t0_aux
 
50782
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50783
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50784
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50785
'just inserted' FROM t0_template
 
50786
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50787
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
50788
BEGIN
 
50789
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50790
f_charbig = 'updated by trigger'
 
50791
      WHERE f_int1 = - old.f_int1;
 
50792
END|
 
50793
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
50794
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50795
        
 
50796
# check trigger-6 success:      1
 
50797
DROP TRIGGER trg_1;
 
50798
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50799
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50800
f_charbig = 'just inserted'
 
50801
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50802
DELETE FROM t0_aux
 
50803
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50804
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50805
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50806
'just inserted' FROM t0_template
 
50807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50808
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
50809
BEGIN
 
50810
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50811
f_charbig = 'updated by trigger'
 
50812
      WHERE f_int1 = - old.f_int1;
 
50813
END|
 
50814
DELETE FROM t0_aux
 
50815
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50816
        
 
50817
# check trigger-7 success:      1
 
50818
DROP TRIGGER trg_1;
 
50819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50821
f_charbig = 'just inserted'
 
50822
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50823
DELETE FROM t0_aux
 
50824
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50825
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50826
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
50827
'just inserted' FROM t0_template
 
50828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50829
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
50830
BEGIN
 
50831
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
50832
f_charbig = 'updated by trigger'
 
50833
      WHERE f_int1 = - old.f_int1;
 
50834
END|
 
50835
DELETE FROM t0_aux
 
50836
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
50837
        
 
50838
# check trigger-8 success:      1
 
50839
DROP TRIGGER trg_1;
 
50840
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50841
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50842
f_charbig = 'just inserted'
 
50843
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
50844
DELETE FROM t0_aux
 
50845
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50846
DELETE FROM t1
 
50847
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
50848
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
50849
BEGIN
 
50850
SET new.f_int1 = old.f_int1 + @max_row,
 
50851
new.f_int2 = old.f_int2 - @max_row,
 
50852
new.f_charbig = '####updated per update trigger####';
 
50853
END|
 
50854
UPDATE t1
 
50855
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
50856
f_charbig = '####updated per update statement itself####';
 
50857
        
 
50858
# check trigger-9 success:      1
 
50859
DROP TRIGGER trg_2;
 
50860
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50861
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50862
f_charbig = CONCAT('===',f_char1,'===');
 
50863
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
50864
BEGIN
 
50865
SET new.f_int1 = new.f_int1 + @max_row,
 
50866
new.f_int2 = new.f_int2 - @max_row,
 
50867
new.f_charbig = '####updated per update trigger####';
 
50868
END|
 
50869
UPDATE t1
 
50870
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
50871
f_charbig = '####updated per update statement itself####';
 
50872
        
 
50873
# check trigger-10 success:     1
 
50874
DROP TRIGGER trg_2;
 
50875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
50876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
50877
f_charbig = CONCAT('===',f_char1,'===');
 
50878
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
50879
BEGIN
 
50880
SET new.f_int1 = @my_max1 + @counter,
 
50881
new.f_int2 = @my_min2 - @counter,
 
50882
new.f_charbig = '####updated per insert trigger####';
 
50883
SET @counter = @counter + 1;
 
50884
END|
 
50885
SET @counter = 1;
 
50886
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
50887
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50888
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
50889
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
50890
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
50891
ORDER BY f_int1;
 
50892
DROP TRIGGER trg_3;
 
50893
        
 
50894
# check trigger-11 success:     1
 
50895
DELETE FROM t1
 
50896
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
50897
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
50898
AND f_charbig = '####updated per insert trigger####';
 
50899
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
50900
BEGIN
 
50901
SET new.f_int1 = @my_max1 + @counter,
 
50902
new.f_int2 = @my_min2 - @counter,
 
50903
new.f_charbig = '####updated per insert trigger####';
 
50904
SET @counter = @counter + 1;
 
50905
END|
 
50906
SET @counter = 1;
 
50907
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
50908
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
50909
SELECT CAST(f_int1 AS CHAR),
 
50910
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
50911
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
50912
ORDER BY f_int1;
 
50913
DROP TRIGGER trg_3;
 
50914
        
 
50915
# check trigger-12 success:     1
 
50916
DELETE FROM t1
 
50917
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
50918
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
50919
AND f_charbig = '####updated per insert trigger####';
 
50920
ANALYZE  TABLE t1;
 
50921
Table   Op      Msg_type        Msg_text
 
50922
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
50923
CHECK    TABLE t1 EXTENDED;
 
50924
Table   Op      Msg_type        Msg_text
 
50925
test.t1 check   note    The storage engine for the table doesn't support check
 
50926
CHECKSUM TABLE t1 EXTENDED;
 
50927
Table   Checksum
 
50928
test.t1 <some_value>
 
50929
OPTIMIZE TABLE t1;
 
50930
Table   Op      Msg_type        Msg_text
 
50931
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
50932
# check layout success:    1
 
50933
REPAIR   TABLE t1 EXTENDED;
 
50934
Table   Op      Msg_type        Msg_text
 
50935
test.t1 repair  note    The storage engine for the table doesn't support repair
 
50936
# check layout success:    1
 
50937
TRUNCATE t1;
 
50938
        
 
50939
# check TRUNCATE success:       1
 
50940
# check layout success:    1
 
50941
# End usability test (inc/partition_check.inc)
 
50942
DROP TABLE t1;
 
50943
CREATE TABLE t1 (
 
50944
f_int1 INTEGER,
 
50945
f_int2 INTEGER,
 
50946
f_char1 CHAR(20),
 
50947
f_char2 CHAR(20),
 
50948
f_charbig VARCHAR(1000)
 
50949
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
50950
)
 
50951
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
50952
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
50953
(PARTITION part1 VALUES IN (0),
 
50954
 PARTITION part2 VALUES IN (1),
 
50955
 PARTITION part3 VALUES IN (NULL));
 
50956
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50957
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
50958
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
50959
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
50960
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
50961
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
50962
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
50963
# Start usability test (inc/partition_check.inc)
 
50964
create_command
 
50965
SHOW CREATE TABLE t1;
 
50966
Table   Create Table
 
50967
t1      CREATE TABLE `t1` (
 
50968
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
50969
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
50970
  `f_char1` char(20) DEFAULT NULL,
 
50971
  `f_char2` char(20) DEFAULT NULL,
 
50972
  `f_charbig` varchar(1000) DEFAULT NULL
 
50973
) ENGINE=InnoDB 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 = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
50974
 
 
50975
# check prerequisites-1 success:    1
 
50976
# check COUNT(*) success:    1
 
50977
# check MIN/MAX(f_int1) success:    1
 
50978
# check MIN/MAX(f_int2) success:    1
 
50979
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
50980
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
50981
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
50982
WHERE f_int1 IN (2,3);
 
50983
# check prerequisites-3 success:    1
 
50984
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
50985
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
50986
# check read via f_int1 success: 1
 
50987
# check read via f_int2 success: 1
 
50988
        
 
50989
# check multiple-1 success:     1
 
50990
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
50991
        
 
50992
# check multiple-2 success:     1
 
50993
INSERT INTO t1 SELECT * FROM t0_template
 
50994
WHERE MOD(f_int1,3) = 0;
 
50995
        
 
50996
# check multiple-3 success:     1
 
50997
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
50998
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
50999
AND @max_row_div2 + @max_row_div4;
 
51000
        
 
51001
# check multiple-4 success:     1
 
51002
DELETE FROM t1
 
51003
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
51004
AND @max_row_div2 + @max_row_div4 + @max_row;
 
51005
        
 
51006
# check multiple-5 success:     1
 
51007
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
51008
INSERT INTO t1
 
51009
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
51010
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
51011
f_charbig = '#SINGLE#';
 
51012
        
 
51013
# check single-1 success:       1
 
51014
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
51015
INSERT INTO t1
 
51016
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
51017
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
51018
f_charbig = '#SINGLE#';
 
51019
        
 
51020
# check single-2 success:       1
 
51021
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
51022
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
51023
UPDATE t1 SET f_int1 = @cur_value2
 
51024
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
51025
        
 
51026
# check single-3 success:       1
 
51027
SET @cur_value1= -1;
 
51028
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
51029
UPDATE t1 SET f_int1 = @cur_value1
 
51030
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
51031
        
 
51032
# check single-4 success:       1
 
51033
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
51034
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
51035
        
 
51036
# check single-5 success:       1
 
51037
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
51038
        
 
51039
# check single-6 success:       1
 
51040
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
51041
        
 
51042
# check single-7 success:       1
 
51043
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
51044
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
51045
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
51046
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
51047
f_charbig = '#NULL#';
 
51048
INSERT INTO t1
 
51049
SET f_int1 = NULL , f_int2 = -@max_row,
 
51050
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
51051
f_charbig = '#NULL#';
 
51052
ERROR 23000: Column 'f_int1' cannot be null
 
51053
# check null success:    1
 
51054
DELETE FROM t1
 
51055
WHERE f_int1 = 0 AND f_int2 = 0
 
51056
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
51057
AND f_charbig = '#NULL#';
 
51058
SET AUTOCOMMIT= 0;
 
51059
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51060
SELECT f_int1, f_int1, '', '', 'was inserted'
 
51061
FROM t0_template source_tab
 
51062
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51063
        
 
51064
# check transactions-1 success:         1
 
51065
COMMIT WORK;
 
51066
        
 
51067
# check transactions-2 success:         1
 
51068
ROLLBACK WORK;
 
51069
        
 
51070
# check transactions-3 success:         1
 
51071
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51072
COMMIT WORK;
 
51073
ROLLBACK WORK;
 
51074
        
 
51075
# check transactions-4 success:         1
 
51076
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51077
SELECT f_int1, f_int1, '', '', 'was inserted'
 
51078
FROM t0_template source_tab
 
51079
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51080
        
 
51081
# check transactions-5 success:         1
 
51082
ROLLBACK WORK;
 
51083
        
 
51084
# check transactions-6 success:         1
 
51085
# INFO: Storage engine used for t1 seems to be transactional.
 
51086
COMMIT;
 
51087
        
 
51088
# check transactions-7 success:         1
 
51089
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51090
COMMIT WORK;
 
51091
SET @@session.sql_mode = 'traditional';
 
51092
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
51093
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51094
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
51095
'', '', 'was inserted' FROM t0_template
 
51096
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51097
ERROR 22012: Division by 0
 
51098
COMMIT;
 
51099
        
 
51100
# check transactions-8 success:         1
 
51101
# INFO: Storage engine used for t1 seems to be able to revert
 
51102
#       changes made by the failing statement.
 
51103
SET @@session.sql_mode = '';
 
51104
SET AUTOCOMMIT= 1;
 
51105
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51106
COMMIT WORK;
 
51107
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
51108
        
 
51109
# check special-1 success:      1
 
51110
UPDATE t1 SET f_charbig = '';
 
51111
        
 
51112
# check special-2 success:      1
 
51113
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
51114
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51115
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
51116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51117
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51118
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51119
'just inserted' FROM t0_template
 
51120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51121
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
51122
BEGIN
 
51123
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51124
f_charbig = 'updated by trigger'
 
51125
      WHERE f_int1 = new.f_int1;
 
51126
END|
 
51127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51128
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
51129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51130
        
 
51131
# check trigger-1 success:      1
 
51132
DROP TRIGGER trg_1;
 
51133
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51134
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51135
f_charbig = 'just inserted'
 
51136
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51137
DELETE FROM t0_aux
 
51138
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51139
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51140
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51141
'just inserted' FROM t0_template
 
51142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51143
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
51144
BEGIN
 
51145
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51146
f_charbig = 'updated by trigger'
 
51147
      WHERE f_int1 = new.f_int1;
 
51148
END|
 
51149
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51150
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
51151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51152
        
 
51153
# check trigger-2 success:      1
 
51154
DROP TRIGGER trg_1;
 
51155
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51156
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51157
f_charbig = 'just inserted'
 
51158
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51159
DELETE FROM t0_aux
 
51160
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51161
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51162
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51163
'just inserted' FROM t0_template
 
51164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51165
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
51166
BEGIN
 
51167
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51168
f_charbig = 'updated by trigger'
 
51169
      WHERE f_int1 = new.f_int1;
 
51170
END|
 
51171
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51172
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51173
        
 
51174
# check trigger-3 success:      1
 
51175
DROP TRIGGER trg_1;
 
51176
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51177
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51178
f_charbig = 'just inserted'
 
51179
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51180
DELETE FROM t0_aux
 
51181
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51182
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51183
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51184
'just inserted' FROM t0_template
 
51185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51186
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
51187
BEGIN
 
51188
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51189
f_charbig = 'updated by trigger'
 
51190
      WHERE f_int1 = - old.f_int1;
 
51191
END|
 
51192
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51193
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51194
        
 
51195
# check trigger-4 success:      1
 
51196
DROP TRIGGER trg_1;
 
51197
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51198
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51199
f_charbig = 'just inserted'
 
51200
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51201
DELETE FROM t0_aux
 
51202
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51203
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51204
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51205
'just inserted' FROM t0_template
 
51206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51207
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
51208
BEGIN
 
51209
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51210
f_charbig = 'updated by trigger'
 
51211
      WHERE f_int1 = new.f_int1;
 
51212
END|
 
51213
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51214
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51215
        
 
51216
# check trigger-5 success:      1
 
51217
DROP TRIGGER trg_1;
 
51218
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51219
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51220
f_charbig = 'just inserted'
 
51221
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51222
DELETE FROM t0_aux
 
51223
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51224
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51225
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51226
'just inserted' FROM t0_template
 
51227
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51228
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
51229
BEGIN
 
51230
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51231
f_charbig = 'updated by trigger'
 
51232
      WHERE f_int1 = - old.f_int1;
 
51233
END|
 
51234
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51235
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51236
        
 
51237
# check trigger-6 success:      1
 
51238
DROP TRIGGER trg_1;
 
51239
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51240
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51241
f_charbig = 'just inserted'
 
51242
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51243
DELETE FROM t0_aux
 
51244
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51245
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51246
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51247
'just inserted' FROM t0_template
 
51248
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51249
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
51250
BEGIN
 
51251
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51252
f_charbig = 'updated by trigger'
 
51253
      WHERE f_int1 = - old.f_int1;
 
51254
END|
 
51255
DELETE FROM t0_aux
 
51256
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51257
        
 
51258
# check trigger-7 success:      1
 
51259
DROP TRIGGER trg_1;
 
51260
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51261
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51262
f_charbig = 'just inserted'
 
51263
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51264
DELETE FROM t0_aux
 
51265
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51266
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51267
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51268
'just inserted' FROM t0_template
 
51269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51270
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
51271
BEGIN
 
51272
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51273
f_charbig = 'updated by trigger'
 
51274
      WHERE f_int1 = - old.f_int1;
 
51275
END|
 
51276
DELETE FROM t0_aux
 
51277
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51278
        
 
51279
# check trigger-8 success:      1
 
51280
DROP TRIGGER trg_1;
 
51281
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51282
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51283
f_charbig = 'just inserted'
 
51284
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51285
DELETE FROM t0_aux
 
51286
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51287
DELETE FROM t1
 
51288
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51289
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
51290
BEGIN
 
51291
SET new.f_int1 = old.f_int1 + @max_row,
 
51292
new.f_int2 = old.f_int2 - @max_row,
 
51293
new.f_charbig = '####updated per update trigger####';
 
51294
END|
 
51295
UPDATE t1
 
51296
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
51297
f_charbig = '####updated per update statement itself####';
 
51298
        
 
51299
# check trigger-9 success:      1
 
51300
DROP TRIGGER trg_2;
 
51301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51303
f_charbig = CONCAT('===',f_char1,'===');
 
51304
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
51305
BEGIN
 
51306
SET new.f_int1 = new.f_int1 + @max_row,
 
51307
new.f_int2 = new.f_int2 - @max_row,
 
51308
new.f_charbig = '####updated per update trigger####';
 
51309
END|
 
51310
UPDATE t1
 
51311
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
51312
f_charbig = '####updated per update statement itself####';
 
51313
        
 
51314
# check trigger-10 success:     1
 
51315
DROP TRIGGER trg_2;
 
51316
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51317
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51318
f_charbig = CONCAT('===',f_char1,'===');
 
51319
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
51320
BEGIN
 
51321
SET new.f_int1 = @my_max1 + @counter,
 
51322
new.f_int2 = @my_min2 - @counter,
 
51323
new.f_charbig = '####updated per insert trigger####';
 
51324
SET @counter = @counter + 1;
 
51325
END|
 
51326
SET @counter = 1;
 
51327
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
51328
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51329
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
51330
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
51331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
51332
ORDER BY f_int1;
 
51333
DROP TRIGGER trg_3;
 
51334
        
 
51335
# check trigger-11 success:     1
 
51336
DELETE FROM t1
 
51337
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
51338
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
51339
AND f_charbig = '####updated per insert trigger####';
 
51340
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
51341
BEGIN
 
51342
SET new.f_int1 = @my_max1 + @counter,
 
51343
new.f_int2 = @my_min2 - @counter,
 
51344
new.f_charbig = '####updated per insert trigger####';
 
51345
SET @counter = @counter + 1;
 
51346
END|
 
51347
SET @counter = 1;
 
51348
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
51349
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
51350
SELECT CAST(f_int1 AS CHAR),
 
51351
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
51352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
51353
ORDER BY f_int1;
 
51354
DROP TRIGGER trg_3;
 
51355
        
 
51356
# check trigger-12 success:     1
 
51357
DELETE FROM t1
 
51358
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
51359
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
51360
AND f_charbig = '####updated per insert trigger####';
 
51361
ANALYZE  TABLE t1;
 
51362
Table   Op      Msg_type        Msg_text
 
51363
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
51364
CHECK    TABLE t1 EXTENDED;
 
51365
Table   Op      Msg_type        Msg_text
 
51366
test.t1 check   note    The storage engine for the table doesn't support check
 
51367
CHECKSUM TABLE t1 EXTENDED;
 
51368
Table   Checksum
 
51369
test.t1 <some_value>
 
51370
OPTIMIZE TABLE t1;
 
51371
Table   Op      Msg_type        Msg_text
 
51372
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
51373
# check layout success:    1
 
51374
REPAIR   TABLE t1 EXTENDED;
 
51375
Table   Op      Msg_type        Msg_text
 
51376
test.t1 repair  note    The storage engine for the table doesn't support repair
 
51377
# check layout success:    1
 
51378
TRUNCATE t1;
 
51379
        
 
51380
# check TRUNCATE success:       1
 
51381
# check layout success:    1
 
51382
# End usability test (inc/partition_check.inc)
 
51383
DROP TABLE t1;
 
51384
DROP TABLE IF EXISTS t1;
 
51385
CREATE TABLE t1 (
 
51386
f_int1 INTEGER,
 
51387
f_int2 INTEGER,
 
51388
f_char1 CHAR(20),
 
51389
f_char2 CHAR(20),
 
51390
f_charbig VARCHAR(1000)
 
51391
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
51392
)
 
51393
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
51394
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51395
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
51396
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
51397
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
51398
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51399
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
51400
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
51401
# Start usability test (inc/partition_check.inc)
 
51402
create_command
 
51403
SHOW CREATE TABLE t1;
 
51404
Table   Create Table
 
51405
t1      CREATE TABLE `t1` (
 
51406
  `f_int1` int(11) DEFAULT NULL,
 
51407
  `f_int2` int(11) DEFAULT NULL,
 
51408
  `f_char1` char(20) DEFAULT NULL,
 
51409
  `f_char2` char(20) DEFAULT NULL,
 
51410
  `f_charbig` varchar(1000) DEFAULT NULL
 
51411
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
51412
 
 
51413
# check prerequisites-1 success:    1
 
51414
# check COUNT(*) success:    1
 
51415
# check MIN/MAX(f_int1) success:    1
 
51416
# check MIN/MAX(f_int2) success:    1
 
51417
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51418
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
51419
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
51420
WHERE f_int1 IN (2,3);
 
51421
# check prerequisites-3 success:    1
 
51422
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
51423
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
51424
# check read via f_int1 success: 1
 
51425
# check read via f_int2 success: 1
 
51426
        
 
51427
# check multiple-1 success:     1
 
51428
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
51429
        
 
51430
# check multiple-2 success:     1
 
51431
INSERT INTO t1 SELECT * FROM t0_template
 
51432
WHERE MOD(f_int1,3) = 0;
 
51433
        
 
51434
# check multiple-3 success:     1
 
51435
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
51436
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
51437
AND @max_row_div2 + @max_row_div4;
 
51438
        
 
51439
# check multiple-4 success:     1
 
51440
DELETE FROM t1
 
51441
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
51442
AND @max_row_div2 + @max_row_div4 + @max_row;
 
51443
        
 
51444
# check multiple-5 success:     1
 
51445
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
51446
INSERT INTO t1
 
51447
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
51448
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
51449
f_charbig = '#SINGLE#';
 
51450
        
 
51451
# check single-1 success:       1
 
51452
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
51453
INSERT INTO t1
 
51454
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
51455
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
51456
f_charbig = '#SINGLE#';
 
51457
        
 
51458
# check single-2 success:       1
 
51459
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
51460
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
51461
UPDATE t1 SET f_int1 = @cur_value2
 
51462
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
51463
        
 
51464
# check single-3 success:       1
 
51465
SET @cur_value1= -1;
 
51466
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
51467
UPDATE t1 SET f_int1 = @cur_value1
 
51468
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
51469
        
 
51470
# check single-4 success:       1
 
51471
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
51472
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
51473
        
 
51474
# check single-5 success:       1
 
51475
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
51476
        
 
51477
# check single-6 success:       1
 
51478
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
51479
        
 
51480
# check single-7 success:       1
 
51481
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
51482
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
51483
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
51484
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
51485
f_charbig = '#NULL#';
 
51486
INSERT INTO t1
 
51487
SET f_int1 = NULL , f_int2 = -@max_row,
 
51488
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
51489
f_charbig = '#NULL#';
 
51490
# check null success:    1
 
51491
        
 
51492
# check null-1 success:         1
 
51493
UPDATE t1 SET f_int1 = -@max_row
 
51494
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
51495
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
51496
        
 
51497
# check null-2 success:         1
 
51498
UPDATE t1 SET f_int1 = NULL
 
51499
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
51500
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
51501
        
 
51502
# check null-3 success:         1
 
51503
DELETE FROM t1
 
51504
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
51505
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
51506
        
 
51507
# check null-4 success:         1
 
51508
DELETE FROM t1
 
51509
WHERE f_int1 = 0 AND f_int2 = 0
 
51510
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
51511
AND f_charbig = '#NULL#';
 
51512
SET AUTOCOMMIT= 0;
 
51513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51514
SELECT f_int1, f_int1, '', '', 'was inserted'
 
51515
FROM t0_template source_tab
 
51516
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51517
        
 
51518
# check transactions-1 success:         1
 
51519
COMMIT WORK;
 
51520
        
 
51521
# check transactions-2 success:         1
 
51522
ROLLBACK WORK;
 
51523
        
 
51524
# check transactions-3 success:         1
 
51525
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51526
COMMIT WORK;
 
51527
ROLLBACK WORK;
 
51528
        
 
51529
# check transactions-4 success:         1
 
51530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51531
SELECT f_int1, f_int1, '', '', 'was inserted'
 
51532
FROM t0_template source_tab
 
51533
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51534
        
 
51535
# check transactions-5 success:         1
 
51536
ROLLBACK WORK;
 
51537
        
 
51538
# check transactions-6 success:         1
 
51539
# INFO: Storage engine used for t1 seems to be transactional.
 
51540
COMMIT;
 
51541
        
 
51542
# check transactions-7 success:         1
 
51543
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51544
COMMIT WORK;
 
51545
SET @@session.sql_mode = 'traditional';
 
51546
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
51547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51548
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
51549
'', '', 'was inserted' FROM t0_template
 
51550
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51551
ERROR 22012: Division by 0
 
51552
COMMIT;
 
51553
        
 
51554
# check transactions-8 success:         1
 
51555
# INFO: Storage engine used for t1 seems to be able to revert
 
51556
#       changes made by the failing statement.
 
51557
SET @@session.sql_mode = '';
 
51558
SET AUTOCOMMIT= 1;
 
51559
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51560
COMMIT WORK;
 
51561
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
51562
        
 
51563
# check special-1 success:      1
 
51564
UPDATE t1 SET f_charbig = '';
 
51565
        
 
51566
# check special-2 success:      1
 
51567
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
51568
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51569
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
51570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51573
'just inserted' FROM t0_template
 
51574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51575
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
51576
BEGIN
 
51577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51578
f_charbig = 'updated by trigger'
 
51579
      WHERE f_int1 = new.f_int1;
 
51580
END|
 
51581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51582
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
51583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51584
        
 
51585
# check trigger-1 success:      1
 
51586
DROP TRIGGER trg_1;
 
51587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51589
f_charbig = 'just inserted'
 
51590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51591
DELETE FROM t0_aux
 
51592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51595
'just inserted' FROM t0_template
 
51596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51597
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
51598
BEGIN
 
51599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51600
f_charbig = 'updated by trigger'
 
51601
      WHERE f_int1 = new.f_int1;
 
51602
END|
 
51603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51604
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
51605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51606
        
 
51607
# check trigger-2 success:      1
 
51608
DROP TRIGGER trg_1;
 
51609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51611
f_charbig = 'just inserted'
 
51612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51613
DELETE FROM t0_aux
 
51614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51616
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51617
'just inserted' FROM t0_template
 
51618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51619
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
51620
BEGIN
 
51621
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51622
f_charbig = 'updated by trigger'
 
51623
      WHERE f_int1 = new.f_int1;
 
51624
END|
 
51625
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51626
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51627
        
 
51628
# check trigger-3 success:      1
 
51629
DROP TRIGGER trg_1;
 
51630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51632
f_charbig = 'just inserted'
 
51633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51634
DELETE FROM t0_aux
 
51635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51638
'just inserted' FROM t0_template
 
51639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51640
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
51641
BEGIN
 
51642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51643
f_charbig = 'updated by trigger'
 
51644
      WHERE f_int1 = - old.f_int1;
 
51645
END|
 
51646
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51648
        
 
51649
# check trigger-4 success:      1
 
51650
DROP TRIGGER trg_1;
 
51651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51653
f_charbig = 'just inserted'
 
51654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51655
DELETE FROM t0_aux
 
51656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51659
'just inserted' FROM t0_template
 
51660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51661
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
51662
BEGIN
 
51663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51664
f_charbig = 'updated by trigger'
 
51665
      WHERE f_int1 = new.f_int1;
 
51666
END|
 
51667
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51668
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51669
        
 
51670
# check trigger-5 success:      1
 
51671
DROP TRIGGER trg_1;
 
51672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51674
f_charbig = 'just inserted'
 
51675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51676
DELETE FROM t0_aux
 
51677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51680
'just inserted' FROM t0_template
 
51681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51682
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
51683
BEGIN
 
51684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51685
f_charbig = 'updated by trigger'
 
51686
      WHERE f_int1 = - old.f_int1;
 
51687
END|
 
51688
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
51689
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51690
        
 
51691
# check trigger-6 success:      1
 
51692
DROP TRIGGER trg_1;
 
51693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51695
f_charbig = 'just inserted'
 
51696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51697
DELETE FROM t0_aux
 
51698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51701
'just inserted' FROM t0_template
 
51702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51703
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
51704
BEGIN
 
51705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51706
f_charbig = 'updated by trigger'
 
51707
      WHERE f_int1 = - old.f_int1;
 
51708
END|
 
51709
DELETE FROM t0_aux
 
51710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51711
        
 
51712
# check trigger-7 success:      1
 
51713
DROP TRIGGER trg_1;
 
51714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51716
f_charbig = 'just inserted'
 
51717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51718
DELETE FROM t0_aux
 
51719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
51722
'just inserted' FROM t0_template
 
51723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51724
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
51725
BEGIN
 
51726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
51727
f_charbig = 'updated by trigger'
 
51728
      WHERE f_int1 = - old.f_int1;
 
51729
END|
 
51730
DELETE FROM t0_aux
 
51731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
51732
        
 
51733
# check trigger-8 success:      1
 
51734
DROP TRIGGER trg_1;
 
51735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51737
f_charbig = 'just inserted'
 
51738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
51739
DELETE FROM t0_aux
 
51740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51741
DELETE FROM t1
 
51742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
51743
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
51744
BEGIN
 
51745
SET new.f_int1 = old.f_int1 + @max_row,
 
51746
new.f_int2 = old.f_int2 - @max_row,
 
51747
new.f_charbig = '####updated per update trigger####';
 
51748
END|
 
51749
UPDATE t1
 
51750
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
51751
f_charbig = '####updated per update statement itself####';
 
51752
        
 
51753
# check trigger-9 success:      1
 
51754
DROP TRIGGER trg_2;
 
51755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51757
f_charbig = CONCAT('===',f_char1,'===');
 
51758
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
51759
BEGIN
 
51760
SET new.f_int1 = new.f_int1 + @max_row,
 
51761
new.f_int2 = new.f_int2 - @max_row,
 
51762
new.f_charbig = '####updated per update trigger####';
 
51763
END|
 
51764
UPDATE t1
 
51765
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
51766
f_charbig = '####updated per update statement itself####';
 
51767
        
 
51768
# check trigger-10 success:     1
 
51769
DROP TRIGGER trg_2;
 
51770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
51771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
51772
f_charbig = CONCAT('===',f_char1,'===');
 
51773
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
51774
BEGIN
 
51775
SET new.f_int1 = @my_max1 + @counter,
 
51776
new.f_int2 = @my_min2 - @counter,
 
51777
new.f_charbig = '####updated per insert trigger####';
 
51778
SET @counter = @counter + 1;
 
51779
END|
 
51780
SET @counter = 1;
 
51781
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
51782
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51783
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
51784
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
51785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
51786
ORDER BY f_int1;
 
51787
DROP TRIGGER trg_3;
 
51788
        
 
51789
# check trigger-11 success:     1
 
51790
DELETE FROM t1
 
51791
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
51792
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
51793
AND f_charbig = '####updated per insert trigger####';
 
51794
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
51795
BEGIN
 
51796
SET new.f_int1 = @my_max1 + @counter,
 
51797
new.f_int2 = @my_min2 - @counter,
 
51798
new.f_charbig = '####updated per insert trigger####';
 
51799
SET @counter = @counter + 1;
 
51800
END|
 
51801
SET @counter = 1;
 
51802
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
51803
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
51804
SELECT CAST(f_int1 AS CHAR),
 
51805
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
51806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
51807
ORDER BY f_int1;
 
51808
DROP TRIGGER trg_3;
 
51809
        
 
51810
# check trigger-12 success:     1
 
51811
DELETE FROM t1
 
51812
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
51813
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
51814
AND f_charbig = '####updated per insert trigger####';
 
51815
ANALYZE  TABLE t1;
 
51816
Table   Op      Msg_type        Msg_text
 
51817
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
51818
CHECK    TABLE t1 EXTENDED;
 
51819
Table   Op      Msg_type        Msg_text
 
51820
test.t1 check   note    The storage engine for the table doesn't support check
 
51821
CHECKSUM TABLE t1 EXTENDED;
 
51822
Table   Checksum
 
51823
test.t1 <some_value>
 
51824
OPTIMIZE TABLE t1;
 
51825
Table   Op      Msg_type        Msg_text
 
51826
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
51827
# check layout success:    1
 
51828
REPAIR   TABLE t1 EXTENDED;
 
51829
Table   Op      Msg_type        Msg_text
 
51830
test.t1 repair  note    The storage engine for the table doesn't support repair
 
51831
# check layout success:    1
 
51832
TRUNCATE t1;
 
51833
        
 
51834
# check TRUNCATE success:       1
 
51835
# check layout success:    1
 
51836
# End usability test (inc/partition_check.inc)
 
51837
DROP TABLE t1;
 
51838
CREATE TABLE t1 (
 
51839
f_int1 INTEGER,
 
51840
f_int2 INTEGER,
 
51841
f_char1 CHAR(20),
 
51842
f_char2 CHAR(20),
 
51843
f_charbig VARCHAR(1000)
 
51844
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
51845
)
 
51846
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
51847
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51848
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
51849
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
51850
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
51851
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
51852
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
51853
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
51854
# Start usability test (inc/partition_check.inc)
 
51855
create_command
 
51856
SHOW CREATE TABLE t1;
 
51857
Table   Create Table
 
51858
t1      CREATE TABLE `t1` (
 
51859
  `f_int1` int(11) DEFAULT NULL,
 
51860
  `f_int2` int(11) DEFAULT NULL,
 
51861
  `f_char1` char(20) DEFAULT NULL,
 
51862
  `f_char2` char(20) DEFAULT NULL,
 
51863
  `f_charbig` varchar(1000) DEFAULT NULL
 
51864
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
51865
 
 
51866
# check prerequisites-1 success:    1
 
51867
# check COUNT(*) success:    1
 
51868
# check MIN/MAX(f_int1) success:    1
 
51869
# check MIN/MAX(f_int2) success:    1
 
51870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51871
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
51872
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
51873
WHERE f_int1 IN (2,3);
 
51874
# check prerequisites-3 success:    1
 
51875
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
51876
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
51877
# check read via f_int1 success: 1
 
51878
# check read via f_int2 success: 1
 
51879
        
 
51880
# check multiple-1 success:     1
 
51881
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
51882
        
 
51883
# check multiple-2 success:     1
 
51884
INSERT INTO t1 SELECT * FROM t0_template
 
51885
WHERE MOD(f_int1,3) = 0;
 
51886
        
 
51887
# check multiple-3 success:     1
 
51888
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
51889
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
51890
AND @max_row_div2 + @max_row_div4;
 
51891
        
 
51892
# check multiple-4 success:     1
 
51893
DELETE FROM t1
 
51894
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
51895
AND @max_row_div2 + @max_row_div4 + @max_row;
 
51896
        
 
51897
# check multiple-5 success:     1
 
51898
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
51899
INSERT INTO t1
 
51900
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
51901
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
51902
f_charbig = '#SINGLE#';
 
51903
        
 
51904
# check single-1 success:       1
 
51905
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
51906
INSERT INTO t1
 
51907
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
51908
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
51909
f_charbig = '#SINGLE#';
 
51910
        
 
51911
# check single-2 success:       1
 
51912
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
51913
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
51914
UPDATE t1 SET f_int1 = @cur_value2
 
51915
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
51916
        
 
51917
# check single-3 success:       1
 
51918
SET @cur_value1= -1;
 
51919
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
51920
UPDATE t1 SET f_int1 = @cur_value1
 
51921
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
51922
        
 
51923
# check single-4 success:       1
 
51924
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
51925
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
51926
        
 
51927
# check single-5 success:       1
 
51928
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
51929
        
 
51930
# check single-6 success:       1
 
51931
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
51932
        
 
51933
# check single-7 success:       1
 
51934
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
51935
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
51936
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
51937
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
51938
f_charbig = '#NULL#';
 
51939
INSERT INTO t1
 
51940
SET f_int1 = NULL , f_int2 = -@max_row,
 
51941
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
51942
f_charbig = '#NULL#';
 
51943
# check null success:    1
 
51944
        
 
51945
# check null-1 success:         1
 
51946
UPDATE t1 SET f_int1 = -@max_row
 
51947
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
51948
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
51949
        
 
51950
# check null-2 success:         1
 
51951
UPDATE t1 SET f_int1 = NULL
 
51952
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
51953
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
51954
        
 
51955
# check null-3 success:         1
 
51956
DELETE FROM t1
 
51957
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
51958
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
51959
        
 
51960
# check null-4 success:         1
 
51961
DELETE FROM t1
 
51962
WHERE f_int1 = 0 AND f_int2 = 0
 
51963
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
51964
AND f_charbig = '#NULL#';
 
51965
SET AUTOCOMMIT= 0;
 
51966
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51967
SELECT f_int1, f_int1, '', '', 'was inserted'
 
51968
FROM t0_template source_tab
 
51969
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51970
        
 
51971
# check transactions-1 success:         1
 
51972
COMMIT WORK;
 
51973
        
 
51974
# check transactions-2 success:         1
 
51975
ROLLBACK WORK;
 
51976
        
 
51977
# check transactions-3 success:         1
 
51978
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51979
COMMIT WORK;
 
51980
ROLLBACK WORK;
 
51981
        
 
51982
# check transactions-4 success:         1
 
51983
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
51984
SELECT f_int1, f_int1, '', '', 'was inserted'
 
51985
FROM t0_template source_tab
 
51986
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
51987
        
 
51988
# check transactions-5 success:         1
 
51989
ROLLBACK WORK;
 
51990
        
 
51991
# check transactions-6 success:         1
 
51992
# INFO: Storage engine used for t1 seems to be transactional.
 
51993
COMMIT;
 
51994
        
 
51995
# check transactions-7 success:         1
 
51996
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
51997
COMMIT WORK;
 
51998
SET @@session.sql_mode = 'traditional';
 
51999
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
52000
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52001
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
52002
'', '', 'was inserted' FROM t0_template
 
52003
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
52004
ERROR 22012: Division by 0
 
52005
COMMIT;
 
52006
        
 
52007
# check transactions-8 success:         1
 
52008
# INFO: Storage engine used for t1 seems to be able to revert
 
52009
#       changes made by the failing statement.
 
52010
SET @@session.sql_mode = '';
 
52011
SET AUTOCOMMIT= 1;
 
52012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
52013
COMMIT WORK;
 
52014
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
52015
        
 
52016
# check special-1 success:      1
 
52017
UPDATE t1 SET f_charbig = '';
 
52018
        
 
52019
# check special-2 success:      1
 
52020
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
52021
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52022
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
52023
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52026
'just inserted' FROM t0_template
 
52027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52028
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
52029
BEGIN
 
52030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52031
f_charbig = 'updated by trigger'
 
52032
      WHERE f_int1 = new.f_int1;
 
52033
END|
 
52034
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52035
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
52036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52037
        
 
52038
# check trigger-1 success:      1
 
52039
DROP TRIGGER trg_1;
 
52040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52042
f_charbig = 'just inserted'
 
52043
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52044
DELETE FROM t0_aux
 
52045
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52047
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52048
'just inserted' FROM t0_template
 
52049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52050
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
52051
BEGIN
 
52052
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52053
f_charbig = 'updated by trigger'
 
52054
      WHERE f_int1 = new.f_int1;
 
52055
END|
 
52056
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52057
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
52058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52059
        
 
52060
# check trigger-2 success:      1
 
52061
DROP TRIGGER trg_1;
 
52062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52064
f_charbig = 'just inserted'
 
52065
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52066
DELETE FROM t0_aux
 
52067
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52068
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52069
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52070
'just inserted' FROM t0_template
 
52071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52072
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
52073
BEGIN
 
52074
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52075
f_charbig = 'updated by trigger'
 
52076
      WHERE f_int1 = new.f_int1;
 
52077
END|
 
52078
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52079
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52080
        
 
52081
# check trigger-3 success:      1
 
52082
DROP TRIGGER trg_1;
 
52083
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52084
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52085
f_charbig = 'just inserted'
 
52086
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52087
DELETE FROM t0_aux
 
52088
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52090
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52091
'just inserted' FROM t0_template
 
52092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52093
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
52094
BEGIN
 
52095
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52096
f_charbig = 'updated by trigger'
 
52097
      WHERE f_int1 = - old.f_int1;
 
52098
END|
 
52099
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52100
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52101
        
 
52102
# check trigger-4 success:      1
 
52103
DROP TRIGGER trg_1;
 
52104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52106
f_charbig = 'just inserted'
 
52107
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52108
DELETE FROM t0_aux
 
52109
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52111
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52112
'just inserted' FROM t0_template
 
52113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52114
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
52115
BEGIN
 
52116
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52117
f_charbig = 'updated by trigger'
 
52118
      WHERE f_int1 = new.f_int1;
 
52119
END|
 
52120
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52121
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52122
        
 
52123
# check trigger-5 success:      1
 
52124
DROP TRIGGER trg_1;
 
52125
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52126
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52127
f_charbig = 'just inserted'
 
52128
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52129
DELETE FROM t0_aux
 
52130
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52131
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52132
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52133
'just inserted' FROM t0_template
 
52134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52135
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
52136
BEGIN
 
52137
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52138
f_charbig = 'updated by trigger'
 
52139
      WHERE f_int1 = - old.f_int1;
 
52140
END|
 
52141
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52142
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52143
        
 
52144
# check trigger-6 success:      1
 
52145
DROP TRIGGER trg_1;
 
52146
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52147
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52148
f_charbig = 'just inserted'
 
52149
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52150
DELETE FROM t0_aux
 
52151
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52152
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52153
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52154
'just inserted' FROM t0_template
 
52155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52156
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
52157
BEGIN
 
52158
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52159
f_charbig = 'updated by trigger'
 
52160
      WHERE f_int1 = - old.f_int1;
 
52161
END|
 
52162
DELETE FROM t0_aux
 
52163
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52164
        
 
52165
# check trigger-7 success:      1
 
52166
DROP TRIGGER trg_1;
 
52167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52169
f_charbig = 'just inserted'
 
52170
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52171
DELETE FROM t0_aux
 
52172
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52173
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52174
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52175
'just inserted' FROM t0_template
 
52176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52177
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
52178
BEGIN
 
52179
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52180
f_charbig = 'updated by trigger'
 
52181
      WHERE f_int1 = - old.f_int1;
 
52182
END|
 
52183
DELETE FROM t0_aux
 
52184
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52185
        
 
52186
# check trigger-8 success:      1
 
52187
DROP TRIGGER trg_1;
 
52188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52190
f_charbig = 'just inserted'
 
52191
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52192
DELETE FROM t0_aux
 
52193
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52194
DELETE FROM t1
 
52195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52196
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
52197
BEGIN
 
52198
SET new.f_int1 = old.f_int1 + @max_row,
 
52199
new.f_int2 = old.f_int2 - @max_row,
 
52200
new.f_charbig = '####updated per update trigger####';
 
52201
END|
 
52202
UPDATE t1
 
52203
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
52204
f_charbig = '####updated per update statement itself####';
 
52205
        
 
52206
# check trigger-9 success:      1
 
52207
DROP TRIGGER trg_2;
 
52208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52210
f_charbig = CONCAT('===',f_char1,'===');
 
52211
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
52212
BEGIN
 
52213
SET new.f_int1 = new.f_int1 + @max_row,
 
52214
new.f_int2 = new.f_int2 - @max_row,
 
52215
new.f_charbig = '####updated per update trigger####';
 
52216
END|
 
52217
UPDATE t1
 
52218
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
52219
f_charbig = '####updated per update statement itself####';
 
52220
        
 
52221
# check trigger-10 success:     1
 
52222
DROP TRIGGER trg_2;
 
52223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52225
f_charbig = CONCAT('===',f_char1,'===');
 
52226
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
52227
BEGIN
 
52228
SET new.f_int1 = @my_max1 + @counter,
 
52229
new.f_int2 = @my_min2 - @counter,
 
52230
new.f_charbig = '####updated per insert trigger####';
 
52231
SET @counter = @counter + 1;
 
52232
END|
 
52233
SET @counter = 1;
 
52234
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
52235
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52236
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
52237
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
52238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
52239
ORDER BY f_int1;
 
52240
DROP TRIGGER trg_3;
 
52241
        
 
52242
# check trigger-11 success:     1
 
52243
DELETE FROM t1
 
52244
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
52245
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
52246
AND f_charbig = '####updated per insert trigger####';
 
52247
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
52248
BEGIN
 
52249
SET new.f_int1 = @my_max1 + @counter,
 
52250
new.f_int2 = @my_min2 - @counter,
 
52251
new.f_charbig = '####updated per insert trigger####';
 
52252
SET @counter = @counter + 1;
 
52253
END|
 
52254
SET @counter = 1;
 
52255
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
52256
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
52257
SELECT CAST(f_int1 AS CHAR),
 
52258
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
52259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
52260
ORDER BY f_int1;
 
52261
DROP TRIGGER trg_3;
 
52262
        
 
52263
# check trigger-12 success:     1
 
52264
DELETE FROM t1
 
52265
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
52266
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
52267
AND f_charbig = '####updated per insert trigger####';
 
52268
ANALYZE  TABLE t1;
 
52269
Table   Op      Msg_type        Msg_text
 
52270
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
52271
CHECK    TABLE t1 EXTENDED;
 
52272
Table   Op      Msg_type        Msg_text
 
52273
test.t1 check   note    The storage engine for the table doesn't support check
 
52274
CHECKSUM TABLE t1 EXTENDED;
 
52275
Table   Checksum
 
52276
test.t1 <some_value>
 
52277
OPTIMIZE TABLE t1;
 
52278
Table   Op      Msg_type        Msg_text
 
52279
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
52280
# check layout success:    1
 
52281
REPAIR   TABLE t1 EXTENDED;
 
52282
Table   Op      Msg_type        Msg_text
 
52283
test.t1 repair  note    The storage engine for the table doesn't support repair
 
52284
# check layout success:    1
 
52285
TRUNCATE t1;
 
52286
        
 
52287
# check TRUNCATE success:       1
 
52288
# check layout success:    1
 
52289
# End usability test (inc/partition_check.inc)
 
52290
DROP TABLE t1;
 
52291
CREATE TABLE t1 (
 
52292
f_int1 INTEGER,
 
52293
f_int2 INTEGER,
 
52294
f_char1 CHAR(20),
 
52295
f_char2 CHAR(20),
 
52296
f_charbig VARCHAR(1000)
 
52297
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
52298
)
 
52299
PARTITION BY LIST(MOD(f_int1,4))
 
52300
(PARTITION part_3 VALUES IN (-3),
 
52301
PARTITION part_2 VALUES IN (-2),
 
52302
PARTITION part_1 VALUES IN (-1),
 
52303
PARTITION part_N VALUES IN (NULL),
 
52304
PARTITION part0 VALUES IN (0),
 
52305
PARTITION part1 VALUES IN (1),
 
52306
PARTITION part2 VALUES IN (2),
 
52307
PARTITION part3 VALUES IN (3));
 
52308
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52309
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
52310
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
52311
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
52312
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52313
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
52314
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
52315
# Start usability test (inc/partition_check.inc)
 
52316
create_command
 
52317
SHOW CREATE TABLE t1;
 
52318
Table   Create Table
 
52319
t1      CREATE TABLE `t1` (
 
52320
  `f_int1` int(11) DEFAULT NULL,
 
52321
  `f_int2` int(11) DEFAULT NULL,
 
52322
  `f_char1` char(20) DEFAULT NULL,
 
52323
  `f_char2` char(20) DEFAULT NULL,
 
52324
  `f_charbig` varchar(1000) DEFAULT NULL
 
52325
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
52326
 
 
52327
# check prerequisites-1 success:    1
 
52328
# check COUNT(*) success:    1
 
52329
# check MIN/MAX(f_int1) success:    1
 
52330
# check MIN/MAX(f_int2) success:    1
 
52331
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52332
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
52333
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
52334
WHERE f_int1 IN (2,3);
 
52335
# check prerequisites-3 success:    1
 
52336
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
52337
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
52338
# check read via f_int1 success: 1
 
52339
# check read via f_int2 success: 1
 
52340
        
 
52341
# check multiple-1 success:     1
 
52342
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
52343
        
 
52344
# check multiple-2 success:     1
 
52345
INSERT INTO t1 SELECT * FROM t0_template
 
52346
WHERE MOD(f_int1,3) = 0;
 
52347
        
 
52348
# check multiple-3 success:     1
 
52349
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
52350
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
52351
AND @max_row_div2 + @max_row_div4;
 
52352
        
 
52353
# check multiple-4 success:     1
 
52354
DELETE FROM t1
 
52355
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
52356
AND @max_row_div2 + @max_row_div4 + @max_row;
 
52357
        
 
52358
# check multiple-5 success:     1
 
52359
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
52360
INSERT INTO t1
 
52361
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
52362
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
52363
f_charbig = '#SINGLE#';
 
52364
        
 
52365
# check single-1 success:       1
 
52366
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
52367
INSERT INTO t1
 
52368
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
52369
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
52370
f_charbig = '#SINGLE#';
 
52371
        
 
52372
# check single-2 success:       1
 
52373
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
52374
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
52375
UPDATE t1 SET f_int1 = @cur_value2
 
52376
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
52377
        
 
52378
# check single-3 success:       1
 
52379
SET @cur_value1= -1;
 
52380
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
52381
UPDATE t1 SET f_int1 = @cur_value1
 
52382
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
52383
        
 
52384
# check single-4 success:       1
 
52385
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
52386
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
52387
        
 
52388
# check single-5 success:       1
 
52389
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
52390
        
 
52391
# check single-6 success:       1
 
52392
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
52393
        
 
52394
# check single-7 success:       1
 
52395
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
52396
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
52397
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
52398
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
52399
f_charbig = '#NULL#';
 
52400
INSERT INTO t1
 
52401
SET f_int1 = NULL , f_int2 = -@max_row,
 
52402
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
52403
f_charbig = '#NULL#';
 
52404
# check null success:    1
 
52405
        
 
52406
# check null-1 success:         1
 
52407
UPDATE t1 SET f_int1 = -@max_row
 
52408
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
52409
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
52410
        
 
52411
# check null-2 success:         1
 
52412
UPDATE t1 SET f_int1 = NULL
 
52413
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
52414
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
52415
        
 
52416
# check null-3 success:         1
 
52417
DELETE FROM t1
 
52418
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
52419
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
52420
        
 
52421
# check null-4 success:         1
 
52422
DELETE FROM t1
 
52423
WHERE f_int1 = 0 AND f_int2 = 0
 
52424
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
52425
AND f_charbig = '#NULL#';
 
52426
SET AUTOCOMMIT= 0;
 
52427
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52428
SELECT f_int1, f_int1, '', '', 'was inserted'
 
52429
FROM t0_template source_tab
 
52430
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
52431
        
 
52432
# check transactions-1 success:         1
 
52433
COMMIT WORK;
 
52434
        
 
52435
# check transactions-2 success:         1
 
52436
ROLLBACK WORK;
 
52437
        
 
52438
# check transactions-3 success:         1
 
52439
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
52440
COMMIT WORK;
 
52441
ROLLBACK WORK;
 
52442
        
 
52443
# check transactions-4 success:         1
 
52444
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52445
SELECT f_int1, f_int1, '', '', 'was inserted'
 
52446
FROM t0_template source_tab
 
52447
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
52448
        
 
52449
# check transactions-5 success:         1
 
52450
ROLLBACK WORK;
 
52451
        
 
52452
# check transactions-6 success:         1
 
52453
# INFO: Storage engine used for t1 seems to be transactional.
 
52454
COMMIT;
 
52455
        
 
52456
# check transactions-7 success:         1
 
52457
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
52458
COMMIT WORK;
 
52459
SET @@session.sql_mode = 'traditional';
 
52460
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
52461
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52462
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
52463
'', '', 'was inserted' FROM t0_template
 
52464
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
52465
ERROR 22012: Division by 0
 
52466
COMMIT;
 
52467
        
 
52468
# check transactions-8 success:         1
 
52469
# INFO: Storage engine used for t1 seems to be able to revert
 
52470
#       changes made by the failing statement.
 
52471
SET @@session.sql_mode = '';
 
52472
SET AUTOCOMMIT= 1;
 
52473
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
52474
COMMIT WORK;
 
52475
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
52476
        
 
52477
# check special-1 success:      1
 
52478
UPDATE t1 SET f_charbig = '';
 
52479
        
 
52480
# check special-2 success:      1
 
52481
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
52482
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52483
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
52484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52485
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52486
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52487
'just inserted' FROM t0_template
 
52488
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52489
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
52490
BEGIN
 
52491
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52492
f_charbig = 'updated by trigger'
 
52493
      WHERE f_int1 = new.f_int1;
 
52494
END|
 
52495
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52496
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
52497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52498
        
 
52499
# check trigger-1 success:      1
 
52500
DROP TRIGGER trg_1;
 
52501
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52502
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52503
f_charbig = 'just inserted'
 
52504
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52505
DELETE FROM t0_aux
 
52506
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52508
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52509
'just inserted' FROM t0_template
 
52510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52511
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
52512
BEGIN
 
52513
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52514
f_charbig = 'updated by trigger'
 
52515
      WHERE f_int1 = new.f_int1;
 
52516
END|
 
52517
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52518
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
52519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52520
        
 
52521
# check trigger-2 success:      1
 
52522
DROP TRIGGER trg_1;
 
52523
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52524
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52525
f_charbig = 'just inserted'
 
52526
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52527
DELETE FROM t0_aux
 
52528
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52530
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52531
'just inserted' FROM t0_template
 
52532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52533
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
52534
BEGIN
 
52535
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52536
f_charbig = 'updated by trigger'
 
52537
      WHERE f_int1 = new.f_int1;
 
52538
END|
 
52539
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52540
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52541
        
 
52542
# check trigger-3 success:      1
 
52543
DROP TRIGGER trg_1;
 
52544
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52545
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52546
f_charbig = 'just inserted'
 
52547
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52548
DELETE FROM t0_aux
 
52549
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52550
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52551
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52552
'just inserted' FROM t0_template
 
52553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52554
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
52555
BEGIN
 
52556
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52557
f_charbig = 'updated by trigger'
 
52558
      WHERE f_int1 = - old.f_int1;
 
52559
END|
 
52560
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52561
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52562
        
 
52563
# check trigger-4 success:      1
 
52564
DROP TRIGGER trg_1;
 
52565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52567
f_charbig = 'just inserted'
 
52568
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52569
DELETE FROM t0_aux
 
52570
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52573
'just inserted' FROM t0_template
 
52574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52575
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
52576
BEGIN
 
52577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52578
f_charbig = 'updated by trigger'
 
52579
      WHERE f_int1 = new.f_int1;
 
52580
END|
 
52581
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52582
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52583
        
 
52584
# check trigger-5 success:      1
 
52585
DROP TRIGGER trg_1;
 
52586
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52587
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52588
f_charbig = 'just inserted'
 
52589
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52590
DELETE FROM t0_aux
 
52591
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52592
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52593
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52594
'just inserted' FROM t0_template
 
52595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52596
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
52597
BEGIN
 
52598
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52599
f_charbig = 'updated by trigger'
 
52600
      WHERE f_int1 = - old.f_int1;
 
52601
END|
 
52602
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52603
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52604
        
 
52605
# check trigger-6 success:      1
 
52606
DROP TRIGGER trg_1;
 
52607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52609
f_charbig = 'just inserted'
 
52610
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52611
DELETE FROM t0_aux
 
52612
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52613
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52614
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52615
'just inserted' FROM t0_template
 
52616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52617
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
52618
BEGIN
 
52619
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52620
f_charbig = 'updated by trigger'
 
52621
      WHERE f_int1 = - old.f_int1;
 
52622
END|
 
52623
DELETE FROM t0_aux
 
52624
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52625
        
 
52626
# check trigger-7 success:      1
 
52627
DROP TRIGGER trg_1;
 
52628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52630
f_charbig = 'just inserted'
 
52631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52632
DELETE FROM t0_aux
 
52633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52636
'just inserted' FROM t0_template
 
52637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52638
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
52639
BEGIN
 
52640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52641
f_charbig = 'updated by trigger'
 
52642
      WHERE f_int1 = - old.f_int1;
 
52643
END|
 
52644
DELETE FROM t0_aux
 
52645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52646
        
 
52647
# check trigger-8 success:      1
 
52648
DROP TRIGGER trg_1;
 
52649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52651
f_charbig = 'just inserted'
 
52652
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52653
DELETE FROM t0_aux
 
52654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52655
DELETE FROM t1
 
52656
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52657
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
52658
BEGIN
 
52659
SET new.f_int1 = old.f_int1 + @max_row,
 
52660
new.f_int2 = old.f_int2 - @max_row,
 
52661
new.f_charbig = '####updated per update trigger####';
 
52662
END|
 
52663
UPDATE t1
 
52664
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
52665
f_charbig = '####updated per update statement itself####';
 
52666
        
 
52667
# check trigger-9 success:      1
 
52668
DROP TRIGGER trg_2;
 
52669
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52670
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52671
f_charbig = CONCAT('===',f_char1,'===');
 
52672
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
52673
BEGIN
 
52674
SET new.f_int1 = new.f_int1 + @max_row,
 
52675
new.f_int2 = new.f_int2 - @max_row,
 
52676
new.f_charbig = '####updated per update trigger####';
 
52677
END|
 
52678
UPDATE t1
 
52679
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
52680
f_charbig = '####updated per update statement itself####';
 
52681
        
 
52682
# check trigger-10 success:     1
 
52683
DROP TRIGGER trg_2;
 
52684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52686
f_charbig = CONCAT('===',f_char1,'===');
 
52687
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
52688
BEGIN
 
52689
SET new.f_int1 = @my_max1 + @counter,
 
52690
new.f_int2 = @my_min2 - @counter,
 
52691
new.f_charbig = '####updated per insert trigger####';
 
52692
SET @counter = @counter + 1;
 
52693
END|
 
52694
SET @counter = 1;
 
52695
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
52696
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52697
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
52698
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
52699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
52700
ORDER BY f_int1;
 
52701
DROP TRIGGER trg_3;
 
52702
        
 
52703
# check trigger-11 success:     1
 
52704
DELETE FROM t1
 
52705
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
52706
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
52707
AND f_charbig = '####updated per insert trigger####';
 
52708
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
52709
BEGIN
 
52710
SET new.f_int1 = @my_max1 + @counter,
 
52711
new.f_int2 = @my_min2 - @counter,
 
52712
new.f_charbig = '####updated per insert trigger####';
 
52713
SET @counter = @counter + 1;
 
52714
END|
 
52715
SET @counter = 1;
 
52716
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
52717
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
52718
SELECT CAST(f_int1 AS CHAR),
 
52719
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
52720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
52721
ORDER BY f_int1;
 
52722
DROP TRIGGER trg_3;
 
52723
        
 
52724
# check trigger-12 success:     1
 
52725
DELETE FROM t1
 
52726
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
52727
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
52728
AND f_charbig = '####updated per insert trigger####';
 
52729
ANALYZE  TABLE t1;
 
52730
Table   Op      Msg_type        Msg_text
 
52731
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
52732
CHECK    TABLE t1 EXTENDED;
 
52733
Table   Op      Msg_type        Msg_text
 
52734
test.t1 check   note    The storage engine for the table doesn't support check
 
52735
CHECKSUM TABLE t1 EXTENDED;
 
52736
Table   Checksum
 
52737
test.t1 <some_value>
 
52738
OPTIMIZE TABLE t1;
 
52739
Table   Op      Msg_type        Msg_text
 
52740
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
52741
# check layout success:    1
 
52742
REPAIR   TABLE t1 EXTENDED;
 
52743
Table   Op      Msg_type        Msg_text
 
52744
test.t1 repair  note    The storage engine for the table doesn't support repair
 
52745
# check layout success:    1
 
52746
TRUNCATE t1;
 
52747
        
 
52748
# check TRUNCATE success:       1
 
52749
# check layout success:    1
 
52750
# End usability test (inc/partition_check.inc)
 
52751
DROP TABLE t1;
 
52752
CREATE TABLE t1 (
 
52753
f_int1 INTEGER,
 
52754
f_int2 INTEGER,
 
52755
f_char1 CHAR(20),
 
52756
f_char2 CHAR(20),
 
52757
f_charbig VARCHAR(1000)
 
52758
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
52759
)
 
52760
PARTITION BY RANGE(f_int1)
 
52761
(PARTITION parta VALUES LESS THAN (0),
 
52762
PARTITION partb VALUES LESS THAN (5),
 
52763
PARTITION partc VALUES LESS THAN (10),
 
52764
PARTITION partd VALUES LESS THAN (10 + 5),
 
52765
PARTITION parte VALUES LESS THAN (20),
 
52766
PARTITION partf VALUES LESS THAN (2147483646));
 
52767
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52768
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
52769
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
52770
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
52771
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52772
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
52773
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
52774
# Start usability test (inc/partition_check.inc)
 
52775
create_command
 
52776
SHOW CREATE TABLE t1;
 
52777
Table   Create Table
 
52778
t1      CREATE TABLE `t1` (
 
52779
  `f_int1` int(11) DEFAULT NULL,
 
52780
  `f_int2` int(11) DEFAULT NULL,
 
52781
  `f_char1` char(20) DEFAULT NULL,
 
52782
  `f_char2` char(20) DEFAULT NULL,
 
52783
  `f_charbig` varchar(1000) DEFAULT NULL
 
52784
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
52785
 
 
52786
# check prerequisites-1 success:    1
 
52787
# check COUNT(*) success:    1
 
52788
# check MIN/MAX(f_int1) success:    1
 
52789
# check MIN/MAX(f_int2) success:    1
 
52790
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52791
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
52792
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
52793
WHERE f_int1 IN (2,3);
 
52794
# check prerequisites-3 success:    1
 
52795
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
52796
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
52797
# check read via f_int1 success: 1
 
52798
# check read via f_int2 success: 1
 
52799
        
 
52800
# check multiple-1 success:     1
 
52801
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
52802
        
 
52803
# check multiple-2 success:     1
 
52804
INSERT INTO t1 SELECT * FROM t0_template
 
52805
WHERE MOD(f_int1,3) = 0;
 
52806
        
 
52807
# check multiple-3 success:     1
 
52808
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
52809
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
52810
AND @max_row_div2 + @max_row_div4;
 
52811
        
 
52812
# check multiple-4 success:     1
 
52813
DELETE FROM t1
 
52814
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
52815
AND @max_row_div2 + @max_row_div4 + @max_row;
 
52816
        
 
52817
# check multiple-5 success:     1
 
52818
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
52819
INSERT INTO t1
 
52820
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
52821
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
52822
f_charbig = '#SINGLE#';
 
52823
        
 
52824
# check single-1 success:       1
 
52825
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
52826
INSERT INTO t1
 
52827
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
52828
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
52829
f_charbig = '#SINGLE#';
 
52830
        
 
52831
# check single-2 success:       1
 
52832
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
52833
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
52834
UPDATE t1 SET f_int1 = @cur_value2
 
52835
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
52836
        
 
52837
# check single-3 success:       1
 
52838
SET @cur_value1= -1;
 
52839
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
52840
UPDATE t1 SET f_int1 = @cur_value1
 
52841
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
52842
        
 
52843
# check single-4 success:       1
 
52844
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
52845
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
52846
        
 
52847
# check single-5 success:       1
 
52848
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
52849
        
 
52850
# check single-6 success:       1
 
52851
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
52852
ERROR HY000: Table has no partition for value 2147483647
 
52853
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
52854
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
52855
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
52856
f_charbig = '#NULL#';
 
52857
INSERT INTO t1
 
52858
SET f_int1 = NULL , f_int2 = -@max_row,
 
52859
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
52860
f_charbig = '#NULL#';
 
52861
# check null success:    1
 
52862
        
 
52863
# check null-1 success:         1
 
52864
UPDATE t1 SET f_int1 = -@max_row
 
52865
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
52866
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
52867
        
 
52868
# check null-2 success:         1
 
52869
UPDATE t1 SET f_int1 = NULL
 
52870
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
52871
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
52872
        
 
52873
# check null-3 success:         1
 
52874
DELETE FROM t1
 
52875
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
52876
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
52877
        
 
52878
# check null-4 success:         1
 
52879
DELETE FROM t1
 
52880
WHERE f_int1 = 0 AND f_int2 = 0
 
52881
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
52882
AND f_charbig = '#NULL#';
 
52883
SET AUTOCOMMIT= 0;
 
52884
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52885
SELECT f_int1, f_int1, '', '', 'was inserted'
 
52886
FROM t0_template source_tab
 
52887
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
52888
        
 
52889
# check transactions-1 success:         1
 
52890
COMMIT WORK;
 
52891
        
 
52892
# check transactions-2 success:         1
 
52893
ROLLBACK WORK;
 
52894
        
 
52895
# check transactions-3 success:         1
 
52896
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
52897
COMMIT WORK;
 
52898
ROLLBACK WORK;
 
52899
        
 
52900
# check transactions-4 success:         1
 
52901
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52902
SELECT f_int1, f_int1, '', '', 'was inserted'
 
52903
FROM t0_template source_tab
 
52904
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
52905
        
 
52906
# check transactions-5 success:         1
 
52907
ROLLBACK WORK;
 
52908
        
 
52909
# check transactions-6 success:         1
 
52910
# INFO: Storage engine used for t1 seems to be transactional.
 
52911
COMMIT;
 
52912
        
 
52913
# check transactions-7 success:         1
 
52914
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
52915
COMMIT WORK;
 
52916
SET @@session.sql_mode = 'traditional';
 
52917
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
52918
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
52919
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
52920
'', '', 'was inserted' FROM t0_template
 
52921
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
52922
ERROR 22012: Division by 0
 
52923
COMMIT;
 
52924
        
 
52925
# check transactions-8 success:         1
 
52926
# INFO: Storage engine used for t1 seems to be able to revert
 
52927
#       changes made by the failing statement.
 
52928
SET @@session.sql_mode = '';
 
52929
SET AUTOCOMMIT= 1;
 
52930
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
52931
COMMIT WORK;
 
52932
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
52933
        
 
52934
# check special-1 success:      1
 
52935
UPDATE t1 SET f_charbig = '';
 
52936
        
 
52937
# check special-2 success:      1
 
52938
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
52939
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52940
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
52941
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52942
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52943
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52944
'just inserted' FROM t0_template
 
52945
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52946
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
52947
BEGIN
 
52948
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52949
f_charbig = 'updated by trigger'
 
52950
      WHERE f_int1 = new.f_int1;
 
52951
END|
 
52952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52953
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
52954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52955
        
 
52956
# check trigger-1 success:      1
 
52957
DROP TRIGGER trg_1;
 
52958
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52959
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52960
f_charbig = 'just inserted'
 
52961
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52962
DELETE FROM t0_aux
 
52963
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52965
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52966
'just inserted' FROM t0_template
 
52967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52968
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
52969
BEGIN
 
52970
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52971
f_charbig = 'updated by trigger'
 
52972
      WHERE f_int1 = new.f_int1;
 
52973
END|
 
52974
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52975
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
52976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52977
        
 
52978
# check trigger-2 success:      1
 
52979
DROP TRIGGER trg_1;
 
52980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
52981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
52982
f_charbig = 'just inserted'
 
52983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
52984
DELETE FROM t0_aux
 
52985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
52987
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
52988
'just inserted' FROM t0_template
 
52989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
52990
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
52991
BEGIN
 
52992
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
52993
f_charbig = 'updated by trigger'
 
52994
      WHERE f_int1 = new.f_int1;
 
52995
END|
 
52996
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
52997
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
52998
        
 
52999
# check trigger-3 success:      1
 
53000
DROP TRIGGER trg_1;
 
53001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53003
f_charbig = 'just inserted'
 
53004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53005
DELETE FROM t0_aux
 
53006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53008
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53009
'just inserted' FROM t0_template
 
53010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53011
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
53012
BEGIN
 
53013
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53014
f_charbig = 'updated by trigger'
 
53015
      WHERE f_int1 = - old.f_int1;
 
53016
END|
 
53017
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53018
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53019
        
 
53020
# check trigger-4 success:      1
 
53021
DROP TRIGGER trg_1;
 
53022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53024
f_charbig = 'just inserted'
 
53025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53026
DELETE FROM t0_aux
 
53027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53030
'just inserted' FROM t0_template
 
53031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53032
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
53033
BEGIN
 
53034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53035
f_charbig = 'updated by trigger'
 
53036
      WHERE f_int1 = new.f_int1;
 
53037
END|
 
53038
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53039
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53040
        
 
53041
# check trigger-5 success:      1
 
53042
DROP TRIGGER trg_1;
 
53043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53044
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53045
f_charbig = 'just inserted'
 
53046
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53047
DELETE FROM t0_aux
 
53048
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53050
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53051
'just inserted' FROM t0_template
 
53052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53053
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
53054
BEGIN
 
53055
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53056
f_charbig = 'updated by trigger'
 
53057
      WHERE f_int1 = - old.f_int1;
 
53058
END|
 
53059
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53060
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53061
        
 
53062
# check trigger-6 success:      1
 
53063
DROP TRIGGER trg_1;
 
53064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53066
f_charbig = 'just inserted'
 
53067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53068
DELETE FROM t0_aux
 
53069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53072
'just inserted' FROM t0_template
 
53073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53074
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
53075
BEGIN
 
53076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53077
f_charbig = 'updated by trigger'
 
53078
      WHERE f_int1 = - old.f_int1;
 
53079
END|
 
53080
DELETE FROM t0_aux
 
53081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53082
        
 
53083
# check trigger-7 success:      1
 
53084
DROP TRIGGER trg_1;
 
53085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53087
f_charbig = 'just inserted'
 
53088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53089
DELETE FROM t0_aux
 
53090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53093
'just inserted' FROM t0_template
 
53094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53095
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
53096
BEGIN
 
53097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53098
f_charbig = 'updated by trigger'
 
53099
      WHERE f_int1 = - old.f_int1;
 
53100
END|
 
53101
DELETE FROM t0_aux
 
53102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53103
        
 
53104
# check trigger-8 success:      1
 
53105
DROP TRIGGER trg_1;
 
53106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53108
f_charbig = 'just inserted'
 
53109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53110
DELETE FROM t0_aux
 
53111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53112
DELETE FROM t1
 
53113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53114
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
53115
BEGIN
 
53116
SET new.f_int1 = old.f_int1 + @max_row,
 
53117
new.f_int2 = old.f_int2 - @max_row,
 
53118
new.f_charbig = '####updated per update trigger####';
 
53119
END|
 
53120
UPDATE t1
 
53121
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
53122
f_charbig = '####updated per update statement itself####';
 
53123
        
 
53124
# check trigger-9 success:      1
 
53125
DROP TRIGGER trg_2;
 
53126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53128
f_charbig = CONCAT('===',f_char1,'===');
 
53129
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
53130
BEGIN
 
53131
SET new.f_int1 = new.f_int1 + @max_row,
 
53132
new.f_int2 = new.f_int2 - @max_row,
 
53133
new.f_charbig = '####updated per update trigger####';
 
53134
END|
 
53135
UPDATE t1
 
53136
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
53137
f_charbig = '####updated per update statement itself####';
 
53138
        
 
53139
# check trigger-10 success:     1
 
53140
DROP TRIGGER trg_2;
 
53141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53143
f_charbig = CONCAT('===',f_char1,'===');
 
53144
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
53145
BEGIN
 
53146
SET new.f_int1 = @my_max1 + @counter,
 
53147
new.f_int2 = @my_min2 - @counter,
 
53148
new.f_charbig = '####updated per insert trigger####';
 
53149
SET @counter = @counter + 1;
 
53150
END|
 
53151
SET @counter = 1;
 
53152
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
53153
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53154
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
53155
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
53156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
53157
ORDER BY f_int1;
 
53158
DROP TRIGGER trg_3;
 
53159
        
 
53160
# check trigger-11 success:     1
 
53161
DELETE FROM t1
 
53162
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
53163
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
53164
AND f_charbig = '####updated per insert trigger####';
 
53165
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
53166
BEGIN
 
53167
SET new.f_int1 = @my_max1 + @counter,
 
53168
new.f_int2 = @my_min2 - @counter,
 
53169
new.f_charbig = '####updated per insert trigger####';
 
53170
SET @counter = @counter + 1;
 
53171
END|
 
53172
SET @counter = 1;
 
53173
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
53174
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
53175
SELECT CAST(f_int1 AS CHAR),
 
53176
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
53177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
53178
ORDER BY f_int1;
 
53179
DROP TRIGGER trg_3;
 
53180
        
 
53181
# check trigger-12 success:     1
 
53182
DELETE FROM t1
 
53183
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
53184
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
53185
AND f_charbig = '####updated per insert trigger####';
 
53186
ANALYZE  TABLE t1;
 
53187
Table   Op      Msg_type        Msg_text
 
53188
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
53189
CHECK    TABLE t1 EXTENDED;
 
53190
Table   Op      Msg_type        Msg_text
 
53191
test.t1 check   note    The storage engine for the table doesn't support check
 
53192
CHECKSUM TABLE t1 EXTENDED;
 
53193
Table   Checksum
 
53194
test.t1 <some_value>
 
53195
OPTIMIZE TABLE t1;
 
53196
Table   Op      Msg_type        Msg_text
 
53197
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
53198
# check layout success:    1
 
53199
REPAIR   TABLE t1 EXTENDED;
 
53200
Table   Op      Msg_type        Msg_text
 
53201
test.t1 repair  note    The storage engine for the table doesn't support repair
 
53202
# check layout success:    1
 
53203
TRUNCATE t1;
 
53204
        
 
53205
# check TRUNCATE success:       1
 
53206
# check layout success:    1
 
53207
# End usability test (inc/partition_check.inc)
 
53208
DROP TABLE t1;
 
53209
CREATE TABLE t1 (
 
53210
f_int1 INTEGER,
 
53211
f_int2 INTEGER,
 
53212
f_char1 CHAR(20),
 
53213
f_char2 CHAR(20),
 
53214
f_charbig VARCHAR(1000)
 
53215
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
53216
)
 
53217
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
53218
(PARTITION parta VALUES LESS THAN (0),
 
53219
PARTITION partb VALUES LESS THAN (5),
 
53220
PARTITION partc VALUES LESS THAN (10),
 
53221
PARTITION partd VALUES LESS THAN (2147483646));
 
53222
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53223
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
53224
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
53225
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
53226
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53227
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
53228
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
53229
# Start usability test (inc/partition_check.inc)
 
53230
create_command
 
53231
SHOW CREATE TABLE t1;
 
53232
Table   Create Table
 
53233
t1      CREATE TABLE `t1` (
 
53234
  `f_int1` int(11) DEFAULT NULL,
 
53235
  `f_int2` int(11) DEFAULT NULL,
 
53236
  `f_char1` char(20) DEFAULT NULL,
 
53237
  `f_char2` char(20) DEFAULT NULL,
 
53238
  `f_charbig` varchar(1000) DEFAULT NULL
 
53239
) ENGINE=InnoDB 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 = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
53240
 
 
53241
# check prerequisites-1 success:    1
 
53242
# check COUNT(*) success:    1
 
53243
# check MIN/MAX(f_int1) success:    1
 
53244
# check MIN/MAX(f_int2) success:    1
 
53245
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53246
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
53247
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
53248
WHERE f_int1 IN (2,3);
 
53249
# check prerequisites-3 success:    1
 
53250
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
53251
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
53252
# check read via f_int1 success: 1
 
53253
# check read via f_int2 success: 1
 
53254
        
 
53255
# check multiple-1 success:     1
 
53256
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
53257
        
 
53258
# check multiple-2 success:     1
 
53259
INSERT INTO t1 SELECT * FROM t0_template
 
53260
WHERE MOD(f_int1,3) = 0;
 
53261
        
 
53262
# check multiple-3 success:     1
 
53263
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
53264
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
53265
AND @max_row_div2 + @max_row_div4;
 
53266
        
 
53267
# check multiple-4 success:     1
 
53268
DELETE FROM t1
 
53269
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
53270
AND @max_row_div2 + @max_row_div4 + @max_row;
 
53271
        
 
53272
# check multiple-5 success:     1
 
53273
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
53274
INSERT INTO t1
 
53275
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
53276
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
53277
f_charbig = '#SINGLE#';
 
53278
        
 
53279
# check single-1 success:       1
 
53280
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
53281
INSERT INTO t1
 
53282
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
53283
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
53284
f_charbig = '#SINGLE#';
 
53285
        
 
53286
# check single-2 success:       1
 
53287
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
53288
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
53289
UPDATE t1 SET f_int1 = @cur_value2
 
53290
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
53291
        
 
53292
# check single-3 success:       1
 
53293
SET @cur_value1= -1;
 
53294
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
53295
UPDATE t1 SET f_int1 = @cur_value1
 
53296
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
53297
        
 
53298
# check single-4 success:       1
 
53299
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
53300
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
53301
        
 
53302
# check single-5 success:       1
 
53303
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
53304
        
 
53305
# check single-6 success:       1
 
53306
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
53307
        
 
53308
# check single-7 success:       1
 
53309
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
53310
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
53311
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
53312
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
53313
f_charbig = '#NULL#';
 
53314
INSERT INTO t1
 
53315
SET f_int1 = NULL , f_int2 = -@max_row,
 
53316
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
53317
f_charbig = '#NULL#';
 
53318
# check null success:    1
 
53319
        
 
53320
# check null-1 success:         1
 
53321
UPDATE t1 SET f_int1 = -@max_row
 
53322
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
53323
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
53324
        
 
53325
# check null-2 success:         1
 
53326
UPDATE t1 SET f_int1 = NULL
 
53327
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
53328
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
53329
        
 
53330
# check null-3 success:         1
 
53331
DELETE FROM t1
 
53332
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
53333
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
53334
        
 
53335
# check null-4 success:         1
 
53336
DELETE FROM t1
 
53337
WHERE f_int1 = 0 AND f_int2 = 0
 
53338
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
53339
AND f_charbig = '#NULL#';
 
53340
SET AUTOCOMMIT= 0;
 
53341
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53342
SELECT f_int1, f_int1, '', '', 'was inserted'
 
53343
FROM t0_template source_tab
 
53344
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
53345
        
 
53346
# check transactions-1 success:         1
 
53347
COMMIT WORK;
 
53348
        
 
53349
# check transactions-2 success:         1
 
53350
ROLLBACK WORK;
 
53351
        
 
53352
# check transactions-3 success:         1
 
53353
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
53354
COMMIT WORK;
 
53355
ROLLBACK WORK;
 
53356
        
 
53357
# check transactions-4 success:         1
 
53358
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53359
SELECT f_int1, f_int1, '', '', 'was inserted'
 
53360
FROM t0_template source_tab
 
53361
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
53362
        
 
53363
# check transactions-5 success:         1
 
53364
ROLLBACK WORK;
 
53365
        
 
53366
# check transactions-6 success:         1
 
53367
# INFO: Storage engine used for t1 seems to be transactional.
 
53368
COMMIT;
 
53369
        
 
53370
# check transactions-7 success:         1
 
53371
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
53372
COMMIT WORK;
 
53373
SET @@session.sql_mode = 'traditional';
 
53374
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
53375
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53376
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
53377
'', '', 'was inserted' FROM t0_template
 
53378
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
53379
ERROR 22012: Division by 0
 
53380
COMMIT;
 
53381
        
 
53382
# check transactions-8 success:         1
 
53383
# INFO: Storage engine used for t1 seems to be able to revert
 
53384
#       changes made by the failing statement.
 
53385
SET @@session.sql_mode = '';
 
53386
SET AUTOCOMMIT= 1;
 
53387
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
53388
COMMIT WORK;
 
53389
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
53390
        
 
53391
# check special-1 success:      1
 
53392
UPDATE t1 SET f_charbig = '';
 
53393
        
 
53394
# check special-2 success:      1
 
53395
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
53396
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53397
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
53398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53399
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53400
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53401
'just inserted' FROM t0_template
 
53402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53403
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
53404
BEGIN
 
53405
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53406
f_charbig = 'updated by trigger'
 
53407
      WHERE f_int1 = new.f_int1;
 
53408
END|
 
53409
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53410
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
53411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53412
        
 
53413
# check trigger-1 success:      1
 
53414
DROP TRIGGER trg_1;
 
53415
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53416
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53417
f_charbig = 'just inserted'
 
53418
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53419
DELETE FROM t0_aux
 
53420
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53422
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53423
'just inserted' FROM t0_template
 
53424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53425
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
53426
BEGIN
 
53427
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53428
f_charbig = 'updated by trigger'
 
53429
      WHERE f_int1 = new.f_int1;
 
53430
END|
 
53431
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53432
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
53433
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53434
        
 
53435
# check trigger-2 success:      1
 
53436
DROP TRIGGER trg_1;
 
53437
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53438
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53439
f_charbig = 'just inserted'
 
53440
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53441
DELETE FROM t0_aux
 
53442
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53443
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53444
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53445
'just inserted' FROM t0_template
 
53446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53447
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
53448
BEGIN
 
53449
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53450
f_charbig = 'updated by trigger'
 
53451
      WHERE f_int1 = new.f_int1;
 
53452
END|
 
53453
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53454
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53455
        
 
53456
# check trigger-3 success:      1
 
53457
DROP TRIGGER trg_1;
 
53458
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53459
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53460
f_charbig = 'just inserted'
 
53461
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53462
DELETE FROM t0_aux
 
53463
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53464
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53465
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53466
'just inserted' FROM t0_template
 
53467
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53468
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
53469
BEGIN
 
53470
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53471
f_charbig = 'updated by trigger'
 
53472
      WHERE f_int1 = - old.f_int1;
 
53473
END|
 
53474
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53475
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53476
        
 
53477
# check trigger-4 success:      1
 
53478
DROP TRIGGER trg_1;
 
53479
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53480
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53481
f_charbig = 'just inserted'
 
53482
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53483
DELETE FROM t0_aux
 
53484
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53485
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53486
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53487
'just inserted' FROM t0_template
 
53488
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53489
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
53490
BEGIN
 
53491
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53492
f_charbig = 'updated by trigger'
 
53493
      WHERE f_int1 = new.f_int1;
 
53494
END|
 
53495
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53496
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53497
        
 
53498
# check trigger-5 success:      1
 
53499
DROP TRIGGER trg_1;
 
53500
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53501
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53502
f_charbig = 'just inserted'
 
53503
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53504
DELETE FROM t0_aux
 
53505
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53506
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53507
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53508
'just inserted' FROM t0_template
 
53509
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53510
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
53511
BEGIN
 
53512
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53513
f_charbig = 'updated by trigger'
 
53514
      WHERE f_int1 = - old.f_int1;
 
53515
END|
 
53516
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53517
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53518
        
 
53519
# check trigger-6 success:      1
 
53520
DROP TRIGGER trg_1;
 
53521
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53522
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53523
f_charbig = 'just inserted'
 
53524
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53525
DELETE FROM t0_aux
 
53526
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53527
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53528
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53529
'just inserted' FROM t0_template
 
53530
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53531
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
53532
BEGIN
 
53533
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53534
f_charbig = 'updated by trigger'
 
53535
      WHERE f_int1 = - old.f_int1;
 
53536
END|
 
53537
DELETE FROM t0_aux
 
53538
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53539
        
 
53540
# check trigger-7 success:      1
 
53541
DROP TRIGGER trg_1;
 
53542
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53543
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53544
f_charbig = 'just inserted'
 
53545
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53546
DELETE FROM t0_aux
 
53547
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53548
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53549
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53550
'just inserted' FROM t0_template
 
53551
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53552
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
53553
BEGIN
 
53554
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53555
f_charbig = 'updated by trigger'
 
53556
      WHERE f_int1 = - old.f_int1;
 
53557
END|
 
53558
DELETE FROM t0_aux
 
53559
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53560
        
 
53561
# check trigger-8 success:      1
 
53562
DROP TRIGGER trg_1;
 
53563
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53564
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53565
f_charbig = 'just inserted'
 
53566
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53567
DELETE FROM t0_aux
 
53568
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53569
DELETE FROM t1
 
53570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53571
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
53572
BEGIN
 
53573
SET new.f_int1 = old.f_int1 + @max_row,
 
53574
new.f_int2 = old.f_int2 - @max_row,
 
53575
new.f_charbig = '####updated per update trigger####';
 
53576
END|
 
53577
UPDATE t1
 
53578
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
53579
f_charbig = '####updated per update statement itself####';
 
53580
        
 
53581
# check trigger-9 success:      1
 
53582
DROP TRIGGER trg_2;
 
53583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53585
f_charbig = CONCAT('===',f_char1,'===');
 
53586
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
53587
BEGIN
 
53588
SET new.f_int1 = new.f_int1 + @max_row,
 
53589
new.f_int2 = new.f_int2 - @max_row,
 
53590
new.f_charbig = '####updated per update trigger####';
 
53591
END|
 
53592
UPDATE t1
 
53593
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
53594
f_charbig = '####updated per update statement itself####';
 
53595
        
 
53596
# check trigger-10 success:     1
 
53597
DROP TRIGGER trg_2;
 
53598
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53599
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53600
f_charbig = CONCAT('===',f_char1,'===');
 
53601
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
53602
BEGIN
 
53603
SET new.f_int1 = @my_max1 + @counter,
 
53604
new.f_int2 = @my_min2 - @counter,
 
53605
new.f_charbig = '####updated per insert trigger####';
 
53606
SET @counter = @counter + 1;
 
53607
END|
 
53608
SET @counter = 1;
 
53609
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
53610
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53611
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
53612
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
53613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
53614
ORDER BY f_int1;
 
53615
DROP TRIGGER trg_3;
 
53616
        
 
53617
# check trigger-11 success:     1
 
53618
DELETE FROM t1
 
53619
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
53620
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
53621
AND f_charbig = '####updated per insert trigger####';
 
53622
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
53623
BEGIN
 
53624
SET new.f_int1 = @my_max1 + @counter,
 
53625
new.f_int2 = @my_min2 - @counter,
 
53626
new.f_charbig = '####updated per insert trigger####';
 
53627
SET @counter = @counter + 1;
 
53628
END|
 
53629
SET @counter = 1;
 
53630
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
53631
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
53632
SELECT CAST(f_int1 AS CHAR),
 
53633
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
53634
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
53635
ORDER BY f_int1;
 
53636
DROP TRIGGER trg_3;
 
53637
        
 
53638
# check trigger-12 success:     1
 
53639
DELETE FROM t1
 
53640
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
53641
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
53642
AND f_charbig = '####updated per insert trigger####';
 
53643
ANALYZE  TABLE t1;
 
53644
Table   Op      Msg_type        Msg_text
 
53645
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
53646
CHECK    TABLE t1 EXTENDED;
 
53647
Table   Op      Msg_type        Msg_text
 
53648
test.t1 check   note    The storage engine for the table doesn't support check
 
53649
CHECKSUM TABLE t1 EXTENDED;
 
53650
Table   Checksum
 
53651
test.t1 <some_value>
 
53652
OPTIMIZE TABLE t1;
 
53653
Table   Op      Msg_type        Msg_text
 
53654
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
53655
# check layout success:    1
 
53656
REPAIR   TABLE t1 EXTENDED;
 
53657
Table   Op      Msg_type        Msg_text
 
53658
test.t1 repair  note    The storage engine for the table doesn't support repair
 
53659
# check layout success:    1
 
53660
TRUNCATE t1;
 
53661
        
 
53662
# check TRUNCATE success:       1
 
53663
# check layout success:    1
 
53664
# End usability test (inc/partition_check.inc)
 
53665
DROP TABLE t1;
 
53666
CREATE TABLE t1 (
 
53667
f_int1 INTEGER,
 
53668
f_int2 INTEGER,
 
53669
f_char1 CHAR(20),
 
53670
f_char2 CHAR(20),
 
53671
f_charbig VARCHAR(1000)
 
53672
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
53673
)
 
53674
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
53675
(PARTITION part1 VALUES LESS THAN (0)
 
53676
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
53677
PARTITION part2 VALUES LESS THAN (5)
 
53678
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
53679
PARTITION part3 VALUES LESS THAN (10)
 
53680
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
53681
PARTITION part4 VALUES LESS THAN (2147483646)
 
53682
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
53683
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53684
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
53685
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
53686
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
53687
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53688
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
53689
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
53690
# Start usability test (inc/partition_check.inc)
 
53691
create_command
 
53692
SHOW CREATE TABLE t1;
 
53693
Table   Create Table
 
53694
t1      CREATE TABLE `t1` (
 
53695
  `f_int1` int(11) DEFAULT NULL,
 
53696
  `f_int2` int(11) DEFAULT NULL,
 
53697
  `f_char1` char(20) DEFAULT NULL,
 
53698
  `f_char2` char(20) DEFAULT NULL,
 
53699
  `f_charbig` varchar(1000) DEFAULT NULL
 
53700
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
53701
 
 
53702
# check prerequisites-1 success:    1
 
53703
# check COUNT(*) success:    1
 
53704
# check MIN/MAX(f_int1) success:    1
 
53705
# check MIN/MAX(f_int2) success:    1
 
53706
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53707
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
53708
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
53709
WHERE f_int1 IN (2,3);
 
53710
# check prerequisites-3 success:    1
 
53711
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
53712
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
53713
# check read via f_int1 success: 1
 
53714
# check read via f_int2 success: 1
 
53715
        
 
53716
# check multiple-1 success:     1
 
53717
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
53718
        
 
53719
# check multiple-2 success:     1
 
53720
INSERT INTO t1 SELECT * FROM t0_template
 
53721
WHERE MOD(f_int1,3) = 0;
 
53722
        
 
53723
# check multiple-3 success:     1
 
53724
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
53725
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
53726
AND @max_row_div2 + @max_row_div4;
 
53727
        
 
53728
# check multiple-4 success:     1
 
53729
DELETE FROM t1
 
53730
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
53731
AND @max_row_div2 + @max_row_div4 + @max_row;
 
53732
        
 
53733
# check multiple-5 success:     1
 
53734
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
53735
INSERT INTO t1
 
53736
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
53737
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
53738
f_charbig = '#SINGLE#';
 
53739
        
 
53740
# check single-1 success:       1
 
53741
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
53742
INSERT INTO t1
 
53743
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
53744
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
53745
f_charbig = '#SINGLE#';
 
53746
        
 
53747
# check single-2 success:       1
 
53748
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
53749
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
53750
UPDATE t1 SET f_int1 = @cur_value2
 
53751
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
53752
        
 
53753
# check single-3 success:       1
 
53754
SET @cur_value1= -1;
 
53755
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
53756
UPDATE t1 SET f_int1 = @cur_value1
 
53757
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
53758
        
 
53759
# check single-4 success:       1
 
53760
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
53761
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
53762
        
 
53763
# check single-5 success:       1
 
53764
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
53765
        
 
53766
# check single-6 success:       1
 
53767
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
53768
ERROR HY000: Table has no partition for value 2147483647
 
53769
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
53770
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
53771
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
53772
f_charbig = '#NULL#';
 
53773
INSERT INTO t1
 
53774
SET f_int1 = NULL , f_int2 = -@max_row,
 
53775
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
53776
f_charbig = '#NULL#';
 
53777
# check null success:    1
 
53778
        
 
53779
# check null-1 success:         1
 
53780
UPDATE t1 SET f_int1 = -@max_row
 
53781
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
53782
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
53783
        
 
53784
# check null-2 success:         1
 
53785
UPDATE t1 SET f_int1 = NULL
 
53786
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
53787
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
53788
        
 
53789
# check null-3 success:         1
 
53790
DELETE FROM t1
 
53791
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
53792
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
53793
        
 
53794
# check null-4 success:         1
 
53795
DELETE FROM t1
 
53796
WHERE f_int1 = 0 AND f_int2 = 0
 
53797
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
53798
AND f_charbig = '#NULL#';
 
53799
SET AUTOCOMMIT= 0;
 
53800
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53801
SELECT f_int1, f_int1, '', '', 'was inserted'
 
53802
FROM t0_template source_tab
 
53803
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
53804
        
 
53805
# check transactions-1 success:         1
 
53806
COMMIT WORK;
 
53807
        
 
53808
# check transactions-2 success:         1
 
53809
ROLLBACK WORK;
 
53810
        
 
53811
# check transactions-3 success:         1
 
53812
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
53813
COMMIT WORK;
 
53814
ROLLBACK WORK;
 
53815
        
 
53816
# check transactions-4 success:         1
 
53817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53818
SELECT f_int1, f_int1, '', '', 'was inserted'
 
53819
FROM t0_template source_tab
 
53820
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
53821
        
 
53822
# check transactions-5 success:         1
 
53823
ROLLBACK WORK;
 
53824
        
 
53825
# check transactions-6 success:         1
 
53826
# INFO: Storage engine used for t1 seems to be transactional.
 
53827
COMMIT;
 
53828
        
 
53829
# check transactions-7 success:         1
 
53830
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
53831
COMMIT WORK;
 
53832
SET @@session.sql_mode = 'traditional';
 
53833
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
53834
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
53835
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
53836
'', '', 'was inserted' FROM t0_template
 
53837
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
53838
ERROR 22012: Division by 0
 
53839
COMMIT;
 
53840
        
 
53841
# check transactions-8 success:         1
 
53842
# INFO: Storage engine used for t1 seems to be able to revert
 
53843
#       changes made by the failing statement.
 
53844
SET @@session.sql_mode = '';
 
53845
SET AUTOCOMMIT= 1;
 
53846
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
53847
COMMIT WORK;
 
53848
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
53849
        
 
53850
# check special-1 success:      1
 
53851
UPDATE t1 SET f_charbig = '';
 
53852
        
 
53853
# check special-2 success:      1
 
53854
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
53855
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53856
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
53857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53858
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53859
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53860
'just inserted' FROM t0_template
 
53861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53862
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
53863
BEGIN
 
53864
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53865
f_charbig = 'updated by trigger'
 
53866
      WHERE f_int1 = new.f_int1;
 
53867
END|
 
53868
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53869
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
53870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53871
        
 
53872
# check trigger-1 success:      1
 
53873
DROP TRIGGER trg_1;
 
53874
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53875
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53876
f_charbig = 'just inserted'
 
53877
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53878
DELETE FROM t0_aux
 
53879
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53880
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53881
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53882
'just inserted' FROM t0_template
 
53883
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53884
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
53885
BEGIN
 
53886
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53887
f_charbig = 'updated by trigger'
 
53888
      WHERE f_int1 = new.f_int1;
 
53889
END|
 
53890
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53891
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
53892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53893
        
 
53894
# check trigger-2 success:      1
 
53895
DROP TRIGGER trg_1;
 
53896
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53897
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53898
f_charbig = 'just inserted'
 
53899
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53900
DELETE FROM t0_aux
 
53901
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53903
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53904
'just inserted' FROM t0_template
 
53905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53906
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
53907
BEGIN
 
53908
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53909
f_charbig = 'updated by trigger'
 
53910
      WHERE f_int1 = new.f_int1;
 
53911
END|
 
53912
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53913
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53914
        
 
53915
# check trigger-3 success:      1
 
53916
DROP TRIGGER trg_1;
 
53917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53918
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53919
f_charbig = 'just inserted'
 
53920
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53921
DELETE FROM t0_aux
 
53922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53925
'just inserted' FROM t0_template
 
53926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53927
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
53928
BEGIN
 
53929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53930
f_charbig = 'updated by trigger'
 
53931
      WHERE f_int1 = - old.f_int1;
 
53932
END|
 
53933
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53934
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53935
        
 
53936
# check trigger-4 success:      1
 
53937
DROP TRIGGER trg_1;
 
53938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53940
f_charbig = 'just inserted'
 
53941
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53942
DELETE FROM t0_aux
 
53943
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53945
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53946
'just inserted' FROM t0_template
 
53947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53948
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
53949
BEGIN
 
53950
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53951
f_charbig = 'updated by trigger'
 
53952
      WHERE f_int1 = new.f_int1;
 
53953
END|
 
53954
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53955
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53956
        
 
53957
# check trigger-5 success:      1
 
53958
DROP TRIGGER trg_1;
 
53959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53961
f_charbig = 'just inserted'
 
53962
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53963
DELETE FROM t0_aux
 
53964
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53965
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53966
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53967
'just inserted' FROM t0_template
 
53968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53969
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
53970
BEGIN
 
53971
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53972
f_charbig = 'updated by trigger'
 
53973
      WHERE f_int1 = - old.f_int1;
 
53974
END|
 
53975
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
53976
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53977
        
 
53978
# check trigger-6 success:      1
 
53979
DROP TRIGGER trg_1;
 
53980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
53981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
53982
f_charbig = 'just inserted'
 
53983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
53984
DELETE FROM t0_aux
 
53985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
53987
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
53988
'just inserted' FROM t0_template
 
53989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
53990
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
53991
BEGIN
 
53992
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
53993
f_charbig = 'updated by trigger'
 
53994
      WHERE f_int1 = - old.f_int1;
 
53995
END|
 
53996
DELETE FROM t0_aux
 
53997
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
53998
        
 
53999
# check trigger-7 success:      1
 
54000
DROP TRIGGER trg_1;
 
54001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54003
f_charbig = 'just inserted'
 
54004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54005
DELETE FROM t0_aux
 
54006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54008
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54009
'just inserted' FROM t0_template
 
54010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54011
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
54012
BEGIN
 
54013
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54014
f_charbig = 'updated by trigger'
 
54015
      WHERE f_int1 = - old.f_int1;
 
54016
END|
 
54017
DELETE FROM t0_aux
 
54018
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54019
        
 
54020
# check trigger-8 success:      1
 
54021
DROP TRIGGER trg_1;
 
54022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54024
f_charbig = 'just inserted'
 
54025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54026
DELETE FROM t0_aux
 
54027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54028
DELETE FROM t1
 
54029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54030
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
54031
BEGIN
 
54032
SET new.f_int1 = old.f_int1 + @max_row,
 
54033
new.f_int2 = old.f_int2 - @max_row,
 
54034
new.f_charbig = '####updated per update trigger####';
 
54035
END|
 
54036
UPDATE t1
 
54037
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
54038
f_charbig = '####updated per update statement itself####';
 
54039
        
 
54040
# check trigger-9 success:      1
 
54041
DROP TRIGGER trg_2;
 
54042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54044
f_charbig = CONCAT('===',f_char1,'===');
 
54045
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
54046
BEGIN
 
54047
SET new.f_int1 = new.f_int1 + @max_row,
 
54048
new.f_int2 = new.f_int2 - @max_row,
 
54049
new.f_charbig = '####updated per update trigger####';
 
54050
END|
 
54051
UPDATE t1
 
54052
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
54053
f_charbig = '####updated per update statement itself####';
 
54054
        
 
54055
# check trigger-10 success:     1
 
54056
DROP TRIGGER trg_2;
 
54057
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54058
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54059
f_charbig = CONCAT('===',f_char1,'===');
 
54060
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
54061
BEGIN
 
54062
SET new.f_int1 = @my_max1 + @counter,
 
54063
new.f_int2 = @my_min2 - @counter,
 
54064
new.f_charbig = '####updated per insert trigger####';
 
54065
SET @counter = @counter + 1;
 
54066
END|
 
54067
SET @counter = 1;
 
54068
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
54069
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54070
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
54071
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
54072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
54073
ORDER BY f_int1;
 
54074
DROP TRIGGER trg_3;
 
54075
        
 
54076
# check trigger-11 success:     1
 
54077
DELETE FROM t1
 
54078
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
54079
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
54080
AND f_charbig = '####updated per insert trigger####';
 
54081
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
54082
BEGIN
 
54083
SET new.f_int1 = @my_max1 + @counter,
 
54084
new.f_int2 = @my_min2 - @counter,
 
54085
new.f_charbig = '####updated per insert trigger####';
 
54086
SET @counter = @counter + 1;
 
54087
END|
 
54088
SET @counter = 1;
 
54089
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
54090
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
54091
SELECT CAST(f_int1 AS CHAR),
 
54092
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
54093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
54094
ORDER BY f_int1;
 
54095
DROP TRIGGER trg_3;
 
54096
        
 
54097
# check trigger-12 success:     1
 
54098
DELETE FROM t1
 
54099
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
54100
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
54101
AND f_charbig = '####updated per insert trigger####';
 
54102
ANALYZE  TABLE t1;
 
54103
Table   Op      Msg_type        Msg_text
 
54104
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
54105
CHECK    TABLE t1 EXTENDED;
 
54106
Table   Op      Msg_type        Msg_text
 
54107
test.t1 check   note    The storage engine for the table doesn't support check
 
54108
CHECKSUM TABLE t1 EXTENDED;
 
54109
Table   Checksum
 
54110
test.t1 <some_value>
 
54111
OPTIMIZE TABLE t1;
 
54112
Table   Op      Msg_type        Msg_text
 
54113
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
54114
# check layout success:    1
 
54115
REPAIR   TABLE t1 EXTENDED;
 
54116
Table   Op      Msg_type        Msg_text
 
54117
test.t1 repair  note    The storage engine for the table doesn't support repair
 
54118
# check layout success:    1
 
54119
TRUNCATE t1;
 
54120
        
 
54121
# check TRUNCATE success:       1
 
54122
# check layout success:    1
 
54123
# End usability test (inc/partition_check.inc)
 
54124
DROP TABLE t1;
 
54125
CREATE TABLE t1 (
 
54126
f_int1 INTEGER,
 
54127
f_int2 INTEGER,
 
54128
f_char1 CHAR(20),
 
54129
f_char2 CHAR(20),
 
54130
f_charbig VARCHAR(1000)
 
54131
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
54132
)
 
54133
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
54134
(PARTITION part1 VALUES IN (0)
 
54135
(SUBPARTITION sp11, SUBPARTITION sp12),
 
54136
PARTITION part2 VALUES IN (1)
 
54137
(SUBPARTITION sp21, SUBPARTITION sp22),
 
54138
PARTITION part3 VALUES IN (2)
 
54139
(SUBPARTITION sp31, SUBPARTITION sp32),
 
54140
PARTITION part4 VALUES IN (NULL)
 
54141
(SUBPARTITION sp41, SUBPARTITION sp42));
 
54142
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54143
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
54144
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
54145
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
54146
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54147
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
54148
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
54149
# Start usability test (inc/partition_check.inc)
 
54150
create_command
 
54151
SHOW CREATE TABLE t1;
 
54152
Table   Create Table
 
54153
t1      CREATE TABLE `t1` (
 
54154
  `f_int1` int(11) DEFAULT NULL,
 
54155
  `f_int2` int(11) DEFAULT NULL,
 
54156
  `f_char1` char(20) DEFAULT NULL,
 
54157
  `f_char2` char(20) DEFAULT NULL,
 
54158
  `f_charbig` varchar(1000) DEFAULT NULL
 
54159
) ENGINE=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
54160
 
 
54161
# check prerequisites-1 success:    1
 
54162
# check COUNT(*) success:    1
 
54163
# check MIN/MAX(f_int1) success:    1
 
54164
# check MIN/MAX(f_int2) success:    1
 
54165
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54166
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
54167
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
54168
WHERE f_int1 IN (2,3);
 
54169
# check prerequisites-3 success:    1
 
54170
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
54171
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
54172
# check read via f_int1 success: 1
 
54173
# check read via f_int2 success: 1
 
54174
        
 
54175
# check multiple-1 success:     1
 
54176
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
54177
        
 
54178
# check multiple-2 success:     1
 
54179
INSERT INTO t1 SELECT * FROM t0_template
 
54180
WHERE MOD(f_int1,3) = 0;
 
54181
        
 
54182
# check multiple-3 success:     1
 
54183
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
54184
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
54185
AND @max_row_div2 + @max_row_div4;
 
54186
        
 
54187
# check multiple-4 success:     1
 
54188
DELETE FROM t1
 
54189
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
54190
AND @max_row_div2 + @max_row_div4 + @max_row;
 
54191
        
 
54192
# check multiple-5 success:     1
 
54193
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
54194
INSERT INTO t1
 
54195
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
54196
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
54197
f_charbig = '#SINGLE#';
 
54198
        
 
54199
# check single-1 success:       1
 
54200
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
54201
INSERT INTO t1
 
54202
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
54203
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
54204
f_charbig = '#SINGLE#';
 
54205
        
 
54206
# check single-2 success:       1
 
54207
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
54208
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
54209
UPDATE t1 SET f_int1 = @cur_value2
 
54210
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
54211
        
 
54212
# check single-3 success:       1
 
54213
SET @cur_value1= -1;
 
54214
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
54215
UPDATE t1 SET f_int1 = @cur_value1
 
54216
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
54217
        
 
54218
# check single-4 success:       1
 
54219
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
54220
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
54221
        
 
54222
# check single-5 success:       1
 
54223
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
54224
        
 
54225
# check single-6 success:       1
 
54226
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
54227
        
 
54228
# check single-7 success:       1
 
54229
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
54230
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
54231
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
54232
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
54233
f_charbig = '#NULL#';
 
54234
INSERT INTO t1
 
54235
SET f_int1 = NULL , f_int2 = -@max_row,
 
54236
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
54237
f_charbig = '#NULL#';
 
54238
# check null success:    1
 
54239
        
 
54240
# check null-1 success:         1
 
54241
UPDATE t1 SET f_int1 = -@max_row
 
54242
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
54243
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
54244
        
 
54245
# check null-2 success:         1
 
54246
UPDATE t1 SET f_int1 = NULL
 
54247
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
54248
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
54249
        
 
54250
# check null-3 success:         1
 
54251
DELETE FROM t1
 
54252
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
54253
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
54254
        
 
54255
# check null-4 success:         1
 
54256
DELETE FROM t1
 
54257
WHERE f_int1 = 0 AND f_int2 = 0
 
54258
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
54259
AND f_charbig = '#NULL#';
 
54260
SET AUTOCOMMIT= 0;
 
54261
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54262
SELECT f_int1, f_int1, '', '', 'was inserted'
 
54263
FROM t0_template source_tab
 
54264
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
54265
        
 
54266
# check transactions-1 success:         1
 
54267
COMMIT WORK;
 
54268
        
 
54269
# check transactions-2 success:         1
 
54270
ROLLBACK WORK;
 
54271
        
 
54272
# check transactions-3 success:         1
 
54273
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
54274
COMMIT WORK;
 
54275
ROLLBACK WORK;
 
54276
        
 
54277
# check transactions-4 success:         1
 
54278
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54279
SELECT f_int1, f_int1, '', '', 'was inserted'
 
54280
FROM t0_template source_tab
 
54281
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
54282
        
 
54283
# check transactions-5 success:         1
 
54284
ROLLBACK WORK;
 
54285
        
 
54286
# check transactions-6 success:         1
 
54287
# INFO: Storage engine used for t1 seems to be transactional.
 
54288
COMMIT;
 
54289
        
 
54290
# check transactions-7 success:         1
 
54291
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
54292
COMMIT WORK;
 
54293
SET @@session.sql_mode = 'traditional';
 
54294
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
54295
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54296
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
54297
'', '', 'was inserted' FROM t0_template
 
54298
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
54299
ERROR 22012: Division by 0
 
54300
COMMIT;
 
54301
        
 
54302
# check transactions-8 success:         1
 
54303
# INFO: Storage engine used for t1 seems to be able to revert
 
54304
#       changes made by the failing statement.
 
54305
SET @@session.sql_mode = '';
 
54306
SET AUTOCOMMIT= 1;
 
54307
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
54308
COMMIT WORK;
 
54309
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
54310
        
 
54311
# check special-1 success:      1
 
54312
UPDATE t1 SET f_charbig = '';
 
54313
        
 
54314
# check special-2 success:      1
 
54315
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
54316
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54317
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
54318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54319
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54320
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54321
'just inserted' FROM t0_template
 
54322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54323
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
54324
BEGIN
 
54325
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54326
f_charbig = 'updated by trigger'
 
54327
      WHERE f_int1 = new.f_int1;
 
54328
END|
 
54329
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54330
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
54331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54332
        
 
54333
# check trigger-1 success:      1
 
54334
DROP TRIGGER trg_1;
 
54335
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54336
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54337
f_charbig = 'just inserted'
 
54338
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54339
DELETE FROM t0_aux
 
54340
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54341
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54342
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54343
'just inserted' FROM t0_template
 
54344
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54345
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
54346
BEGIN
 
54347
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54348
f_charbig = 'updated by trigger'
 
54349
      WHERE f_int1 = new.f_int1;
 
54350
END|
 
54351
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54352
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
54353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54354
        
 
54355
# check trigger-2 success:      1
 
54356
DROP TRIGGER trg_1;
 
54357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54359
f_charbig = 'just inserted'
 
54360
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54361
DELETE FROM t0_aux
 
54362
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54364
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54365
'just inserted' FROM t0_template
 
54366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54367
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
54368
BEGIN
 
54369
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54370
f_charbig = 'updated by trigger'
 
54371
      WHERE f_int1 = new.f_int1;
 
54372
END|
 
54373
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54374
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54375
        
 
54376
# check trigger-3 success:      1
 
54377
DROP TRIGGER trg_1;
 
54378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54379
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54380
f_charbig = 'just inserted'
 
54381
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54382
DELETE FROM t0_aux
 
54383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54386
'just inserted' FROM t0_template
 
54387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54388
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
54389
BEGIN
 
54390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54391
f_charbig = 'updated by trigger'
 
54392
      WHERE f_int1 = - old.f_int1;
 
54393
END|
 
54394
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54395
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54396
        
 
54397
# check trigger-4 success:      1
 
54398
DROP TRIGGER trg_1;
 
54399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54401
f_charbig = 'just inserted'
 
54402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54403
DELETE FROM t0_aux
 
54404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54406
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54407
'just inserted' FROM t0_template
 
54408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54409
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
54410
BEGIN
 
54411
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54412
f_charbig = 'updated by trigger'
 
54413
      WHERE f_int1 = new.f_int1;
 
54414
END|
 
54415
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54416
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54417
        
 
54418
# check trigger-5 success:      1
 
54419
DROP TRIGGER trg_1;
 
54420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54422
f_charbig = 'just inserted'
 
54423
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54424
DELETE FROM t0_aux
 
54425
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54426
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54427
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54428
'just inserted' FROM t0_template
 
54429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54430
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
54431
BEGIN
 
54432
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54433
f_charbig = 'updated by trigger'
 
54434
      WHERE f_int1 = - old.f_int1;
 
54435
END|
 
54436
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54437
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54438
        
 
54439
# check trigger-6 success:      1
 
54440
DROP TRIGGER trg_1;
 
54441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54443
f_charbig = 'just inserted'
 
54444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54445
DELETE FROM t0_aux
 
54446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54449
'just inserted' FROM t0_template
 
54450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54451
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
54452
BEGIN
 
54453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54454
f_charbig = 'updated by trigger'
 
54455
      WHERE f_int1 = - old.f_int1;
 
54456
END|
 
54457
DELETE FROM t0_aux
 
54458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54459
        
 
54460
# check trigger-7 success:      1
 
54461
DROP TRIGGER trg_1;
 
54462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54464
f_charbig = 'just inserted'
 
54465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54466
DELETE FROM t0_aux
 
54467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54470
'just inserted' FROM t0_template
 
54471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54472
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
54473
BEGIN
 
54474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54475
f_charbig = 'updated by trigger'
 
54476
      WHERE f_int1 = - old.f_int1;
 
54477
END|
 
54478
DELETE FROM t0_aux
 
54479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54480
        
 
54481
# check trigger-8 success:      1
 
54482
DROP TRIGGER trg_1;
 
54483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54485
f_charbig = 'just inserted'
 
54486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54487
DELETE FROM t0_aux
 
54488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54489
DELETE FROM t1
 
54490
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54491
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
54492
BEGIN
 
54493
SET new.f_int1 = old.f_int1 + @max_row,
 
54494
new.f_int2 = old.f_int2 - @max_row,
 
54495
new.f_charbig = '####updated per update trigger####';
 
54496
END|
 
54497
UPDATE t1
 
54498
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
54499
f_charbig = '####updated per update statement itself####';
 
54500
        
 
54501
# check trigger-9 success:      1
 
54502
DROP TRIGGER trg_2;
 
54503
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54504
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54505
f_charbig = CONCAT('===',f_char1,'===');
 
54506
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
54507
BEGIN
 
54508
SET new.f_int1 = new.f_int1 + @max_row,
 
54509
new.f_int2 = new.f_int2 - @max_row,
 
54510
new.f_charbig = '####updated per update trigger####';
 
54511
END|
 
54512
UPDATE t1
 
54513
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
54514
f_charbig = '####updated per update statement itself####';
 
54515
        
 
54516
# check trigger-10 success:     1
 
54517
DROP TRIGGER trg_2;
 
54518
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54519
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54520
f_charbig = CONCAT('===',f_char1,'===');
 
54521
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
54522
BEGIN
 
54523
SET new.f_int1 = @my_max1 + @counter,
 
54524
new.f_int2 = @my_min2 - @counter,
 
54525
new.f_charbig = '####updated per insert trigger####';
 
54526
SET @counter = @counter + 1;
 
54527
END|
 
54528
SET @counter = 1;
 
54529
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
54530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54531
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
54532
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
54533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
54534
ORDER BY f_int1;
 
54535
DROP TRIGGER trg_3;
 
54536
        
 
54537
# check trigger-11 success:     1
 
54538
DELETE FROM t1
 
54539
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
54540
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
54541
AND f_charbig = '####updated per insert trigger####';
 
54542
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
54543
BEGIN
 
54544
SET new.f_int1 = @my_max1 + @counter,
 
54545
new.f_int2 = @my_min2 - @counter,
 
54546
new.f_charbig = '####updated per insert trigger####';
 
54547
SET @counter = @counter + 1;
 
54548
END|
 
54549
SET @counter = 1;
 
54550
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
54551
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
54552
SELECT CAST(f_int1 AS CHAR),
 
54553
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
54554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
54555
ORDER BY f_int1;
 
54556
DROP TRIGGER trg_3;
 
54557
        
 
54558
# check trigger-12 success:     1
 
54559
DELETE FROM t1
 
54560
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
54561
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
54562
AND f_charbig = '####updated per insert trigger####';
 
54563
ANALYZE  TABLE t1;
 
54564
Table   Op      Msg_type        Msg_text
 
54565
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
54566
CHECK    TABLE t1 EXTENDED;
 
54567
Table   Op      Msg_type        Msg_text
 
54568
test.t1 check   note    The storage engine for the table doesn't support check
 
54569
CHECKSUM TABLE t1 EXTENDED;
 
54570
Table   Checksum
 
54571
test.t1 <some_value>
 
54572
OPTIMIZE TABLE t1;
 
54573
Table   Op      Msg_type        Msg_text
 
54574
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
54575
# check layout success:    1
 
54576
REPAIR   TABLE t1 EXTENDED;
 
54577
Table   Op      Msg_type        Msg_text
 
54578
test.t1 repair  note    The storage engine for the table doesn't support repair
 
54579
# check layout success:    1
 
54580
TRUNCATE t1;
 
54581
        
 
54582
# check TRUNCATE success:       1
 
54583
# check layout success:    1
 
54584
# End usability test (inc/partition_check.inc)
 
54585
DROP TABLE t1;
 
54586
CREATE TABLE t1 (
 
54587
f_int1 INTEGER,
 
54588
f_int2 INTEGER,
 
54589
f_char1 CHAR(20),
 
54590
f_char2 CHAR(20),
 
54591
f_charbig VARCHAR(1000)
 
54592
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
54593
)
 
54594
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
54595
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
54596
(PARTITION part1 VALUES IN (0),
 
54597
 PARTITION part2 VALUES IN (1),
 
54598
 PARTITION part3 VALUES IN (NULL));
 
54599
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54600
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
54601
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
54602
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
54603
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54604
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
54605
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
54606
# Start usability test (inc/partition_check.inc)
 
54607
create_command
 
54608
SHOW CREATE TABLE t1;
 
54609
Table   Create Table
 
54610
t1      CREATE TABLE `t1` (
 
54611
  `f_int1` int(11) DEFAULT NULL,
 
54612
  `f_int2` int(11) DEFAULT NULL,
 
54613
  `f_char1` char(20) DEFAULT NULL,
 
54614
  `f_char2` char(20) DEFAULT NULL,
 
54615
  `f_charbig` varchar(1000) DEFAULT NULL
 
54616
) ENGINE=InnoDB 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 = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
54617
 
 
54618
# check prerequisites-1 success:    1
 
54619
# check COUNT(*) success:    1
 
54620
# check MIN/MAX(f_int1) success:    1
 
54621
# check MIN/MAX(f_int2) success:    1
 
54622
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54623
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
54624
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
54625
WHERE f_int1 IN (2,3);
 
54626
# check prerequisites-3 success:    1
 
54627
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
54628
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
54629
# check read via f_int1 success: 1
 
54630
# check read via f_int2 success: 1
 
54631
        
 
54632
# check multiple-1 success:     1
 
54633
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
54634
        
 
54635
# check multiple-2 success:     1
 
54636
INSERT INTO t1 SELECT * FROM t0_template
 
54637
WHERE MOD(f_int1,3) = 0;
 
54638
        
 
54639
# check multiple-3 success:     1
 
54640
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
54641
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
54642
AND @max_row_div2 + @max_row_div4;
 
54643
        
 
54644
# check multiple-4 success:     1
 
54645
DELETE FROM t1
 
54646
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
54647
AND @max_row_div2 + @max_row_div4 + @max_row;
 
54648
        
 
54649
# check multiple-5 success:     1
 
54650
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
54651
INSERT INTO t1
 
54652
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
54653
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
54654
f_charbig = '#SINGLE#';
 
54655
        
 
54656
# check single-1 success:       1
 
54657
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
54658
INSERT INTO t1
 
54659
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
54660
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
54661
f_charbig = '#SINGLE#';
 
54662
        
 
54663
# check single-2 success:       1
 
54664
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
54665
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
54666
UPDATE t1 SET f_int1 = @cur_value2
 
54667
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
54668
        
 
54669
# check single-3 success:       1
 
54670
SET @cur_value1= -1;
 
54671
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
54672
UPDATE t1 SET f_int1 = @cur_value1
 
54673
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
54674
        
 
54675
# check single-4 success:       1
 
54676
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
54677
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
54678
        
 
54679
# check single-5 success:       1
 
54680
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
54681
        
 
54682
# check single-6 success:       1
 
54683
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
54684
        
 
54685
# check single-7 success:       1
 
54686
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
54687
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
54688
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
54689
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
54690
f_charbig = '#NULL#';
 
54691
INSERT INTO t1
 
54692
SET f_int1 = NULL , f_int2 = -@max_row,
 
54693
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
54694
f_charbig = '#NULL#';
 
54695
# check null success:    1
 
54696
        
 
54697
# check null-1 success:         1
 
54698
UPDATE t1 SET f_int1 = -@max_row
 
54699
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
54700
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
54701
        
 
54702
# check null-2 success:         1
 
54703
UPDATE t1 SET f_int1 = NULL
 
54704
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
54705
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
54706
        
 
54707
# check null-3 success:         1
 
54708
DELETE FROM t1
 
54709
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
54710
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
54711
        
 
54712
# check null-4 success:         1
 
54713
DELETE FROM t1
 
54714
WHERE f_int1 = 0 AND f_int2 = 0
 
54715
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
54716
AND f_charbig = '#NULL#';
 
54717
SET AUTOCOMMIT= 0;
 
54718
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54719
SELECT f_int1, f_int1, '', '', 'was inserted'
 
54720
FROM t0_template source_tab
 
54721
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
54722
        
 
54723
# check transactions-1 success:         1
 
54724
COMMIT WORK;
 
54725
        
 
54726
# check transactions-2 success:         1
 
54727
ROLLBACK WORK;
 
54728
        
 
54729
# check transactions-3 success:         1
 
54730
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
54731
COMMIT WORK;
 
54732
ROLLBACK WORK;
 
54733
        
 
54734
# check transactions-4 success:         1
 
54735
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54736
SELECT f_int1, f_int1, '', '', 'was inserted'
 
54737
FROM t0_template source_tab
 
54738
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
54739
        
 
54740
# check transactions-5 success:         1
 
54741
ROLLBACK WORK;
 
54742
        
 
54743
# check transactions-6 success:         1
 
54744
# INFO: Storage engine used for t1 seems to be transactional.
 
54745
COMMIT;
 
54746
        
 
54747
# check transactions-7 success:         1
 
54748
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
54749
COMMIT WORK;
 
54750
SET @@session.sql_mode = 'traditional';
 
54751
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
54752
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54753
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
54754
'', '', 'was inserted' FROM t0_template
 
54755
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
54756
ERROR 22012: Division by 0
 
54757
COMMIT;
 
54758
        
 
54759
# check transactions-8 success:         1
 
54760
# INFO: Storage engine used for t1 seems to be able to revert
 
54761
#       changes made by the failing statement.
 
54762
SET @@session.sql_mode = '';
 
54763
SET AUTOCOMMIT= 1;
 
54764
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
54765
COMMIT WORK;
 
54766
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
54767
        
 
54768
# check special-1 success:      1
 
54769
UPDATE t1 SET f_charbig = '';
 
54770
        
 
54771
# check special-2 success:      1
 
54772
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
54773
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54774
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
54775
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54777
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54778
'just inserted' FROM t0_template
 
54779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54780
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
54781
BEGIN
 
54782
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54783
f_charbig = 'updated by trigger'
 
54784
      WHERE f_int1 = new.f_int1;
 
54785
END|
 
54786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54787
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
54788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54789
        
 
54790
# check trigger-1 success:      1
 
54791
DROP TRIGGER trg_1;
 
54792
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54793
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54794
f_charbig = 'just inserted'
 
54795
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54796
DELETE FROM t0_aux
 
54797
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54798
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54799
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54800
'just inserted' FROM t0_template
 
54801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54802
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
54803
BEGIN
 
54804
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54805
f_charbig = 'updated by trigger'
 
54806
      WHERE f_int1 = new.f_int1;
 
54807
END|
 
54808
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54809
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
54810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54811
        
 
54812
# check trigger-2 success:      1
 
54813
DROP TRIGGER trg_1;
 
54814
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54815
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54816
f_charbig = 'just inserted'
 
54817
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54818
DELETE FROM t0_aux
 
54819
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54820
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54821
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54822
'just inserted' FROM t0_template
 
54823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54824
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
54825
BEGIN
 
54826
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54827
f_charbig = 'updated by trigger'
 
54828
      WHERE f_int1 = new.f_int1;
 
54829
END|
 
54830
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54831
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54832
        
 
54833
# check trigger-3 success:      1
 
54834
DROP TRIGGER trg_1;
 
54835
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54836
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54837
f_charbig = 'just inserted'
 
54838
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54839
DELETE FROM t0_aux
 
54840
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54842
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54843
'just inserted' FROM t0_template
 
54844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54845
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
54846
BEGIN
 
54847
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54848
f_charbig = 'updated by trigger'
 
54849
      WHERE f_int1 = - old.f_int1;
 
54850
END|
 
54851
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54852
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54853
        
 
54854
# check trigger-4 success:      1
 
54855
DROP TRIGGER trg_1;
 
54856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54858
f_charbig = 'just inserted'
 
54859
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54860
DELETE FROM t0_aux
 
54861
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54862
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54863
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54864
'just inserted' FROM t0_template
 
54865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54866
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
54867
BEGIN
 
54868
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54869
f_charbig = 'updated by trigger'
 
54870
      WHERE f_int1 = new.f_int1;
 
54871
END|
 
54872
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54873
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54874
        
 
54875
# check trigger-5 success:      1
 
54876
DROP TRIGGER trg_1;
 
54877
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54878
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54879
f_charbig = 'just inserted'
 
54880
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54881
DELETE FROM t0_aux
 
54882
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54883
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54884
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54885
'just inserted' FROM t0_template
 
54886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54887
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
54888
BEGIN
 
54889
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54890
f_charbig = 'updated by trigger'
 
54891
      WHERE f_int1 = - old.f_int1;
 
54892
END|
 
54893
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
54894
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54895
        
 
54896
# check trigger-6 success:      1
 
54897
DROP TRIGGER trg_1;
 
54898
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54899
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54900
f_charbig = 'just inserted'
 
54901
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54902
DELETE FROM t0_aux
 
54903
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54904
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54905
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54906
'just inserted' FROM t0_template
 
54907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54908
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
54909
BEGIN
 
54910
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54911
f_charbig = 'updated by trigger'
 
54912
      WHERE f_int1 = - old.f_int1;
 
54913
END|
 
54914
DELETE FROM t0_aux
 
54915
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54916
        
 
54917
# check trigger-7 success:      1
 
54918
DROP TRIGGER trg_1;
 
54919
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54920
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54921
f_charbig = 'just inserted'
 
54922
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54923
DELETE FROM t0_aux
 
54924
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54925
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
54926
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
54927
'just inserted' FROM t0_template
 
54928
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54929
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
54930
BEGIN
 
54931
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
54932
f_charbig = 'updated by trigger'
 
54933
      WHERE f_int1 = - old.f_int1;
 
54934
END|
 
54935
DELETE FROM t0_aux
 
54936
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
54937
        
 
54938
# check trigger-8 success:      1
 
54939
DROP TRIGGER trg_1;
 
54940
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54941
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54942
f_charbig = 'just inserted'
 
54943
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
54944
DELETE FROM t0_aux
 
54945
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54946
DELETE FROM t1
 
54947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
54948
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
54949
BEGIN
 
54950
SET new.f_int1 = old.f_int1 + @max_row,
 
54951
new.f_int2 = old.f_int2 - @max_row,
 
54952
new.f_charbig = '####updated per update trigger####';
 
54953
END|
 
54954
UPDATE t1
 
54955
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
54956
f_charbig = '####updated per update statement itself####';
 
54957
        
 
54958
# check trigger-9 success:      1
 
54959
DROP TRIGGER trg_2;
 
54960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54962
f_charbig = CONCAT('===',f_char1,'===');
 
54963
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
54964
BEGIN
 
54965
SET new.f_int1 = new.f_int1 + @max_row,
 
54966
new.f_int2 = new.f_int2 - @max_row,
 
54967
new.f_charbig = '####updated per update trigger####';
 
54968
END|
 
54969
UPDATE t1
 
54970
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
54971
f_charbig = '####updated per update statement itself####';
 
54972
        
 
54973
# check trigger-10 success:     1
 
54974
DROP TRIGGER trg_2;
 
54975
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
54976
f_int2 = CAST(f_char1 AS SIGNED INT),
 
54977
f_charbig = CONCAT('===',f_char1,'===');
 
54978
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
54979
BEGIN
 
54980
SET new.f_int1 = @my_max1 + @counter,
 
54981
new.f_int2 = @my_min2 - @counter,
 
54982
new.f_charbig = '####updated per insert trigger####';
 
54983
SET @counter = @counter + 1;
 
54984
END|
 
54985
SET @counter = 1;
 
54986
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
54987
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
54988
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
54989
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
54990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
54991
ORDER BY f_int1;
 
54992
DROP TRIGGER trg_3;
 
54993
        
 
54994
# check trigger-11 success:     1
 
54995
DELETE FROM t1
 
54996
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
54997
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
54998
AND f_charbig = '####updated per insert trigger####';
 
54999
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
55000
BEGIN
 
55001
SET new.f_int1 = @my_max1 + @counter,
 
55002
new.f_int2 = @my_min2 - @counter,
 
55003
new.f_charbig = '####updated per insert trigger####';
 
55004
SET @counter = @counter + 1;
 
55005
END|
 
55006
SET @counter = 1;
 
55007
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
55008
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
55009
SELECT CAST(f_int1 AS CHAR),
 
55010
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
55011
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
55012
ORDER BY f_int1;
 
55013
DROP TRIGGER trg_3;
 
55014
        
 
55015
# check trigger-12 success:     1
 
55016
DELETE FROM t1
 
55017
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
55018
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
55019
AND f_charbig = '####updated per insert trigger####';
 
55020
ANALYZE  TABLE t1;
 
55021
Table   Op      Msg_type        Msg_text
 
55022
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
55023
CHECK    TABLE t1 EXTENDED;
 
55024
Table   Op      Msg_type        Msg_text
 
55025
test.t1 check   note    The storage engine for the table doesn't support check
 
55026
CHECKSUM TABLE t1 EXTENDED;
 
55027
Table   Checksum
 
55028
test.t1 <some_value>
 
55029
OPTIMIZE TABLE t1;
 
55030
Table   Op      Msg_type        Msg_text
 
55031
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
55032
# check layout success:    1
 
55033
REPAIR   TABLE t1 EXTENDED;
 
55034
Table   Op      Msg_type        Msg_text
 
55035
test.t1 repair  note    The storage engine for the table doesn't support repair
 
55036
# check layout success:    1
 
55037
TRUNCATE t1;
 
55038
        
 
55039
# check TRUNCATE success:       1
 
55040
# check layout success:    1
 
55041
# End usability test (inc/partition_check.inc)
 
55042
DROP TABLE t1;
 
55043
#------------------------------------------------------------------------
 
55044
#  2.2   Partitioning function contains two columns (f_int1,f_int2)
 
55045
#------------------------------------------------------------------------
 
55046
#  2.2.1 DROP PRIMARY KEY consisting of two columns
 
55047
DROP TABLE IF EXISTS t1;
 
55048
CREATE TABLE t1 (
 
55049
f_int1 INTEGER,
 
55050
f_int2 INTEGER,
 
55051
f_char1 CHAR(20),
 
55052
f_char2 CHAR(20),
 
55053
f_charbig VARCHAR(1000)
 
55054
, PRIMARY KEY(f_int1,f_int2)
 
55055
)
 
55056
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
55057
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55058
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
55059
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
55060
ALTER TABLE t1 DROP PRIMARY KEY;
 
55061
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55062
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
55063
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
55064
# Start usability test (inc/partition_check.inc)
 
55065
create_command
 
55066
SHOW CREATE TABLE t1;
 
55067
Table   Create Table
 
55068
t1      CREATE TABLE `t1` (
 
55069
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
55070
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
55071
  `f_char1` char(20) DEFAULT NULL,
 
55072
  `f_char2` char(20) DEFAULT NULL,
 
55073
  `f_charbig` varchar(1000) DEFAULT NULL
 
55074
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
55075
 
 
55076
# check prerequisites-1 success:    1
 
55077
# check COUNT(*) success:    1
 
55078
# check MIN/MAX(f_int1) success:    1
 
55079
# check MIN/MAX(f_int2) success:    1
 
55080
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55081
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
55082
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
55083
WHERE f_int1 IN (2,3);
 
55084
# check prerequisites-3 success:    1
 
55085
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
55086
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
55087
# check read via f_int1 success: 1
 
55088
# check read via f_int2 success: 1
 
55089
        
 
55090
# check multiple-1 success:     1
 
55091
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
55092
        
 
55093
# check multiple-2 success:     1
 
55094
INSERT INTO t1 SELECT * FROM t0_template
 
55095
WHERE MOD(f_int1,3) = 0;
 
55096
        
 
55097
# check multiple-3 success:     1
 
55098
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
55099
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
55100
AND @max_row_div2 + @max_row_div4;
 
55101
        
 
55102
# check multiple-4 success:     1
 
55103
DELETE FROM t1
 
55104
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
55105
AND @max_row_div2 + @max_row_div4 + @max_row;
 
55106
        
 
55107
# check multiple-5 success:     1
 
55108
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
55109
INSERT INTO t1
 
55110
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
55111
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
55112
f_charbig = '#SINGLE#';
 
55113
        
 
55114
# check single-1 success:       1
 
55115
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
55116
INSERT INTO t1
 
55117
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
55118
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
55119
f_charbig = '#SINGLE#';
 
55120
        
 
55121
# check single-2 success:       1
 
55122
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
55123
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
55124
UPDATE t1 SET f_int1 = @cur_value2
 
55125
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
55126
        
 
55127
# check single-3 success:       1
 
55128
SET @cur_value1= -1;
 
55129
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
55130
UPDATE t1 SET f_int1 = @cur_value1
 
55131
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
55132
        
 
55133
# check single-4 success:       1
 
55134
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
55135
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
55136
        
 
55137
# check single-5 success:       1
 
55138
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
55139
        
 
55140
# check single-6 success:       1
 
55141
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
55142
        
 
55143
# check single-7 success:       1
 
55144
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
55145
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
55146
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
55147
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
55148
f_charbig = '#NULL#';
 
55149
INSERT INTO t1
 
55150
SET f_int1 = NULL , f_int2 = -@max_row,
 
55151
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
55152
f_charbig = '#NULL#';
 
55153
ERROR 23000: Column 'f_int1' cannot be null
 
55154
# check null success:    1
 
55155
DELETE FROM t1
 
55156
WHERE f_int1 = 0 AND f_int2 = 0
 
55157
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
55158
AND f_charbig = '#NULL#';
 
55159
SET AUTOCOMMIT= 0;
 
55160
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55161
SELECT f_int1, f_int1, '', '', 'was inserted'
 
55162
FROM t0_template source_tab
 
55163
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
55164
        
 
55165
# check transactions-1 success:         1
 
55166
COMMIT WORK;
 
55167
        
 
55168
# check transactions-2 success:         1
 
55169
ROLLBACK WORK;
 
55170
        
 
55171
# check transactions-3 success:         1
 
55172
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
55173
COMMIT WORK;
 
55174
ROLLBACK WORK;
 
55175
        
 
55176
# check transactions-4 success:         1
 
55177
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55178
SELECT f_int1, f_int1, '', '', 'was inserted'
 
55179
FROM t0_template source_tab
 
55180
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
55181
        
 
55182
# check transactions-5 success:         1
 
55183
ROLLBACK WORK;
 
55184
        
 
55185
# check transactions-6 success:         1
 
55186
# INFO: Storage engine used for t1 seems to be transactional.
 
55187
COMMIT;
 
55188
        
 
55189
# check transactions-7 success:         1
 
55190
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
55191
COMMIT WORK;
 
55192
SET @@session.sql_mode = 'traditional';
 
55193
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
55194
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55195
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
55196
'', '', 'was inserted' FROM t0_template
 
55197
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
55198
ERROR 22012: Division by 0
 
55199
COMMIT;
 
55200
        
 
55201
# check transactions-8 success:         1
 
55202
# INFO: Storage engine used for t1 seems to be able to revert
 
55203
#       changes made by the failing statement.
 
55204
SET @@session.sql_mode = '';
 
55205
SET AUTOCOMMIT= 1;
 
55206
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
55207
COMMIT WORK;
 
55208
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
55209
        
 
55210
# check special-1 success:      1
 
55211
UPDATE t1 SET f_charbig = '';
 
55212
        
 
55213
# check special-2 success:      1
 
55214
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
55215
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55216
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
55217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55218
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55219
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55220
'just inserted' FROM t0_template
 
55221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55222
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
55223
BEGIN
 
55224
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55225
f_charbig = 'updated by trigger'
 
55226
      WHERE f_int1 = new.f_int1;
 
55227
END|
 
55228
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55229
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
55230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55231
        
 
55232
# check trigger-1 success:      1
 
55233
DROP TRIGGER trg_1;
 
55234
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55235
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55236
f_charbig = 'just inserted'
 
55237
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55238
DELETE FROM t0_aux
 
55239
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55240
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55241
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55242
'just inserted' FROM t0_template
 
55243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55244
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
55245
BEGIN
 
55246
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55247
f_charbig = 'updated by trigger'
 
55248
      WHERE f_int1 = new.f_int1;
 
55249
END|
 
55250
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55251
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
55252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55253
        
 
55254
# check trigger-2 success:      1
 
55255
DROP TRIGGER trg_1;
 
55256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55258
f_charbig = 'just inserted'
 
55259
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55260
DELETE FROM t0_aux
 
55261
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55262
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55263
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55264
'just inserted' FROM t0_template
 
55265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55266
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
55267
BEGIN
 
55268
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55269
f_charbig = 'updated by trigger'
 
55270
      WHERE f_int1 = new.f_int1;
 
55271
END|
 
55272
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55273
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55274
        
 
55275
# check trigger-3 success:      1
 
55276
DROP TRIGGER trg_1;
 
55277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55278
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55279
f_charbig = 'just inserted'
 
55280
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55281
DELETE FROM t0_aux
 
55282
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55284
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55285
'just inserted' FROM t0_template
 
55286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55287
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
55288
BEGIN
 
55289
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55290
f_charbig = 'updated by trigger'
 
55291
      WHERE f_int1 = - old.f_int1;
 
55292
END|
 
55293
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55294
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55295
        
 
55296
# check trigger-4 success:      1
 
55297
DROP TRIGGER trg_1;
 
55298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55300
f_charbig = 'just inserted'
 
55301
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55302
DELETE FROM t0_aux
 
55303
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55305
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55306
'just inserted' FROM t0_template
 
55307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55308
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
55309
BEGIN
 
55310
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55311
f_charbig = 'updated by trigger'
 
55312
      WHERE f_int1 = new.f_int1;
 
55313
END|
 
55314
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55315
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55316
        
 
55317
# check trigger-5 success:      1
 
55318
DROP TRIGGER trg_1;
 
55319
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55320
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55321
f_charbig = 'just inserted'
 
55322
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55323
DELETE FROM t0_aux
 
55324
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55325
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55326
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55327
'just inserted' FROM t0_template
 
55328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55329
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
55330
BEGIN
 
55331
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55332
f_charbig = 'updated by trigger'
 
55333
      WHERE f_int1 = - old.f_int1;
 
55334
END|
 
55335
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55336
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55337
        
 
55338
# check trigger-6 success:      1
 
55339
DROP TRIGGER trg_1;
 
55340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55342
f_charbig = 'just inserted'
 
55343
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55344
DELETE FROM t0_aux
 
55345
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55346
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55347
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55348
'just inserted' FROM t0_template
 
55349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55350
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
55351
BEGIN
 
55352
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55353
f_charbig = 'updated by trigger'
 
55354
      WHERE f_int1 = - old.f_int1;
 
55355
END|
 
55356
DELETE FROM t0_aux
 
55357
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55358
        
 
55359
# check trigger-7 success:      1
 
55360
DROP TRIGGER trg_1;
 
55361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55363
f_charbig = 'just inserted'
 
55364
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55365
DELETE FROM t0_aux
 
55366
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55368
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55369
'just inserted' FROM t0_template
 
55370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55371
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
55372
BEGIN
 
55373
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55374
f_charbig = 'updated by trigger'
 
55375
      WHERE f_int1 = - old.f_int1;
 
55376
END|
 
55377
DELETE FROM t0_aux
 
55378
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55379
        
 
55380
# check trigger-8 success:      1
 
55381
DROP TRIGGER trg_1;
 
55382
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55383
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55384
f_charbig = 'just inserted'
 
55385
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55386
DELETE FROM t0_aux
 
55387
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55388
DELETE FROM t1
 
55389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55390
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
55391
BEGIN
 
55392
SET new.f_int1 = old.f_int1 + @max_row,
 
55393
new.f_int2 = old.f_int2 - @max_row,
 
55394
new.f_charbig = '####updated per update trigger####';
 
55395
END|
 
55396
UPDATE t1
 
55397
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
55398
f_charbig = '####updated per update statement itself####';
 
55399
        
 
55400
# check trigger-9 success:      1
 
55401
DROP TRIGGER trg_2;
 
55402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55404
f_charbig = CONCAT('===',f_char1,'===');
 
55405
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
55406
BEGIN
 
55407
SET new.f_int1 = new.f_int1 + @max_row,
 
55408
new.f_int2 = new.f_int2 - @max_row,
 
55409
new.f_charbig = '####updated per update trigger####';
 
55410
END|
 
55411
UPDATE t1
 
55412
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
55413
f_charbig = '####updated per update statement itself####';
 
55414
        
 
55415
# check trigger-10 success:     1
 
55416
DROP TRIGGER trg_2;
 
55417
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55418
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55419
f_charbig = CONCAT('===',f_char1,'===');
 
55420
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
55421
BEGIN
 
55422
SET new.f_int1 = @my_max1 + @counter,
 
55423
new.f_int2 = @my_min2 - @counter,
 
55424
new.f_charbig = '####updated per insert trigger####';
 
55425
SET @counter = @counter + 1;
 
55426
END|
 
55427
SET @counter = 1;
 
55428
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
55429
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55430
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
55431
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
55432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
55433
ORDER BY f_int1;
 
55434
DROP TRIGGER trg_3;
 
55435
        
 
55436
# check trigger-11 success:     1
 
55437
DELETE FROM t1
 
55438
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
55439
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
55440
AND f_charbig = '####updated per insert trigger####';
 
55441
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
55442
BEGIN
 
55443
SET new.f_int1 = @my_max1 + @counter,
 
55444
new.f_int2 = @my_min2 - @counter,
 
55445
new.f_charbig = '####updated per insert trigger####';
 
55446
SET @counter = @counter + 1;
 
55447
END|
 
55448
SET @counter = 1;
 
55449
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
55450
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
55451
SELECT CAST(f_int1 AS CHAR),
 
55452
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
55453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
55454
ORDER BY f_int1;
 
55455
DROP TRIGGER trg_3;
 
55456
        
 
55457
# check trigger-12 success:     1
 
55458
DELETE FROM t1
 
55459
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
55460
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
55461
AND f_charbig = '####updated per insert trigger####';
 
55462
ANALYZE  TABLE t1;
 
55463
Table   Op      Msg_type        Msg_text
 
55464
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
55465
CHECK    TABLE t1 EXTENDED;
 
55466
Table   Op      Msg_type        Msg_text
 
55467
test.t1 check   note    The storage engine for the table doesn't support check
 
55468
CHECKSUM TABLE t1 EXTENDED;
 
55469
Table   Checksum
 
55470
test.t1 <some_value>
 
55471
OPTIMIZE TABLE t1;
 
55472
Table   Op      Msg_type        Msg_text
 
55473
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
55474
# check layout success:    1
 
55475
REPAIR   TABLE t1 EXTENDED;
 
55476
Table   Op      Msg_type        Msg_text
 
55477
test.t1 repair  note    The storage engine for the table doesn't support repair
 
55478
# check layout success:    1
 
55479
TRUNCATE t1;
 
55480
        
 
55481
# check TRUNCATE success:       1
 
55482
# check layout success:    1
 
55483
# End usability test (inc/partition_check.inc)
 
55484
DROP TABLE t1;
 
55485
CREATE TABLE t1 (
 
55486
f_int1 INTEGER,
 
55487
f_int2 INTEGER,
 
55488
f_char1 CHAR(20),
 
55489
f_char2 CHAR(20),
 
55490
f_charbig VARCHAR(1000)
 
55491
, PRIMARY KEY(f_int1,f_int2)
 
55492
)
 
55493
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
55494
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55495
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
55496
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
55497
ALTER TABLE t1 DROP PRIMARY KEY;
 
55498
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55499
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
55500
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
55501
# Start usability test (inc/partition_check.inc)
 
55502
create_command
 
55503
SHOW CREATE TABLE t1;
 
55504
Table   Create Table
 
55505
t1      CREATE TABLE `t1` (
 
55506
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
55507
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
55508
  `f_char1` char(20) DEFAULT NULL,
 
55509
  `f_char2` char(20) DEFAULT NULL,
 
55510
  `f_charbig` varchar(1000) DEFAULT NULL
 
55511
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
55512
 
 
55513
# check prerequisites-1 success:    1
 
55514
# check COUNT(*) success:    1
 
55515
# check MIN/MAX(f_int1) success:    1
 
55516
# check MIN/MAX(f_int2) success:    1
 
55517
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55518
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
55519
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
55520
WHERE f_int1 IN (2,3);
 
55521
# check prerequisites-3 success:    1
 
55522
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
55523
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
55524
# check read via f_int1 success: 1
 
55525
# check read via f_int2 success: 1
 
55526
        
 
55527
# check multiple-1 success:     1
 
55528
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
55529
        
 
55530
# check multiple-2 success:     1
 
55531
INSERT INTO t1 SELECT * FROM t0_template
 
55532
WHERE MOD(f_int1,3) = 0;
 
55533
        
 
55534
# check multiple-3 success:     1
 
55535
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
55536
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
55537
AND @max_row_div2 + @max_row_div4;
 
55538
        
 
55539
# check multiple-4 success:     1
 
55540
DELETE FROM t1
 
55541
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
55542
AND @max_row_div2 + @max_row_div4 + @max_row;
 
55543
        
 
55544
# check multiple-5 success:     1
 
55545
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
55546
INSERT INTO t1
 
55547
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
55548
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
55549
f_charbig = '#SINGLE#';
 
55550
        
 
55551
# check single-1 success:       1
 
55552
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
55553
INSERT INTO t1
 
55554
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
55555
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
55556
f_charbig = '#SINGLE#';
 
55557
        
 
55558
# check single-2 success:       1
 
55559
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
55560
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
55561
UPDATE t1 SET f_int1 = @cur_value2
 
55562
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
55563
        
 
55564
# check single-3 success:       1
 
55565
SET @cur_value1= -1;
 
55566
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
55567
UPDATE t1 SET f_int1 = @cur_value1
 
55568
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
55569
        
 
55570
# check single-4 success:       1
 
55571
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
55572
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
55573
        
 
55574
# check single-5 success:       1
 
55575
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
55576
        
 
55577
# check single-6 success:       1
 
55578
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
55579
        
 
55580
# check single-7 success:       1
 
55581
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
55582
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
55583
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
55584
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
55585
f_charbig = '#NULL#';
 
55586
INSERT INTO t1
 
55587
SET f_int1 = NULL , f_int2 = -@max_row,
 
55588
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
55589
f_charbig = '#NULL#';
 
55590
ERROR 23000: Column 'f_int1' cannot be null
 
55591
# check null success:    1
 
55592
DELETE FROM t1
 
55593
WHERE f_int1 = 0 AND f_int2 = 0
 
55594
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
55595
AND f_charbig = '#NULL#';
 
55596
SET AUTOCOMMIT= 0;
 
55597
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55598
SELECT f_int1, f_int1, '', '', 'was inserted'
 
55599
FROM t0_template source_tab
 
55600
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
55601
        
 
55602
# check transactions-1 success:         1
 
55603
COMMIT WORK;
 
55604
        
 
55605
# check transactions-2 success:         1
 
55606
ROLLBACK WORK;
 
55607
        
 
55608
# check transactions-3 success:         1
 
55609
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
55610
COMMIT WORK;
 
55611
ROLLBACK WORK;
 
55612
        
 
55613
# check transactions-4 success:         1
 
55614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55615
SELECT f_int1, f_int1, '', '', 'was inserted'
 
55616
FROM t0_template source_tab
 
55617
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
55618
        
 
55619
# check transactions-5 success:         1
 
55620
ROLLBACK WORK;
 
55621
        
 
55622
# check transactions-6 success:         1
 
55623
# INFO: Storage engine used for t1 seems to be transactional.
 
55624
COMMIT;
 
55625
        
 
55626
# check transactions-7 success:         1
 
55627
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
55628
COMMIT WORK;
 
55629
SET @@session.sql_mode = 'traditional';
 
55630
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
55631
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55632
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
55633
'', '', 'was inserted' FROM t0_template
 
55634
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
55635
ERROR 22012: Division by 0
 
55636
COMMIT;
 
55637
        
 
55638
# check transactions-8 success:         1
 
55639
# INFO: Storage engine used for t1 seems to be able to revert
 
55640
#       changes made by the failing statement.
 
55641
SET @@session.sql_mode = '';
 
55642
SET AUTOCOMMIT= 1;
 
55643
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
55644
COMMIT WORK;
 
55645
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
55646
        
 
55647
# check special-1 success:      1
 
55648
UPDATE t1 SET f_charbig = '';
 
55649
        
 
55650
# check special-2 success:      1
 
55651
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
55652
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55653
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
55654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55655
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55656
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55657
'just inserted' FROM t0_template
 
55658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55659
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
55660
BEGIN
 
55661
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55662
f_charbig = 'updated by trigger'
 
55663
      WHERE f_int1 = new.f_int1;
 
55664
END|
 
55665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55666
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
55667
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55668
        
 
55669
# check trigger-1 success:      1
 
55670
DROP TRIGGER trg_1;
 
55671
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55672
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55673
f_charbig = 'just inserted'
 
55674
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55675
DELETE FROM t0_aux
 
55676
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55677
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55678
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55679
'just inserted' FROM t0_template
 
55680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55681
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
55682
BEGIN
 
55683
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55684
f_charbig = 'updated by trigger'
 
55685
      WHERE f_int1 = new.f_int1;
 
55686
END|
 
55687
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55688
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
55689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55690
        
 
55691
# check trigger-2 success:      1
 
55692
DROP TRIGGER trg_1;
 
55693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55695
f_charbig = 'just inserted'
 
55696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55697
DELETE FROM t0_aux
 
55698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55701
'just inserted' FROM t0_template
 
55702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55703
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
55704
BEGIN
 
55705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55706
f_charbig = 'updated by trigger'
 
55707
      WHERE f_int1 = new.f_int1;
 
55708
END|
 
55709
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55711
        
 
55712
# check trigger-3 success:      1
 
55713
DROP TRIGGER trg_1;
 
55714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55716
f_charbig = 'just inserted'
 
55717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55718
DELETE FROM t0_aux
 
55719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55722
'just inserted' FROM t0_template
 
55723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55724
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
55725
BEGIN
 
55726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55727
f_charbig = 'updated by trigger'
 
55728
      WHERE f_int1 = - old.f_int1;
 
55729
END|
 
55730
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55732
        
 
55733
# check trigger-4 success:      1
 
55734
DROP TRIGGER trg_1;
 
55735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55737
f_charbig = 'just inserted'
 
55738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55739
DELETE FROM t0_aux
 
55740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55741
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55742
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55743
'just inserted' FROM t0_template
 
55744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55745
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
55746
BEGIN
 
55747
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55748
f_charbig = 'updated by trigger'
 
55749
      WHERE f_int1 = new.f_int1;
 
55750
END|
 
55751
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55752
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55753
        
 
55754
# check trigger-5 success:      1
 
55755
DROP TRIGGER trg_1;
 
55756
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55757
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55758
f_charbig = 'just inserted'
 
55759
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55760
DELETE FROM t0_aux
 
55761
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55762
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55763
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55764
'just inserted' FROM t0_template
 
55765
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55766
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
55767
BEGIN
 
55768
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55769
f_charbig = 'updated by trigger'
 
55770
      WHERE f_int1 = - old.f_int1;
 
55771
END|
 
55772
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
55773
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55774
        
 
55775
# check trigger-6 success:      1
 
55776
DROP TRIGGER trg_1;
 
55777
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55778
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55779
f_charbig = 'just inserted'
 
55780
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55781
DELETE FROM t0_aux
 
55782
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55783
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55784
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55785
'just inserted' FROM t0_template
 
55786
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55787
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
55788
BEGIN
 
55789
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55790
f_charbig = 'updated by trigger'
 
55791
      WHERE f_int1 = - old.f_int1;
 
55792
END|
 
55793
DELETE FROM t0_aux
 
55794
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55795
        
 
55796
# check trigger-7 success:      1
 
55797
DROP TRIGGER trg_1;
 
55798
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55799
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55800
f_charbig = 'just inserted'
 
55801
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55802
DELETE FROM t0_aux
 
55803
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55804
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55805
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
55806
'just inserted' FROM t0_template
 
55807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55808
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
55809
BEGIN
 
55810
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
55811
f_charbig = 'updated by trigger'
 
55812
      WHERE f_int1 = - old.f_int1;
 
55813
END|
 
55814
DELETE FROM t0_aux
 
55815
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
55816
        
 
55817
# check trigger-8 success:      1
 
55818
DROP TRIGGER trg_1;
 
55819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55821
f_charbig = 'just inserted'
 
55822
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
55823
DELETE FROM t0_aux
 
55824
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55825
DELETE FROM t1
 
55826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
55827
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
55828
BEGIN
 
55829
SET new.f_int1 = old.f_int1 + @max_row,
 
55830
new.f_int2 = old.f_int2 - @max_row,
 
55831
new.f_charbig = '####updated per update trigger####';
 
55832
END|
 
55833
UPDATE t1
 
55834
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
55835
f_charbig = '####updated per update statement itself####';
 
55836
        
 
55837
# check trigger-9 success:      1
 
55838
DROP TRIGGER trg_2;
 
55839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55841
f_charbig = CONCAT('===',f_char1,'===');
 
55842
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
55843
BEGIN
 
55844
SET new.f_int1 = new.f_int1 + @max_row,
 
55845
new.f_int2 = new.f_int2 - @max_row,
 
55846
new.f_charbig = '####updated per update trigger####';
 
55847
END|
 
55848
UPDATE t1
 
55849
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
55850
f_charbig = '####updated per update statement itself####';
 
55851
        
 
55852
# check trigger-10 success:     1
 
55853
DROP TRIGGER trg_2;
 
55854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
55855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
55856
f_charbig = CONCAT('===',f_char1,'===');
 
55857
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
55858
BEGIN
 
55859
SET new.f_int1 = @my_max1 + @counter,
 
55860
new.f_int2 = @my_min2 - @counter,
 
55861
new.f_charbig = '####updated per insert trigger####';
 
55862
SET @counter = @counter + 1;
 
55863
END|
 
55864
SET @counter = 1;
 
55865
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
55866
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55867
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
55868
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
55869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
55870
ORDER BY f_int1;
 
55871
DROP TRIGGER trg_3;
 
55872
        
 
55873
# check trigger-11 success:     1
 
55874
DELETE FROM t1
 
55875
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
55876
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
55877
AND f_charbig = '####updated per insert trigger####';
 
55878
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
55879
BEGIN
 
55880
SET new.f_int1 = @my_max1 + @counter,
 
55881
new.f_int2 = @my_min2 - @counter,
 
55882
new.f_charbig = '####updated per insert trigger####';
 
55883
SET @counter = @counter + 1;
 
55884
END|
 
55885
SET @counter = 1;
 
55886
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
55887
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
55888
SELECT CAST(f_int1 AS CHAR),
 
55889
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
55890
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
55891
ORDER BY f_int1;
 
55892
DROP TRIGGER trg_3;
 
55893
        
 
55894
# check trigger-12 success:     1
 
55895
DELETE FROM t1
 
55896
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
55897
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
55898
AND f_charbig = '####updated per insert trigger####';
 
55899
ANALYZE  TABLE t1;
 
55900
Table   Op      Msg_type        Msg_text
 
55901
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
55902
CHECK    TABLE t1 EXTENDED;
 
55903
Table   Op      Msg_type        Msg_text
 
55904
test.t1 check   note    The storage engine for the table doesn't support check
 
55905
CHECKSUM TABLE t1 EXTENDED;
 
55906
Table   Checksum
 
55907
test.t1 <some_value>
 
55908
OPTIMIZE TABLE t1;
 
55909
Table   Op      Msg_type        Msg_text
 
55910
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
55911
# check layout success:    1
 
55912
REPAIR   TABLE t1 EXTENDED;
 
55913
Table   Op      Msg_type        Msg_text
 
55914
test.t1 repair  note    The storage engine for the table doesn't support repair
 
55915
# check layout success:    1
 
55916
TRUNCATE t1;
 
55917
        
 
55918
# check TRUNCATE success:       1
 
55919
# check layout success:    1
 
55920
# End usability test (inc/partition_check.inc)
 
55921
DROP TABLE t1;
 
55922
CREATE TABLE t1 (
 
55923
f_int1 INTEGER,
 
55924
f_int2 INTEGER,
 
55925
f_char1 CHAR(20),
 
55926
f_char2 CHAR(20),
 
55927
f_charbig VARCHAR(1000)
 
55928
, PRIMARY KEY(f_int1,f_int2)
 
55929
)
 
55930
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
55931
(PARTITION part_3 VALUES IN (-3),
 
55932
PARTITION part_2 VALUES IN (-2),
 
55933
PARTITION part_1 VALUES IN (-1),
 
55934
PARTITION part_N VALUES IN (NULL),
 
55935
PARTITION part0 VALUES IN (0),
 
55936
PARTITION part1 VALUES IN (1),
 
55937
PARTITION part2 VALUES IN (2),
 
55938
PARTITION part3 VALUES IN (3));
 
55939
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55940
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
55941
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
55942
ALTER TABLE t1 DROP PRIMARY KEY;
 
55943
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
55944
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
55945
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
55946
# Start usability test (inc/partition_check.inc)
 
55947
create_command
 
55948
SHOW CREATE TABLE t1;
 
55949
Table   Create Table
 
55950
t1      CREATE TABLE `t1` (
 
55951
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
55952
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
55953
  `f_char1` char(20) DEFAULT NULL,
 
55954
  `f_char2` char(20) DEFAULT NULL,
 
55955
  `f_charbig` varchar(1000) DEFAULT NULL
 
55956
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
55957
 
 
55958
# check prerequisites-1 success:    1
 
55959
# check COUNT(*) success:    1
 
55960
# check MIN/MAX(f_int1) success:    1
 
55961
# check MIN/MAX(f_int2) success:    1
 
55962
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
55963
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
55964
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
55965
WHERE f_int1 IN (2,3);
 
55966
# check prerequisites-3 success:    1
 
55967
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
55968
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
55969
# check read via f_int1 success: 1
 
55970
# check read via f_int2 success: 1
 
55971
        
 
55972
# check multiple-1 success:     1
 
55973
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
55974
        
 
55975
# check multiple-2 success:     1
 
55976
INSERT INTO t1 SELECT * FROM t0_template
 
55977
WHERE MOD(f_int1,3) = 0;
 
55978
        
 
55979
# check multiple-3 success:     1
 
55980
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
55981
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
55982
AND @max_row_div2 + @max_row_div4;
 
55983
        
 
55984
# check multiple-4 success:     1
 
55985
DELETE FROM t1
 
55986
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
55987
AND @max_row_div2 + @max_row_div4 + @max_row;
 
55988
        
 
55989
# check multiple-5 success:     1
 
55990
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
55991
INSERT INTO t1
 
55992
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
55993
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
55994
f_charbig = '#SINGLE#';
 
55995
        
 
55996
# check single-1 success:       1
 
55997
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
55998
INSERT INTO t1
 
55999
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
56000
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
56001
f_charbig = '#SINGLE#';
 
56002
        
 
56003
# check single-2 success:       1
 
56004
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
56005
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
56006
UPDATE t1 SET f_int1 = @cur_value2
 
56007
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
56008
        
 
56009
# check single-3 success:       1
 
56010
SET @cur_value1= -1;
 
56011
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
56012
UPDATE t1 SET f_int1 = @cur_value1
 
56013
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
56014
        
 
56015
# check single-4 success:       1
 
56016
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
56017
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
56018
        
 
56019
# check single-5 success:       1
 
56020
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
56021
        
 
56022
# check single-6 success:       1
 
56023
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
56024
        
 
56025
# check single-7 success:       1
 
56026
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
56027
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
56028
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
56029
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
56030
f_charbig = '#NULL#';
 
56031
INSERT INTO t1
 
56032
SET f_int1 = NULL , f_int2 = -@max_row,
 
56033
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
56034
f_charbig = '#NULL#';
 
56035
ERROR 23000: Column 'f_int1' cannot be null
 
56036
# check null success:    1
 
56037
DELETE FROM t1
 
56038
WHERE f_int1 = 0 AND f_int2 = 0
 
56039
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
56040
AND f_charbig = '#NULL#';
 
56041
SET AUTOCOMMIT= 0;
 
56042
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56043
SELECT f_int1, f_int1, '', '', 'was inserted'
 
56044
FROM t0_template source_tab
 
56045
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56046
        
 
56047
# check transactions-1 success:         1
 
56048
COMMIT WORK;
 
56049
        
 
56050
# check transactions-2 success:         1
 
56051
ROLLBACK WORK;
 
56052
        
 
56053
# check transactions-3 success:         1
 
56054
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56055
COMMIT WORK;
 
56056
ROLLBACK WORK;
 
56057
        
 
56058
# check transactions-4 success:         1
 
56059
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56060
SELECT f_int1, f_int1, '', '', 'was inserted'
 
56061
FROM t0_template source_tab
 
56062
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56063
        
 
56064
# check transactions-5 success:         1
 
56065
ROLLBACK WORK;
 
56066
        
 
56067
# check transactions-6 success:         1
 
56068
# INFO: Storage engine used for t1 seems to be transactional.
 
56069
COMMIT;
 
56070
        
 
56071
# check transactions-7 success:         1
 
56072
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56073
COMMIT WORK;
 
56074
SET @@session.sql_mode = 'traditional';
 
56075
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
56076
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56077
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
56078
'', '', 'was inserted' FROM t0_template
 
56079
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56080
ERROR 22012: Division by 0
 
56081
COMMIT;
 
56082
        
 
56083
# check transactions-8 success:         1
 
56084
# INFO: Storage engine used for t1 seems to be able to revert
 
56085
#       changes made by the failing statement.
 
56086
SET @@session.sql_mode = '';
 
56087
SET AUTOCOMMIT= 1;
 
56088
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56089
COMMIT WORK;
 
56090
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
56091
        
 
56092
# check special-1 success:      1
 
56093
UPDATE t1 SET f_charbig = '';
 
56094
        
 
56095
# check special-2 success:      1
 
56096
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
56097
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56098
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
56099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56100
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56101
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56102
'just inserted' FROM t0_template
 
56103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56104
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
56105
BEGIN
 
56106
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56107
f_charbig = 'updated by trigger'
 
56108
      WHERE f_int1 = new.f_int1;
 
56109
END|
 
56110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56111
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
56112
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56113
        
 
56114
# check trigger-1 success:      1
 
56115
DROP TRIGGER trg_1;
 
56116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56118
f_charbig = 'just inserted'
 
56119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56120
DELETE FROM t0_aux
 
56121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56124
'just inserted' FROM t0_template
 
56125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56126
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
56127
BEGIN
 
56128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56129
f_charbig = 'updated by trigger'
 
56130
      WHERE f_int1 = new.f_int1;
 
56131
END|
 
56132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56133
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
56134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56135
        
 
56136
# check trigger-2 success:      1
 
56137
DROP TRIGGER trg_1;
 
56138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56140
f_charbig = 'just inserted'
 
56141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56142
DELETE FROM t0_aux
 
56143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56146
'just inserted' FROM t0_template
 
56147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56148
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
56149
BEGIN
 
56150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56151
f_charbig = 'updated by trigger'
 
56152
      WHERE f_int1 = new.f_int1;
 
56153
END|
 
56154
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56155
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56156
        
 
56157
# check trigger-3 success:      1
 
56158
DROP TRIGGER trg_1;
 
56159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56161
f_charbig = 'just inserted'
 
56162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56163
DELETE FROM t0_aux
 
56164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56167
'just inserted' FROM t0_template
 
56168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56169
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
56170
BEGIN
 
56171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56172
f_charbig = 'updated by trigger'
 
56173
      WHERE f_int1 = - old.f_int1;
 
56174
END|
 
56175
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56177
        
 
56178
# check trigger-4 success:      1
 
56179
DROP TRIGGER trg_1;
 
56180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56182
f_charbig = 'just inserted'
 
56183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56184
DELETE FROM t0_aux
 
56185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56186
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56187
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56188
'just inserted' FROM t0_template
 
56189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56190
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
56191
BEGIN
 
56192
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56193
f_charbig = 'updated by trigger'
 
56194
      WHERE f_int1 = new.f_int1;
 
56195
END|
 
56196
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56197
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56198
        
 
56199
# check trigger-5 success:      1
 
56200
DROP TRIGGER trg_1;
 
56201
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56202
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56203
f_charbig = 'just inserted'
 
56204
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56205
DELETE FROM t0_aux
 
56206
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56207
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56208
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56209
'just inserted' FROM t0_template
 
56210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56211
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
56212
BEGIN
 
56213
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56214
f_charbig = 'updated by trigger'
 
56215
      WHERE f_int1 = - old.f_int1;
 
56216
END|
 
56217
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56218
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56219
        
 
56220
# check trigger-6 success:      1
 
56221
DROP TRIGGER trg_1;
 
56222
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56223
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56224
f_charbig = 'just inserted'
 
56225
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56226
DELETE FROM t0_aux
 
56227
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56228
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56229
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56230
'just inserted' FROM t0_template
 
56231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56232
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
56233
BEGIN
 
56234
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56235
f_charbig = 'updated by trigger'
 
56236
      WHERE f_int1 = - old.f_int1;
 
56237
END|
 
56238
DELETE FROM t0_aux
 
56239
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56240
        
 
56241
# check trigger-7 success:      1
 
56242
DROP TRIGGER trg_1;
 
56243
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56244
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56245
f_charbig = 'just inserted'
 
56246
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56247
DELETE FROM t0_aux
 
56248
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56249
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56250
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56251
'just inserted' FROM t0_template
 
56252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56253
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
56254
BEGIN
 
56255
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56256
f_charbig = 'updated by trigger'
 
56257
      WHERE f_int1 = - old.f_int1;
 
56258
END|
 
56259
DELETE FROM t0_aux
 
56260
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56261
        
 
56262
# check trigger-8 success:      1
 
56263
DROP TRIGGER trg_1;
 
56264
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56265
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56266
f_charbig = 'just inserted'
 
56267
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56268
DELETE FROM t0_aux
 
56269
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56270
DELETE FROM t1
 
56271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56272
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
56273
BEGIN
 
56274
SET new.f_int1 = old.f_int1 + @max_row,
 
56275
new.f_int2 = old.f_int2 - @max_row,
 
56276
new.f_charbig = '####updated per update trigger####';
 
56277
END|
 
56278
UPDATE t1
 
56279
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
56280
f_charbig = '####updated per update statement itself####';
 
56281
        
 
56282
# check trigger-9 success:      1
 
56283
DROP TRIGGER trg_2;
 
56284
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56285
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56286
f_charbig = CONCAT('===',f_char1,'===');
 
56287
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
56288
BEGIN
 
56289
SET new.f_int1 = new.f_int1 + @max_row,
 
56290
new.f_int2 = new.f_int2 - @max_row,
 
56291
new.f_charbig = '####updated per update trigger####';
 
56292
END|
 
56293
UPDATE t1
 
56294
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
56295
f_charbig = '####updated per update statement itself####';
 
56296
        
 
56297
# check trigger-10 success:     1
 
56298
DROP TRIGGER trg_2;
 
56299
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56300
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56301
f_charbig = CONCAT('===',f_char1,'===');
 
56302
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
56303
BEGIN
 
56304
SET new.f_int1 = @my_max1 + @counter,
 
56305
new.f_int2 = @my_min2 - @counter,
 
56306
new.f_charbig = '####updated per insert trigger####';
 
56307
SET @counter = @counter + 1;
 
56308
END|
 
56309
SET @counter = 1;
 
56310
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
56311
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56312
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
56313
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
56314
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
56315
ORDER BY f_int1;
 
56316
DROP TRIGGER trg_3;
 
56317
        
 
56318
# check trigger-11 success:     1
 
56319
DELETE FROM t1
 
56320
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
56321
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
56322
AND f_charbig = '####updated per insert trigger####';
 
56323
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
56324
BEGIN
 
56325
SET new.f_int1 = @my_max1 + @counter,
 
56326
new.f_int2 = @my_min2 - @counter,
 
56327
new.f_charbig = '####updated per insert trigger####';
 
56328
SET @counter = @counter + 1;
 
56329
END|
 
56330
SET @counter = 1;
 
56331
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
56332
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
56333
SELECT CAST(f_int1 AS CHAR),
 
56334
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
56335
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
56336
ORDER BY f_int1;
 
56337
DROP TRIGGER trg_3;
 
56338
        
 
56339
# check trigger-12 success:     1
 
56340
DELETE FROM t1
 
56341
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
56342
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
56343
AND f_charbig = '####updated per insert trigger####';
 
56344
ANALYZE  TABLE t1;
 
56345
Table   Op      Msg_type        Msg_text
 
56346
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
56347
CHECK    TABLE t1 EXTENDED;
 
56348
Table   Op      Msg_type        Msg_text
 
56349
test.t1 check   note    The storage engine for the table doesn't support check
 
56350
CHECKSUM TABLE t1 EXTENDED;
 
56351
Table   Checksum
 
56352
test.t1 <some_value>
 
56353
OPTIMIZE TABLE t1;
 
56354
Table   Op      Msg_type        Msg_text
 
56355
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
56356
# check layout success:    1
 
56357
REPAIR   TABLE t1 EXTENDED;
 
56358
Table   Op      Msg_type        Msg_text
 
56359
test.t1 repair  note    The storage engine for the table doesn't support repair
 
56360
# check layout success:    1
 
56361
TRUNCATE t1;
 
56362
        
 
56363
# check TRUNCATE success:       1
 
56364
# check layout success:    1
 
56365
# End usability test (inc/partition_check.inc)
 
56366
DROP TABLE t1;
 
56367
CREATE TABLE t1 (
 
56368
f_int1 INTEGER,
 
56369
f_int2 INTEGER,
 
56370
f_char1 CHAR(20),
 
56371
f_char2 CHAR(20),
 
56372
f_charbig VARCHAR(1000)
 
56373
, PRIMARY KEY(f_int1,f_int2)
 
56374
)
 
56375
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
56376
(PARTITION parta VALUES LESS THAN (0),
 
56377
PARTITION partb VALUES LESS THAN (5),
 
56378
PARTITION partc VALUES LESS THAN (10),
 
56379
PARTITION partd VALUES LESS THAN (10 + 5),
 
56380
PARTITION parte VALUES LESS THAN (20),
 
56381
PARTITION partf VALUES LESS THAN (2147483646));
 
56382
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56383
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
56384
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
56385
ALTER TABLE t1 DROP PRIMARY KEY;
 
56386
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56387
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
56388
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
56389
# Start usability test (inc/partition_check.inc)
 
56390
create_command
 
56391
SHOW CREATE TABLE t1;
 
56392
Table   Create Table
 
56393
t1      CREATE TABLE `t1` (
 
56394
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
56395
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
56396
  `f_char1` char(20) DEFAULT NULL,
 
56397
  `f_char2` char(20) DEFAULT NULL,
 
56398
  `f_charbig` varchar(1000) DEFAULT NULL
 
56399
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
56400
 
 
56401
# check prerequisites-1 success:    1
 
56402
# check COUNT(*) success:    1
 
56403
# check MIN/MAX(f_int1) success:    1
 
56404
# check MIN/MAX(f_int2) success:    1
 
56405
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56406
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
56407
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
56408
WHERE f_int1 IN (2,3);
 
56409
# check prerequisites-3 success:    1
 
56410
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
56411
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
56412
# check read via f_int1 success: 1
 
56413
# check read via f_int2 success: 1
 
56414
        
 
56415
# check multiple-1 success:     1
 
56416
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
56417
        
 
56418
# check multiple-2 success:     1
 
56419
INSERT INTO t1 SELECT * FROM t0_template
 
56420
WHERE MOD(f_int1,3) = 0;
 
56421
        
 
56422
# check multiple-3 success:     1
 
56423
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
56424
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
56425
AND @max_row_div2 + @max_row_div4;
 
56426
        
 
56427
# check multiple-4 success:     1
 
56428
DELETE FROM t1
 
56429
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
56430
AND @max_row_div2 + @max_row_div4 + @max_row;
 
56431
        
 
56432
# check multiple-5 success:     1
 
56433
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
56434
INSERT INTO t1
 
56435
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
56436
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
56437
f_charbig = '#SINGLE#';
 
56438
        
 
56439
# check single-1 success:       1
 
56440
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
56441
INSERT INTO t1
 
56442
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
56443
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
56444
f_charbig = '#SINGLE#';
 
56445
        
 
56446
# check single-2 success:       1
 
56447
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
56448
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
56449
UPDATE t1 SET f_int1 = @cur_value2
 
56450
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
56451
        
 
56452
# check single-3 success:       1
 
56453
SET @cur_value1= -1;
 
56454
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
56455
UPDATE t1 SET f_int1 = @cur_value1
 
56456
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
56457
        
 
56458
# check single-4 success:       1
 
56459
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
56460
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
56461
        
 
56462
# check single-5 success:       1
 
56463
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
56464
        
 
56465
# check single-6 success:       1
 
56466
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
56467
ERROR HY000: Table has no partition for value 2147483647
 
56468
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
56469
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
56470
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
56471
f_charbig = '#NULL#';
 
56472
INSERT INTO t1
 
56473
SET f_int1 = NULL , f_int2 = -@max_row,
 
56474
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
56475
f_charbig = '#NULL#';
 
56476
ERROR 23000: Column 'f_int1' cannot be null
 
56477
# check null success:    1
 
56478
DELETE FROM t1
 
56479
WHERE f_int1 = 0 AND f_int2 = 0
 
56480
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
56481
AND f_charbig = '#NULL#';
 
56482
SET AUTOCOMMIT= 0;
 
56483
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56484
SELECT f_int1, f_int1, '', '', 'was inserted'
 
56485
FROM t0_template source_tab
 
56486
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56487
        
 
56488
# check transactions-1 success:         1
 
56489
COMMIT WORK;
 
56490
        
 
56491
# check transactions-2 success:         1
 
56492
ROLLBACK WORK;
 
56493
        
 
56494
# check transactions-3 success:         1
 
56495
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56496
COMMIT WORK;
 
56497
ROLLBACK WORK;
 
56498
        
 
56499
# check transactions-4 success:         1
 
56500
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56501
SELECT f_int1, f_int1, '', '', 'was inserted'
 
56502
FROM t0_template source_tab
 
56503
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56504
        
 
56505
# check transactions-5 success:         1
 
56506
ROLLBACK WORK;
 
56507
        
 
56508
# check transactions-6 success:         1
 
56509
# INFO: Storage engine used for t1 seems to be transactional.
 
56510
COMMIT;
 
56511
        
 
56512
# check transactions-7 success:         1
 
56513
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56514
COMMIT WORK;
 
56515
SET @@session.sql_mode = 'traditional';
 
56516
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
56517
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56518
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
56519
'', '', 'was inserted' FROM t0_template
 
56520
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56521
ERROR 22012: Division by 0
 
56522
COMMIT;
 
56523
        
 
56524
# check transactions-8 success:         1
 
56525
# INFO: Storage engine used for t1 seems to be able to revert
 
56526
#       changes made by the failing statement.
 
56527
SET @@session.sql_mode = '';
 
56528
SET AUTOCOMMIT= 1;
 
56529
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56530
COMMIT WORK;
 
56531
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
56532
        
 
56533
# check special-1 success:      1
 
56534
UPDATE t1 SET f_charbig = '';
 
56535
        
 
56536
# check special-2 success:      1
 
56537
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
56538
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56539
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
56540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56542
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56543
'just inserted' FROM t0_template
 
56544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56545
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
56546
BEGIN
 
56547
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56548
f_charbig = 'updated by trigger'
 
56549
      WHERE f_int1 = new.f_int1;
 
56550
END|
 
56551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56552
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
56553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56554
        
 
56555
# check trigger-1 success:      1
 
56556
DROP TRIGGER trg_1;
 
56557
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56558
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56559
f_charbig = 'just inserted'
 
56560
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56561
DELETE FROM t0_aux
 
56562
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56563
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56564
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56565
'just inserted' FROM t0_template
 
56566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56567
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
56568
BEGIN
 
56569
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56570
f_charbig = 'updated by trigger'
 
56571
      WHERE f_int1 = new.f_int1;
 
56572
END|
 
56573
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56574
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
56575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56576
        
 
56577
# check trigger-2 success:      1
 
56578
DROP TRIGGER trg_1;
 
56579
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56580
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56581
f_charbig = 'just inserted'
 
56582
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56583
DELETE FROM t0_aux
 
56584
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56586
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56587
'just inserted' FROM t0_template
 
56588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56589
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
56590
BEGIN
 
56591
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56592
f_charbig = 'updated by trigger'
 
56593
      WHERE f_int1 = new.f_int1;
 
56594
END|
 
56595
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56596
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56597
        
 
56598
# check trigger-3 success:      1
 
56599
DROP TRIGGER trg_1;
 
56600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56602
f_charbig = 'just inserted'
 
56603
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56604
DELETE FROM t0_aux
 
56605
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56608
'just inserted' FROM t0_template
 
56609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56610
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
56611
BEGIN
 
56612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56613
f_charbig = 'updated by trigger'
 
56614
      WHERE f_int1 = - old.f_int1;
 
56615
END|
 
56616
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56617
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56618
        
 
56619
# check trigger-4 success:      1
 
56620
DROP TRIGGER trg_1;
 
56621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56623
f_charbig = 'just inserted'
 
56624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56625
DELETE FROM t0_aux
 
56626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56628
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56629
'just inserted' FROM t0_template
 
56630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56631
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
56632
BEGIN
 
56633
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56634
f_charbig = 'updated by trigger'
 
56635
      WHERE f_int1 = new.f_int1;
 
56636
END|
 
56637
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56638
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56639
        
 
56640
# check trigger-5 success:      1
 
56641
DROP TRIGGER trg_1;
 
56642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56644
f_charbig = 'just inserted'
 
56645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56646
DELETE FROM t0_aux
 
56647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56650
'just inserted' FROM t0_template
 
56651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56652
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
56653
BEGIN
 
56654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56655
f_charbig = 'updated by trigger'
 
56656
      WHERE f_int1 = - old.f_int1;
 
56657
END|
 
56658
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
56659
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56660
        
 
56661
# check trigger-6 success:      1
 
56662
DROP TRIGGER trg_1;
 
56663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56665
f_charbig = 'just inserted'
 
56666
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56667
DELETE FROM t0_aux
 
56668
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56670
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56671
'just inserted' FROM t0_template
 
56672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56673
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
56674
BEGIN
 
56675
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56676
f_charbig = 'updated by trigger'
 
56677
      WHERE f_int1 = - old.f_int1;
 
56678
END|
 
56679
DELETE FROM t0_aux
 
56680
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56681
        
 
56682
# check trigger-7 success:      1
 
56683
DROP TRIGGER trg_1;
 
56684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56686
f_charbig = 'just inserted'
 
56687
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56688
DELETE FROM t0_aux
 
56689
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56690
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56691
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56692
'just inserted' FROM t0_template
 
56693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56694
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
56695
BEGIN
 
56696
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56697
f_charbig = 'updated by trigger'
 
56698
      WHERE f_int1 = - old.f_int1;
 
56699
END|
 
56700
DELETE FROM t0_aux
 
56701
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
56702
        
 
56703
# check trigger-8 success:      1
 
56704
DROP TRIGGER trg_1;
 
56705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56707
f_charbig = 'just inserted'
 
56708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
56709
DELETE FROM t0_aux
 
56710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56711
DELETE FROM t1
 
56712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56713
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
56714
BEGIN
 
56715
SET new.f_int1 = old.f_int1 + @max_row,
 
56716
new.f_int2 = old.f_int2 - @max_row,
 
56717
new.f_charbig = '####updated per update trigger####';
 
56718
END|
 
56719
UPDATE t1
 
56720
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
56721
f_charbig = '####updated per update statement itself####';
 
56722
        
 
56723
# check trigger-9 success:      1
 
56724
DROP TRIGGER trg_2;
 
56725
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56726
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56727
f_charbig = CONCAT('===',f_char1,'===');
 
56728
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
56729
BEGIN
 
56730
SET new.f_int1 = new.f_int1 + @max_row,
 
56731
new.f_int2 = new.f_int2 - @max_row,
 
56732
new.f_charbig = '####updated per update trigger####';
 
56733
END|
 
56734
UPDATE t1
 
56735
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
56736
f_charbig = '####updated per update statement itself####';
 
56737
        
 
56738
# check trigger-10 success:     1
 
56739
DROP TRIGGER trg_2;
 
56740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56742
f_charbig = CONCAT('===',f_char1,'===');
 
56743
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
56744
BEGIN
 
56745
SET new.f_int1 = @my_max1 + @counter,
 
56746
new.f_int2 = @my_min2 - @counter,
 
56747
new.f_charbig = '####updated per insert trigger####';
 
56748
SET @counter = @counter + 1;
 
56749
END|
 
56750
SET @counter = 1;
 
56751
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
56752
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56753
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
56754
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
56755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
56756
ORDER BY f_int1;
 
56757
DROP TRIGGER trg_3;
 
56758
        
 
56759
# check trigger-11 success:     1
 
56760
DELETE FROM t1
 
56761
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
56762
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
56763
AND f_charbig = '####updated per insert trigger####';
 
56764
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
56765
BEGIN
 
56766
SET new.f_int1 = @my_max1 + @counter,
 
56767
new.f_int2 = @my_min2 - @counter,
 
56768
new.f_charbig = '####updated per insert trigger####';
 
56769
SET @counter = @counter + 1;
 
56770
END|
 
56771
SET @counter = 1;
 
56772
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
56773
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
56774
SELECT CAST(f_int1 AS CHAR),
 
56775
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
56776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
56777
ORDER BY f_int1;
 
56778
DROP TRIGGER trg_3;
 
56779
        
 
56780
# check trigger-12 success:     1
 
56781
DELETE FROM t1
 
56782
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
56783
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
56784
AND f_charbig = '####updated per insert trigger####';
 
56785
ANALYZE  TABLE t1;
 
56786
Table   Op      Msg_type        Msg_text
 
56787
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
56788
CHECK    TABLE t1 EXTENDED;
 
56789
Table   Op      Msg_type        Msg_text
 
56790
test.t1 check   note    The storage engine for the table doesn't support check
 
56791
CHECKSUM TABLE t1 EXTENDED;
 
56792
Table   Checksum
 
56793
test.t1 <some_value>
 
56794
OPTIMIZE TABLE t1;
 
56795
Table   Op      Msg_type        Msg_text
 
56796
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
56797
# check layout success:    1
 
56798
REPAIR   TABLE t1 EXTENDED;
 
56799
Table   Op      Msg_type        Msg_text
 
56800
test.t1 repair  note    The storage engine for the table doesn't support repair
 
56801
# check layout success:    1
 
56802
TRUNCATE t1;
 
56803
        
 
56804
# check TRUNCATE success:       1
 
56805
# check layout success:    1
 
56806
# End usability test (inc/partition_check.inc)
 
56807
DROP TABLE t1;
 
56808
CREATE TABLE t1 (
 
56809
f_int1 INTEGER,
 
56810
f_int2 INTEGER,
 
56811
f_char1 CHAR(20),
 
56812
f_char2 CHAR(20),
 
56813
f_charbig VARCHAR(1000)
 
56814
, PRIMARY KEY(f_int1,f_int2)
 
56815
)
 
56816
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
56817
(PARTITION parta VALUES LESS THAN (0),
 
56818
PARTITION partb VALUES LESS THAN (5),
 
56819
PARTITION partc VALUES LESS THAN (10),
 
56820
PARTITION partd VALUES LESS THAN (2147483646));
 
56821
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56822
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
56823
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
56824
ALTER TABLE t1 DROP PRIMARY KEY;
 
56825
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56826
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
56827
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
56828
# Start usability test (inc/partition_check.inc)
 
56829
create_command
 
56830
SHOW CREATE TABLE t1;
 
56831
Table   Create Table
 
56832
t1      CREATE TABLE `t1` (
 
56833
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
56834
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
56835
  `f_char1` char(20) DEFAULT NULL,
 
56836
  `f_char2` char(20) DEFAULT NULL,
 
56837
  `f_charbig` varchar(1000) DEFAULT NULL
 
56838
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
56839
 
 
56840
# check prerequisites-1 success:    1
 
56841
# check COUNT(*) success:    1
 
56842
# check MIN/MAX(f_int1) success:    1
 
56843
# check MIN/MAX(f_int2) success:    1
 
56844
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56845
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
56846
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
56847
WHERE f_int1 IN (2,3);
 
56848
# check prerequisites-3 success:    1
 
56849
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
56850
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
56851
# check read via f_int1 success: 1
 
56852
# check read via f_int2 success: 1
 
56853
        
 
56854
# check multiple-1 success:     1
 
56855
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
56856
        
 
56857
# check multiple-2 success:     1
 
56858
INSERT INTO t1 SELECT * FROM t0_template
 
56859
WHERE MOD(f_int1,3) = 0;
 
56860
        
 
56861
# check multiple-3 success:     1
 
56862
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
56863
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
56864
AND @max_row_div2 + @max_row_div4;
 
56865
        
 
56866
# check multiple-4 success:     1
 
56867
DELETE FROM t1
 
56868
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
56869
AND @max_row_div2 + @max_row_div4 + @max_row;
 
56870
        
 
56871
# check multiple-5 success:     1
 
56872
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
56873
INSERT INTO t1
 
56874
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
56875
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
56876
f_charbig = '#SINGLE#';
 
56877
        
 
56878
# check single-1 success:       1
 
56879
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
56880
INSERT INTO t1
 
56881
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
56882
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
56883
f_charbig = '#SINGLE#';
 
56884
        
 
56885
# check single-2 success:       1
 
56886
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
56887
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
56888
UPDATE t1 SET f_int1 = @cur_value2
 
56889
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
56890
        
 
56891
# check single-3 success:       1
 
56892
SET @cur_value1= -1;
 
56893
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
56894
UPDATE t1 SET f_int1 = @cur_value1
 
56895
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
56896
        
 
56897
# check single-4 success:       1
 
56898
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
56899
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
56900
        
 
56901
# check single-5 success:       1
 
56902
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
56903
        
 
56904
# check single-6 success:       1
 
56905
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
56906
ERROR HY000: Table has no partition for value 2147483647
 
56907
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
56908
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
56909
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
56910
f_charbig = '#NULL#';
 
56911
INSERT INTO t1
 
56912
SET f_int1 = NULL , f_int2 = -@max_row,
 
56913
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
56914
f_charbig = '#NULL#';
 
56915
ERROR 23000: Column 'f_int1' cannot be null
 
56916
# check null success:    1
 
56917
DELETE FROM t1
 
56918
WHERE f_int1 = 0 AND f_int2 = 0
 
56919
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
56920
AND f_charbig = '#NULL#';
 
56921
SET AUTOCOMMIT= 0;
 
56922
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56923
SELECT f_int1, f_int1, '', '', 'was inserted'
 
56924
FROM t0_template source_tab
 
56925
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56926
        
 
56927
# check transactions-1 success:         1
 
56928
COMMIT WORK;
 
56929
        
 
56930
# check transactions-2 success:         1
 
56931
ROLLBACK WORK;
 
56932
        
 
56933
# check transactions-3 success:         1
 
56934
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56935
COMMIT WORK;
 
56936
ROLLBACK WORK;
 
56937
        
 
56938
# check transactions-4 success:         1
 
56939
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56940
SELECT f_int1, f_int1, '', '', 'was inserted'
 
56941
FROM t0_template source_tab
 
56942
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56943
        
 
56944
# check transactions-5 success:         1
 
56945
ROLLBACK WORK;
 
56946
        
 
56947
# check transactions-6 success:         1
 
56948
# INFO: Storage engine used for t1 seems to be transactional.
 
56949
COMMIT;
 
56950
        
 
56951
# check transactions-7 success:         1
 
56952
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56953
COMMIT WORK;
 
56954
SET @@session.sql_mode = 'traditional';
 
56955
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
56956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
56957
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
56958
'', '', 'was inserted' FROM t0_template
 
56959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
56960
ERROR 22012: Division by 0
 
56961
COMMIT;
 
56962
        
 
56963
# check transactions-8 success:         1
 
56964
# INFO: Storage engine used for t1 seems to be able to revert
 
56965
#       changes made by the failing statement.
 
56966
SET @@session.sql_mode = '';
 
56967
SET AUTOCOMMIT= 1;
 
56968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
56969
COMMIT WORK;
 
56970
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
56971
        
 
56972
# check special-1 success:      1
 
56973
UPDATE t1 SET f_charbig = '';
 
56974
        
 
56975
# check special-2 success:      1
 
56976
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
56977
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56978
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
56979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56980
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56981
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
56982
'just inserted' FROM t0_template
 
56983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56984
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
56985
BEGIN
 
56986
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
56987
f_charbig = 'updated by trigger'
 
56988
      WHERE f_int1 = new.f_int1;
 
56989
END|
 
56990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
56991
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
56992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
56993
        
 
56994
# check trigger-1 success:      1
 
56995
DROP TRIGGER trg_1;
 
56996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
56997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
56998
f_charbig = 'just inserted'
 
56999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57000
DELETE FROM t0_aux
 
57001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57003
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57004
'just inserted' FROM t0_template
 
57005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57006
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
57007
BEGIN
 
57008
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57009
f_charbig = 'updated by trigger'
 
57010
      WHERE f_int1 = new.f_int1;
 
57011
END|
 
57012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57013
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
57014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57015
        
 
57016
# check trigger-2 success:      1
 
57017
DROP TRIGGER trg_1;
 
57018
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57019
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57020
f_charbig = 'just inserted'
 
57021
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57022
DELETE FROM t0_aux
 
57023
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57026
'just inserted' FROM t0_template
 
57027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57028
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
57029
BEGIN
 
57030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57031
f_charbig = 'updated by trigger'
 
57032
      WHERE f_int1 = new.f_int1;
 
57033
END|
 
57034
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57035
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57036
        
 
57037
# check trigger-3 success:      1
 
57038
DROP TRIGGER trg_1;
 
57039
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57040
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57041
f_charbig = 'just inserted'
 
57042
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57043
DELETE FROM t0_aux
 
57044
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57045
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57046
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57047
'just inserted' FROM t0_template
 
57048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57049
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
57050
BEGIN
 
57051
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57052
f_charbig = 'updated by trigger'
 
57053
      WHERE f_int1 = - old.f_int1;
 
57054
END|
 
57055
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57056
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57057
        
 
57058
# check trigger-4 success:      1
 
57059
DROP TRIGGER trg_1;
 
57060
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57061
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57062
f_charbig = 'just inserted'
 
57063
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57064
DELETE FROM t0_aux
 
57065
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57066
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57067
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57068
'just inserted' FROM t0_template
 
57069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57070
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
57071
BEGIN
 
57072
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57073
f_charbig = 'updated by trigger'
 
57074
      WHERE f_int1 = new.f_int1;
 
57075
END|
 
57076
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57077
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57078
        
 
57079
# check trigger-5 success:      1
 
57080
DROP TRIGGER trg_1;
 
57081
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57082
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57083
f_charbig = 'just inserted'
 
57084
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57085
DELETE FROM t0_aux
 
57086
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57088
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57089
'just inserted' FROM t0_template
 
57090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57091
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
57092
BEGIN
 
57093
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57094
f_charbig = 'updated by trigger'
 
57095
      WHERE f_int1 = - old.f_int1;
 
57096
END|
 
57097
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57098
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57099
        
 
57100
# check trigger-6 success:      1
 
57101
DROP TRIGGER trg_1;
 
57102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57104
f_charbig = 'just inserted'
 
57105
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57106
DELETE FROM t0_aux
 
57107
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57108
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57109
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57110
'just inserted' FROM t0_template
 
57111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57112
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
57113
BEGIN
 
57114
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57115
f_charbig = 'updated by trigger'
 
57116
      WHERE f_int1 = - old.f_int1;
 
57117
END|
 
57118
DELETE FROM t0_aux
 
57119
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57120
        
 
57121
# check trigger-7 success:      1
 
57122
DROP TRIGGER trg_1;
 
57123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57125
f_charbig = 'just inserted'
 
57126
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57127
DELETE FROM t0_aux
 
57128
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57131
'just inserted' FROM t0_template
 
57132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57133
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
57134
BEGIN
 
57135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57136
f_charbig = 'updated by trigger'
 
57137
      WHERE f_int1 = - old.f_int1;
 
57138
END|
 
57139
DELETE FROM t0_aux
 
57140
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57141
        
 
57142
# check trigger-8 success:      1
 
57143
DROP TRIGGER trg_1;
 
57144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57146
f_charbig = 'just inserted'
 
57147
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57148
DELETE FROM t0_aux
 
57149
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57150
DELETE FROM t1
 
57151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57152
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
57153
BEGIN
 
57154
SET new.f_int1 = old.f_int1 + @max_row,
 
57155
new.f_int2 = old.f_int2 - @max_row,
 
57156
new.f_charbig = '####updated per update trigger####';
 
57157
END|
 
57158
UPDATE t1
 
57159
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
57160
f_charbig = '####updated per update statement itself####';
 
57161
        
 
57162
# check trigger-9 success:      1
 
57163
DROP TRIGGER trg_2;
 
57164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57166
f_charbig = CONCAT('===',f_char1,'===');
 
57167
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
57168
BEGIN
 
57169
SET new.f_int1 = new.f_int1 + @max_row,
 
57170
new.f_int2 = new.f_int2 - @max_row,
 
57171
new.f_charbig = '####updated per update trigger####';
 
57172
END|
 
57173
UPDATE t1
 
57174
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
57175
f_charbig = '####updated per update statement itself####';
 
57176
        
 
57177
# check trigger-10 success:     1
 
57178
DROP TRIGGER trg_2;
 
57179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57181
f_charbig = CONCAT('===',f_char1,'===');
 
57182
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
57183
BEGIN
 
57184
SET new.f_int1 = @my_max1 + @counter,
 
57185
new.f_int2 = @my_min2 - @counter,
 
57186
new.f_charbig = '####updated per insert trigger####';
 
57187
SET @counter = @counter + 1;
 
57188
END|
 
57189
SET @counter = 1;
 
57190
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
57191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57192
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
57193
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
57194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
57195
ORDER BY f_int1;
 
57196
DROP TRIGGER trg_3;
 
57197
        
 
57198
# check trigger-11 success:     1
 
57199
DELETE FROM t1
 
57200
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
57201
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
57202
AND f_charbig = '####updated per insert trigger####';
 
57203
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
57204
BEGIN
 
57205
SET new.f_int1 = @my_max1 + @counter,
 
57206
new.f_int2 = @my_min2 - @counter,
 
57207
new.f_charbig = '####updated per insert trigger####';
 
57208
SET @counter = @counter + 1;
 
57209
END|
 
57210
SET @counter = 1;
 
57211
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
57212
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
57213
SELECT CAST(f_int1 AS CHAR),
 
57214
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
57215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
57216
ORDER BY f_int1;
 
57217
DROP TRIGGER trg_3;
 
57218
        
 
57219
# check trigger-12 success:     1
 
57220
DELETE FROM t1
 
57221
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
57222
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
57223
AND f_charbig = '####updated per insert trigger####';
 
57224
ANALYZE  TABLE t1;
 
57225
Table   Op      Msg_type        Msg_text
 
57226
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
57227
CHECK    TABLE t1 EXTENDED;
 
57228
Table   Op      Msg_type        Msg_text
 
57229
test.t1 check   note    The storage engine for the table doesn't support check
 
57230
CHECKSUM TABLE t1 EXTENDED;
 
57231
Table   Checksum
 
57232
test.t1 <some_value>
 
57233
OPTIMIZE TABLE t1;
 
57234
Table   Op      Msg_type        Msg_text
 
57235
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
57236
# check layout success:    1
 
57237
REPAIR   TABLE t1 EXTENDED;
 
57238
Table   Op      Msg_type        Msg_text
 
57239
test.t1 repair  note    The storage engine for the table doesn't support repair
 
57240
# check layout success:    1
 
57241
TRUNCATE t1;
 
57242
        
 
57243
# check TRUNCATE success:       1
 
57244
# check layout success:    1
 
57245
# End usability test (inc/partition_check.inc)
 
57246
DROP TABLE t1;
 
57247
CREATE TABLE t1 (
 
57248
f_int1 INTEGER,
 
57249
f_int2 INTEGER,
 
57250
f_char1 CHAR(20),
 
57251
f_char2 CHAR(20),
 
57252
f_charbig VARCHAR(1000)
 
57253
, PRIMARY KEY(f_int1,f_int2)
 
57254
)
 
57255
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
57256
(PARTITION part1 VALUES LESS THAN (0)
 
57257
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
57258
PARTITION part2 VALUES LESS THAN (5)
 
57259
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
57260
PARTITION part3 VALUES LESS THAN (10)
 
57261
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
57262
PARTITION part4 VALUES LESS THAN (2147483646)
 
57263
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
57264
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57265
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
57266
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
57267
ALTER TABLE t1 DROP PRIMARY KEY;
 
57268
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57269
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
57270
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
57271
# Start usability test (inc/partition_check.inc)
 
57272
create_command
 
57273
SHOW CREATE TABLE t1;
 
57274
Table   Create Table
 
57275
t1      CREATE TABLE `t1` (
 
57276
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
57277
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
57278
  `f_char1` char(20) DEFAULT NULL,
 
57279
  `f_char2` char(20) DEFAULT NULL,
 
57280
  `f_charbig` varchar(1000) DEFAULT NULL
 
57281
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
57282
 
 
57283
# check prerequisites-1 success:    1
 
57284
# check COUNT(*) success:    1
 
57285
# check MIN/MAX(f_int1) success:    1
 
57286
# check MIN/MAX(f_int2) success:    1
 
57287
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57288
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
57289
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
57290
WHERE f_int1 IN (2,3);
 
57291
# check prerequisites-3 success:    1
 
57292
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
57293
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
57294
# check read via f_int1 success: 1
 
57295
# check read via f_int2 success: 1
 
57296
        
 
57297
# check multiple-1 success:     1
 
57298
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
57299
        
 
57300
# check multiple-2 success:     1
 
57301
INSERT INTO t1 SELECT * FROM t0_template
 
57302
WHERE MOD(f_int1,3) = 0;
 
57303
        
 
57304
# check multiple-3 success:     1
 
57305
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
57306
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
57307
AND @max_row_div2 + @max_row_div4;
 
57308
        
 
57309
# check multiple-4 success:     1
 
57310
DELETE FROM t1
 
57311
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
57312
AND @max_row_div2 + @max_row_div4 + @max_row;
 
57313
        
 
57314
# check multiple-5 success:     1
 
57315
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
57316
INSERT INTO t1
 
57317
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
57318
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
57319
f_charbig = '#SINGLE#';
 
57320
        
 
57321
# check single-1 success:       1
 
57322
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
57323
INSERT INTO t1
 
57324
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
57325
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
57326
f_charbig = '#SINGLE#';
 
57327
        
 
57328
# check single-2 success:       1
 
57329
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
57330
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
57331
UPDATE t1 SET f_int1 = @cur_value2
 
57332
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
57333
        
 
57334
# check single-3 success:       1
 
57335
SET @cur_value1= -1;
 
57336
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
57337
UPDATE t1 SET f_int1 = @cur_value1
 
57338
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
57339
        
 
57340
# check single-4 success:       1
 
57341
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
57342
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
57343
        
 
57344
# check single-5 success:       1
 
57345
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
57346
        
 
57347
# check single-6 success:       1
 
57348
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
57349
ERROR HY000: Table has no partition for value 2147483647
 
57350
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
57351
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
57352
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
57353
f_charbig = '#NULL#';
 
57354
INSERT INTO t1
 
57355
SET f_int1 = NULL , f_int2 = -@max_row,
 
57356
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
57357
f_charbig = '#NULL#';
 
57358
ERROR 23000: Column 'f_int1' cannot be null
 
57359
# check null success:    1
 
57360
DELETE FROM t1
 
57361
WHERE f_int1 = 0 AND f_int2 = 0
 
57362
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
57363
AND f_charbig = '#NULL#';
 
57364
SET AUTOCOMMIT= 0;
 
57365
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57366
SELECT f_int1, f_int1, '', '', 'was inserted'
 
57367
FROM t0_template source_tab
 
57368
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
57369
        
 
57370
# check transactions-1 success:         1
 
57371
COMMIT WORK;
 
57372
        
 
57373
# check transactions-2 success:         1
 
57374
ROLLBACK WORK;
 
57375
        
 
57376
# check transactions-3 success:         1
 
57377
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
57378
COMMIT WORK;
 
57379
ROLLBACK WORK;
 
57380
        
 
57381
# check transactions-4 success:         1
 
57382
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57383
SELECT f_int1, f_int1, '', '', 'was inserted'
 
57384
FROM t0_template source_tab
 
57385
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
57386
        
 
57387
# check transactions-5 success:         1
 
57388
ROLLBACK WORK;
 
57389
        
 
57390
# check transactions-6 success:         1
 
57391
# INFO: Storage engine used for t1 seems to be transactional.
 
57392
COMMIT;
 
57393
        
 
57394
# check transactions-7 success:         1
 
57395
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
57396
COMMIT WORK;
 
57397
SET @@session.sql_mode = 'traditional';
 
57398
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
57399
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57400
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
57401
'', '', 'was inserted' FROM t0_template
 
57402
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
57403
ERROR 22012: Division by 0
 
57404
COMMIT;
 
57405
        
 
57406
# check transactions-8 success:         1
 
57407
# INFO: Storage engine used for t1 seems to be able to revert
 
57408
#       changes made by the failing statement.
 
57409
SET @@session.sql_mode = '';
 
57410
SET AUTOCOMMIT= 1;
 
57411
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
57412
COMMIT WORK;
 
57413
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
57414
        
 
57415
# check special-1 success:      1
 
57416
UPDATE t1 SET f_charbig = '';
 
57417
        
 
57418
# check special-2 success:      1
 
57419
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
57420
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57421
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
57422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57423
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57424
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57425
'just inserted' FROM t0_template
 
57426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57427
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
57428
BEGIN
 
57429
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57430
f_charbig = 'updated by trigger'
 
57431
      WHERE f_int1 = new.f_int1;
 
57432
END|
 
57433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57434
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
57435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57436
        
 
57437
# check trigger-1 success:      1
 
57438
DROP TRIGGER trg_1;
 
57439
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57440
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57441
f_charbig = 'just inserted'
 
57442
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57443
DELETE FROM t0_aux
 
57444
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57445
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57446
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57447
'just inserted' FROM t0_template
 
57448
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57449
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
57450
BEGIN
 
57451
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57452
f_charbig = 'updated by trigger'
 
57453
      WHERE f_int1 = new.f_int1;
 
57454
END|
 
57455
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57456
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
57457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57458
        
 
57459
# check trigger-2 success:      1
 
57460
DROP TRIGGER trg_1;
 
57461
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57462
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57463
f_charbig = 'just inserted'
 
57464
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57465
DELETE FROM t0_aux
 
57466
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57468
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57469
'just inserted' FROM t0_template
 
57470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57471
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
57472
BEGIN
 
57473
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57474
f_charbig = 'updated by trigger'
 
57475
      WHERE f_int1 = new.f_int1;
 
57476
END|
 
57477
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57478
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57479
        
 
57480
# check trigger-3 success:      1
 
57481
DROP TRIGGER trg_1;
 
57482
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57483
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57484
f_charbig = 'just inserted'
 
57485
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57486
DELETE FROM t0_aux
 
57487
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57488
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57489
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57490
'just inserted' FROM t0_template
 
57491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57492
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
57493
BEGIN
 
57494
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57495
f_charbig = 'updated by trigger'
 
57496
      WHERE f_int1 = - old.f_int1;
 
57497
END|
 
57498
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57499
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57500
        
 
57501
# check trigger-4 success:      1
 
57502
DROP TRIGGER trg_1;
 
57503
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57504
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57505
f_charbig = 'just inserted'
 
57506
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57507
DELETE FROM t0_aux
 
57508
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57510
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57511
'just inserted' FROM t0_template
 
57512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57513
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
57514
BEGIN
 
57515
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57516
f_charbig = 'updated by trigger'
 
57517
      WHERE f_int1 = new.f_int1;
 
57518
END|
 
57519
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57520
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57521
        
 
57522
# check trigger-5 success:      1
 
57523
DROP TRIGGER trg_1;
 
57524
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57525
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57526
f_charbig = 'just inserted'
 
57527
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57528
DELETE FROM t0_aux
 
57529
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57530
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57531
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57532
'just inserted' FROM t0_template
 
57533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57534
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
57535
BEGIN
 
57536
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57537
f_charbig = 'updated by trigger'
 
57538
      WHERE f_int1 = - old.f_int1;
 
57539
END|
 
57540
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57541
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57542
        
 
57543
# check trigger-6 success:      1
 
57544
DROP TRIGGER trg_1;
 
57545
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57546
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57547
f_charbig = 'just inserted'
 
57548
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57549
DELETE FROM t0_aux
 
57550
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57552
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57553
'just inserted' FROM t0_template
 
57554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57555
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
57556
BEGIN
 
57557
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57558
f_charbig = 'updated by trigger'
 
57559
      WHERE f_int1 = - old.f_int1;
 
57560
END|
 
57561
DELETE FROM t0_aux
 
57562
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57563
        
 
57564
# check trigger-7 success:      1
 
57565
DROP TRIGGER trg_1;
 
57566
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57567
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57568
f_charbig = 'just inserted'
 
57569
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57570
DELETE FROM t0_aux
 
57571
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57572
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57573
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57574
'just inserted' FROM t0_template
 
57575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57576
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
57577
BEGIN
 
57578
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57579
f_charbig = 'updated by trigger'
 
57580
      WHERE f_int1 = - old.f_int1;
 
57581
END|
 
57582
DELETE FROM t0_aux
 
57583
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57584
        
 
57585
# check trigger-8 success:      1
 
57586
DROP TRIGGER trg_1;
 
57587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57589
f_charbig = 'just inserted'
 
57590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57591
DELETE FROM t0_aux
 
57592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57593
DELETE FROM t1
 
57594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57595
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
57596
BEGIN
 
57597
SET new.f_int1 = old.f_int1 + @max_row,
 
57598
new.f_int2 = old.f_int2 - @max_row,
 
57599
new.f_charbig = '####updated per update trigger####';
 
57600
END|
 
57601
UPDATE t1
 
57602
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
57603
f_charbig = '####updated per update statement itself####';
 
57604
        
 
57605
# check trigger-9 success:      1
 
57606
DROP TRIGGER trg_2;
 
57607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57609
f_charbig = CONCAT('===',f_char1,'===');
 
57610
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
57611
BEGIN
 
57612
SET new.f_int1 = new.f_int1 + @max_row,
 
57613
new.f_int2 = new.f_int2 - @max_row,
 
57614
new.f_charbig = '####updated per update trigger####';
 
57615
END|
 
57616
UPDATE t1
 
57617
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
57618
f_charbig = '####updated per update statement itself####';
 
57619
        
 
57620
# check trigger-10 success:     1
 
57621
DROP TRIGGER trg_2;
 
57622
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57623
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57624
f_charbig = CONCAT('===',f_char1,'===');
 
57625
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
57626
BEGIN
 
57627
SET new.f_int1 = @my_max1 + @counter,
 
57628
new.f_int2 = @my_min2 - @counter,
 
57629
new.f_charbig = '####updated per insert trigger####';
 
57630
SET @counter = @counter + 1;
 
57631
END|
 
57632
SET @counter = 1;
 
57633
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
57634
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57635
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
57636
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
57637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
57638
ORDER BY f_int1;
 
57639
DROP TRIGGER trg_3;
 
57640
        
 
57641
# check trigger-11 success:     1
 
57642
DELETE FROM t1
 
57643
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
57644
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
57645
AND f_charbig = '####updated per insert trigger####';
 
57646
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
57647
BEGIN
 
57648
SET new.f_int1 = @my_max1 + @counter,
 
57649
new.f_int2 = @my_min2 - @counter,
 
57650
new.f_charbig = '####updated per insert trigger####';
 
57651
SET @counter = @counter + 1;
 
57652
END|
 
57653
SET @counter = 1;
 
57654
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
57655
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
57656
SELECT CAST(f_int1 AS CHAR),
 
57657
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
57658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
57659
ORDER BY f_int1;
 
57660
DROP TRIGGER trg_3;
 
57661
        
 
57662
# check trigger-12 success:     1
 
57663
DELETE FROM t1
 
57664
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
57665
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
57666
AND f_charbig = '####updated per insert trigger####';
 
57667
ANALYZE  TABLE t1;
 
57668
Table   Op      Msg_type        Msg_text
 
57669
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
57670
CHECK    TABLE t1 EXTENDED;
 
57671
Table   Op      Msg_type        Msg_text
 
57672
test.t1 check   note    The storage engine for the table doesn't support check
 
57673
CHECKSUM TABLE t1 EXTENDED;
 
57674
Table   Checksum
 
57675
test.t1 <some_value>
 
57676
OPTIMIZE TABLE t1;
 
57677
Table   Op      Msg_type        Msg_text
 
57678
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
57679
# check layout success:    1
 
57680
REPAIR   TABLE t1 EXTENDED;
 
57681
Table   Op      Msg_type        Msg_text
 
57682
test.t1 repair  note    The storage engine for the table doesn't support repair
 
57683
# check layout success:    1
 
57684
TRUNCATE t1;
 
57685
        
 
57686
# check TRUNCATE success:       1
 
57687
# check layout success:    1
 
57688
# End usability test (inc/partition_check.inc)
 
57689
DROP TABLE t1;
 
57690
CREATE TABLE t1 (
 
57691
f_int1 INTEGER,
 
57692
f_int2 INTEGER,
 
57693
f_char1 CHAR(20),
 
57694
f_char2 CHAR(20),
 
57695
f_charbig VARCHAR(1000)
 
57696
, PRIMARY KEY(f_int1,f_int2)
 
57697
)
 
57698
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
57699
(PARTITION part1 VALUES IN (0)
 
57700
(SUBPARTITION sp11, SUBPARTITION sp12),
 
57701
PARTITION part2 VALUES IN (1)
 
57702
(SUBPARTITION sp21, SUBPARTITION sp22),
 
57703
PARTITION part3 VALUES IN (2)
 
57704
(SUBPARTITION sp31, SUBPARTITION sp32),
 
57705
PARTITION part4 VALUES IN (NULL)
 
57706
(SUBPARTITION sp41, SUBPARTITION sp42));
 
57707
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57708
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
57709
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
57710
ALTER TABLE t1 DROP PRIMARY KEY;
 
57711
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57712
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
57713
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
57714
# Start usability test (inc/partition_check.inc)
 
57715
create_command
 
57716
SHOW CREATE TABLE t1;
 
57717
Table   Create Table
 
57718
t1      CREATE TABLE `t1` (
 
57719
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
57720
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
57721
  `f_char1` char(20) DEFAULT NULL,
 
57722
  `f_char2` char(20) DEFAULT NULL,
 
57723
  `f_charbig` varchar(1000) DEFAULT NULL
 
57724
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
57725
 
 
57726
# check prerequisites-1 success:    1
 
57727
# check COUNT(*) success:    1
 
57728
# check MIN/MAX(f_int1) success:    1
 
57729
# check MIN/MAX(f_int2) success:    1
 
57730
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57731
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
57732
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
57733
WHERE f_int1 IN (2,3);
 
57734
# check prerequisites-3 success:    1
 
57735
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
57736
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
57737
# check read via f_int1 success: 1
 
57738
# check read via f_int2 success: 1
 
57739
        
 
57740
# check multiple-1 success:     1
 
57741
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
57742
        
 
57743
# check multiple-2 success:     1
 
57744
INSERT INTO t1 SELECT * FROM t0_template
 
57745
WHERE MOD(f_int1,3) = 0;
 
57746
        
 
57747
# check multiple-3 success:     1
 
57748
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
57749
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
57750
AND @max_row_div2 + @max_row_div4;
 
57751
        
 
57752
# check multiple-4 success:     1
 
57753
DELETE FROM t1
 
57754
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
57755
AND @max_row_div2 + @max_row_div4 + @max_row;
 
57756
        
 
57757
# check multiple-5 success:     1
 
57758
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
57759
INSERT INTO t1
 
57760
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
57761
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
57762
f_charbig = '#SINGLE#';
 
57763
        
 
57764
# check single-1 success:       1
 
57765
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
57766
INSERT INTO t1
 
57767
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
57768
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
57769
f_charbig = '#SINGLE#';
 
57770
        
 
57771
# check single-2 success:       1
 
57772
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
57773
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
57774
UPDATE t1 SET f_int1 = @cur_value2
 
57775
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
57776
        
 
57777
# check single-3 success:       1
 
57778
SET @cur_value1= -1;
 
57779
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
57780
UPDATE t1 SET f_int1 = @cur_value1
 
57781
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
57782
        
 
57783
# check single-4 success:       1
 
57784
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
57785
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
57786
        
 
57787
# check single-5 success:       1
 
57788
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
57789
        
 
57790
# check single-6 success:       1
 
57791
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
57792
        
 
57793
# check single-7 success:       1
 
57794
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
57795
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
57796
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
57797
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
57798
f_charbig = '#NULL#';
 
57799
INSERT INTO t1
 
57800
SET f_int1 = NULL , f_int2 = -@max_row,
 
57801
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
57802
f_charbig = '#NULL#';
 
57803
ERROR 23000: Column 'f_int1' cannot be null
 
57804
# check null success:    1
 
57805
DELETE FROM t1
 
57806
WHERE f_int1 = 0 AND f_int2 = 0
 
57807
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
57808
AND f_charbig = '#NULL#';
 
57809
SET AUTOCOMMIT= 0;
 
57810
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57811
SELECT f_int1, f_int1, '', '', 'was inserted'
 
57812
FROM t0_template source_tab
 
57813
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
57814
        
 
57815
# check transactions-1 success:         1
 
57816
COMMIT WORK;
 
57817
        
 
57818
# check transactions-2 success:         1
 
57819
ROLLBACK WORK;
 
57820
        
 
57821
# check transactions-3 success:         1
 
57822
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
57823
COMMIT WORK;
 
57824
ROLLBACK WORK;
 
57825
        
 
57826
# check transactions-4 success:         1
 
57827
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57828
SELECT f_int1, f_int1, '', '', 'was inserted'
 
57829
FROM t0_template source_tab
 
57830
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
57831
        
 
57832
# check transactions-5 success:         1
 
57833
ROLLBACK WORK;
 
57834
        
 
57835
# check transactions-6 success:         1
 
57836
# INFO: Storage engine used for t1 seems to be transactional.
 
57837
COMMIT;
 
57838
        
 
57839
# check transactions-7 success:         1
 
57840
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
57841
COMMIT WORK;
 
57842
SET @@session.sql_mode = 'traditional';
 
57843
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
57844
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
57845
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
57846
'', '', 'was inserted' FROM t0_template
 
57847
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
57848
ERROR 22012: Division by 0
 
57849
COMMIT;
 
57850
        
 
57851
# check transactions-8 success:         1
 
57852
# INFO: Storage engine used for t1 seems to be able to revert
 
57853
#       changes made by the failing statement.
 
57854
SET @@session.sql_mode = '';
 
57855
SET AUTOCOMMIT= 1;
 
57856
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
57857
COMMIT WORK;
 
57858
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
57859
        
 
57860
# check special-1 success:      1
 
57861
UPDATE t1 SET f_charbig = '';
 
57862
        
 
57863
# check special-2 success:      1
 
57864
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
57865
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57866
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
57867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57868
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57869
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57870
'just inserted' FROM t0_template
 
57871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57872
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
57873
BEGIN
 
57874
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57875
f_charbig = 'updated by trigger'
 
57876
      WHERE f_int1 = new.f_int1;
 
57877
END|
 
57878
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57879
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
57880
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57881
        
 
57882
# check trigger-1 success:      1
 
57883
DROP TRIGGER trg_1;
 
57884
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57885
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57886
f_charbig = 'just inserted'
 
57887
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57888
DELETE FROM t0_aux
 
57889
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57890
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57891
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57892
'just inserted' FROM t0_template
 
57893
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57894
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
57895
BEGIN
 
57896
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57897
f_charbig = 'updated by trigger'
 
57898
      WHERE f_int1 = new.f_int1;
 
57899
END|
 
57900
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57901
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
57902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57903
        
 
57904
# check trigger-2 success:      1
 
57905
DROP TRIGGER trg_1;
 
57906
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57907
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57908
f_charbig = 'just inserted'
 
57909
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57910
DELETE FROM t0_aux
 
57911
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57912
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57913
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57914
'just inserted' FROM t0_template
 
57915
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57916
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
57917
BEGIN
 
57918
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57919
f_charbig = 'updated by trigger'
 
57920
      WHERE f_int1 = new.f_int1;
 
57921
END|
 
57922
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57923
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57924
        
 
57925
# check trigger-3 success:      1
 
57926
DROP TRIGGER trg_1;
 
57927
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57928
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57929
f_charbig = 'just inserted'
 
57930
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57931
DELETE FROM t0_aux
 
57932
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57933
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57934
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57935
'just inserted' FROM t0_template
 
57936
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57937
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
57938
BEGIN
 
57939
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57940
f_charbig = 'updated by trigger'
 
57941
      WHERE f_int1 = - old.f_int1;
 
57942
END|
 
57943
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57944
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57945
        
 
57946
# check trigger-4 success:      1
 
57947
DROP TRIGGER trg_1;
 
57948
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57949
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57950
f_charbig = 'just inserted'
 
57951
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57952
DELETE FROM t0_aux
 
57953
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57955
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57956
'just inserted' FROM t0_template
 
57957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57958
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
57959
BEGIN
 
57960
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57961
f_charbig = 'updated by trigger'
 
57962
      WHERE f_int1 = new.f_int1;
 
57963
END|
 
57964
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57965
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57966
        
 
57967
# check trigger-5 success:      1
 
57968
DROP TRIGGER trg_1;
 
57969
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57970
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57971
f_charbig = 'just inserted'
 
57972
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57973
DELETE FROM t0_aux
 
57974
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57975
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57976
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57977
'just inserted' FROM t0_template
 
57978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57979
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
57980
BEGIN
 
57981
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
57982
f_charbig = 'updated by trigger'
 
57983
      WHERE f_int1 = - old.f_int1;
 
57984
END|
 
57985
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
57986
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
57987
        
 
57988
# check trigger-6 success:      1
 
57989
DROP TRIGGER trg_1;
 
57990
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
57991
f_int2 = CAST(f_char1 AS SIGNED INT),
 
57992
f_charbig = 'just inserted'
 
57993
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
57994
DELETE FROM t0_aux
 
57995
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
57996
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
57997
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
57998
'just inserted' FROM t0_template
 
57999
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58000
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
58001
BEGIN
 
58002
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58003
f_charbig = 'updated by trigger'
 
58004
      WHERE f_int1 = - old.f_int1;
 
58005
END|
 
58006
DELETE FROM t0_aux
 
58007
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58008
        
 
58009
# check trigger-7 success:      1
 
58010
DROP TRIGGER trg_1;
 
58011
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58012
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58013
f_charbig = 'just inserted'
 
58014
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58015
DELETE FROM t0_aux
 
58016
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58017
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58018
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58019
'just inserted' FROM t0_template
 
58020
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58021
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
58022
BEGIN
 
58023
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58024
f_charbig = 'updated by trigger'
 
58025
      WHERE f_int1 = - old.f_int1;
 
58026
END|
 
58027
DELETE FROM t0_aux
 
58028
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58029
        
 
58030
# check trigger-8 success:      1
 
58031
DROP TRIGGER trg_1;
 
58032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58034
f_charbig = 'just inserted'
 
58035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58036
DELETE FROM t0_aux
 
58037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58038
DELETE FROM t1
 
58039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58040
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
58041
BEGIN
 
58042
SET new.f_int1 = old.f_int1 + @max_row,
 
58043
new.f_int2 = old.f_int2 - @max_row,
 
58044
new.f_charbig = '####updated per update trigger####';
 
58045
END|
 
58046
UPDATE t1
 
58047
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
58048
f_charbig = '####updated per update statement itself####';
 
58049
        
 
58050
# check trigger-9 success:      1
 
58051
DROP TRIGGER trg_2;
 
58052
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58053
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58054
f_charbig = CONCAT('===',f_char1,'===');
 
58055
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
58056
BEGIN
 
58057
SET new.f_int1 = new.f_int1 + @max_row,
 
58058
new.f_int2 = new.f_int2 - @max_row,
 
58059
new.f_charbig = '####updated per update trigger####';
 
58060
END|
 
58061
UPDATE t1
 
58062
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
58063
f_charbig = '####updated per update statement itself####';
 
58064
        
 
58065
# check trigger-10 success:     1
 
58066
DROP TRIGGER trg_2;
 
58067
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58068
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58069
f_charbig = CONCAT('===',f_char1,'===');
 
58070
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
58071
BEGIN
 
58072
SET new.f_int1 = @my_max1 + @counter,
 
58073
new.f_int2 = @my_min2 - @counter,
 
58074
new.f_charbig = '####updated per insert trigger####';
 
58075
SET @counter = @counter + 1;
 
58076
END|
 
58077
SET @counter = 1;
 
58078
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
58079
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58080
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
58081
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
58082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
58083
ORDER BY f_int1;
 
58084
DROP TRIGGER trg_3;
 
58085
        
 
58086
# check trigger-11 success:     1
 
58087
DELETE FROM t1
 
58088
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
58089
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
58090
AND f_charbig = '####updated per insert trigger####';
 
58091
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
58092
BEGIN
 
58093
SET new.f_int1 = @my_max1 + @counter,
 
58094
new.f_int2 = @my_min2 - @counter,
 
58095
new.f_charbig = '####updated per insert trigger####';
 
58096
SET @counter = @counter + 1;
 
58097
END|
 
58098
SET @counter = 1;
 
58099
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
58100
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
58101
SELECT CAST(f_int1 AS CHAR),
 
58102
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
58103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
58104
ORDER BY f_int1;
 
58105
DROP TRIGGER trg_3;
 
58106
        
 
58107
# check trigger-12 success:     1
 
58108
DELETE FROM t1
 
58109
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
58110
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
58111
AND f_charbig = '####updated per insert trigger####';
 
58112
ANALYZE  TABLE t1;
 
58113
Table   Op      Msg_type        Msg_text
 
58114
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
58115
CHECK    TABLE t1 EXTENDED;
 
58116
Table   Op      Msg_type        Msg_text
 
58117
test.t1 check   note    The storage engine for the table doesn't support check
 
58118
CHECKSUM TABLE t1 EXTENDED;
 
58119
Table   Checksum
 
58120
test.t1 <some_value>
 
58121
OPTIMIZE TABLE t1;
 
58122
Table   Op      Msg_type        Msg_text
 
58123
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
58124
# check layout success:    1
 
58125
REPAIR   TABLE t1 EXTENDED;
 
58126
Table   Op      Msg_type        Msg_text
 
58127
test.t1 repair  note    The storage engine for the table doesn't support repair
 
58128
# check layout success:    1
 
58129
TRUNCATE t1;
 
58130
        
 
58131
# check TRUNCATE success:       1
 
58132
# check layout success:    1
 
58133
# End usability test (inc/partition_check.inc)
 
58134
DROP TABLE t1;
 
58135
CREATE TABLE t1 (
 
58136
f_int1 INTEGER,
 
58137
f_int2 INTEGER,
 
58138
f_char1 CHAR(20),
 
58139
f_char2 CHAR(20),
 
58140
f_charbig VARCHAR(1000)
 
58141
, PRIMARY KEY(f_int1,f_int2)
 
58142
)
 
58143
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
58144
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
58145
(PARTITION part1 VALUES IN (0),
 
58146
 PARTITION part2 VALUES IN (1),
 
58147
 PARTITION part3 VALUES IN (NULL));
 
58148
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58149
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
58150
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
58151
ALTER TABLE t1 DROP PRIMARY KEY;
 
58152
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58153
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
58154
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
58155
# Start usability test (inc/partition_check.inc)
 
58156
create_command
 
58157
SHOW CREATE TABLE t1;
 
58158
Table   Create Table
 
58159
t1      CREATE TABLE `t1` (
 
58160
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
58161
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
58162
  `f_char1` char(20) DEFAULT NULL,
 
58163
  `f_char2` char(20) DEFAULT NULL,
 
58164
  `f_charbig` varchar(1000) DEFAULT NULL
 
58165
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
58166
 
 
58167
# check prerequisites-1 success:    1
 
58168
# check COUNT(*) success:    1
 
58169
# check MIN/MAX(f_int1) success:    1
 
58170
# check MIN/MAX(f_int2) success:    1
 
58171
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58172
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
58173
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
58174
WHERE f_int1 IN (2,3);
 
58175
# check prerequisites-3 success:    1
 
58176
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
58177
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
58178
# check read via f_int1 success: 1
 
58179
# check read via f_int2 success: 1
 
58180
        
 
58181
# check multiple-1 success:     1
 
58182
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
58183
        
 
58184
# check multiple-2 success:     1
 
58185
INSERT INTO t1 SELECT * FROM t0_template
 
58186
WHERE MOD(f_int1,3) = 0;
 
58187
        
 
58188
# check multiple-3 success:     1
 
58189
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
58190
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
58191
AND @max_row_div2 + @max_row_div4;
 
58192
        
 
58193
# check multiple-4 success:     1
 
58194
DELETE FROM t1
 
58195
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
58196
AND @max_row_div2 + @max_row_div4 + @max_row;
 
58197
        
 
58198
# check multiple-5 success:     1
 
58199
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
58200
INSERT INTO t1
 
58201
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
58202
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
58203
f_charbig = '#SINGLE#';
 
58204
        
 
58205
# check single-1 success:       1
 
58206
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
58207
INSERT INTO t1
 
58208
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
58209
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
58210
f_charbig = '#SINGLE#';
 
58211
        
 
58212
# check single-2 success:       1
 
58213
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
58214
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
58215
UPDATE t1 SET f_int1 = @cur_value2
 
58216
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
58217
        
 
58218
# check single-3 success:       1
 
58219
SET @cur_value1= -1;
 
58220
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
58221
UPDATE t1 SET f_int1 = @cur_value1
 
58222
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
58223
        
 
58224
# check single-4 success:       1
 
58225
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
58226
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
58227
        
 
58228
# check single-5 success:       1
 
58229
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
58230
        
 
58231
# check single-6 success:       1
 
58232
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
58233
        
 
58234
# check single-7 success:       1
 
58235
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
58236
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
58237
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
58238
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
58239
f_charbig = '#NULL#';
 
58240
INSERT INTO t1
 
58241
SET f_int1 = NULL , f_int2 = -@max_row,
 
58242
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
58243
f_charbig = '#NULL#';
 
58244
ERROR 23000: Column 'f_int1' cannot be null
 
58245
# check null success:    1
 
58246
DELETE FROM t1
 
58247
WHERE f_int1 = 0 AND f_int2 = 0
 
58248
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
58249
AND f_charbig = '#NULL#';
 
58250
SET AUTOCOMMIT= 0;
 
58251
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58252
SELECT f_int1, f_int1, '', '', 'was inserted'
 
58253
FROM t0_template source_tab
 
58254
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
58255
        
 
58256
# check transactions-1 success:         1
 
58257
COMMIT WORK;
 
58258
        
 
58259
# check transactions-2 success:         1
 
58260
ROLLBACK WORK;
 
58261
        
 
58262
# check transactions-3 success:         1
 
58263
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
58264
COMMIT WORK;
 
58265
ROLLBACK WORK;
 
58266
        
 
58267
# check transactions-4 success:         1
 
58268
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58269
SELECT f_int1, f_int1, '', '', 'was inserted'
 
58270
FROM t0_template source_tab
 
58271
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
58272
        
 
58273
# check transactions-5 success:         1
 
58274
ROLLBACK WORK;
 
58275
        
 
58276
# check transactions-6 success:         1
 
58277
# INFO: Storage engine used for t1 seems to be transactional.
 
58278
COMMIT;
 
58279
        
 
58280
# check transactions-7 success:         1
 
58281
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
58282
COMMIT WORK;
 
58283
SET @@session.sql_mode = 'traditional';
 
58284
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
58285
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58286
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
58287
'', '', 'was inserted' FROM t0_template
 
58288
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
58289
ERROR 22012: Division by 0
 
58290
COMMIT;
 
58291
        
 
58292
# check transactions-8 success:         1
 
58293
# INFO: Storage engine used for t1 seems to be able to revert
 
58294
#       changes made by the failing statement.
 
58295
SET @@session.sql_mode = '';
 
58296
SET AUTOCOMMIT= 1;
 
58297
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
58298
COMMIT WORK;
 
58299
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
58300
        
 
58301
# check special-1 success:      1
 
58302
UPDATE t1 SET f_charbig = '';
 
58303
        
 
58304
# check special-2 success:      1
 
58305
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
58306
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58307
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
58308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58309
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58310
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58311
'just inserted' FROM t0_template
 
58312
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58313
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
58314
BEGIN
 
58315
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58316
f_charbig = 'updated by trigger'
 
58317
      WHERE f_int1 = new.f_int1;
 
58318
END|
 
58319
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58320
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
58321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58322
        
 
58323
# check trigger-1 success:      1
 
58324
DROP TRIGGER trg_1;
 
58325
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58326
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58327
f_charbig = 'just inserted'
 
58328
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58329
DELETE FROM t0_aux
 
58330
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58331
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58332
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58333
'just inserted' FROM t0_template
 
58334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58335
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
58336
BEGIN
 
58337
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58338
f_charbig = 'updated by trigger'
 
58339
      WHERE f_int1 = new.f_int1;
 
58340
END|
 
58341
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58342
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
58343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58344
        
 
58345
# check trigger-2 success:      1
 
58346
DROP TRIGGER trg_1;
 
58347
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58348
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58349
f_charbig = 'just inserted'
 
58350
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58351
DELETE FROM t0_aux
 
58352
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58354
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58355
'just inserted' FROM t0_template
 
58356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58357
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
58358
BEGIN
 
58359
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58360
f_charbig = 'updated by trigger'
 
58361
      WHERE f_int1 = new.f_int1;
 
58362
END|
 
58363
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58364
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58365
        
 
58366
# check trigger-3 success:      1
 
58367
DROP TRIGGER trg_1;
 
58368
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58369
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58370
f_charbig = 'just inserted'
 
58371
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58372
DELETE FROM t0_aux
 
58373
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58374
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58375
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58376
'just inserted' FROM t0_template
 
58377
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58378
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
58379
BEGIN
 
58380
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58381
f_charbig = 'updated by trigger'
 
58382
      WHERE f_int1 = - old.f_int1;
 
58383
END|
 
58384
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58385
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58386
        
 
58387
# check trigger-4 success:      1
 
58388
DROP TRIGGER trg_1;
 
58389
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58390
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58391
f_charbig = 'just inserted'
 
58392
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58393
DELETE FROM t0_aux
 
58394
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58395
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58396
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58397
'just inserted' FROM t0_template
 
58398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58399
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
58400
BEGIN
 
58401
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58402
f_charbig = 'updated by trigger'
 
58403
      WHERE f_int1 = new.f_int1;
 
58404
END|
 
58405
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58406
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58407
        
 
58408
# check trigger-5 success:      1
 
58409
DROP TRIGGER trg_1;
 
58410
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58411
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58412
f_charbig = 'just inserted'
 
58413
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58414
DELETE FROM t0_aux
 
58415
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58416
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58417
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58418
'just inserted' FROM t0_template
 
58419
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58420
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
58421
BEGIN
 
58422
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58423
f_charbig = 'updated by trigger'
 
58424
      WHERE f_int1 = - old.f_int1;
 
58425
END|
 
58426
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58427
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58428
        
 
58429
# check trigger-6 success:      1
 
58430
DROP TRIGGER trg_1;
 
58431
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58432
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58433
f_charbig = 'just inserted'
 
58434
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58435
DELETE FROM t0_aux
 
58436
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58437
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58438
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58439
'just inserted' FROM t0_template
 
58440
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58441
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
58442
BEGIN
 
58443
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58444
f_charbig = 'updated by trigger'
 
58445
      WHERE f_int1 = - old.f_int1;
 
58446
END|
 
58447
DELETE FROM t0_aux
 
58448
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58449
        
 
58450
# check trigger-7 success:      1
 
58451
DROP TRIGGER trg_1;
 
58452
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58453
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58454
f_charbig = 'just inserted'
 
58455
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58456
DELETE FROM t0_aux
 
58457
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58458
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58459
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58460
'just inserted' FROM t0_template
 
58461
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58462
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
58463
BEGIN
 
58464
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58465
f_charbig = 'updated by trigger'
 
58466
      WHERE f_int1 = - old.f_int1;
 
58467
END|
 
58468
DELETE FROM t0_aux
 
58469
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58470
        
 
58471
# check trigger-8 success:      1
 
58472
DROP TRIGGER trg_1;
 
58473
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58474
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58475
f_charbig = 'just inserted'
 
58476
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58477
DELETE FROM t0_aux
 
58478
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58479
DELETE FROM t1
 
58480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58481
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
58482
BEGIN
 
58483
SET new.f_int1 = old.f_int1 + @max_row,
 
58484
new.f_int2 = old.f_int2 - @max_row,
 
58485
new.f_charbig = '####updated per update trigger####';
 
58486
END|
 
58487
UPDATE t1
 
58488
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
58489
f_charbig = '####updated per update statement itself####';
 
58490
        
 
58491
# check trigger-9 success:      1
 
58492
DROP TRIGGER trg_2;
 
58493
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58494
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58495
f_charbig = CONCAT('===',f_char1,'===');
 
58496
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
58497
BEGIN
 
58498
SET new.f_int1 = new.f_int1 + @max_row,
 
58499
new.f_int2 = new.f_int2 - @max_row,
 
58500
new.f_charbig = '####updated per update trigger####';
 
58501
END|
 
58502
UPDATE t1
 
58503
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
58504
f_charbig = '####updated per update statement itself####';
 
58505
        
 
58506
# check trigger-10 success:     1
 
58507
DROP TRIGGER trg_2;
 
58508
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58509
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58510
f_charbig = CONCAT('===',f_char1,'===');
 
58511
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
58512
BEGIN
 
58513
SET new.f_int1 = @my_max1 + @counter,
 
58514
new.f_int2 = @my_min2 - @counter,
 
58515
new.f_charbig = '####updated per insert trigger####';
 
58516
SET @counter = @counter + 1;
 
58517
END|
 
58518
SET @counter = 1;
 
58519
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
58520
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58521
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
58522
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
58523
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
58524
ORDER BY f_int1;
 
58525
DROP TRIGGER trg_3;
 
58526
        
 
58527
# check trigger-11 success:     1
 
58528
DELETE FROM t1
 
58529
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
58530
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
58531
AND f_charbig = '####updated per insert trigger####';
 
58532
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
58533
BEGIN
 
58534
SET new.f_int1 = @my_max1 + @counter,
 
58535
new.f_int2 = @my_min2 - @counter,
 
58536
new.f_charbig = '####updated per insert trigger####';
 
58537
SET @counter = @counter + 1;
 
58538
END|
 
58539
SET @counter = 1;
 
58540
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
58541
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
58542
SELECT CAST(f_int1 AS CHAR),
 
58543
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
58544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
58545
ORDER BY f_int1;
 
58546
DROP TRIGGER trg_3;
 
58547
        
 
58548
# check trigger-12 success:     1
 
58549
DELETE FROM t1
 
58550
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
58551
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
58552
AND f_charbig = '####updated per insert trigger####';
 
58553
ANALYZE  TABLE t1;
 
58554
Table   Op      Msg_type        Msg_text
 
58555
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
58556
CHECK    TABLE t1 EXTENDED;
 
58557
Table   Op      Msg_type        Msg_text
 
58558
test.t1 check   note    The storage engine for the table doesn't support check
 
58559
CHECKSUM TABLE t1 EXTENDED;
 
58560
Table   Checksum
 
58561
test.t1 <some_value>
 
58562
OPTIMIZE TABLE t1;
 
58563
Table   Op      Msg_type        Msg_text
 
58564
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
58565
# check layout success:    1
 
58566
REPAIR   TABLE t1 EXTENDED;
 
58567
Table   Op      Msg_type        Msg_text
 
58568
test.t1 repair  note    The storage engine for the table doesn't support repair
 
58569
# check layout success:    1
 
58570
TRUNCATE t1;
 
58571
        
 
58572
# check TRUNCATE success:       1
 
58573
# check layout success:    1
 
58574
# End usability test (inc/partition_check.inc)
 
58575
DROP TABLE t1;
 
58576
DROP TABLE IF EXISTS t1;
 
58577
CREATE TABLE t1 (
 
58578
f_int1 INTEGER,
 
58579
f_int2 INTEGER,
 
58580
f_char1 CHAR(20),
 
58581
f_char2 CHAR(20),
 
58582
f_charbig VARCHAR(1000)
 
58583
, PRIMARY KEY(f_int2,f_int1)
 
58584
)
 
58585
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
58586
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58587
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
58588
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
58589
ALTER TABLE t1 DROP PRIMARY KEY;
 
58590
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58591
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
58592
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
58593
# Start usability test (inc/partition_check.inc)
 
58594
create_command
 
58595
SHOW CREATE TABLE t1;
 
58596
Table   Create Table
 
58597
t1      CREATE TABLE `t1` (
 
58598
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
58599
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
58600
  `f_char1` char(20) DEFAULT NULL,
 
58601
  `f_char2` char(20) DEFAULT NULL,
 
58602
  `f_charbig` varchar(1000) DEFAULT NULL
 
58603
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
58604
 
 
58605
# check prerequisites-1 success:    1
 
58606
# check COUNT(*) success:    1
 
58607
# check MIN/MAX(f_int1) success:    1
 
58608
# check MIN/MAX(f_int2) success:    1
 
58609
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58610
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
58611
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
58612
WHERE f_int1 IN (2,3);
 
58613
# check prerequisites-3 success:    1
 
58614
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
58615
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
58616
# check read via f_int1 success: 1
 
58617
# check read via f_int2 success: 1
 
58618
        
 
58619
# check multiple-1 success:     1
 
58620
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
58621
        
 
58622
# check multiple-2 success:     1
 
58623
INSERT INTO t1 SELECT * FROM t0_template
 
58624
WHERE MOD(f_int1,3) = 0;
 
58625
        
 
58626
# check multiple-3 success:     1
 
58627
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
58628
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
58629
AND @max_row_div2 + @max_row_div4;
 
58630
        
 
58631
# check multiple-4 success:     1
 
58632
DELETE FROM t1
 
58633
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
58634
AND @max_row_div2 + @max_row_div4 + @max_row;
 
58635
        
 
58636
# check multiple-5 success:     1
 
58637
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
58638
INSERT INTO t1
 
58639
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
58640
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
58641
f_charbig = '#SINGLE#';
 
58642
        
 
58643
# check single-1 success:       1
 
58644
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
58645
INSERT INTO t1
 
58646
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
58647
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
58648
f_charbig = '#SINGLE#';
 
58649
        
 
58650
# check single-2 success:       1
 
58651
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
58652
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
58653
UPDATE t1 SET f_int1 = @cur_value2
 
58654
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
58655
        
 
58656
# check single-3 success:       1
 
58657
SET @cur_value1= -1;
 
58658
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
58659
UPDATE t1 SET f_int1 = @cur_value1
 
58660
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
58661
        
 
58662
# check single-4 success:       1
 
58663
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
58664
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
58665
        
 
58666
# check single-5 success:       1
 
58667
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
58668
        
 
58669
# check single-6 success:       1
 
58670
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
58671
        
 
58672
# check single-7 success:       1
 
58673
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
58674
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
58675
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
58676
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
58677
f_charbig = '#NULL#';
 
58678
INSERT INTO t1
 
58679
SET f_int1 = NULL , f_int2 = -@max_row,
 
58680
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
58681
f_charbig = '#NULL#';
 
58682
ERROR 23000: Column 'f_int1' cannot be null
 
58683
# check null success:    1
 
58684
DELETE FROM t1
 
58685
WHERE f_int1 = 0 AND f_int2 = 0
 
58686
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
58687
AND f_charbig = '#NULL#';
 
58688
SET AUTOCOMMIT= 0;
 
58689
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58690
SELECT f_int1, f_int1, '', '', 'was inserted'
 
58691
FROM t0_template source_tab
 
58692
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
58693
        
 
58694
# check transactions-1 success:         1
 
58695
COMMIT WORK;
 
58696
        
 
58697
# check transactions-2 success:         1
 
58698
ROLLBACK WORK;
 
58699
        
 
58700
# check transactions-3 success:         1
 
58701
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
58702
COMMIT WORK;
 
58703
ROLLBACK WORK;
 
58704
        
 
58705
# check transactions-4 success:         1
 
58706
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58707
SELECT f_int1, f_int1, '', '', 'was inserted'
 
58708
FROM t0_template source_tab
 
58709
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
58710
        
 
58711
# check transactions-5 success:         1
 
58712
ROLLBACK WORK;
 
58713
        
 
58714
# check transactions-6 success:         1
 
58715
# INFO: Storage engine used for t1 seems to be transactional.
 
58716
COMMIT;
 
58717
        
 
58718
# check transactions-7 success:         1
 
58719
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
58720
COMMIT WORK;
 
58721
SET @@session.sql_mode = 'traditional';
 
58722
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
58723
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58724
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
58725
'', '', 'was inserted' FROM t0_template
 
58726
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
58727
ERROR 22012: Division by 0
 
58728
COMMIT;
 
58729
        
 
58730
# check transactions-8 success:         1
 
58731
# INFO: Storage engine used for t1 seems to be able to revert
 
58732
#       changes made by the failing statement.
 
58733
SET @@session.sql_mode = '';
 
58734
SET AUTOCOMMIT= 1;
 
58735
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
58736
COMMIT WORK;
 
58737
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
58738
        
 
58739
# check special-1 success:      1
 
58740
UPDATE t1 SET f_charbig = '';
 
58741
        
 
58742
# check special-2 success:      1
 
58743
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
58744
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58745
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
58746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58747
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58748
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58749
'just inserted' FROM t0_template
 
58750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58751
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
58752
BEGIN
 
58753
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58754
f_charbig = 'updated by trigger'
 
58755
      WHERE f_int1 = new.f_int1;
 
58756
END|
 
58757
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58758
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
58759
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58760
        
 
58761
# check trigger-1 success:      1
 
58762
DROP TRIGGER trg_1;
 
58763
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58764
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58765
f_charbig = 'just inserted'
 
58766
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58767
DELETE FROM t0_aux
 
58768
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58769
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58770
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58771
'just inserted' FROM t0_template
 
58772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58773
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
58774
BEGIN
 
58775
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58776
f_charbig = 'updated by trigger'
 
58777
      WHERE f_int1 = new.f_int1;
 
58778
END|
 
58779
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58780
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
58781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58782
        
 
58783
# check trigger-2 success:      1
 
58784
DROP TRIGGER trg_1;
 
58785
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58786
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58787
f_charbig = 'just inserted'
 
58788
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58789
DELETE FROM t0_aux
 
58790
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58791
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58792
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58793
'just inserted' FROM t0_template
 
58794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58795
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
58796
BEGIN
 
58797
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58798
f_charbig = 'updated by trigger'
 
58799
      WHERE f_int1 = new.f_int1;
 
58800
END|
 
58801
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58802
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58803
        
 
58804
# check trigger-3 success:      1
 
58805
DROP TRIGGER trg_1;
 
58806
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58807
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58808
f_charbig = 'just inserted'
 
58809
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58810
DELETE FROM t0_aux
 
58811
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58812
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58813
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58814
'just inserted' FROM t0_template
 
58815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58816
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
58817
BEGIN
 
58818
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58819
f_charbig = 'updated by trigger'
 
58820
      WHERE f_int1 = - old.f_int1;
 
58821
END|
 
58822
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58823
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58824
        
 
58825
# check trigger-4 success:      1
 
58826
DROP TRIGGER trg_1;
 
58827
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58828
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58829
f_charbig = 'just inserted'
 
58830
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58831
DELETE FROM t0_aux
 
58832
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58834
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58835
'just inserted' FROM t0_template
 
58836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58837
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
58838
BEGIN
 
58839
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58840
f_charbig = 'updated by trigger'
 
58841
      WHERE f_int1 = new.f_int1;
 
58842
END|
 
58843
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58844
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58845
        
 
58846
# check trigger-5 success:      1
 
58847
DROP TRIGGER trg_1;
 
58848
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58849
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58850
f_charbig = 'just inserted'
 
58851
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58852
DELETE FROM t0_aux
 
58853
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58854
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58855
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58856
'just inserted' FROM t0_template
 
58857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58858
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
58859
BEGIN
 
58860
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58861
f_charbig = 'updated by trigger'
 
58862
      WHERE f_int1 = - old.f_int1;
 
58863
END|
 
58864
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
58865
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58866
        
 
58867
# check trigger-6 success:      1
 
58868
DROP TRIGGER trg_1;
 
58869
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58870
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58871
f_charbig = 'just inserted'
 
58872
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58873
DELETE FROM t0_aux
 
58874
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58875
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58876
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58877
'just inserted' FROM t0_template
 
58878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58879
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
58880
BEGIN
 
58881
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58882
f_charbig = 'updated by trigger'
 
58883
      WHERE f_int1 = - old.f_int1;
 
58884
END|
 
58885
DELETE FROM t0_aux
 
58886
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58887
        
 
58888
# check trigger-7 success:      1
 
58889
DROP TRIGGER trg_1;
 
58890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58892
f_charbig = 'just inserted'
 
58893
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58894
DELETE FROM t0_aux
 
58895
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58896
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58897
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
58898
'just inserted' FROM t0_template
 
58899
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58900
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
58901
BEGIN
 
58902
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
58903
f_charbig = 'updated by trigger'
 
58904
      WHERE f_int1 = - old.f_int1;
 
58905
END|
 
58906
DELETE FROM t0_aux
 
58907
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
58908
        
 
58909
# check trigger-8 success:      1
 
58910
DROP TRIGGER trg_1;
 
58911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58912
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58913
f_charbig = 'just inserted'
 
58914
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
58915
DELETE FROM t0_aux
 
58916
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58917
DELETE FROM t1
 
58918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
58919
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
58920
BEGIN
 
58921
SET new.f_int1 = old.f_int1 + @max_row,
 
58922
new.f_int2 = old.f_int2 - @max_row,
 
58923
new.f_charbig = '####updated per update trigger####';
 
58924
END|
 
58925
UPDATE t1
 
58926
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
58927
f_charbig = '####updated per update statement itself####';
 
58928
        
 
58929
# check trigger-9 success:      1
 
58930
DROP TRIGGER trg_2;
 
58931
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58932
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58933
f_charbig = CONCAT('===',f_char1,'===');
 
58934
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
58935
BEGIN
 
58936
SET new.f_int1 = new.f_int1 + @max_row,
 
58937
new.f_int2 = new.f_int2 - @max_row,
 
58938
new.f_charbig = '####updated per update trigger####';
 
58939
END|
 
58940
UPDATE t1
 
58941
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
58942
f_charbig = '####updated per update statement itself####';
 
58943
        
 
58944
# check trigger-10 success:     1
 
58945
DROP TRIGGER trg_2;
 
58946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
58947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
58948
f_charbig = CONCAT('===',f_char1,'===');
 
58949
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
58950
BEGIN
 
58951
SET new.f_int1 = @my_max1 + @counter,
 
58952
new.f_int2 = @my_min2 - @counter,
 
58953
new.f_charbig = '####updated per insert trigger####';
 
58954
SET @counter = @counter + 1;
 
58955
END|
 
58956
SET @counter = 1;
 
58957
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
58958
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
58959
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
58960
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
58961
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
58962
ORDER BY f_int1;
 
58963
DROP TRIGGER trg_3;
 
58964
        
 
58965
# check trigger-11 success:     1
 
58966
DELETE FROM t1
 
58967
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
58968
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
58969
AND f_charbig = '####updated per insert trigger####';
 
58970
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
58971
BEGIN
 
58972
SET new.f_int1 = @my_max1 + @counter,
 
58973
new.f_int2 = @my_min2 - @counter,
 
58974
new.f_charbig = '####updated per insert trigger####';
 
58975
SET @counter = @counter + 1;
 
58976
END|
 
58977
SET @counter = 1;
 
58978
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
58979
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
58980
SELECT CAST(f_int1 AS CHAR),
 
58981
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
58982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
58983
ORDER BY f_int1;
 
58984
DROP TRIGGER trg_3;
 
58985
        
 
58986
# check trigger-12 success:     1
 
58987
DELETE FROM t1
 
58988
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
58989
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
58990
AND f_charbig = '####updated per insert trigger####';
 
58991
ANALYZE  TABLE t1;
 
58992
Table   Op      Msg_type        Msg_text
 
58993
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
58994
CHECK    TABLE t1 EXTENDED;
 
58995
Table   Op      Msg_type        Msg_text
 
58996
test.t1 check   note    The storage engine for the table doesn't support check
 
58997
CHECKSUM TABLE t1 EXTENDED;
 
58998
Table   Checksum
 
58999
test.t1 <some_value>
 
59000
OPTIMIZE TABLE t1;
 
59001
Table   Op      Msg_type        Msg_text
 
59002
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
59003
# check layout success:    1
 
59004
REPAIR   TABLE t1 EXTENDED;
 
59005
Table   Op      Msg_type        Msg_text
 
59006
test.t1 repair  note    The storage engine for the table doesn't support repair
 
59007
# check layout success:    1
 
59008
TRUNCATE t1;
 
59009
        
 
59010
# check TRUNCATE success:       1
 
59011
# check layout success:    1
 
59012
# End usability test (inc/partition_check.inc)
 
59013
DROP TABLE t1;
 
59014
CREATE TABLE t1 (
 
59015
f_int1 INTEGER,
 
59016
f_int2 INTEGER,
 
59017
f_char1 CHAR(20),
 
59018
f_char2 CHAR(20),
 
59019
f_charbig VARCHAR(1000)
 
59020
, PRIMARY KEY(f_int2,f_int1)
 
59021
)
 
59022
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
59023
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59024
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
59025
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
59026
ALTER TABLE t1 DROP PRIMARY KEY;
 
59027
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59028
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
59029
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
59030
# Start usability test (inc/partition_check.inc)
 
59031
create_command
 
59032
SHOW CREATE TABLE t1;
 
59033
Table   Create Table
 
59034
t1      CREATE TABLE `t1` (
 
59035
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
59036
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
59037
  `f_char1` char(20) DEFAULT NULL,
 
59038
  `f_char2` char(20) DEFAULT NULL,
 
59039
  `f_charbig` varchar(1000) DEFAULT NULL
 
59040
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
59041
 
 
59042
# check prerequisites-1 success:    1
 
59043
# check COUNT(*) success:    1
 
59044
# check MIN/MAX(f_int1) success:    1
 
59045
# check MIN/MAX(f_int2) success:    1
 
59046
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59047
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
59048
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
59049
WHERE f_int1 IN (2,3);
 
59050
# check prerequisites-3 success:    1
 
59051
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
59052
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
59053
# check read via f_int1 success: 1
 
59054
# check read via f_int2 success: 1
 
59055
        
 
59056
# check multiple-1 success:     1
 
59057
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
59058
        
 
59059
# check multiple-2 success:     1
 
59060
INSERT INTO t1 SELECT * FROM t0_template
 
59061
WHERE MOD(f_int1,3) = 0;
 
59062
        
 
59063
# check multiple-3 success:     1
 
59064
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
59065
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
59066
AND @max_row_div2 + @max_row_div4;
 
59067
        
 
59068
# check multiple-4 success:     1
 
59069
DELETE FROM t1
 
59070
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
59071
AND @max_row_div2 + @max_row_div4 + @max_row;
 
59072
        
 
59073
# check multiple-5 success:     1
 
59074
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
59075
INSERT INTO t1
 
59076
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
59077
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
59078
f_charbig = '#SINGLE#';
 
59079
        
 
59080
# check single-1 success:       1
 
59081
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
59082
INSERT INTO t1
 
59083
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
59084
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
59085
f_charbig = '#SINGLE#';
 
59086
        
 
59087
# check single-2 success:       1
 
59088
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
59089
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
59090
UPDATE t1 SET f_int1 = @cur_value2
 
59091
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
59092
        
 
59093
# check single-3 success:       1
 
59094
SET @cur_value1= -1;
 
59095
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
59096
UPDATE t1 SET f_int1 = @cur_value1
 
59097
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
59098
        
 
59099
# check single-4 success:       1
 
59100
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
59101
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
59102
        
 
59103
# check single-5 success:       1
 
59104
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
59105
        
 
59106
# check single-6 success:       1
 
59107
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
59108
        
 
59109
# check single-7 success:       1
 
59110
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
59111
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
59112
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
59113
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
59114
f_charbig = '#NULL#';
 
59115
INSERT INTO t1
 
59116
SET f_int1 = NULL , f_int2 = -@max_row,
 
59117
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
59118
f_charbig = '#NULL#';
 
59119
ERROR 23000: Column 'f_int1' cannot be null
 
59120
# check null success:    1
 
59121
DELETE FROM t1
 
59122
WHERE f_int1 = 0 AND f_int2 = 0
 
59123
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
59124
AND f_charbig = '#NULL#';
 
59125
SET AUTOCOMMIT= 0;
 
59126
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59127
SELECT f_int1, f_int1, '', '', 'was inserted'
 
59128
FROM t0_template source_tab
 
59129
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
59130
        
 
59131
# check transactions-1 success:         1
 
59132
COMMIT WORK;
 
59133
        
 
59134
# check transactions-2 success:         1
 
59135
ROLLBACK WORK;
 
59136
        
 
59137
# check transactions-3 success:         1
 
59138
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
59139
COMMIT WORK;
 
59140
ROLLBACK WORK;
 
59141
        
 
59142
# check transactions-4 success:         1
 
59143
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59144
SELECT f_int1, f_int1, '', '', 'was inserted'
 
59145
FROM t0_template source_tab
 
59146
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
59147
        
 
59148
# check transactions-5 success:         1
 
59149
ROLLBACK WORK;
 
59150
        
 
59151
# check transactions-6 success:         1
 
59152
# INFO: Storage engine used for t1 seems to be transactional.
 
59153
COMMIT;
 
59154
        
 
59155
# check transactions-7 success:         1
 
59156
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
59157
COMMIT WORK;
 
59158
SET @@session.sql_mode = 'traditional';
 
59159
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
59160
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59161
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
59162
'', '', 'was inserted' FROM t0_template
 
59163
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
59164
ERROR 22012: Division by 0
 
59165
COMMIT;
 
59166
        
 
59167
# check transactions-8 success:         1
 
59168
# INFO: Storage engine used for t1 seems to be able to revert
 
59169
#       changes made by the failing statement.
 
59170
SET @@session.sql_mode = '';
 
59171
SET AUTOCOMMIT= 1;
 
59172
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
59173
COMMIT WORK;
 
59174
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
59175
        
 
59176
# check special-1 success:      1
 
59177
UPDATE t1 SET f_charbig = '';
 
59178
        
 
59179
# check special-2 success:      1
 
59180
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
59181
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59182
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
59183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59184
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59185
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59186
'just inserted' FROM t0_template
 
59187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59188
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
59189
BEGIN
 
59190
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59191
f_charbig = 'updated by trigger'
 
59192
      WHERE f_int1 = new.f_int1;
 
59193
END|
 
59194
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59195
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
59196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59197
        
 
59198
# check trigger-1 success:      1
 
59199
DROP TRIGGER trg_1;
 
59200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59202
f_charbig = 'just inserted'
 
59203
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59204
DELETE FROM t0_aux
 
59205
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59206
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59207
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59208
'just inserted' FROM t0_template
 
59209
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59210
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
59211
BEGIN
 
59212
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59213
f_charbig = 'updated by trigger'
 
59214
      WHERE f_int1 = new.f_int1;
 
59215
END|
 
59216
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59217
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
59218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59219
        
 
59220
# check trigger-2 success:      1
 
59221
DROP TRIGGER trg_1;
 
59222
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59223
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59224
f_charbig = 'just inserted'
 
59225
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59226
DELETE FROM t0_aux
 
59227
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59228
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59229
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59230
'just inserted' FROM t0_template
 
59231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59232
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
59233
BEGIN
 
59234
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59235
f_charbig = 'updated by trigger'
 
59236
      WHERE f_int1 = new.f_int1;
 
59237
END|
 
59238
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59239
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59240
        
 
59241
# check trigger-3 success:      1
 
59242
DROP TRIGGER trg_1;
 
59243
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59244
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59245
f_charbig = 'just inserted'
 
59246
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59247
DELETE FROM t0_aux
 
59248
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59249
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59250
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59251
'just inserted' FROM t0_template
 
59252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59253
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
59254
BEGIN
 
59255
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59256
f_charbig = 'updated by trigger'
 
59257
      WHERE f_int1 = - old.f_int1;
 
59258
END|
 
59259
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59260
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59261
        
 
59262
# check trigger-4 success:      1
 
59263
DROP TRIGGER trg_1;
 
59264
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59265
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59266
f_charbig = 'just inserted'
 
59267
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59268
DELETE FROM t0_aux
 
59269
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59270
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59271
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59272
'just inserted' FROM t0_template
 
59273
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59274
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
59275
BEGIN
 
59276
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59277
f_charbig = 'updated by trigger'
 
59278
      WHERE f_int1 = new.f_int1;
 
59279
END|
 
59280
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59281
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59282
        
 
59283
# check trigger-5 success:      1
 
59284
DROP TRIGGER trg_1;
 
59285
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59286
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59287
f_charbig = 'just inserted'
 
59288
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59289
DELETE FROM t0_aux
 
59290
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59291
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59292
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59293
'just inserted' FROM t0_template
 
59294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59295
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
59296
BEGIN
 
59297
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59298
f_charbig = 'updated by trigger'
 
59299
      WHERE f_int1 = - old.f_int1;
 
59300
END|
 
59301
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59302
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59303
        
 
59304
# check trigger-6 success:      1
 
59305
DROP TRIGGER trg_1;
 
59306
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59307
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59308
f_charbig = 'just inserted'
 
59309
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59310
DELETE FROM t0_aux
 
59311
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59312
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59313
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59314
'just inserted' FROM t0_template
 
59315
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59316
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
59317
BEGIN
 
59318
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59319
f_charbig = 'updated by trigger'
 
59320
      WHERE f_int1 = - old.f_int1;
 
59321
END|
 
59322
DELETE FROM t0_aux
 
59323
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59324
        
 
59325
# check trigger-7 success:      1
 
59326
DROP TRIGGER trg_1;
 
59327
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59328
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59329
f_charbig = 'just inserted'
 
59330
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59331
DELETE FROM t0_aux
 
59332
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59333
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59334
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59335
'just inserted' FROM t0_template
 
59336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59337
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
59338
BEGIN
 
59339
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59340
f_charbig = 'updated by trigger'
 
59341
      WHERE f_int1 = - old.f_int1;
 
59342
END|
 
59343
DELETE FROM t0_aux
 
59344
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59345
        
 
59346
# check trigger-8 success:      1
 
59347
DROP TRIGGER trg_1;
 
59348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59350
f_charbig = 'just inserted'
 
59351
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59352
DELETE FROM t0_aux
 
59353
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59354
DELETE FROM t1
 
59355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59356
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
59357
BEGIN
 
59358
SET new.f_int1 = old.f_int1 + @max_row,
 
59359
new.f_int2 = old.f_int2 - @max_row,
 
59360
new.f_charbig = '####updated per update trigger####';
 
59361
END|
 
59362
UPDATE t1
 
59363
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
59364
f_charbig = '####updated per update statement itself####';
 
59365
        
 
59366
# check trigger-9 success:      1
 
59367
DROP TRIGGER trg_2;
 
59368
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59369
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59370
f_charbig = CONCAT('===',f_char1,'===');
 
59371
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
59372
BEGIN
 
59373
SET new.f_int1 = new.f_int1 + @max_row,
 
59374
new.f_int2 = new.f_int2 - @max_row,
 
59375
new.f_charbig = '####updated per update trigger####';
 
59376
END|
 
59377
UPDATE t1
 
59378
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
59379
f_charbig = '####updated per update statement itself####';
 
59380
        
 
59381
# check trigger-10 success:     1
 
59382
DROP TRIGGER trg_2;
 
59383
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59384
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59385
f_charbig = CONCAT('===',f_char1,'===');
 
59386
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
59387
BEGIN
 
59388
SET new.f_int1 = @my_max1 + @counter,
 
59389
new.f_int2 = @my_min2 - @counter,
 
59390
new.f_charbig = '####updated per insert trigger####';
 
59391
SET @counter = @counter + 1;
 
59392
END|
 
59393
SET @counter = 1;
 
59394
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
59395
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59396
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
59397
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
59398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
59399
ORDER BY f_int1;
 
59400
DROP TRIGGER trg_3;
 
59401
        
 
59402
# check trigger-11 success:     1
 
59403
DELETE FROM t1
 
59404
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
59405
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
59406
AND f_charbig = '####updated per insert trigger####';
 
59407
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
59408
BEGIN
 
59409
SET new.f_int1 = @my_max1 + @counter,
 
59410
new.f_int2 = @my_min2 - @counter,
 
59411
new.f_charbig = '####updated per insert trigger####';
 
59412
SET @counter = @counter + 1;
 
59413
END|
 
59414
SET @counter = 1;
 
59415
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
59416
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
59417
SELECT CAST(f_int1 AS CHAR),
 
59418
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
59419
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
59420
ORDER BY f_int1;
 
59421
DROP TRIGGER trg_3;
 
59422
        
 
59423
# check trigger-12 success:     1
 
59424
DELETE FROM t1
 
59425
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
59426
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
59427
AND f_charbig = '####updated per insert trigger####';
 
59428
ANALYZE  TABLE t1;
 
59429
Table   Op      Msg_type        Msg_text
 
59430
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
59431
CHECK    TABLE t1 EXTENDED;
 
59432
Table   Op      Msg_type        Msg_text
 
59433
test.t1 check   note    The storage engine for the table doesn't support check
 
59434
CHECKSUM TABLE t1 EXTENDED;
 
59435
Table   Checksum
 
59436
test.t1 <some_value>
 
59437
OPTIMIZE TABLE t1;
 
59438
Table   Op      Msg_type        Msg_text
 
59439
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
59440
# check layout success:    1
 
59441
REPAIR   TABLE t1 EXTENDED;
 
59442
Table   Op      Msg_type        Msg_text
 
59443
test.t1 repair  note    The storage engine for the table doesn't support repair
 
59444
# check layout success:    1
 
59445
TRUNCATE t1;
 
59446
        
 
59447
# check TRUNCATE success:       1
 
59448
# check layout success:    1
 
59449
# End usability test (inc/partition_check.inc)
 
59450
DROP TABLE t1;
 
59451
CREATE TABLE t1 (
 
59452
f_int1 INTEGER,
 
59453
f_int2 INTEGER,
 
59454
f_char1 CHAR(20),
 
59455
f_char2 CHAR(20),
 
59456
f_charbig VARCHAR(1000)
 
59457
, PRIMARY KEY(f_int2,f_int1)
 
59458
)
 
59459
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
59460
(PARTITION part_3 VALUES IN (-3),
 
59461
PARTITION part_2 VALUES IN (-2),
 
59462
PARTITION part_1 VALUES IN (-1),
 
59463
PARTITION part_N VALUES IN (NULL),
 
59464
PARTITION part0 VALUES IN (0),
 
59465
PARTITION part1 VALUES IN (1),
 
59466
PARTITION part2 VALUES IN (2),
 
59467
PARTITION part3 VALUES IN (3));
 
59468
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59469
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
59470
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
59471
ALTER TABLE t1 DROP PRIMARY KEY;
 
59472
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59473
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
59474
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
59475
# Start usability test (inc/partition_check.inc)
 
59476
create_command
 
59477
SHOW CREATE TABLE t1;
 
59478
Table   Create Table
 
59479
t1      CREATE TABLE `t1` (
 
59480
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
59481
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
59482
  `f_char1` char(20) DEFAULT NULL,
 
59483
  `f_char2` char(20) DEFAULT NULL,
 
59484
  `f_charbig` varchar(1000) DEFAULT NULL
 
59485
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
59486
 
 
59487
# check prerequisites-1 success:    1
 
59488
# check COUNT(*) success:    1
 
59489
# check MIN/MAX(f_int1) success:    1
 
59490
# check MIN/MAX(f_int2) success:    1
 
59491
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59492
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
59493
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
59494
WHERE f_int1 IN (2,3);
 
59495
# check prerequisites-3 success:    1
 
59496
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
59497
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
59498
# check read via f_int1 success: 1
 
59499
# check read via f_int2 success: 1
 
59500
        
 
59501
# check multiple-1 success:     1
 
59502
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
59503
        
 
59504
# check multiple-2 success:     1
 
59505
INSERT INTO t1 SELECT * FROM t0_template
 
59506
WHERE MOD(f_int1,3) = 0;
 
59507
        
 
59508
# check multiple-3 success:     1
 
59509
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
59510
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
59511
AND @max_row_div2 + @max_row_div4;
 
59512
        
 
59513
# check multiple-4 success:     1
 
59514
DELETE FROM t1
 
59515
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
59516
AND @max_row_div2 + @max_row_div4 + @max_row;
 
59517
        
 
59518
# check multiple-5 success:     1
 
59519
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
59520
INSERT INTO t1
 
59521
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
59522
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
59523
f_charbig = '#SINGLE#';
 
59524
        
 
59525
# check single-1 success:       1
 
59526
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
59527
INSERT INTO t1
 
59528
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
59529
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
59530
f_charbig = '#SINGLE#';
 
59531
        
 
59532
# check single-2 success:       1
 
59533
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
59534
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
59535
UPDATE t1 SET f_int1 = @cur_value2
 
59536
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
59537
        
 
59538
# check single-3 success:       1
 
59539
SET @cur_value1= -1;
 
59540
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
59541
UPDATE t1 SET f_int1 = @cur_value1
 
59542
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
59543
        
 
59544
# check single-4 success:       1
 
59545
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
59546
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
59547
        
 
59548
# check single-5 success:       1
 
59549
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
59550
        
 
59551
# check single-6 success:       1
 
59552
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
59553
        
 
59554
# check single-7 success:       1
 
59555
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
59556
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
59557
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
59558
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
59559
f_charbig = '#NULL#';
 
59560
INSERT INTO t1
 
59561
SET f_int1 = NULL , f_int2 = -@max_row,
 
59562
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
59563
f_charbig = '#NULL#';
 
59564
ERROR 23000: Column 'f_int1' cannot be null
 
59565
# check null success:    1
 
59566
DELETE FROM t1
 
59567
WHERE f_int1 = 0 AND f_int2 = 0
 
59568
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
59569
AND f_charbig = '#NULL#';
 
59570
SET AUTOCOMMIT= 0;
 
59571
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59572
SELECT f_int1, f_int1, '', '', 'was inserted'
 
59573
FROM t0_template source_tab
 
59574
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
59575
        
 
59576
# check transactions-1 success:         1
 
59577
COMMIT WORK;
 
59578
        
 
59579
# check transactions-2 success:         1
 
59580
ROLLBACK WORK;
 
59581
        
 
59582
# check transactions-3 success:         1
 
59583
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
59584
COMMIT WORK;
 
59585
ROLLBACK WORK;
 
59586
        
 
59587
# check transactions-4 success:         1
 
59588
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59589
SELECT f_int1, f_int1, '', '', 'was inserted'
 
59590
FROM t0_template source_tab
 
59591
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
59592
        
 
59593
# check transactions-5 success:         1
 
59594
ROLLBACK WORK;
 
59595
        
 
59596
# check transactions-6 success:         1
 
59597
# INFO: Storage engine used for t1 seems to be transactional.
 
59598
COMMIT;
 
59599
        
 
59600
# check transactions-7 success:         1
 
59601
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
59602
COMMIT WORK;
 
59603
SET @@session.sql_mode = 'traditional';
 
59604
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
59605
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59606
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
59607
'', '', 'was inserted' FROM t0_template
 
59608
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
59609
ERROR 22012: Division by 0
 
59610
COMMIT;
 
59611
        
 
59612
# check transactions-8 success:         1
 
59613
# INFO: Storage engine used for t1 seems to be able to revert
 
59614
#       changes made by the failing statement.
 
59615
SET @@session.sql_mode = '';
 
59616
SET AUTOCOMMIT= 1;
 
59617
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
59618
COMMIT WORK;
 
59619
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
59620
        
 
59621
# check special-1 success:      1
 
59622
UPDATE t1 SET f_charbig = '';
 
59623
        
 
59624
# check special-2 success:      1
 
59625
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
59626
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59627
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
59628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59629
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59630
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59631
'just inserted' FROM t0_template
 
59632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59633
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
59634
BEGIN
 
59635
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59636
f_charbig = 'updated by trigger'
 
59637
      WHERE f_int1 = new.f_int1;
 
59638
END|
 
59639
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59640
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
59641
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59642
        
 
59643
# check trigger-1 success:      1
 
59644
DROP TRIGGER trg_1;
 
59645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59647
f_charbig = 'just inserted'
 
59648
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59649
DELETE FROM t0_aux
 
59650
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59651
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59652
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59653
'just inserted' FROM t0_template
 
59654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59655
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
59656
BEGIN
 
59657
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59658
f_charbig = 'updated by trigger'
 
59659
      WHERE f_int1 = new.f_int1;
 
59660
END|
 
59661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59662
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
59663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59664
        
 
59665
# check trigger-2 success:      1
 
59666
DROP TRIGGER trg_1;
 
59667
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59668
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59669
f_charbig = 'just inserted'
 
59670
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59671
DELETE FROM t0_aux
 
59672
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59673
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59674
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59675
'just inserted' FROM t0_template
 
59676
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59677
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
59678
BEGIN
 
59679
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59680
f_charbig = 'updated by trigger'
 
59681
      WHERE f_int1 = new.f_int1;
 
59682
END|
 
59683
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59684
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59685
        
 
59686
# check trigger-3 success:      1
 
59687
DROP TRIGGER trg_1;
 
59688
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59689
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59690
f_charbig = 'just inserted'
 
59691
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59692
DELETE FROM t0_aux
 
59693
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59694
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59695
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59696
'just inserted' FROM t0_template
 
59697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59698
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
59699
BEGIN
 
59700
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59701
f_charbig = 'updated by trigger'
 
59702
      WHERE f_int1 = - old.f_int1;
 
59703
END|
 
59704
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59705
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59706
        
 
59707
# check trigger-4 success:      1
 
59708
DROP TRIGGER trg_1;
 
59709
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59710
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59711
f_charbig = 'just inserted'
 
59712
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59713
DELETE FROM t0_aux
 
59714
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59715
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59716
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59717
'just inserted' FROM t0_template
 
59718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59719
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
59720
BEGIN
 
59721
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59722
f_charbig = 'updated by trigger'
 
59723
      WHERE f_int1 = new.f_int1;
 
59724
END|
 
59725
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59726
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59727
        
 
59728
# check trigger-5 success:      1
 
59729
DROP TRIGGER trg_1;
 
59730
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59731
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59732
f_charbig = 'just inserted'
 
59733
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59734
DELETE FROM t0_aux
 
59735
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59736
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59737
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59738
'just inserted' FROM t0_template
 
59739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59740
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
59741
BEGIN
 
59742
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59743
f_charbig = 'updated by trigger'
 
59744
      WHERE f_int1 = - old.f_int1;
 
59745
END|
 
59746
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
59747
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59748
        
 
59749
# check trigger-6 success:      1
 
59750
DROP TRIGGER trg_1;
 
59751
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59752
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59753
f_charbig = 'just inserted'
 
59754
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59755
DELETE FROM t0_aux
 
59756
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59757
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59758
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59759
'just inserted' FROM t0_template
 
59760
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59761
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
59762
BEGIN
 
59763
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59764
f_charbig = 'updated by trigger'
 
59765
      WHERE f_int1 = - old.f_int1;
 
59766
END|
 
59767
DELETE FROM t0_aux
 
59768
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59769
        
 
59770
# check trigger-7 success:      1
 
59771
DROP TRIGGER trg_1;
 
59772
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59773
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59774
f_charbig = 'just inserted'
 
59775
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59776
DELETE FROM t0_aux
 
59777
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59779
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
59780
'just inserted' FROM t0_template
 
59781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59782
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
59783
BEGIN
 
59784
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
59785
f_charbig = 'updated by trigger'
 
59786
      WHERE f_int1 = - old.f_int1;
 
59787
END|
 
59788
DELETE FROM t0_aux
 
59789
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
59790
        
 
59791
# check trigger-8 success:      1
 
59792
DROP TRIGGER trg_1;
 
59793
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59794
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59795
f_charbig = 'just inserted'
 
59796
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
59797
DELETE FROM t0_aux
 
59798
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59799
DELETE FROM t1
 
59800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
59801
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
59802
BEGIN
 
59803
SET new.f_int1 = old.f_int1 + @max_row,
 
59804
new.f_int2 = old.f_int2 - @max_row,
 
59805
new.f_charbig = '####updated per update trigger####';
 
59806
END|
 
59807
UPDATE t1
 
59808
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
59809
f_charbig = '####updated per update statement itself####';
 
59810
        
 
59811
# check trigger-9 success:      1
 
59812
DROP TRIGGER trg_2;
 
59813
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59814
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59815
f_charbig = CONCAT('===',f_char1,'===');
 
59816
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
59817
BEGIN
 
59818
SET new.f_int1 = new.f_int1 + @max_row,
 
59819
new.f_int2 = new.f_int2 - @max_row,
 
59820
new.f_charbig = '####updated per update trigger####';
 
59821
END|
 
59822
UPDATE t1
 
59823
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
59824
f_charbig = '####updated per update statement itself####';
 
59825
        
 
59826
# check trigger-10 success:     1
 
59827
DROP TRIGGER trg_2;
 
59828
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
59829
f_int2 = CAST(f_char1 AS SIGNED INT),
 
59830
f_charbig = CONCAT('===',f_char1,'===');
 
59831
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
59832
BEGIN
 
59833
SET new.f_int1 = @my_max1 + @counter,
 
59834
new.f_int2 = @my_min2 - @counter,
 
59835
new.f_charbig = '####updated per insert trigger####';
 
59836
SET @counter = @counter + 1;
 
59837
END|
 
59838
SET @counter = 1;
 
59839
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
59840
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59841
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
59842
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
59843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
59844
ORDER BY f_int1;
 
59845
DROP TRIGGER trg_3;
 
59846
        
 
59847
# check trigger-11 success:     1
 
59848
DELETE FROM t1
 
59849
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
59850
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
59851
AND f_charbig = '####updated per insert trigger####';
 
59852
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
59853
BEGIN
 
59854
SET new.f_int1 = @my_max1 + @counter,
 
59855
new.f_int2 = @my_min2 - @counter,
 
59856
new.f_charbig = '####updated per insert trigger####';
 
59857
SET @counter = @counter + 1;
 
59858
END|
 
59859
SET @counter = 1;
 
59860
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
59861
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
59862
SELECT CAST(f_int1 AS CHAR),
 
59863
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
59864
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
59865
ORDER BY f_int1;
 
59866
DROP TRIGGER trg_3;
 
59867
        
 
59868
# check trigger-12 success:     1
 
59869
DELETE FROM t1
 
59870
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
59871
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
59872
AND f_charbig = '####updated per insert trigger####';
 
59873
ANALYZE  TABLE t1;
 
59874
Table   Op      Msg_type        Msg_text
 
59875
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
59876
CHECK    TABLE t1 EXTENDED;
 
59877
Table   Op      Msg_type        Msg_text
 
59878
test.t1 check   note    The storage engine for the table doesn't support check
 
59879
CHECKSUM TABLE t1 EXTENDED;
 
59880
Table   Checksum
 
59881
test.t1 <some_value>
 
59882
OPTIMIZE TABLE t1;
 
59883
Table   Op      Msg_type        Msg_text
 
59884
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
59885
# check layout success:    1
 
59886
REPAIR   TABLE t1 EXTENDED;
 
59887
Table   Op      Msg_type        Msg_text
 
59888
test.t1 repair  note    The storage engine for the table doesn't support repair
 
59889
# check layout success:    1
 
59890
TRUNCATE t1;
 
59891
        
 
59892
# check TRUNCATE success:       1
 
59893
# check layout success:    1
 
59894
# End usability test (inc/partition_check.inc)
 
59895
DROP TABLE t1;
 
59896
CREATE TABLE t1 (
 
59897
f_int1 INTEGER,
 
59898
f_int2 INTEGER,
 
59899
f_char1 CHAR(20),
 
59900
f_char2 CHAR(20),
 
59901
f_charbig VARCHAR(1000)
 
59902
, PRIMARY KEY(f_int2,f_int1)
 
59903
)
 
59904
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
59905
(PARTITION parta VALUES LESS THAN (0),
 
59906
PARTITION partb VALUES LESS THAN (5),
 
59907
PARTITION partc VALUES LESS THAN (10),
 
59908
PARTITION partd VALUES LESS THAN (10 + 5),
 
59909
PARTITION parte VALUES LESS THAN (20),
 
59910
PARTITION partf VALUES LESS THAN (2147483646));
 
59911
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59912
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
59913
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
59914
ALTER TABLE t1 DROP PRIMARY KEY;
 
59915
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59916
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
59917
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
59918
# Start usability test (inc/partition_check.inc)
 
59919
create_command
 
59920
SHOW CREATE TABLE t1;
 
59921
Table   Create Table
 
59922
t1      CREATE TABLE `t1` (
 
59923
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
59924
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
59925
  `f_char1` char(20) DEFAULT NULL,
 
59926
  `f_char2` char(20) DEFAULT NULL,
 
59927
  `f_charbig` varchar(1000) DEFAULT NULL
 
59928
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
59929
 
 
59930
# check prerequisites-1 success:    1
 
59931
# check COUNT(*) success:    1
 
59932
# check MIN/MAX(f_int1) success:    1
 
59933
# check MIN/MAX(f_int2) success:    1
 
59934
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
59935
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
59936
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
59937
WHERE f_int1 IN (2,3);
 
59938
# check prerequisites-3 success:    1
 
59939
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
59940
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
59941
# check read via f_int1 success: 1
 
59942
# check read via f_int2 success: 1
 
59943
        
 
59944
# check multiple-1 success:     1
 
59945
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
59946
        
 
59947
# check multiple-2 success:     1
 
59948
INSERT INTO t1 SELECT * FROM t0_template
 
59949
WHERE MOD(f_int1,3) = 0;
 
59950
        
 
59951
# check multiple-3 success:     1
 
59952
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
59953
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
59954
AND @max_row_div2 + @max_row_div4;
 
59955
        
 
59956
# check multiple-4 success:     1
 
59957
DELETE FROM t1
 
59958
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
59959
AND @max_row_div2 + @max_row_div4 + @max_row;
 
59960
        
 
59961
# check multiple-5 success:     1
 
59962
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
59963
INSERT INTO t1
 
59964
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
59965
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
59966
f_charbig = '#SINGLE#';
 
59967
        
 
59968
# check single-1 success:       1
 
59969
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
59970
INSERT INTO t1
 
59971
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
59972
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
59973
f_charbig = '#SINGLE#';
 
59974
        
 
59975
# check single-2 success:       1
 
59976
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
59977
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
59978
UPDATE t1 SET f_int1 = @cur_value2
 
59979
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
59980
        
 
59981
# check single-3 success:       1
 
59982
SET @cur_value1= -1;
 
59983
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
59984
UPDATE t1 SET f_int1 = @cur_value1
 
59985
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
59986
        
 
59987
# check single-4 success:       1
 
59988
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
59989
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
59990
        
 
59991
# check single-5 success:       1
 
59992
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
59993
        
 
59994
# check single-6 success:       1
 
59995
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
59996
ERROR HY000: Table has no partition for value 2147483647
 
59997
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
59998
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
59999
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
60000
f_charbig = '#NULL#';
 
60001
INSERT INTO t1
 
60002
SET f_int1 = NULL , f_int2 = -@max_row,
 
60003
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
60004
f_charbig = '#NULL#';
 
60005
ERROR 23000: Column 'f_int1' cannot be null
 
60006
# check null success:    1
 
60007
DELETE FROM t1
 
60008
WHERE f_int1 = 0 AND f_int2 = 0
 
60009
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
60010
AND f_charbig = '#NULL#';
 
60011
SET AUTOCOMMIT= 0;
 
60012
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60013
SELECT f_int1, f_int1, '', '', 'was inserted'
 
60014
FROM t0_template source_tab
 
60015
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60016
        
 
60017
# check transactions-1 success:         1
 
60018
COMMIT WORK;
 
60019
        
 
60020
# check transactions-2 success:         1
 
60021
ROLLBACK WORK;
 
60022
        
 
60023
# check transactions-3 success:         1
 
60024
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60025
COMMIT WORK;
 
60026
ROLLBACK WORK;
 
60027
        
 
60028
# check transactions-4 success:         1
 
60029
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60030
SELECT f_int1, f_int1, '', '', 'was inserted'
 
60031
FROM t0_template source_tab
 
60032
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60033
        
 
60034
# check transactions-5 success:         1
 
60035
ROLLBACK WORK;
 
60036
        
 
60037
# check transactions-6 success:         1
 
60038
# INFO: Storage engine used for t1 seems to be transactional.
 
60039
COMMIT;
 
60040
        
 
60041
# check transactions-7 success:         1
 
60042
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60043
COMMIT WORK;
 
60044
SET @@session.sql_mode = 'traditional';
 
60045
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
60046
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60047
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
60048
'', '', 'was inserted' FROM t0_template
 
60049
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60050
ERROR 22012: Division by 0
 
60051
COMMIT;
 
60052
        
 
60053
# check transactions-8 success:         1
 
60054
# INFO: Storage engine used for t1 seems to be able to revert
 
60055
#       changes made by the failing statement.
 
60056
SET @@session.sql_mode = '';
 
60057
SET AUTOCOMMIT= 1;
 
60058
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60059
COMMIT WORK;
 
60060
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
60061
        
 
60062
# check special-1 success:      1
 
60063
UPDATE t1 SET f_charbig = '';
 
60064
        
 
60065
# check special-2 success:      1
 
60066
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
60067
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60068
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
60069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60072
'just inserted' FROM t0_template
 
60073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60074
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
60075
BEGIN
 
60076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60077
f_charbig = 'updated by trigger'
 
60078
      WHERE f_int1 = new.f_int1;
 
60079
END|
 
60080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60081
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
60082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60083
        
 
60084
# check trigger-1 success:      1
 
60085
DROP TRIGGER trg_1;
 
60086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60088
f_charbig = 'just inserted'
 
60089
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60090
DELETE FROM t0_aux
 
60091
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60094
'just inserted' FROM t0_template
 
60095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60096
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
60097
BEGIN
 
60098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60099
f_charbig = 'updated by trigger'
 
60100
      WHERE f_int1 = new.f_int1;
 
60101
END|
 
60102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60103
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
60104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60105
        
 
60106
# check trigger-2 success:      1
 
60107
DROP TRIGGER trg_1;
 
60108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60110
f_charbig = 'just inserted'
 
60111
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60112
DELETE FROM t0_aux
 
60113
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60116
'just inserted' FROM t0_template
 
60117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60118
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
60119
BEGIN
 
60120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60121
f_charbig = 'updated by trigger'
 
60122
      WHERE f_int1 = new.f_int1;
 
60123
END|
 
60124
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60125
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60126
        
 
60127
# check trigger-3 success:      1
 
60128
DROP TRIGGER trg_1;
 
60129
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60130
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60131
f_charbig = 'just inserted'
 
60132
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60133
DELETE FROM t0_aux
 
60134
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60136
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60137
'just inserted' FROM t0_template
 
60138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60139
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
60140
BEGIN
 
60141
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60142
f_charbig = 'updated by trigger'
 
60143
      WHERE f_int1 = - old.f_int1;
 
60144
END|
 
60145
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60146
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60147
        
 
60148
# check trigger-4 success:      1
 
60149
DROP TRIGGER trg_1;
 
60150
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60151
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60152
f_charbig = 'just inserted'
 
60153
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60154
DELETE FROM t0_aux
 
60155
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60156
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60157
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60158
'just inserted' FROM t0_template
 
60159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60160
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
60161
BEGIN
 
60162
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60163
f_charbig = 'updated by trigger'
 
60164
      WHERE f_int1 = new.f_int1;
 
60165
END|
 
60166
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60167
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60168
        
 
60169
# check trigger-5 success:      1
 
60170
DROP TRIGGER trg_1;
 
60171
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60172
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60173
f_charbig = 'just inserted'
 
60174
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60175
DELETE FROM t0_aux
 
60176
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60178
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60179
'just inserted' FROM t0_template
 
60180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60181
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
60182
BEGIN
 
60183
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60184
f_charbig = 'updated by trigger'
 
60185
      WHERE f_int1 = - old.f_int1;
 
60186
END|
 
60187
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60188
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60189
        
 
60190
# check trigger-6 success:      1
 
60191
DROP TRIGGER trg_1;
 
60192
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60193
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60194
f_charbig = 'just inserted'
 
60195
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60196
DELETE FROM t0_aux
 
60197
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60198
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60199
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60200
'just inserted' FROM t0_template
 
60201
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60202
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
60203
BEGIN
 
60204
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60205
f_charbig = 'updated by trigger'
 
60206
      WHERE f_int1 = - old.f_int1;
 
60207
END|
 
60208
DELETE FROM t0_aux
 
60209
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60210
        
 
60211
# check trigger-7 success:      1
 
60212
DROP TRIGGER trg_1;
 
60213
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60214
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60215
f_charbig = 'just inserted'
 
60216
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60217
DELETE FROM t0_aux
 
60218
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60220
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60221
'just inserted' FROM t0_template
 
60222
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60223
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
60224
BEGIN
 
60225
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60226
f_charbig = 'updated by trigger'
 
60227
      WHERE f_int1 = - old.f_int1;
 
60228
END|
 
60229
DELETE FROM t0_aux
 
60230
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60231
        
 
60232
# check trigger-8 success:      1
 
60233
DROP TRIGGER trg_1;
 
60234
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60235
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60236
f_charbig = 'just inserted'
 
60237
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60238
DELETE FROM t0_aux
 
60239
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60240
DELETE FROM t1
 
60241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60242
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
60243
BEGIN
 
60244
SET new.f_int1 = old.f_int1 + @max_row,
 
60245
new.f_int2 = old.f_int2 - @max_row,
 
60246
new.f_charbig = '####updated per update trigger####';
 
60247
END|
 
60248
UPDATE t1
 
60249
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
60250
f_charbig = '####updated per update statement itself####';
 
60251
        
 
60252
# check trigger-9 success:      1
 
60253
DROP TRIGGER trg_2;
 
60254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60256
f_charbig = CONCAT('===',f_char1,'===');
 
60257
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
60258
BEGIN
 
60259
SET new.f_int1 = new.f_int1 + @max_row,
 
60260
new.f_int2 = new.f_int2 - @max_row,
 
60261
new.f_charbig = '####updated per update trigger####';
 
60262
END|
 
60263
UPDATE t1
 
60264
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
60265
f_charbig = '####updated per update statement itself####';
 
60266
        
 
60267
# check trigger-10 success:     1
 
60268
DROP TRIGGER trg_2;
 
60269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60271
f_charbig = CONCAT('===',f_char1,'===');
 
60272
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
60273
BEGIN
 
60274
SET new.f_int1 = @my_max1 + @counter,
 
60275
new.f_int2 = @my_min2 - @counter,
 
60276
new.f_charbig = '####updated per insert trigger####';
 
60277
SET @counter = @counter + 1;
 
60278
END|
 
60279
SET @counter = 1;
 
60280
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
60281
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60282
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
60283
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
60284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
60285
ORDER BY f_int1;
 
60286
DROP TRIGGER trg_3;
 
60287
        
 
60288
# check trigger-11 success:     1
 
60289
DELETE FROM t1
 
60290
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
60291
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
60292
AND f_charbig = '####updated per insert trigger####';
 
60293
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
60294
BEGIN
 
60295
SET new.f_int1 = @my_max1 + @counter,
 
60296
new.f_int2 = @my_min2 - @counter,
 
60297
new.f_charbig = '####updated per insert trigger####';
 
60298
SET @counter = @counter + 1;
 
60299
END|
 
60300
SET @counter = 1;
 
60301
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
60302
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
60303
SELECT CAST(f_int1 AS CHAR),
 
60304
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
60305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
60306
ORDER BY f_int1;
 
60307
DROP TRIGGER trg_3;
 
60308
        
 
60309
# check trigger-12 success:     1
 
60310
DELETE FROM t1
 
60311
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
60312
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
60313
AND f_charbig = '####updated per insert trigger####';
 
60314
ANALYZE  TABLE t1;
 
60315
Table   Op      Msg_type        Msg_text
 
60316
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
60317
CHECK    TABLE t1 EXTENDED;
 
60318
Table   Op      Msg_type        Msg_text
 
60319
test.t1 check   note    The storage engine for the table doesn't support check
 
60320
CHECKSUM TABLE t1 EXTENDED;
 
60321
Table   Checksum
 
60322
test.t1 <some_value>
 
60323
OPTIMIZE TABLE t1;
 
60324
Table   Op      Msg_type        Msg_text
 
60325
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
60326
# check layout success:    1
 
60327
REPAIR   TABLE t1 EXTENDED;
 
60328
Table   Op      Msg_type        Msg_text
 
60329
test.t1 repair  note    The storage engine for the table doesn't support repair
 
60330
# check layout success:    1
 
60331
TRUNCATE t1;
 
60332
        
 
60333
# check TRUNCATE success:       1
 
60334
# check layout success:    1
 
60335
# End usability test (inc/partition_check.inc)
 
60336
DROP TABLE t1;
 
60337
CREATE TABLE t1 (
 
60338
f_int1 INTEGER,
 
60339
f_int2 INTEGER,
 
60340
f_char1 CHAR(20),
 
60341
f_char2 CHAR(20),
 
60342
f_charbig VARCHAR(1000)
 
60343
, PRIMARY KEY(f_int2,f_int1)
 
60344
)
 
60345
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
60346
(PARTITION parta VALUES LESS THAN (0),
 
60347
PARTITION partb VALUES LESS THAN (5),
 
60348
PARTITION partc VALUES LESS THAN (10),
 
60349
PARTITION partd VALUES LESS THAN (2147483646));
 
60350
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60351
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
60352
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
60353
ALTER TABLE t1 DROP PRIMARY KEY;
 
60354
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60355
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
60356
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
60357
# Start usability test (inc/partition_check.inc)
 
60358
create_command
 
60359
SHOW CREATE TABLE t1;
 
60360
Table   Create Table
 
60361
t1      CREATE TABLE `t1` (
 
60362
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
60363
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
60364
  `f_char1` char(20) DEFAULT NULL,
 
60365
  `f_char2` char(20) DEFAULT NULL,
 
60366
  `f_charbig` varchar(1000) DEFAULT NULL
 
60367
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
60368
 
 
60369
# check prerequisites-1 success:    1
 
60370
# check COUNT(*) success:    1
 
60371
# check MIN/MAX(f_int1) success:    1
 
60372
# check MIN/MAX(f_int2) success:    1
 
60373
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60374
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
60375
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
60376
WHERE f_int1 IN (2,3);
 
60377
# check prerequisites-3 success:    1
 
60378
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
60379
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
60380
# check read via f_int1 success: 1
 
60381
# check read via f_int2 success: 1
 
60382
        
 
60383
# check multiple-1 success:     1
 
60384
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
60385
        
 
60386
# check multiple-2 success:     1
 
60387
INSERT INTO t1 SELECT * FROM t0_template
 
60388
WHERE MOD(f_int1,3) = 0;
 
60389
        
 
60390
# check multiple-3 success:     1
 
60391
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
60392
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
60393
AND @max_row_div2 + @max_row_div4;
 
60394
        
 
60395
# check multiple-4 success:     1
 
60396
DELETE FROM t1
 
60397
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
60398
AND @max_row_div2 + @max_row_div4 + @max_row;
 
60399
        
 
60400
# check multiple-5 success:     1
 
60401
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
60402
INSERT INTO t1
 
60403
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
60404
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
60405
f_charbig = '#SINGLE#';
 
60406
        
 
60407
# check single-1 success:       1
 
60408
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
60409
INSERT INTO t1
 
60410
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
60411
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
60412
f_charbig = '#SINGLE#';
 
60413
        
 
60414
# check single-2 success:       1
 
60415
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
60416
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
60417
UPDATE t1 SET f_int1 = @cur_value2
 
60418
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
60419
        
 
60420
# check single-3 success:       1
 
60421
SET @cur_value1= -1;
 
60422
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
60423
UPDATE t1 SET f_int1 = @cur_value1
 
60424
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
60425
        
 
60426
# check single-4 success:       1
 
60427
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
60428
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
60429
        
 
60430
# check single-5 success:       1
 
60431
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
60432
        
 
60433
# check single-6 success:       1
 
60434
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
60435
ERROR HY000: Table has no partition for value 2147483647
 
60436
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
60437
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
60438
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
60439
f_charbig = '#NULL#';
 
60440
INSERT INTO t1
 
60441
SET f_int1 = NULL , f_int2 = -@max_row,
 
60442
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
60443
f_charbig = '#NULL#';
 
60444
ERROR 23000: Column 'f_int1' cannot be null
 
60445
# check null success:    1
 
60446
DELETE FROM t1
 
60447
WHERE f_int1 = 0 AND f_int2 = 0
 
60448
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
60449
AND f_charbig = '#NULL#';
 
60450
SET AUTOCOMMIT= 0;
 
60451
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60452
SELECT f_int1, f_int1, '', '', 'was inserted'
 
60453
FROM t0_template source_tab
 
60454
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60455
        
 
60456
# check transactions-1 success:         1
 
60457
COMMIT WORK;
 
60458
        
 
60459
# check transactions-2 success:         1
 
60460
ROLLBACK WORK;
 
60461
        
 
60462
# check transactions-3 success:         1
 
60463
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60464
COMMIT WORK;
 
60465
ROLLBACK WORK;
 
60466
        
 
60467
# check transactions-4 success:         1
 
60468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60469
SELECT f_int1, f_int1, '', '', 'was inserted'
 
60470
FROM t0_template source_tab
 
60471
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60472
        
 
60473
# check transactions-5 success:         1
 
60474
ROLLBACK WORK;
 
60475
        
 
60476
# check transactions-6 success:         1
 
60477
# INFO: Storage engine used for t1 seems to be transactional.
 
60478
COMMIT;
 
60479
        
 
60480
# check transactions-7 success:         1
 
60481
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60482
COMMIT WORK;
 
60483
SET @@session.sql_mode = 'traditional';
 
60484
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
60485
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60486
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
60487
'', '', 'was inserted' FROM t0_template
 
60488
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60489
ERROR 22012: Division by 0
 
60490
COMMIT;
 
60491
        
 
60492
# check transactions-8 success:         1
 
60493
# INFO: Storage engine used for t1 seems to be able to revert
 
60494
#       changes made by the failing statement.
 
60495
SET @@session.sql_mode = '';
 
60496
SET AUTOCOMMIT= 1;
 
60497
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60498
COMMIT WORK;
 
60499
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
60500
        
 
60501
# check special-1 success:      1
 
60502
UPDATE t1 SET f_charbig = '';
 
60503
        
 
60504
# check special-2 success:      1
 
60505
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
60506
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60507
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
60508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60510
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60511
'just inserted' FROM t0_template
 
60512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60513
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
60514
BEGIN
 
60515
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60516
f_charbig = 'updated by trigger'
 
60517
      WHERE f_int1 = new.f_int1;
 
60518
END|
 
60519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60520
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
60521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60522
        
 
60523
# check trigger-1 success:      1
 
60524
DROP TRIGGER trg_1;
 
60525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60527
f_charbig = 'just inserted'
 
60528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60529
DELETE FROM t0_aux
 
60530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60533
'just inserted' FROM t0_template
 
60534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60535
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
60536
BEGIN
 
60537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60538
f_charbig = 'updated by trigger'
 
60539
      WHERE f_int1 = new.f_int1;
 
60540
END|
 
60541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60542
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
60543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60544
        
 
60545
# check trigger-2 success:      1
 
60546
DROP TRIGGER trg_1;
 
60547
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60548
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60549
f_charbig = 'just inserted'
 
60550
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60551
DELETE FROM t0_aux
 
60552
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60553
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60554
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60555
'just inserted' FROM t0_template
 
60556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60557
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
60558
BEGIN
 
60559
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60560
f_charbig = 'updated by trigger'
 
60561
      WHERE f_int1 = new.f_int1;
 
60562
END|
 
60563
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60564
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60565
        
 
60566
# check trigger-3 success:      1
 
60567
DROP TRIGGER trg_1;
 
60568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60570
f_charbig = 'just inserted'
 
60571
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60572
DELETE FROM t0_aux
 
60573
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60575
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60576
'just inserted' FROM t0_template
 
60577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60578
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
60579
BEGIN
 
60580
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60581
f_charbig = 'updated by trigger'
 
60582
      WHERE f_int1 = - old.f_int1;
 
60583
END|
 
60584
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60585
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60586
        
 
60587
# check trigger-4 success:      1
 
60588
DROP TRIGGER trg_1;
 
60589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60591
f_charbig = 'just inserted'
 
60592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60593
DELETE FROM t0_aux
 
60594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60596
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60597
'just inserted' FROM t0_template
 
60598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60599
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
60600
BEGIN
 
60601
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60602
f_charbig = 'updated by trigger'
 
60603
      WHERE f_int1 = new.f_int1;
 
60604
END|
 
60605
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60606
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60607
        
 
60608
# check trigger-5 success:      1
 
60609
DROP TRIGGER trg_1;
 
60610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60612
f_charbig = 'just inserted'
 
60613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60614
DELETE FROM t0_aux
 
60615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60618
'just inserted' FROM t0_template
 
60619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60620
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
60621
BEGIN
 
60622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60623
f_charbig = 'updated by trigger'
 
60624
      WHERE f_int1 = - old.f_int1;
 
60625
END|
 
60626
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
60627
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60628
        
 
60629
# check trigger-6 success:      1
 
60630
DROP TRIGGER trg_1;
 
60631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60633
f_charbig = 'just inserted'
 
60634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60635
DELETE FROM t0_aux
 
60636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60639
'just inserted' FROM t0_template
 
60640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60641
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
60642
BEGIN
 
60643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60644
f_charbig = 'updated by trigger'
 
60645
      WHERE f_int1 = - old.f_int1;
 
60646
END|
 
60647
DELETE FROM t0_aux
 
60648
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60649
        
 
60650
# check trigger-7 success:      1
 
60651
DROP TRIGGER trg_1;
 
60652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60654
f_charbig = 'just inserted'
 
60655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60656
DELETE FROM t0_aux
 
60657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60660
'just inserted' FROM t0_template
 
60661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60662
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
60663
BEGIN
 
60664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60665
f_charbig = 'updated by trigger'
 
60666
      WHERE f_int1 = - old.f_int1;
 
60667
END|
 
60668
DELETE FROM t0_aux
 
60669
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
60670
        
 
60671
# check trigger-8 success:      1
 
60672
DROP TRIGGER trg_1;
 
60673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60675
f_charbig = 'just inserted'
 
60676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60677
DELETE FROM t0_aux
 
60678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60679
DELETE FROM t1
 
60680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60681
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
60682
BEGIN
 
60683
SET new.f_int1 = old.f_int1 + @max_row,
 
60684
new.f_int2 = old.f_int2 - @max_row,
 
60685
new.f_charbig = '####updated per update trigger####';
 
60686
END|
 
60687
UPDATE t1
 
60688
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
60689
f_charbig = '####updated per update statement itself####';
 
60690
        
 
60691
# check trigger-9 success:      1
 
60692
DROP TRIGGER trg_2;
 
60693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60695
f_charbig = CONCAT('===',f_char1,'===');
 
60696
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
60697
BEGIN
 
60698
SET new.f_int1 = new.f_int1 + @max_row,
 
60699
new.f_int2 = new.f_int2 - @max_row,
 
60700
new.f_charbig = '####updated per update trigger####';
 
60701
END|
 
60702
UPDATE t1
 
60703
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
60704
f_charbig = '####updated per update statement itself####';
 
60705
        
 
60706
# check trigger-10 success:     1
 
60707
DROP TRIGGER trg_2;
 
60708
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60709
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60710
f_charbig = CONCAT('===',f_char1,'===');
 
60711
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
60712
BEGIN
 
60713
SET new.f_int1 = @my_max1 + @counter,
 
60714
new.f_int2 = @my_min2 - @counter,
 
60715
new.f_charbig = '####updated per insert trigger####';
 
60716
SET @counter = @counter + 1;
 
60717
END|
 
60718
SET @counter = 1;
 
60719
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
60720
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60721
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
60722
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
60723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
60724
ORDER BY f_int1;
 
60725
DROP TRIGGER trg_3;
 
60726
        
 
60727
# check trigger-11 success:     1
 
60728
DELETE FROM t1
 
60729
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
60730
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
60731
AND f_charbig = '####updated per insert trigger####';
 
60732
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
60733
BEGIN
 
60734
SET new.f_int1 = @my_max1 + @counter,
 
60735
new.f_int2 = @my_min2 - @counter,
 
60736
new.f_charbig = '####updated per insert trigger####';
 
60737
SET @counter = @counter + 1;
 
60738
END|
 
60739
SET @counter = 1;
 
60740
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
60741
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
60742
SELECT CAST(f_int1 AS CHAR),
 
60743
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
60744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
60745
ORDER BY f_int1;
 
60746
DROP TRIGGER trg_3;
 
60747
        
 
60748
# check trigger-12 success:     1
 
60749
DELETE FROM t1
 
60750
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
60751
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
60752
AND f_charbig = '####updated per insert trigger####';
 
60753
ANALYZE  TABLE t1;
 
60754
Table   Op      Msg_type        Msg_text
 
60755
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
60756
CHECK    TABLE t1 EXTENDED;
 
60757
Table   Op      Msg_type        Msg_text
 
60758
test.t1 check   note    The storage engine for the table doesn't support check
 
60759
CHECKSUM TABLE t1 EXTENDED;
 
60760
Table   Checksum
 
60761
test.t1 <some_value>
 
60762
OPTIMIZE TABLE t1;
 
60763
Table   Op      Msg_type        Msg_text
 
60764
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
60765
# check layout success:    1
 
60766
REPAIR   TABLE t1 EXTENDED;
 
60767
Table   Op      Msg_type        Msg_text
 
60768
test.t1 repair  note    The storage engine for the table doesn't support repair
 
60769
# check layout success:    1
 
60770
TRUNCATE t1;
 
60771
        
 
60772
# check TRUNCATE success:       1
 
60773
# check layout success:    1
 
60774
# End usability test (inc/partition_check.inc)
 
60775
DROP TABLE t1;
 
60776
CREATE TABLE t1 (
 
60777
f_int1 INTEGER,
 
60778
f_int2 INTEGER,
 
60779
f_char1 CHAR(20),
 
60780
f_char2 CHAR(20),
 
60781
f_charbig VARCHAR(1000)
 
60782
, PRIMARY KEY(f_int2,f_int1)
 
60783
)
 
60784
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
60785
(PARTITION part1 VALUES LESS THAN (0)
 
60786
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
60787
PARTITION part2 VALUES LESS THAN (5)
 
60788
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
60789
PARTITION part3 VALUES LESS THAN (10)
 
60790
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
60791
PARTITION part4 VALUES LESS THAN (2147483646)
 
60792
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
60793
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60794
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
60795
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
60796
ALTER TABLE t1 DROP PRIMARY KEY;
 
60797
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60798
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
60799
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
60800
# Start usability test (inc/partition_check.inc)
 
60801
create_command
 
60802
SHOW CREATE TABLE t1;
 
60803
Table   Create Table
 
60804
t1      CREATE TABLE `t1` (
 
60805
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
60806
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
60807
  `f_char1` char(20) DEFAULT NULL,
 
60808
  `f_char2` char(20) DEFAULT NULL,
 
60809
  `f_charbig` varchar(1000) DEFAULT NULL
 
60810
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
60811
 
 
60812
# check prerequisites-1 success:    1
 
60813
# check COUNT(*) success:    1
 
60814
# check MIN/MAX(f_int1) success:    1
 
60815
# check MIN/MAX(f_int2) success:    1
 
60816
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60817
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
60818
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
60819
WHERE f_int1 IN (2,3);
 
60820
# check prerequisites-3 success:    1
 
60821
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
60822
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
60823
# check read via f_int1 success: 1
 
60824
# check read via f_int2 success: 1
 
60825
        
 
60826
# check multiple-1 success:     1
 
60827
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
60828
        
 
60829
# check multiple-2 success:     1
 
60830
INSERT INTO t1 SELECT * FROM t0_template
 
60831
WHERE MOD(f_int1,3) = 0;
 
60832
        
 
60833
# check multiple-3 success:     1
 
60834
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
60835
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
60836
AND @max_row_div2 + @max_row_div4;
 
60837
        
 
60838
# check multiple-4 success:     1
 
60839
DELETE FROM t1
 
60840
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
60841
AND @max_row_div2 + @max_row_div4 + @max_row;
 
60842
        
 
60843
# check multiple-5 success:     1
 
60844
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
60845
INSERT INTO t1
 
60846
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
60847
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
60848
f_charbig = '#SINGLE#';
 
60849
        
 
60850
# check single-1 success:       1
 
60851
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
60852
INSERT INTO t1
 
60853
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
60854
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
60855
f_charbig = '#SINGLE#';
 
60856
        
 
60857
# check single-2 success:       1
 
60858
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
60859
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
60860
UPDATE t1 SET f_int1 = @cur_value2
 
60861
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
60862
        
 
60863
# check single-3 success:       1
 
60864
SET @cur_value1= -1;
 
60865
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
60866
UPDATE t1 SET f_int1 = @cur_value1
 
60867
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
60868
        
 
60869
# check single-4 success:       1
 
60870
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
60871
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
60872
        
 
60873
# check single-5 success:       1
 
60874
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
60875
        
 
60876
# check single-6 success:       1
 
60877
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
60878
ERROR HY000: Table has no partition for value 2147483647
 
60879
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
60880
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
60881
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
60882
f_charbig = '#NULL#';
 
60883
INSERT INTO t1
 
60884
SET f_int1 = NULL , f_int2 = -@max_row,
 
60885
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
60886
f_charbig = '#NULL#';
 
60887
ERROR 23000: Column 'f_int1' cannot be null
 
60888
# check null success:    1
 
60889
DELETE FROM t1
 
60890
WHERE f_int1 = 0 AND f_int2 = 0
 
60891
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
60892
AND f_charbig = '#NULL#';
 
60893
SET AUTOCOMMIT= 0;
 
60894
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60895
SELECT f_int1, f_int1, '', '', 'was inserted'
 
60896
FROM t0_template source_tab
 
60897
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60898
        
 
60899
# check transactions-1 success:         1
 
60900
COMMIT WORK;
 
60901
        
 
60902
# check transactions-2 success:         1
 
60903
ROLLBACK WORK;
 
60904
        
 
60905
# check transactions-3 success:         1
 
60906
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60907
COMMIT WORK;
 
60908
ROLLBACK WORK;
 
60909
        
 
60910
# check transactions-4 success:         1
 
60911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60912
SELECT f_int1, f_int1, '', '', 'was inserted'
 
60913
FROM t0_template source_tab
 
60914
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60915
        
 
60916
# check transactions-5 success:         1
 
60917
ROLLBACK WORK;
 
60918
        
 
60919
# check transactions-6 success:         1
 
60920
# INFO: Storage engine used for t1 seems to be transactional.
 
60921
COMMIT;
 
60922
        
 
60923
# check transactions-7 success:         1
 
60924
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60925
COMMIT WORK;
 
60926
SET @@session.sql_mode = 'traditional';
 
60927
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
60928
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
60929
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
60930
'', '', 'was inserted' FROM t0_template
 
60931
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
60932
ERROR 22012: Division by 0
 
60933
COMMIT;
 
60934
        
 
60935
# check transactions-8 success:         1
 
60936
# INFO: Storage engine used for t1 seems to be able to revert
 
60937
#       changes made by the failing statement.
 
60938
SET @@session.sql_mode = '';
 
60939
SET AUTOCOMMIT= 1;
 
60940
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
60941
COMMIT WORK;
 
60942
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
60943
        
 
60944
# check special-1 success:      1
 
60945
UPDATE t1 SET f_charbig = '';
 
60946
        
 
60947
# check special-2 success:      1
 
60948
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
60949
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60950
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
60951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60954
'just inserted' FROM t0_template
 
60955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60956
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
60957
BEGIN
 
60958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60959
f_charbig = 'updated by trigger'
 
60960
      WHERE f_int1 = new.f_int1;
 
60961
END|
 
60962
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60963
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
60964
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60965
        
 
60966
# check trigger-1 success:      1
 
60967
DROP TRIGGER trg_1;
 
60968
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60969
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60970
f_charbig = 'just inserted'
 
60971
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60972
DELETE FROM t0_aux
 
60973
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60974
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60975
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60976
'just inserted' FROM t0_template
 
60977
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60978
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
60979
BEGIN
 
60980
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
60981
f_charbig = 'updated by trigger'
 
60982
      WHERE f_int1 = new.f_int1;
 
60983
END|
 
60984
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60985
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
60986
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60987
        
 
60988
# check trigger-2 success:      1
 
60989
DROP TRIGGER trg_1;
 
60990
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
60991
f_int2 = CAST(f_char1 AS SIGNED INT),
 
60992
f_charbig = 'just inserted'
 
60993
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
60994
DELETE FROM t0_aux
 
60995
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
60996
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
60997
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
60998
'just inserted' FROM t0_template
 
60999
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61000
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
61001
BEGIN
 
61002
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61003
f_charbig = 'updated by trigger'
 
61004
      WHERE f_int1 = new.f_int1;
 
61005
END|
 
61006
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61007
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61008
        
 
61009
# check trigger-3 success:      1
 
61010
DROP TRIGGER trg_1;
 
61011
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61012
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61013
f_charbig = 'just inserted'
 
61014
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61015
DELETE FROM t0_aux
 
61016
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61017
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61018
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61019
'just inserted' FROM t0_template
 
61020
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61021
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
61022
BEGIN
 
61023
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61024
f_charbig = 'updated by trigger'
 
61025
      WHERE f_int1 = - old.f_int1;
 
61026
END|
 
61027
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61028
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61029
        
 
61030
# check trigger-4 success:      1
 
61031
DROP TRIGGER trg_1;
 
61032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61034
f_charbig = 'just inserted'
 
61035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61036
DELETE FROM t0_aux
 
61037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61039
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61040
'just inserted' FROM t0_template
 
61041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61042
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
61043
BEGIN
 
61044
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61045
f_charbig = 'updated by trigger'
 
61046
      WHERE f_int1 = new.f_int1;
 
61047
END|
 
61048
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61049
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61050
        
 
61051
# check trigger-5 success:      1
 
61052
DROP TRIGGER trg_1;
 
61053
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61054
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61055
f_charbig = 'just inserted'
 
61056
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61057
DELETE FROM t0_aux
 
61058
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61059
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61060
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61061
'just inserted' FROM t0_template
 
61062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61063
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
61064
BEGIN
 
61065
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61066
f_charbig = 'updated by trigger'
 
61067
      WHERE f_int1 = - old.f_int1;
 
61068
END|
 
61069
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61070
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61071
        
 
61072
# check trigger-6 success:      1
 
61073
DROP TRIGGER trg_1;
 
61074
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61075
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61076
f_charbig = 'just inserted'
 
61077
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61078
DELETE FROM t0_aux
 
61079
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61081
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61082
'just inserted' FROM t0_template
 
61083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61084
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
61085
BEGIN
 
61086
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61087
f_charbig = 'updated by trigger'
 
61088
      WHERE f_int1 = - old.f_int1;
 
61089
END|
 
61090
DELETE FROM t0_aux
 
61091
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61092
        
 
61093
# check trigger-7 success:      1
 
61094
DROP TRIGGER trg_1;
 
61095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61097
f_charbig = 'just inserted'
 
61098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61099
DELETE FROM t0_aux
 
61100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61102
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61103
'just inserted' FROM t0_template
 
61104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61105
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
61106
BEGIN
 
61107
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61108
f_charbig = 'updated by trigger'
 
61109
      WHERE f_int1 = - old.f_int1;
 
61110
END|
 
61111
DELETE FROM t0_aux
 
61112
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61113
        
 
61114
# check trigger-8 success:      1
 
61115
DROP TRIGGER trg_1;
 
61116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61118
f_charbig = 'just inserted'
 
61119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61120
DELETE FROM t0_aux
 
61121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61122
DELETE FROM t1
 
61123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61124
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
61125
BEGIN
 
61126
SET new.f_int1 = old.f_int1 + @max_row,
 
61127
new.f_int2 = old.f_int2 - @max_row,
 
61128
new.f_charbig = '####updated per update trigger####';
 
61129
END|
 
61130
UPDATE t1
 
61131
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
61132
f_charbig = '####updated per update statement itself####';
 
61133
        
 
61134
# check trigger-9 success:      1
 
61135
DROP TRIGGER trg_2;
 
61136
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61137
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61138
f_charbig = CONCAT('===',f_char1,'===');
 
61139
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
61140
BEGIN
 
61141
SET new.f_int1 = new.f_int1 + @max_row,
 
61142
new.f_int2 = new.f_int2 - @max_row,
 
61143
new.f_charbig = '####updated per update trigger####';
 
61144
END|
 
61145
UPDATE t1
 
61146
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
61147
f_charbig = '####updated per update statement itself####';
 
61148
        
 
61149
# check trigger-10 success:     1
 
61150
DROP TRIGGER trg_2;
 
61151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61153
f_charbig = CONCAT('===',f_char1,'===');
 
61154
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
61155
BEGIN
 
61156
SET new.f_int1 = @my_max1 + @counter,
 
61157
new.f_int2 = @my_min2 - @counter,
 
61158
new.f_charbig = '####updated per insert trigger####';
 
61159
SET @counter = @counter + 1;
 
61160
END|
 
61161
SET @counter = 1;
 
61162
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
61163
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61164
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
61165
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
61166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
61167
ORDER BY f_int1;
 
61168
DROP TRIGGER trg_3;
 
61169
        
 
61170
# check trigger-11 success:     1
 
61171
DELETE FROM t1
 
61172
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
61173
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
61174
AND f_charbig = '####updated per insert trigger####';
 
61175
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
61176
BEGIN
 
61177
SET new.f_int1 = @my_max1 + @counter,
 
61178
new.f_int2 = @my_min2 - @counter,
 
61179
new.f_charbig = '####updated per insert trigger####';
 
61180
SET @counter = @counter + 1;
 
61181
END|
 
61182
SET @counter = 1;
 
61183
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
61184
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
61185
SELECT CAST(f_int1 AS CHAR),
 
61186
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
61187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
61188
ORDER BY f_int1;
 
61189
DROP TRIGGER trg_3;
 
61190
        
 
61191
# check trigger-12 success:     1
 
61192
DELETE FROM t1
 
61193
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
61194
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
61195
AND f_charbig = '####updated per insert trigger####';
 
61196
ANALYZE  TABLE t1;
 
61197
Table   Op      Msg_type        Msg_text
 
61198
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
61199
CHECK    TABLE t1 EXTENDED;
 
61200
Table   Op      Msg_type        Msg_text
 
61201
test.t1 check   note    The storage engine for the table doesn't support check
 
61202
CHECKSUM TABLE t1 EXTENDED;
 
61203
Table   Checksum
 
61204
test.t1 <some_value>
 
61205
OPTIMIZE TABLE t1;
 
61206
Table   Op      Msg_type        Msg_text
 
61207
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
61208
# check layout success:    1
 
61209
REPAIR   TABLE t1 EXTENDED;
 
61210
Table   Op      Msg_type        Msg_text
 
61211
test.t1 repair  note    The storage engine for the table doesn't support repair
 
61212
# check layout success:    1
 
61213
TRUNCATE t1;
 
61214
        
 
61215
# check TRUNCATE success:       1
 
61216
# check layout success:    1
 
61217
# End usability test (inc/partition_check.inc)
 
61218
DROP TABLE t1;
 
61219
CREATE TABLE t1 (
 
61220
f_int1 INTEGER,
 
61221
f_int2 INTEGER,
 
61222
f_char1 CHAR(20),
 
61223
f_char2 CHAR(20),
 
61224
f_charbig VARCHAR(1000)
 
61225
, PRIMARY KEY(f_int2,f_int1)
 
61226
)
 
61227
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
61228
(PARTITION part1 VALUES IN (0)
 
61229
(SUBPARTITION sp11, SUBPARTITION sp12),
 
61230
PARTITION part2 VALUES IN (1)
 
61231
(SUBPARTITION sp21, SUBPARTITION sp22),
 
61232
PARTITION part3 VALUES IN (2)
 
61233
(SUBPARTITION sp31, SUBPARTITION sp32),
 
61234
PARTITION part4 VALUES IN (NULL)
 
61235
(SUBPARTITION sp41, SUBPARTITION sp42));
 
61236
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61237
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
61238
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
61239
ALTER TABLE t1 DROP PRIMARY KEY;
 
61240
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61241
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
61242
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
61243
# Start usability test (inc/partition_check.inc)
 
61244
create_command
 
61245
SHOW CREATE TABLE t1;
 
61246
Table   Create Table
 
61247
t1      CREATE TABLE `t1` (
 
61248
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
61249
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
61250
  `f_char1` char(20) DEFAULT NULL,
 
61251
  `f_char2` char(20) DEFAULT NULL,
 
61252
  `f_charbig` varchar(1000) DEFAULT NULL
 
61253
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
61254
 
 
61255
# check prerequisites-1 success:    1
 
61256
# check COUNT(*) success:    1
 
61257
# check MIN/MAX(f_int1) success:    1
 
61258
# check MIN/MAX(f_int2) success:    1
 
61259
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61260
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
61261
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
61262
WHERE f_int1 IN (2,3);
 
61263
# check prerequisites-3 success:    1
 
61264
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
61265
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
61266
# check read via f_int1 success: 1
 
61267
# check read via f_int2 success: 1
 
61268
        
 
61269
# check multiple-1 success:     1
 
61270
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
61271
        
 
61272
# check multiple-2 success:     1
 
61273
INSERT INTO t1 SELECT * FROM t0_template
 
61274
WHERE MOD(f_int1,3) = 0;
 
61275
        
 
61276
# check multiple-3 success:     1
 
61277
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
61278
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
61279
AND @max_row_div2 + @max_row_div4;
 
61280
        
 
61281
# check multiple-4 success:     1
 
61282
DELETE FROM t1
 
61283
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
61284
AND @max_row_div2 + @max_row_div4 + @max_row;
 
61285
        
 
61286
# check multiple-5 success:     1
 
61287
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
61288
INSERT INTO t1
 
61289
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
61290
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
61291
f_charbig = '#SINGLE#';
 
61292
        
 
61293
# check single-1 success:       1
 
61294
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
61295
INSERT INTO t1
 
61296
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
61297
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
61298
f_charbig = '#SINGLE#';
 
61299
        
 
61300
# check single-2 success:       1
 
61301
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
61302
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
61303
UPDATE t1 SET f_int1 = @cur_value2
 
61304
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
61305
        
 
61306
# check single-3 success:       1
 
61307
SET @cur_value1= -1;
 
61308
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
61309
UPDATE t1 SET f_int1 = @cur_value1
 
61310
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
61311
        
 
61312
# check single-4 success:       1
 
61313
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
61314
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
61315
        
 
61316
# check single-5 success:       1
 
61317
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
61318
        
 
61319
# check single-6 success:       1
 
61320
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
61321
        
 
61322
# check single-7 success:       1
 
61323
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
61324
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
61325
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
61326
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
61327
f_charbig = '#NULL#';
 
61328
INSERT INTO t1
 
61329
SET f_int1 = NULL , f_int2 = -@max_row,
 
61330
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
61331
f_charbig = '#NULL#';
 
61332
ERROR 23000: Column 'f_int1' cannot be null
 
61333
# check null success:    1
 
61334
DELETE FROM t1
 
61335
WHERE f_int1 = 0 AND f_int2 = 0
 
61336
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
61337
AND f_charbig = '#NULL#';
 
61338
SET AUTOCOMMIT= 0;
 
61339
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61340
SELECT f_int1, f_int1, '', '', 'was inserted'
 
61341
FROM t0_template source_tab
 
61342
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
61343
        
 
61344
# check transactions-1 success:         1
 
61345
COMMIT WORK;
 
61346
        
 
61347
# check transactions-2 success:         1
 
61348
ROLLBACK WORK;
 
61349
        
 
61350
# check transactions-3 success:         1
 
61351
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
61352
COMMIT WORK;
 
61353
ROLLBACK WORK;
 
61354
        
 
61355
# check transactions-4 success:         1
 
61356
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61357
SELECT f_int1, f_int1, '', '', 'was inserted'
 
61358
FROM t0_template source_tab
 
61359
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
61360
        
 
61361
# check transactions-5 success:         1
 
61362
ROLLBACK WORK;
 
61363
        
 
61364
# check transactions-6 success:         1
 
61365
# INFO: Storage engine used for t1 seems to be transactional.
 
61366
COMMIT;
 
61367
        
 
61368
# check transactions-7 success:         1
 
61369
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
61370
COMMIT WORK;
 
61371
SET @@session.sql_mode = 'traditional';
 
61372
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
61373
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61374
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
61375
'', '', 'was inserted' FROM t0_template
 
61376
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
61377
ERROR 22012: Division by 0
 
61378
COMMIT;
 
61379
        
 
61380
# check transactions-8 success:         1
 
61381
# INFO: Storage engine used for t1 seems to be able to revert
 
61382
#       changes made by the failing statement.
 
61383
SET @@session.sql_mode = '';
 
61384
SET AUTOCOMMIT= 1;
 
61385
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
61386
COMMIT WORK;
 
61387
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
61388
        
 
61389
# check special-1 success:      1
 
61390
UPDATE t1 SET f_charbig = '';
 
61391
        
 
61392
# check special-2 success:      1
 
61393
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
61394
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61395
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
61396
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61397
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61398
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61399
'just inserted' FROM t0_template
 
61400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61401
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
61402
BEGIN
 
61403
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61404
f_charbig = 'updated by trigger'
 
61405
      WHERE f_int1 = new.f_int1;
 
61406
END|
 
61407
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61408
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
61409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61410
        
 
61411
# check trigger-1 success:      1
 
61412
DROP TRIGGER trg_1;
 
61413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61415
f_charbig = 'just inserted'
 
61416
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61417
DELETE FROM t0_aux
 
61418
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61419
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61420
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61421
'just inserted' FROM t0_template
 
61422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61423
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
61424
BEGIN
 
61425
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61426
f_charbig = 'updated by trigger'
 
61427
      WHERE f_int1 = new.f_int1;
 
61428
END|
 
61429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61430
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
61431
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61432
        
 
61433
# check trigger-2 success:      1
 
61434
DROP TRIGGER trg_1;
 
61435
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61436
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61437
f_charbig = 'just inserted'
 
61438
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61439
DELETE FROM t0_aux
 
61440
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61441
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61442
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61443
'just inserted' FROM t0_template
 
61444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61445
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
61446
BEGIN
 
61447
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61448
f_charbig = 'updated by trigger'
 
61449
      WHERE f_int1 = new.f_int1;
 
61450
END|
 
61451
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61452
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61453
        
 
61454
# check trigger-3 success:      1
 
61455
DROP TRIGGER trg_1;
 
61456
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61457
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61458
f_charbig = 'just inserted'
 
61459
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61460
DELETE FROM t0_aux
 
61461
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61462
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61463
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61464
'just inserted' FROM t0_template
 
61465
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61466
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
61467
BEGIN
 
61468
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61469
f_charbig = 'updated by trigger'
 
61470
      WHERE f_int1 = - old.f_int1;
 
61471
END|
 
61472
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61473
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61474
        
 
61475
# check trigger-4 success:      1
 
61476
DROP TRIGGER trg_1;
 
61477
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61478
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61479
f_charbig = 'just inserted'
 
61480
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61481
DELETE FROM t0_aux
 
61482
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61483
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61484
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61485
'just inserted' FROM t0_template
 
61486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61487
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
61488
BEGIN
 
61489
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61490
f_charbig = 'updated by trigger'
 
61491
      WHERE f_int1 = new.f_int1;
 
61492
END|
 
61493
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61494
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61495
        
 
61496
# check trigger-5 success:      1
 
61497
DROP TRIGGER trg_1;
 
61498
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61499
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61500
f_charbig = 'just inserted'
 
61501
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61502
DELETE FROM t0_aux
 
61503
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61504
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61505
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61506
'just inserted' FROM t0_template
 
61507
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61508
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
61509
BEGIN
 
61510
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61511
f_charbig = 'updated by trigger'
 
61512
      WHERE f_int1 = - old.f_int1;
 
61513
END|
 
61514
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61515
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61516
        
 
61517
# check trigger-6 success:      1
 
61518
DROP TRIGGER trg_1;
 
61519
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61520
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61521
f_charbig = 'just inserted'
 
61522
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61523
DELETE FROM t0_aux
 
61524
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61525
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61526
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61527
'just inserted' FROM t0_template
 
61528
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61529
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
61530
BEGIN
 
61531
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61532
f_charbig = 'updated by trigger'
 
61533
      WHERE f_int1 = - old.f_int1;
 
61534
END|
 
61535
DELETE FROM t0_aux
 
61536
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61537
        
 
61538
# check trigger-7 success:      1
 
61539
DROP TRIGGER trg_1;
 
61540
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61541
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61542
f_charbig = 'just inserted'
 
61543
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61544
DELETE FROM t0_aux
 
61545
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61546
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61547
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61548
'just inserted' FROM t0_template
 
61549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61550
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
61551
BEGIN
 
61552
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61553
f_charbig = 'updated by trigger'
 
61554
      WHERE f_int1 = - old.f_int1;
 
61555
END|
 
61556
DELETE FROM t0_aux
 
61557
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61558
        
 
61559
# check trigger-8 success:      1
 
61560
DROP TRIGGER trg_1;
 
61561
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61562
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61563
f_charbig = 'just inserted'
 
61564
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61565
DELETE FROM t0_aux
 
61566
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61567
DELETE FROM t1
 
61568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61569
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
61570
BEGIN
 
61571
SET new.f_int1 = old.f_int1 + @max_row,
 
61572
new.f_int2 = old.f_int2 - @max_row,
 
61573
new.f_charbig = '####updated per update trigger####';
 
61574
END|
 
61575
UPDATE t1
 
61576
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
61577
f_charbig = '####updated per update statement itself####';
 
61578
        
 
61579
# check trigger-9 success:      1
 
61580
DROP TRIGGER trg_2;
 
61581
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61582
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61583
f_charbig = CONCAT('===',f_char1,'===');
 
61584
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
61585
BEGIN
 
61586
SET new.f_int1 = new.f_int1 + @max_row,
 
61587
new.f_int2 = new.f_int2 - @max_row,
 
61588
new.f_charbig = '####updated per update trigger####';
 
61589
END|
 
61590
UPDATE t1
 
61591
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
61592
f_charbig = '####updated per update statement itself####';
 
61593
        
 
61594
# check trigger-10 success:     1
 
61595
DROP TRIGGER trg_2;
 
61596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61598
f_charbig = CONCAT('===',f_char1,'===');
 
61599
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
61600
BEGIN
 
61601
SET new.f_int1 = @my_max1 + @counter,
 
61602
new.f_int2 = @my_min2 - @counter,
 
61603
new.f_charbig = '####updated per insert trigger####';
 
61604
SET @counter = @counter + 1;
 
61605
END|
 
61606
SET @counter = 1;
 
61607
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
61608
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61609
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
61610
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
61611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
61612
ORDER BY f_int1;
 
61613
DROP TRIGGER trg_3;
 
61614
        
 
61615
# check trigger-11 success:     1
 
61616
DELETE FROM t1
 
61617
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
61618
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
61619
AND f_charbig = '####updated per insert trigger####';
 
61620
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
61621
BEGIN
 
61622
SET new.f_int1 = @my_max1 + @counter,
 
61623
new.f_int2 = @my_min2 - @counter,
 
61624
new.f_charbig = '####updated per insert trigger####';
 
61625
SET @counter = @counter + 1;
 
61626
END|
 
61627
SET @counter = 1;
 
61628
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
61629
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
61630
SELECT CAST(f_int1 AS CHAR),
 
61631
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
61632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
61633
ORDER BY f_int1;
 
61634
DROP TRIGGER trg_3;
 
61635
        
 
61636
# check trigger-12 success:     1
 
61637
DELETE FROM t1
 
61638
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
61639
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
61640
AND f_charbig = '####updated per insert trigger####';
 
61641
ANALYZE  TABLE t1;
 
61642
Table   Op      Msg_type        Msg_text
 
61643
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
61644
CHECK    TABLE t1 EXTENDED;
 
61645
Table   Op      Msg_type        Msg_text
 
61646
test.t1 check   note    The storage engine for the table doesn't support check
 
61647
CHECKSUM TABLE t1 EXTENDED;
 
61648
Table   Checksum
 
61649
test.t1 <some_value>
 
61650
OPTIMIZE TABLE t1;
 
61651
Table   Op      Msg_type        Msg_text
 
61652
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
61653
# check layout success:    1
 
61654
REPAIR   TABLE t1 EXTENDED;
 
61655
Table   Op      Msg_type        Msg_text
 
61656
test.t1 repair  note    The storage engine for the table doesn't support repair
 
61657
# check layout success:    1
 
61658
TRUNCATE t1;
 
61659
        
 
61660
# check TRUNCATE success:       1
 
61661
# check layout success:    1
 
61662
# End usability test (inc/partition_check.inc)
 
61663
DROP TABLE t1;
 
61664
CREATE TABLE t1 (
 
61665
f_int1 INTEGER,
 
61666
f_int2 INTEGER,
 
61667
f_char1 CHAR(20),
 
61668
f_char2 CHAR(20),
 
61669
f_charbig VARCHAR(1000)
 
61670
, PRIMARY KEY(f_int2,f_int1)
 
61671
)
 
61672
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
61673
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
61674
(PARTITION part1 VALUES IN (0),
 
61675
 PARTITION part2 VALUES IN (1),
 
61676
 PARTITION part3 VALUES IN (NULL));
 
61677
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61678
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
61679
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
61680
ALTER TABLE t1 DROP PRIMARY KEY;
 
61681
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61682
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
61683
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
61684
# Start usability test (inc/partition_check.inc)
 
61685
create_command
 
61686
SHOW CREATE TABLE t1;
 
61687
Table   Create Table
 
61688
t1      CREATE TABLE `t1` (
 
61689
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
61690
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
61691
  `f_char1` char(20) DEFAULT NULL,
 
61692
  `f_char2` char(20) DEFAULT NULL,
 
61693
  `f_charbig` varchar(1000) DEFAULT NULL
 
61694
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
61695
 
 
61696
# check prerequisites-1 success:    1
 
61697
# check COUNT(*) success:    1
 
61698
# check MIN/MAX(f_int1) success:    1
 
61699
# check MIN/MAX(f_int2) success:    1
 
61700
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61701
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
61702
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
61703
WHERE f_int1 IN (2,3);
 
61704
# check prerequisites-3 success:    1
 
61705
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
61706
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
61707
# check read via f_int1 success: 1
 
61708
# check read via f_int2 success: 1
 
61709
        
 
61710
# check multiple-1 success:     1
 
61711
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
61712
        
 
61713
# check multiple-2 success:     1
 
61714
INSERT INTO t1 SELECT * FROM t0_template
 
61715
WHERE MOD(f_int1,3) = 0;
 
61716
        
 
61717
# check multiple-3 success:     1
 
61718
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
61719
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
61720
AND @max_row_div2 + @max_row_div4;
 
61721
        
 
61722
# check multiple-4 success:     1
 
61723
DELETE FROM t1
 
61724
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
61725
AND @max_row_div2 + @max_row_div4 + @max_row;
 
61726
        
 
61727
# check multiple-5 success:     1
 
61728
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
61729
INSERT INTO t1
 
61730
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
61731
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
61732
f_charbig = '#SINGLE#';
 
61733
        
 
61734
# check single-1 success:       1
 
61735
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
61736
INSERT INTO t1
 
61737
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
61738
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
61739
f_charbig = '#SINGLE#';
 
61740
        
 
61741
# check single-2 success:       1
 
61742
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
61743
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
61744
UPDATE t1 SET f_int1 = @cur_value2
 
61745
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
61746
        
 
61747
# check single-3 success:       1
 
61748
SET @cur_value1= -1;
 
61749
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
61750
UPDATE t1 SET f_int1 = @cur_value1
 
61751
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
61752
        
 
61753
# check single-4 success:       1
 
61754
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
61755
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
61756
        
 
61757
# check single-5 success:       1
 
61758
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
61759
        
 
61760
# check single-6 success:       1
 
61761
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
61762
        
 
61763
# check single-7 success:       1
 
61764
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
61765
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
61766
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
61767
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
61768
f_charbig = '#NULL#';
 
61769
INSERT INTO t1
 
61770
SET f_int1 = NULL , f_int2 = -@max_row,
 
61771
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
61772
f_charbig = '#NULL#';
 
61773
ERROR 23000: Column 'f_int1' cannot be null
 
61774
# check null success:    1
 
61775
DELETE FROM t1
 
61776
WHERE f_int1 = 0 AND f_int2 = 0
 
61777
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
61778
AND f_charbig = '#NULL#';
 
61779
SET AUTOCOMMIT= 0;
 
61780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61781
SELECT f_int1, f_int1, '', '', 'was inserted'
 
61782
FROM t0_template source_tab
 
61783
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
61784
        
 
61785
# check transactions-1 success:         1
 
61786
COMMIT WORK;
 
61787
        
 
61788
# check transactions-2 success:         1
 
61789
ROLLBACK WORK;
 
61790
        
 
61791
# check transactions-3 success:         1
 
61792
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
61793
COMMIT WORK;
 
61794
ROLLBACK WORK;
 
61795
        
 
61796
# check transactions-4 success:         1
 
61797
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61798
SELECT f_int1, f_int1, '', '', 'was inserted'
 
61799
FROM t0_template source_tab
 
61800
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
61801
        
 
61802
# check transactions-5 success:         1
 
61803
ROLLBACK WORK;
 
61804
        
 
61805
# check transactions-6 success:         1
 
61806
# INFO: Storage engine used for t1 seems to be transactional.
 
61807
COMMIT;
 
61808
        
 
61809
# check transactions-7 success:         1
 
61810
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
61811
COMMIT WORK;
 
61812
SET @@session.sql_mode = 'traditional';
 
61813
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
61814
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
61815
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
61816
'', '', 'was inserted' FROM t0_template
 
61817
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
61818
ERROR 22012: Division by 0
 
61819
COMMIT;
 
61820
        
 
61821
# check transactions-8 success:         1
 
61822
# INFO: Storage engine used for t1 seems to be able to revert
 
61823
#       changes made by the failing statement.
 
61824
SET @@session.sql_mode = '';
 
61825
SET AUTOCOMMIT= 1;
 
61826
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
61827
COMMIT WORK;
 
61828
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
61829
        
 
61830
# check special-1 success:      1
 
61831
UPDATE t1 SET f_charbig = '';
 
61832
        
 
61833
# check special-2 success:      1
 
61834
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
61835
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61836
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
61837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61838
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61839
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61840
'just inserted' FROM t0_template
 
61841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61842
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
61843
BEGIN
 
61844
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61845
f_charbig = 'updated by trigger'
 
61846
      WHERE f_int1 = new.f_int1;
 
61847
END|
 
61848
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61849
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
61850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61851
        
 
61852
# check trigger-1 success:      1
 
61853
DROP TRIGGER trg_1;
 
61854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61856
f_charbig = 'just inserted'
 
61857
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61858
DELETE FROM t0_aux
 
61859
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61860
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61861
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61862
'just inserted' FROM t0_template
 
61863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61864
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
61865
BEGIN
 
61866
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61867
f_charbig = 'updated by trigger'
 
61868
      WHERE f_int1 = new.f_int1;
 
61869
END|
 
61870
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61871
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
61872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61873
        
 
61874
# check trigger-2 success:      1
 
61875
DROP TRIGGER trg_1;
 
61876
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61877
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61878
f_charbig = 'just inserted'
 
61879
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61880
DELETE FROM t0_aux
 
61881
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61882
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61883
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61884
'just inserted' FROM t0_template
 
61885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61886
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
61887
BEGIN
 
61888
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61889
f_charbig = 'updated by trigger'
 
61890
      WHERE f_int1 = new.f_int1;
 
61891
END|
 
61892
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61893
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61894
        
 
61895
# check trigger-3 success:      1
 
61896
DROP TRIGGER trg_1;
 
61897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61899
f_charbig = 'just inserted'
 
61900
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61901
DELETE FROM t0_aux
 
61902
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61904
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61905
'just inserted' FROM t0_template
 
61906
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61907
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
61908
BEGIN
 
61909
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61910
f_charbig = 'updated by trigger'
 
61911
      WHERE f_int1 = - old.f_int1;
 
61912
END|
 
61913
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61914
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61915
        
 
61916
# check trigger-4 success:      1
 
61917
DROP TRIGGER trg_1;
 
61918
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61919
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61920
f_charbig = 'just inserted'
 
61921
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61922
DELETE FROM t0_aux
 
61923
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61924
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61925
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61926
'just inserted' FROM t0_template
 
61927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61928
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
61929
BEGIN
 
61930
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61931
f_charbig = 'updated by trigger'
 
61932
      WHERE f_int1 = new.f_int1;
 
61933
END|
 
61934
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61935
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61936
        
 
61937
# check trigger-5 success:      1
 
61938
DROP TRIGGER trg_1;
 
61939
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61940
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61941
f_charbig = 'just inserted'
 
61942
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61943
DELETE FROM t0_aux
 
61944
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61946
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61947
'just inserted' FROM t0_template
 
61948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61949
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
61950
BEGIN
 
61951
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61952
f_charbig = 'updated by trigger'
 
61953
      WHERE f_int1 = - old.f_int1;
 
61954
END|
 
61955
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
61956
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61957
        
 
61958
# check trigger-6 success:      1
 
61959
DROP TRIGGER trg_1;
 
61960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61962
f_charbig = 'just inserted'
 
61963
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61964
DELETE FROM t0_aux
 
61965
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61966
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61967
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61968
'just inserted' FROM t0_template
 
61969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61970
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
61971
BEGIN
 
61972
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61973
f_charbig = 'updated by trigger'
 
61974
      WHERE f_int1 = - old.f_int1;
 
61975
END|
 
61976
DELETE FROM t0_aux
 
61977
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61978
        
 
61979
# check trigger-7 success:      1
 
61980
DROP TRIGGER trg_1;
 
61981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
61982
f_int2 = CAST(f_char1 AS SIGNED INT),
 
61983
f_charbig = 'just inserted'
 
61984
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
61985
DELETE FROM t0_aux
 
61986
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61987
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
61988
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
61989
'just inserted' FROM t0_template
 
61990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
61991
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
61992
BEGIN
 
61993
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
61994
f_charbig = 'updated by trigger'
 
61995
      WHERE f_int1 = - old.f_int1;
 
61996
END|
 
61997
DELETE FROM t0_aux
 
61998
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
61999
        
 
62000
# check trigger-8 success:      1
 
62001
DROP TRIGGER trg_1;
 
62002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62003
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62004
f_charbig = 'just inserted'
 
62005
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62006
DELETE FROM t0_aux
 
62007
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62008
DELETE FROM t1
 
62009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62010
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
62011
BEGIN
 
62012
SET new.f_int1 = old.f_int1 + @max_row,
 
62013
new.f_int2 = old.f_int2 - @max_row,
 
62014
new.f_charbig = '####updated per update trigger####';
 
62015
END|
 
62016
UPDATE t1
 
62017
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
62018
f_charbig = '####updated per update statement itself####';
 
62019
        
 
62020
# check trigger-9 success:      1
 
62021
DROP TRIGGER trg_2;
 
62022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62024
f_charbig = CONCAT('===',f_char1,'===');
 
62025
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
62026
BEGIN
 
62027
SET new.f_int1 = new.f_int1 + @max_row,
 
62028
new.f_int2 = new.f_int2 - @max_row,
 
62029
new.f_charbig = '####updated per update trigger####';
 
62030
END|
 
62031
UPDATE t1
 
62032
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
62033
f_charbig = '####updated per update statement itself####';
 
62034
        
 
62035
# check trigger-10 success:     1
 
62036
DROP TRIGGER trg_2;
 
62037
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62038
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62039
f_charbig = CONCAT('===',f_char1,'===');
 
62040
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
62041
BEGIN
 
62042
SET new.f_int1 = @my_max1 + @counter,
 
62043
new.f_int2 = @my_min2 - @counter,
 
62044
new.f_charbig = '####updated per insert trigger####';
 
62045
SET @counter = @counter + 1;
 
62046
END|
 
62047
SET @counter = 1;
 
62048
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
62049
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62050
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
62051
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
62052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
62053
ORDER BY f_int1;
 
62054
DROP TRIGGER trg_3;
 
62055
        
 
62056
# check trigger-11 success:     1
 
62057
DELETE FROM t1
 
62058
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
62059
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
62060
AND f_charbig = '####updated per insert trigger####';
 
62061
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
62062
BEGIN
 
62063
SET new.f_int1 = @my_max1 + @counter,
 
62064
new.f_int2 = @my_min2 - @counter,
 
62065
new.f_charbig = '####updated per insert trigger####';
 
62066
SET @counter = @counter + 1;
 
62067
END|
 
62068
SET @counter = 1;
 
62069
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
62070
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
62071
SELECT CAST(f_int1 AS CHAR),
 
62072
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
62073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
62074
ORDER BY f_int1;
 
62075
DROP TRIGGER trg_3;
 
62076
        
 
62077
# check trigger-12 success:     1
 
62078
DELETE FROM t1
 
62079
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
62080
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
62081
AND f_charbig = '####updated per insert trigger####';
 
62082
ANALYZE  TABLE t1;
 
62083
Table   Op      Msg_type        Msg_text
 
62084
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
62085
CHECK    TABLE t1 EXTENDED;
 
62086
Table   Op      Msg_type        Msg_text
 
62087
test.t1 check   note    The storage engine for the table doesn't support check
 
62088
CHECKSUM TABLE t1 EXTENDED;
 
62089
Table   Checksum
 
62090
test.t1 <some_value>
 
62091
OPTIMIZE TABLE t1;
 
62092
Table   Op      Msg_type        Msg_text
 
62093
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
62094
# check layout success:    1
 
62095
REPAIR   TABLE t1 EXTENDED;
 
62096
Table   Op      Msg_type        Msg_text
 
62097
test.t1 repair  note    The storage engine for the table doesn't support repair
 
62098
# check layout success:    1
 
62099
TRUNCATE t1;
 
62100
        
 
62101
# check TRUNCATE success:       1
 
62102
# check layout success:    1
 
62103
# End usability test (inc/partition_check.inc)
 
62104
DROP TABLE t1;
 
62105
#  2.2.2 DROP UNIQUE INDEX consisting of two columns
 
62106
DROP TABLE IF EXISTS t1;
 
62107
CREATE TABLE t1 (
 
62108
f_int1 INTEGER,
 
62109
f_int2 INTEGER,
 
62110
f_char1 CHAR(20),
 
62111
f_char2 CHAR(20),
 
62112
f_charbig VARCHAR(1000)
 
62113
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
62114
)
 
62115
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
62116
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62117
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
62118
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
62119
ALTER TABLE t1 DROP INDEX uidx1;
 
62120
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62121
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
62122
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
62123
# Start usability test (inc/partition_check.inc)
 
62124
create_command
 
62125
SHOW CREATE TABLE t1;
 
62126
Table   Create Table
 
62127
t1      CREATE TABLE `t1` (
 
62128
  `f_int1` int(11) DEFAULT NULL,
 
62129
  `f_int2` int(11) DEFAULT NULL,
 
62130
  `f_char1` char(20) DEFAULT NULL,
 
62131
  `f_char2` char(20) DEFAULT NULL,
 
62132
  `f_charbig` varchar(1000) DEFAULT NULL
 
62133
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
62134
 
 
62135
# check prerequisites-1 success:    1
 
62136
# check COUNT(*) success:    1
 
62137
# check MIN/MAX(f_int1) success:    1
 
62138
# check MIN/MAX(f_int2) success:    1
 
62139
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62140
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
62141
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
62142
WHERE f_int1 IN (2,3);
 
62143
# check prerequisites-3 success:    1
 
62144
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
62145
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
62146
# check read via f_int1 success: 1
 
62147
# check read via f_int2 success: 1
 
62148
        
 
62149
# check multiple-1 success:     1
 
62150
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
62151
        
 
62152
# check multiple-2 success:     1
 
62153
INSERT INTO t1 SELECT * FROM t0_template
 
62154
WHERE MOD(f_int1,3) = 0;
 
62155
        
 
62156
# check multiple-3 success:     1
 
62157
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
62158
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
62159
AND @max_row_div2 + @max_row_div4;
 
62160
        
 
62161
# check multiple-4 success:     1
 
62162
DELETE FROM t1
 
62163
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
62164
AND @max_row_div2 + @max_row_div4 + @max_row;
 
62165
        
 
62166
# check multiple-5 success:     1
 
62167
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
62168
INSERT INTO t1
 
62169
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
62170
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
62171
f_charbig = '#SINGLE#';
 
62172
        
 
62173
# check single-1 success:       1
 
62174
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
62175
INSERT INTO t1
 
62176
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
62177
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
62178
f_charbig = '#SINGLE#';
 
62179
        
 
62180
# check single-2 success:       1
 
62181
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
62182
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
62183
UPDATE t1 SET f_int1 = @cur_value2
 
62184
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
62185
        
 
62186
# check single-3 success:       1
 
62187
SET @cur_value1= -1;
 
62188
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
62189
UPDATE t1 SET f_int1 = @cur_value1
 
62190
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
62191
        
 
62192
# check single-4 success:       1
 
62193
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
62194
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
62195
        
 
62196
# check single-5 success:       1
 
62197
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
62198
        
 
62199
# check single-6 success:       1
 
62200
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
62201
        
 
62202
# check single-7 success:       1
 
62203
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
62204
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
62205
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
62206
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
62207
f_charbig = '#NULL#';
 
62208
INSERT INTO t1
 
62209
SET f_int1 = NULL , f_int2 = -@max_row,
 
62210
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
62211
f_charbig = '#NULL#';
 
62212
# check null success:    1
 
62213
        
 
62214
# check null-1 success:         1
 
62215
UPDATE t1 SET f_int1 = -@max_row
 
62216
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
62217
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
62218
        
 
62219
# check null-2 success:         1
 
62220
UPDATE t1 SET f_int1 = NULL
 
62221
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
62222
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
62223
        
 
62224
# check null-3 success:         1
 
62225
DELETE FROM t1
 
62226
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
62227
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
62228
        
 
62229
# check null-4 success:         1
 
62230
DELETE FROM t1
 
62231
WHERE f_int1 = 0 AND f_int2 = 0
 
62232
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
62233
AND f_charbig = '#NULL#';
 
62234
SET AUTOCOMMIT= 0;
 
62235
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62236
SELECT f_int1, f_int1, '', '', 'was inserted'
 
62237
FROM t0_template source_tab
 
62238
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
62239
        
 
62240
# check transactions-1 success:         1
 
62241
COMMIT WORK;
 
62242
        
 
62243
# check transactions-2 success:         1
 
62244
ROLLBACK WORK;
 
62245
        
 
62246
# check transactions-3 success:         1
 
62247
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
62248
COMMIT WORK;
 
62249
ROLLBACK WORK;
 
62250
        
 
62251
# check transactions-4 success:         1
 
62252
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62253
SELECT f_int1, f_int1, '', '', 'was inserted'
 
62254
FROM t0_template source_tab
 
62255
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
62256
        
 
62257
# check transactions-5 success:         1
 
62258
ROLLBACK WORK;
 
62259
        
 
62260
# check transactions-6 success:         1
 
62261
# INFO: Storage engine used for t1 seems to be transactional.
 
62262
COMMIT;
 
62263
        
 
62264
# check transactions-7 success:         1
 
62265
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
62266
COMMIT WORK;
 
62267
SET @@session.sql_mode = 'traditional';
 
62268
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
62269
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62270
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
62271
'', '', 'was inserted' FROM t0_template
 
62272
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
62273
ERROR 22012: Division by 0
 
62274
COMMIT;
 
62275
        
 
62276
# check transactions-8 success:         1
 
62277
# INFO: Storage engine used for t1 seems to be able to revert
 
62278
#       changes made by the failing statement.
 
62279
SET @@session.sql_mode = '';
 
62280
SET AUTOCOMMIT= 1;
 
62281
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
62282
COMMIT WORK;
 
62283
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
62284
        
 
62285
# check special-1 success:      1
 
62286
UPDATE t1 SET f_charbig = '';
 
62287
        
 
62288
# check special-2 success:      1
 
62289
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
62290
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62291
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
62292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62295
'just inserted' FROM t0_template
 
62296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62297
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
62298
BEGIN
 
62299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62300
f_charbig = 'updated by trigger'
 
62301
      WHERE f_int1 = new.f_int1;
 
62302
END|
 
62303
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62304
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
62305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62306
        
 
62307
# check trigger-1 success:      1
 
62308
DROP TRIGGER trg_1;
 
62309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62311
f_charbig = 'just inserted'
 
62312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62313
DELETE FROM t0_aux
 
62314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62315
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62316
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62317
'just inserted' FROM t0_template
 
62318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62319
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
62320
BEGIN
 
62321
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62322
f_charbig = 'updated by trigger'
 
62323
      WHERE f_int1 = new.f_int1;
 
62324
END|
 
62325
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62326
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
62327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62328
        
 
62329
# check trigger-2 success:      1
 
62330
DROP TRIGGER trg_1;
 
62331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62333
f_charbig = 'just inserted'
 
62334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62335
DELETE FROM t0_aux
 
62336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62339
'just inserted' FROM t0_template
 
62340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62341
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
62342
BEGIN
 
62343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62344
f_charbig = 'updated by trigger'
 
62345
      WHERE f_int1 = new.f_int1;
 
62346
END|
 
62347
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62349
        
 
62350
# check trigger-3 success:      1
 
62351
DROP TRIGGER trg_1;
 
62352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62354
f_charbig = 'just inserted'
 
62355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62356
DELETE FROM t0_aux
 
62357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62360
'just inserted' FROM t0_template
 
62361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62362
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
62363
BEGIN
 
62364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62365
f_charbig = 'updated by trigger'
 
62366
      WHERE f_int1 = - old.f_int1;
 
62367
END|
 
62368
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62370
        
 
62371
# check trigger-4 success:      1
 
62372
DROP TRIGGER trg_1;
 
62373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62375
f_charbig = 'just inserted'
 
62376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62377
DELETE FROM t0_aux
 
62378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62379
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62380
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62381
'just inserted' FROM t0_template
 
62382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62383
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
62384
BEGIN
 
62385
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62386
f_charbig = 'updated by trigger'
 
62387
      WHERE f_int1 = new.f_int1;
 
62388
END|
 
62389
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62390
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62391
        
 
62392
# check trigger-5 success:      1
 
62393
DROP TRIGGER trg_1;
 
62394
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62395
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62396
f_charbig = 'just inserted'
 
62397
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62398
DELETE FROM t0_aux
 
62399
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62400
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62401
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62402
'just inserted' FROM t0_template
 
62403
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62404
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
62405
BEGIN
 
62406
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62407
f_charbig = 'updated by trigger'
 
62408
      WHERE f_int1 = - old.f_int1;
 
62409
END|
 
62410
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62411
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62412
        
 
62413
# check trigger-6 success:      1
 
62414
DROP TRIGGER trg_1;
 
62415
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62416
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62417
f_charbig = 'just inserted'
 
62418
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62419
DELETE FROM t0_aux
 
62420
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62422
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62423
'just inserted' FROM t0_template
 
62424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62425
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
62426
BEGIN
 
62427
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62428
f_charbig = 'updated by trigger'
 
62429
      WHERE f_int1 = - old.f_int1;
 
62430
END|
 
62431
DELETE FROM t0_aux
 
62432
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62433
        
 
62434
# check trigger-7 success:      1
 
62435
DROP TRIGGER trg_1;
 
62436
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62437
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62438
f_charbig = 'just inserted'
 
62439
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62440
DELETE FROM t0_aux
 
62441
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62442
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62443
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62444
'just inserted' FROM t0_template
 
62445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62446
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
62447
BEGIN
 
62448
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62449
f_charbig = 'updated by trigger'
 
62450
      WHERE f_int1 = - old.f_int1;
 
62451
END|
 
62452
DELETE FROM t0_aux
 
62453
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62454
        
 
62455
# check trigger-8 success:      1
 
62456
DROP TRIGGER trg_1;
 
62457
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62458
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62459
f_charbig = 'just inserted'
 
62460
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62461
DELETE FROM t0_aux
 
62462
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62463
DELETE FROM t1
 
62464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62465
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
62466
BEGIN
 
62467
SET new.f_int1 = old.f_int1 + @max_row,
 
62468
new.f_int2 = old.f_int2 - @max_row,
 
62469
new.f_charbig = '####updated per update trigger####';
 
62470
END|
 
62471
UPDATE t1
 
62472
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
62473
f_charbig = '####updated per update statement itself####';
 
62474
        
 
62475
# check trigger-9 success:      1
 
62476
DROP TRIGGER trg_2;
 
62477
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62478
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62479
f_charbig = CONCAT('===',f_char1,'===');
 
62480
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
62481
BEGIN
 
62482
SET new.f_int1 = new.f_int1 + @max_row,
 
62483
new.f_int2 = new.f_int2 - @max_row,
 
62484
new.f_charbig = '####updated per update trigger####';
 
62485
END|
 
62486
UPDATE t1
 
62487
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
62488
f_charbig = '####updated per update statement itself####';
 
62489
        
 
62490
# check trigger-10 success:     1
 
62491
DROP TRIGGER trg_2;
 
62492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62494
f_charbig = CONCAT('===',f_char1,'===');
 
62495
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
62496
BEGIN
 
62497
SET new.f_int1 = @my_max1 + @counter,
 
62498
new.f_int2 = @my_min2 - @counter,
 
62499
new.f_charbig = '####updated per insert trigger####';
 
62500
SET @counter = @counter + 1;
 
62501
END|
 
62502
SET @counter = 1;
 
62503
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
62504
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62505
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
62506
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
62507
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
62508
ORDER BY f_int1;
 
62509
DROP TRIGGER trg_3;
 
62510
        
 
62511
# check trigger-11 success:     1
 
62512
DELETE FROM t1
 
62513
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
62514
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
62515
AND f_charbig = '####updated per insert trigger####';
 
62516
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
62517
BEGIN
 
62518
SET new.f_int1 = @my_max1 + @counter,
 
62519
new.f_int2 = @my_min2 - @counter,
 
62520
new.f_charbig = '####updated per insert trigger####';
 
62521
SET @counter = @counter + 1;
 
62522
END|
 
62523
SET @counter = 1;
 
62524
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
62525
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
62526
SELECT CAST(f_int1 AS CHAR),
 
62527
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
62528
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
62529
ORDER BY f_int1;
 
62530
DROP TRIGGER trg_3;
 
62531
        
 
62532
# check trigger-12 success:     1
 
62533
DELETE FROM t1
 
62534
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
62535
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
62536
AND f_charbig = '####updated per insert trigger####';
 
62537
ANALYZE  TABLE t1;
 
62538
Table   Op      Msg_type        Msg_text
 
62539
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
62540
CHECK    TABLE t1 EXTENDED;
 
62541
Table   Op      Msg_type        Msg_text
 
62542
test.t1 check   note    The storage engine for the table doesn't support check
 
62543
CHECKSUM TABLE t1 EXTENDED;
 
62544
Table   Checksum
 
62545
test.t1 <some_value>
 
62546
OPTIMIZE TABLE t1;
 
62547
Table   Op      Msg_type        Msg_text
 
62548
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
62549
# check layout success:    1
 
62550
REPAIR   TABLE t1 EXTENDED;
 
62551
Table   Op      Msg_type        Msg_text
 
62552
test.t1 repair  note    The storage engine for the table doesn't support repair
 
62553
# check layout success:    1
 
62554
TRUNCATE t1;
 
62555
        
 
62556
# check TRUNCATE success:       1
 
62557
# check layout success:    1
 
62558
# End usability test (inc/partition_check.inc)
 
62559
DROP TABLE t1;
 
62560
CREATE TABLE t1 (
 
62561
f_int1 INTEGER,
 
62562
f_int2 INTEGER,
 
62563
f_char1 CHAR(20),
 
62564
f_char2 CHAR(20),
 
62565
f_charbig VARCHAR(1000)
 
62566
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
62567
)
 
62568
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
62569
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62570
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
62571
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
62572
ALTER TABLE t1 DROP INDEX uidx1;
 
62573
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62574
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
62575
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
62576
# Start usability test (inc/partition_check.inc)
 
62577
create_command
 
62578
SHOW CREATE TABLE t1;
 
62579
Table   Create Table
 
62580
t1      CREATE TABLE `t1` (
 
62581
  `f_int1` int(11) DEFAULT NULL,
 
62582
  `f_int2` int(11) DEFAULT NULL,
 
62583
  `f_char1` char(20) DEFAULT NULL,
 
62584
  `f_char2` char(20) DEFAULT NULL,
 
62585
  `f_charbig` varchar(1000) DEFAULT NULL
 
62586
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
62587
 
 
62588
# check prerequisites-1 success:    1
 
62589
# check COUNT(*) success:    1
 
62590
# check MIN/MAX(f_int1) success:    1
 
62591
# check MIN/MAX(f_int2) success:    1
 
62592
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62593
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
62594
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
62595
WHERE f_int1 IN (2,3);
 
62596
# check prerequisites-3 success:    1
 
62597
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
62598
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
62599
# check read via f_int1 success: 1
 
62600
# check read via f_int2 success: 1
 
62601
        
 
62602
# check multiple-1 success:     1
 
62603
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
62604
        
 
62605
# check multiple-2 success:     1
 
62606
INSERT INTO t1 SELECT * FROM t0_template
 
62607
WHERE MOD(f_int1,3) = 0;
 
62608
        
 
62609
# check multiple-3 success:     1
 
62610
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
62611
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
62612
AND @max_row_div2 + @max_row_div4;
 
62613
        
 
62614
# check multiple-4 success:     1
 
62615
DELETE FROM t1
 
62616
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
62617
AND @max_row_div2 + @max_row_div4 + @max_row;
 
62618
        
 
62619
# check multiple-5 success:     1
 
62620
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
62621
INSERT INTO t1
 
62622
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
62623
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
62624
f_charbig = '#SINGLE#';
 
62625
        
 
62626
# check single-1 success:       1
 
62627
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
62628
INSERT INTO t1
 
62629
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
62630
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
62631
f_charbig = '#SINGLE#';
 
62632
        
 
62633
# check single-2 success:       1
 
62634
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
62635
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
62636
UPDATE t1 SET f_int1 = @cur_value2
 
62637
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
62638
        
 
62639
# check single-3 success:       1
 
62640
SET @cur_value1= -1;
 
62641
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
62642
UPDATE t1 SET f_int1 = @cur_value1
 
62643
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
62644
        
 
62645
# check single-4 success:       1
 
62646
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
62647
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
62648
        
 
62649
# check single-5 success:       1
 
62650
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
62651
        
 
62652
# check single-6 success:       1
 
62653
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
62654
        
 
62655
# check single-7 success:       1
 
62656
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
62657
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
62658
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
62659
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
62660
f_charbig = '#NULL#';
 
62661
INSERT INTO t1
 
62662
SET f_int1 = NULL , f_int2 = -@max_row,
 
62663
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
62664
f_charbig = '#NULL#';
 
62665
# check null success:    1
 
62666
        
 
62667
# check null-1 success:         1
 
62668
UPDATE t1 SET f_int1 = -@max_row
 
62669
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
62670
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
62671
        
 
62672
# check null-2 success:         1
 
62673
UPDATE t1 SET f_int1 = NULL
 
62674
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
62675
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
62676
        
 
62677
# check null-3 success:         1
 
62678
DELETE FROM t1
 
62679
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
62680
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
62681
        
 
62682
# check null-4 success:         1
 
62683
DELETE FROM t1
 
62684
WHERE f_int1 = 0 AND f_int2 = 0
 
62685
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
62686
AND f_charbig = '#NULL#';
 
62687
SET AUTOCOMMIT= 0;
 
62688
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62689
SELECT f_int1, f_int1, '', '', 'was inserted'
 
62690
FROM t0_template source_tab
 
62691
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
62692
        
 
62693
# check transactions-1 success:         1
 
62694
COMMIT WORK;
 
62695
        
 
62696
# check transactions-2 success:         1
 
62697
ROLLBACK WORK;
 
62698
        
 
62699
# check transactions-3 success:         1
 
62700
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
62701
COMMIT WORK;
 
62702
ROLLBACK WORK;
 
62703
        
 
62704
# check transactions-4 success:         1
 
62705
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62706
SELECT f_int1, f_int1, '', '', 'was inserted'
 
62707
FROM t0_template source_tab
 
62708
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
62709
        
 
62710
# check transactions-5 success:         1
 
62711
ROLLBACK WORK;
 
62712
        
 
62713
# check transactions-6 success:         1
 
62714
# INFO: Storage engine used for t1 seems to be transactional.
 
62715
COMMIT;
 
62716
        
 
62717
# check transactions-7 success:         1
 
62718
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
62719
COMMIT WORK;
 
62720
SET @@session.sql_mode = 'traditional';
 
62721
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
62722
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62723
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
62724
'', '', 'was inserted' FROM t0_template
 
62725
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
62726
ERROR 22012: Division by 0
 
62727
COMMIT;
 
62728
        
 
62729
# check transactions-8 success:         1
 
62730
# INFO: Storage engine used for t1 seems to be able to revert
 
62731
#       changes made by the failing statement.
 
62732
SET @@session.sql_mode = '';
 
62733
SET AUTOCOMMIT= 1;
 
62734
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
62735
COMMIT WORK;
 
62736
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
62737
        
 
62738
# check special-1 success:      1
 
62739
UPDATE t1 SET f_charbig = '';
 
62740
        
 
62741
# check special-2 success:      1
 
62742
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
62743
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62744
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
62745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62747
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62748
'just inserted' FROM t0_template
 
62749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62750
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
62751
BEGIN
 
62752
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62753
f_charbig = 'updated by trigger'
 
62754
      WHERE f_int1 = new.f_int1;
 
62755
END|
 
62756
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62757
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
62758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62759
        
 
62760
# check trigger-1 success:      1
 
62761
DROP TRIGGER trg_1;
 
62762
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62763
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62764
f_charbig = 'just inserted'
 
62765
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62766
DELETE FROM t0_aux
 
62767
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62770
'just inserted' FROM t0_template
 
62771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62772
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
62773
BEGIN
 
62774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62775
f_charbig = 'updated by trigger'
 
62776
      WHERE f_int1 = new.f_int1;
 
62777
END|
 
62778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62779
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
62780
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62781
        
 
62782
# check trigger-2 success:      1
 
62783
DROP TRIGGER trg_1;
 
62784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62786
f_charbig = 'just inserted'
 
62787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62788
DELETE FROM t0_aux
 
62789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62790
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62791
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62792
'just inserted' FROM t0_template
 
62793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62794
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
62795
BEGIN
 
62796
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62797
f_charbig = 'updated by trigger'
 
62798
      WHERE f_int1 = new.f_int1;
 
62799
END|
 
62800
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62801
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62802
        
 
62803
# check trigger-3 success:      1
 
62804
DROP TRIGGER trg_1;
 
62805
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62806
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62807
f_charbig = 'just inserted'
 
62808
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62809
DELETE FROM t0_aux
 
62810
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62811
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62812
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62813
'just inserted' FROM t0_template
 
62814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62815
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
62816
BEGIN
 
62817
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62818
f_charbig = 'updated by trigger'
 
62819
      WHERE f_int1 = - old.f_int1;
 
62820
END|
 
62821
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62822
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62823
        
 
62824
# check trigger-4 success:      1
 
62825
DROP TRIGGER trg_1;
 
62826
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62827
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62828
f_charbig = 'just inserted'
 
62829
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62830
DELETE FROM t0_aux
 
62831
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62832
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62833
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62834
'just inserted' FROM t0_template
 
62835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62836
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
62837
BEGIN
 
62838
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62839
f_charbig = 'updated by trigger'
 
62840
      WHERE f_int1 = new.f_int1;
 
62841
END|
 
62842
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62843
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62844
        
 
62845
# check trigger-5 success:      1
 
62846
DROP TRIGGER trg_1;
 
62847
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62848
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62849
f_charbig = 'just inserted'
 
62850
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62851
DELETE FROM t0_aux
 
62852
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62853
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62854
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62855
'just inserted' FROM t0_template
 
62856
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62857
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
62858
BEGIN
 
62859
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62860
f_charbig = 'updated by trigger'
 
62861
      WHERE f_int1 = - old.f_int1;
 
62862
END|
 
62863
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
62864
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62865
        
 
62866
# check trigger-6 success:      1
 
62867
DROP TRIGGER trg_1;
 
62868
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62869
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62870
f_charbig = 'just inserted'
 
62871
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62872
DELETE FROM t0_aux
 
62873
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62874
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62875
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62876
'just inserted' FROM t0_template
 
62877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62878
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
62879
BEGIN
 
62880
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62881
f_charbig = 'updated by trigger'
 
62882
      WHERE f_int1 = - old.f_int1;
 
62883
END|
 
62884
DELETE FROM t0_aux
 
62885
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62886
        
 
62887
# check trigger-7 success:      1
 
62888
DROP TRIGGER trg_1;
 
62889
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62890
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62891
f_charbig = 'just inserted'
 
62892
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62893
DELETE FROM t0_aux
 
62894
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62895
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62896
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
62897
'just inserted' FROM t0_template
 
62898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62899
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
62900
BEGIN
 
62901
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
62902
f_charbig = 'updated by trigger'
 
62903
      WHERE f_int1 = - old.f_int1;
 
62904
END|
 
62905
DELETE FROM t0_aux
 
62906
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
62907
        
 
62908
# check trigger-8 success:      1
 
62909
DROP TRIGGER trg_1;
 
62910
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62911
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62912
f_charbig = 'just inserted'
 
62913
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
62914
DELETE FROM t0_aux
 
62915
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62916
DELETE FROM t1
 
62917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
62918
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
62919
BEGIN
 
62920
SET new.f_int1 = old.f_int1 + @max_row,
 
62921
new.f_int2 = old.f_int2 - @max_row,
 
62922
new.f_charbig = '####updated per update trigger####';
 
62923
END|
 
62924
UPDATE t1
 
62925
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
62926
f_charbig = '####updated per update statement itself####';
 
62927
        
 
62928
# check trigger-9 success:      1
 
62929
DROP TRIGGER trg_2;
 
62930
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62931
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62932
f_charbig = CONCAT('===',f_char1,'===');
 
62933
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
62934
BEGIN
 
62935
SET new.f_int1 = new.f_int1 + @max_row,
 
62936
new.f_int2 = new.f_int2 - @max_row,
 
62937
new.f_charbig = '####updated per update trigger####';
 
62938
END|
 
62939
UPDATE t1
 
62940
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
62941
f_charbig = '####updated per update statement itself####';
 
62942
        
 
62943
# check trigger-10 success:     1
 
62944
DROP TRIGGER trg_2;
 
62945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
62946
f_int2 = CAST(f_char1 AS SIGNED INT),
 
62947
f_charbig = CONCAT('===',f_char1,'===');
 
62948
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
62949
BEGIN
 
62950
SET new.f_int1 = @my_max1 + @counter,
 
62951
new.f_int2 = @my_min2 - @counter,
 
62952
new.f_charbig = '####updated per insert trigger####';
 
62953
SET @counter = @counter + 1;
 
62954
END|
 
62955
SET @counter = 1;
 
62956
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
62957
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
62958
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
62959
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
62960
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
62961
ORDER BY f_int1;
 
62962
DROP TRIGGER trg_3;
 
62963
        
 
62964
# check trigger-11 success:     1
 
62965
DELETE FROM t1
 
62966
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
62967
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
62968
AND f_charbig = '####updated per insert trigger####';
 
62969
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
62970
BEGIN
 
62971
SET new.f_int1 = @my_max1 + @counter,
 
62972
new.f_int2 = @my_min2 - @counter,
 
62973
new.f_charbig = '####updated per insert trigger####';
 
62974
SET @counter = @counter + 1;
 
62975
END|
 
62976
SET @counter = 1;
 
62977
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
62978
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
62979
SELECT CAST(f_int1 AS CHAR),
 
62980
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
62981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
62982
ORDER BY f_int1;
 
62983
DROP TRIGGER trg_3;
 
62984
        
 
62985
# check trigger-12 success:     1
 
62986
DELETE FROM t1
 
62987
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
62988
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
62989
AND f_charbig = '####updated per insert trigger####';
 
62990
ANALYZE  TABLE t1;
 
62991
Table   Op      Msg_type        Msg_text
 
62992
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
62993
CHECK    TABLE t1 EXTENDED;
 
62994
Table   Op      Msg_type        Msg_text
 
62995
test.t1 check   note    The storage engine for the table doesn't support check
 
62996
CHECKSUM TABLE t1 EXTENDED;
 
62997
Table   Checksum
 
62998
test.t1 <some_value>
 
62999
OPTIMIZE TABLE t1;
 
63000
Table   Op      Msg_type        Msg_text
 
63001
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
63002
# check layout success:    1
 
63003
REPAIR   TABLE t1 EXTENDED;
 
63004
Table   Op      Msg_type        Msg_text
 
63005
test.t1 repair  note    The storage engine for the table doesn't support repair
 
63006
# check layout success:    1
 
63007
TRUNCATE t1;
 
63008
        
 
63009
# check TRUNCATE success:       1
 
63010
# check layout success:    1
 
63011
# End usability test (inc/partition_check.inc)
 
63012
DROP TABLE t1;
 
63013
CREATE TABLE t1 (
 
63014
f_int1 INTEGER,
 
63015
f_int2 INTEGER,
 
63016
f_char1 CHAR(20),
 
63017
f_char2 CHAR(20),
 
63018
f_charbig VARCHAR(1000)
 
63019
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
63020
)
 
63021
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
63022
(PARTITION part_3 VALUES IN (-3),
 
63023
PARTITION part_2 VALUES IN (-2),
 
63024
PARTITION part_1 VALUES IN (-1),
 
63025
PARTITION part_N VALUES IN (NULL),
 
63026
PARTITION part0 VALUES IN (0),
 
63027
PARTITION part1 VALUES IN (1),
 
63028
PARTITION part2 VALUES IN (2),
 
63029
PARTITION part3 VALUES IN (3));
 
63030
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63031
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
63032
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
63033
ALTER TABLE t1 DROP INDEX uidx1;
 
63034
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63035
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
63036
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
63037
# Start usability test (inc/partition_check.inc)
 
63038
create_command
 
63039
SHOW CREATE TABLE t1;
 
63040
Table   Create Table
 
63041
t1      CREATE TABLE `t1` (
 
63042
  `f_int1` int(11) DEFAULT NULL,
 
63043
  `f_int2` int(11) DEFAULT NULL,
 
63044
  `f_char1` char(20) DEFAULT NULL,
 
63045
  `f_char2` char(20) DEFAULT NULL,
 
63046
  `f_charbig` varchar(1000) DEFAULT NULL
 
63047
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
63048
 
 
63049
# check prerequisites-1 success:    1
 
63050
# check COUNT(*) success:    1
 
63051
# check MIN/MAX(f_int1) success:    1
 
63052
# check MIN/MAX(f_int2) success:    1
 
63053
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63054
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
63055
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
63056
WHERE f_int1 IN (2,3);
 
63057
# check prerequisites-3 success:    1
 
63058
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
63059
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
63060
# check read via f_int1 success: 1
 
63061
# check read via f_int2 success: 1
 
63062
        
 
63063
# check multiple-1 success:     1
 
63064
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
63065
        
 
63066
# check multiple-2 success:     1
 
63067
INSERT INTO t1 SELECT * FROM t0_template
 
63068
WHERE MOD(f_int1,3) = 0;
 
63069
        
 
63070
# check multiple-3 success:     1
 
63071
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
63072
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
63073
AND @max_row_div2 + @max_row_div4;
 
63074
        
 
63075
# check multiple-4 success:     1
 
63076
DELETE FROM t1
 
63077
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
63078
AND @max_row_div2 + @max_row_div4 + @max_row;
 
63079
        
 
63080
# check multiple-5 success:     1
 
63081
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
63082
INSERT INTO t1
 
63083
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
63084
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
63085
f_charbig = '#SINGLE#';
 
63086
        
 
63087
# check single-1 success:       1
 
63088
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
63089
INSERT INTO t1
 
63090
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
63091
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
63092
f_charbig = '#SINGLE#';
 
63093
        
 
63094
# check single-2 success:       1
 
63095
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
63096
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
63097
UPDATE t1 SET f_int1 = @cur_value2
 
63098
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
63099
        
 
63100
# check single-3 success:       1
 
63101
SET @cur_value1= -1;
 
63102
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
63103
UPDATE t1 SET f_int1 = @cur_value1
 
63104
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
63105
        
 
63106
# check single-4 success:       1
 
63107
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
63108
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
63109
        
 
63110
# check single-5 success:       1
 
63111
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
63112
        
 
63113
# check single-6 success:       1
 
63114
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
63115
        
 
63116
# check single-7 success:       1
 
63117
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
63118
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
63119
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
63120
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
63121
f_charbig = '#NULL#';
 
63122
INSERT INTO t1
 
63123
SET f_int1 = NULL , f_int2 = -@max_row,
 
63124
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
63125
f_charbig = '#NULL#';
 
63126
# check null success:    1
 
63127
        
 
63128
# check null-1 success:         1
 
63129
UPDATE t1 SET f_int1 = -@max_row
 
63130
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
63131
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
63132
        
 
63133
# check null-2 success:         1
 
63134
UPDATE t1 SET f_int1 = NULL
 
63135
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
63136
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
63137
        
 
63138
# check null-3 success:         1
 
63139
DELETE FROM t1
 
63140
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
63141
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
63142
        
 
63143
# check null-4 success:         1
 
63144
DELETE FROM t1
 
63145
WHERE f_int1 = 0 AND f_int2 = 0
 
63146
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
63147
AND f_charbig = '#NULL#';
 
63148
SET AUTOCOMMIT= 0;
 
63149
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63150
SELECT f_int1, f_int1, '', '', 'was inserted'
 
63151
FROM t0_template source_tab
 
63152
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
63153
        
 
63154
# check transactions-1 success:         1
 
63155
COMMIT WORK;
 
63156
        
 
63157
# check transactions-2 success:         1
 
63158
ROLLBACK WORK;
 
63159
        
 
63160
# check transactions-3 success:         1
 
63161
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
63162
COMMIT WORK;
 
63163
ROLLBACK WORK;
 
63164
        
 
63165
# check transactions-4 success:         1
 
63166
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63167
SELECT f_int1, f_int1, '', '', 'was inserted'
 
63168
FROM t0_template source_tab
 
63169
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
63170
        
 
63171
# check transactions-5 success:         1
 
63172
ROLLBACK WORK;
 
63173
        
 
63174
# check transactions-6 success:         1
 
63175
# INFO: Storage engine used for t1 seems to be transactional.
 
63176
COMMIT;
 
63177
        
 
63178
# check transactions-7 success:         1
 
63179
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
63180
COMMIT WORK;
 
63181
SET @@session.sql_mode = 'traditional';
 
63182
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
63183
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63184
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
63185
'', '', 'was inserted' FROM t0_template
 
63186
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
63187
ERROR 22012: Division by 0
 
63188
COMMIT;
 
63189
        
 
63190
# check transactions-8 success:         1
 
63191
# INFO: Storage engine used for t1 seems to be able to revert
 
63192
#       changes made by the failing statement.
 
63193
SET @@session.sql_mode = '';
 
63194
SET AUTOCOMMIT= 1;
 
63195
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
63196
COMMIT WORK;
 
63197
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
63198
        
 
63199
# check special-1 success:      1
 
63200
UPDATE t1 SET f_charbig = '';
 
63201
        
 
63202
# check special-2 success:      1
 
63203
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
63204
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63205
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
63206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63207
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63208
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63209
'just inserted' FROM t0_template
 
63210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63211
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
63212
BEGIN
 
63213
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63214
f_charbig = 'updated by trigger'
 
63215
      WHERE f_int1 = new.f_int1;
 
63216
END|
 
63217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63218
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
63219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63220
        
 
63221
# check trigger-1 success:      1
 
63222
DROP TRIGGER trg_1;
 
63223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63225
f_charbig = 'just inserted'
 
63226
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63227
DELETE FROM t0_aux
 
63228
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63229
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63230
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63231
'just inserted' FROM t0_template
 
63232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63233
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
63234
BEGIN
 
63235
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63236
f_charbig = 'updated by trigger'
 
63237
      WHERE f_int1 = new.f_int1;
 
63238
END|
 
63239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63240
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
63241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63242
        
 
63243
# check trigger-2 success:      1
 
63244
DROP TRIGGER trg_1;
 
63245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63247
f_charbig = 'just inserted'
 
63248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63249
DELETE FROM t0_aux
 
63250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63253
'just inserted' FROM t0_template
 
63254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63255
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
63256
BEGIN
 
63257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63258
f_charbig = 'updated by trigger'
 
63259
      WHERE f_int1 = new.f_int1;
 
63260
END|
 
63261
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63263
        
 
63264
# check trigger-3 success:      1
 
63265
DROP TRIGGER trg_1;
 
63266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63268
f_charbig = 'just inserted'
 
63269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63270
DELETE FROM t0_aux
 
63271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63272
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63273
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63274
'just inserted' FROM t0_template
 
63275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63276
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
63277
BEGIN
 
63278
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63279
f_charbig = 'updated by trigger'
 
63280
      WHERE f_int1 = - old.f_int1;
 
63281
END|
 
63282
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63283
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63284
        
 
63285
# check trigger-4 success:      1
 
63286
DROP TRIGGER trg_1;
 
63287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63289
f_charbig = 'just inserted'
 
63290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63291
DELETE FROM t0_aux
 
63292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63295
'just inserted' FROM t0_template
 
63296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63297
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
63298
BEGIN
 
63299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63300
f_charbig = 'updated by trigger'
 
63301
      WHERE f_int1 = new.f_int1;
 
63302
END|
 
63303
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63305
        
 
63306
# check trigger-5 success:      1
 
63307
DROP TRIGGER trg_1;
 
63308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63310
f_charbig = 'just inserted'
 
63311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63312
DELETE FROM t0_aux
 
63313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63315
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63316
'just inserted' FROM t0_template
 
63317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63318
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
63319
BEGIN
 
63320
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63321
f_charbig = 'updated by trigger'
 
63322
      WHERE f_int1 = - old.f_int1;
 
63323
END|
 
63324
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63325
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63326
        
 
63327
# check trigger-6 success:      1
 
63328
DROP TRIGGER trg_1;
 
63329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63331
f_charbig = 'just inserted'
 
63332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63333
DELETE FROM t0_aux
 
63334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63335
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63336
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63337
'just inserted' FROM t0_template
 
63338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63339
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
63340
BEGIN
 
63341
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63342
f_charbig = 'updated by trigger'
 
63343
      WHERE f_int1 = - old.f_int1;
 
63344
END|
 
63345
DELETE FROM t0_aux
 
63346
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63347
        
 
63348
# check trigger-7 success:      1
 
63349
DROP TRIGGER trg_1;
 
63350
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63351
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63352
f_charbig = 'just inserted'
 
63353
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63354
DELETE FROM t0_aux
 
63355
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63356
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63357
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63358
'just inserted' FROM t0_template
 
63359
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63360
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
63361
BEGIN
 
63362
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63363
f_charbig = 'updated by trigger'
 
63364
      WHERE f_int1 = - old.f_int1;
 
63365
END|
 
63366
DELETE FROM t0_aux
 
63367
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63368
        
 
63369
# check trigger-8 success:      1
 
63370
DROP TRIGGER trg_1;
 
63371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63373
f_charbig = 'just inserted'
 
63374
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63375
DELETE FROM t0_aux
 
63376
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63377
DELETE FROM t1
 
63378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63379
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
63380
BEGIN
 
63381
SET new.f_int1 = old.f_int1 + @max_row,
 
63382
new.f_int2 = old.f_int2 - @max_row,
 
63383
new.f_charbig = '####updated per update trigger####';
 
63384
END|
 
63385
UPDATE t1
 
63386
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
63387
f_charbig = '####updated per update statement itself####';
 
63388
        
 
63389
# check trigger-9 success:      1
 
63390
DROP TRIGGER trg_2;
 
63391
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63392
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63393
f_charbig = CONCAT('===',f_char1,'===');
 
63394
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
63395
BEGIN
 
63396
SET new.f_int1 = new.f_int1 + @max_row,
 
63397
new.f_int2 = new.f_int2 - @max_row,
 
63398
new.f_charbig = '####updated per update trigger####';
 
63399
END|
 
63400
UPDATE t1
 
63401
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
63402
f_charbig = '####updated per update statement itself####';
 
63403
        
 
63404
# check trigger-10 success:     1
 
63405
DROP TRIGGER trg_2;
 
63406
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63407
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63408
f_charbig = CONCAT('===',f_char1,'===');
 
63409
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
63410
BEGIN
 
63411
SET new.f_int1 = @my_max1 + @counter,
 
63412
new.f_int2 = @my_min2 - @counter,
 
63413
new.f_charbig = '####updated per insert trigger####';
 
63414
SET @counter = @counter + 1;
 
63415
END|
 
63416
SET @counter = 1;
 
63417
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
63418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63419
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
63420
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
63421
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
63422
ORDER BY f_int1;
 
63423
DROP TRIGGER trg_3;
 
63424
        
 
63425
# check trigger-11 success:     1
 
63426
DELETE FROM t1
 
63427
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
63428
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
63429
AND f_charbig = '####updated per insert trigger####';
 
63430
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
63431
BEGIN
 
63432
SET new.f_int1 = @my_max1 + @counter,
 
63433
new.f_int2 = @my_min2 - @counter,
 
63434
new.f_charbig = '####updated per insert trigger####';
 
63435
SET @counter = @counter + 1;
 
63436
END|
 
63437
SET @counter = 1;
 
63438
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
63439
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
63440
SELECT CAST(f_int1 AS CHAR),
 
63441
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
63442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
63443
ORDER BY f_int1;
 
63444
DROP TRIGGER trg_3;
 
63445
        
 
63446
# check trigger-12 success:     1
 
63447
DELETE FROM t1
 
63448
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
63449
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
63450
AND f_charbig = '####updated per insert trigger####';
 
63451
ANALYZE  TABLE t1;
 
63452
Table   Op      Msg_type        Msg_text
 
63453
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
63454
CHECK    TABLE t1 EXTENDED;
 
63455
Table   Op      Msg_type        Msg_text
 
63456
test.t1 check   note    The storage engine for the table doesn't support check
 
63457
CHECKSUM TABLE t1 EXTENDED;
 
63458
Table   Checksum
 
63459
test.t1 <some_value>
 
63460
OPTIMIZE TABLE t1;
 
63461
Table   Op      Msg_type        Msg_text
 
63462
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
63463
# check layout success:    1
 
63464
REPAIR   TABLE t1 EXTENDED;
 
63465
Table   Op      Msg_type        Msg_text
 
63466
test.t1 repair  note    The storage engine for the table doesn't support repair
 
63467
# check layout success:    1
 
63468
TRUNCATE t1;
 
63469
        
 
63470
# check TRUNCATE success:       1
 
63471
# check layout success:    1
 
63472
# End usability test (inc/partition_check.inc)
 
63473
DROP TABLE t1;
 
63474
CREATE TABLE t1 (
 
63475
f_int1 INTEGER,
 
63476
f_int2 INTEGER,
 
63477
f_char1 CHAR(20),
 
63478
f_char2 CHAR(20),
 
63479
f_charbig VARCHAR(1000)
 
63480
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
63481
)
 
63482
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
63483
(PARTITION parta VALUES LESS THAN (0),
 
63484
PARTITION partb VALUES LESS THAN (5),
 
63485
PARTITION partc VALUES LESS THAN (10),
 
63486
PARTITION partd VALUES LESS THAN (10 + 5),
 
63487
PARTITION parte VALUES LESS THAN (20),
 
63488
PARTITION partf VALUES LESS THAN (2147483646));
 
63489
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63490
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
63491
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
63492
ALTER TABLE t1 DROP INDEX uidx1;
 
63493
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63494
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
63495
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
63496
# Start usability test (inc/partition_check.inc)
 
63497
create_command
 
63498
SHOW CREATE TABLE t1;
 
63499
Table   Create Table
 
63500
t1      CREATE TABLE `t1` (
 
63501
  `f_int1` int(11) DEFAULT NULL,
 
63502
  `f_int2` int(11) DEFAULT NULL,
 
63503
  `f_char1` char(20) DEFAULT NULL,
 
63504
  `f_char2` char(20) DEFAULT NULL,
 
63505
  `f_charbig` varchar(1000) DEFAULT NULL
 
63506
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
63507
 
 
63508
# check prerequisites-1 success:    1
 
63509
# check COUNT(*) success:    1
 
63510
# check MIN/MAX(f_int1) success:    1
 
63511
# check MIN/MAX(f_int2) success:    1
 
63512
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63513
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
63514
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
63515
WHERE f_int1 IN (2,3);
 
63516
# check prerequisites-3 success:    1
 
63517
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
63518
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
63519
# check read via f_int1 success: 1
 
63520
# check read via f_int2 success: 1
 
63521
        
 
63522
# check multiple-1 success:     1
 
63523
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
63524
        
 
63525
# check multiple-2 success:     1
 
63526
INSERT INTO t1 SELECT * FROM t0_template
 
63527
WHERE MOD(f_int1,3) = 0;
 
63528
        
 
63529
# check multiple-3 success:     1
 
63530
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
63531
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
63532
AND @max_row_div2 + @max_row_div4;
 
63533
        
 
63534
# check multiple-4 success:     1
 
63535
DELETE FROM t1
 
63536
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
63537
AND @max_row_div2 + @max_row_div4 + @max_row;
 
63538
        
 
63539
# check multiple-5 success:     1
 
63540
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
63541
INSERT INTO t1
 
63542
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
63543
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
63544
f_charbig = '#SINGLE#';
 
63545
        
 
63546
# check single-1 success:       1
 
63547
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
63548
INSERT INTO t1
 
63549
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
63550
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
63551
f_charbig = '#SINGLE#';
 
63552
        
 
63553
# check single-2 success:       1
 
63554
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
63555
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
63556
UPDATE t1 SET f_int1 = @cur_value2
 
63557
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
63558
        
 
63559
# check single-3 success:       1
 
63560
SET @cur_value1= -1;
 
63561
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
63562
UPDATE t1 SET f_int1 = @cur_value1
 
63563
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
63564
        
 
63565
# check single-4 success:       1
 
63566
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
63567
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
63568
        
 
63569
# check single-5 success:       1
 
63570
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
63571
        
 
63572
# check single-6 success:       1
 
63573
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
63574
ERROR HY000: Table has no partition for value 2147483647
 
63575
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
63576
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
63577
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
63578
f_charbig = '#NULL#';
 
63579
INSERT INTO t1
 
63580
SET f_int1 = NULL , f_int2 = -@max_row,
 
63581
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
63582
f_charbig = '#NULL#';
 
63583
# check null success:    1
 
63584
        
 
63585
# check null-1 success:         1
 
63586
UPDATE t1 SET f_int1 = -@max_row
 
63587
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
63588
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
63589
        
 
63590
# check null-2 success:         1
 
63591
UPDATE t1 SET f_int1 = NULL
 
63592
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
63593
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
63594
        
 
63595
# check null-3 success:         1
 
63596
DELETE FROM t1
 
63597
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
63598
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
63599
        
 
63600
# check null-4 success:         1
 
63601
DELETE FROM t1
 
63602
WHERE f_int1 = 0 AND f_int2 = 0
 
63603
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
63604
AND f_charbig = '#NULL#';
 
63605
SET AUTOCOMMIT= 0;
 
63606
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63607
SELECT f_int1, f_int1, '', '', 'was inserted'
 
63608
FROM t0_template source_tab
 
63609
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
63610
        
 
63611
# check transactions-1 success:         1
 
63612
COMMIT WORK;
 
63613
        
 
63614
# check transactions-2 success:         1
 
63615
ROLLBACK WORK;
 
63616
        
 
63617
# check transactions-3 success:         1
 
63618
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
63619
COMMIT WORK;
 
63620
ROLLBACK WORK;
 
63621
        
 
63622
# check transactions-4 success:         1
 
63623
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63624
SELECT f_int1, f_int1, '', '', 'was inserted'
 
63625
FROM t0_template source_tab
 
63626
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
63627
        
 
63628
# check transactions-5 success:         1
 
63629
ROLLBACK WORK;
 
63630
        
 
63631
# check transactions-6 success:         1
 
63632
# INFO: Storage engine used for t1 seems to be transactional.
 
63633
COMMIT;
 
63634
        
 
63635
# check transactions-7 success:         1
 
63636
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
63637
COMMIT WORK;
 
63638
SET @@session.sql_mode = 'traditional';
 
63639
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
63640
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63641
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
63642
'', '', 'was inserted' FROM t0_template
 
63643
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
63644
ERROR 22012: Division by 0
 
63645
COMMIT;
 
63646
        
 
63647
# check transactions-8 success:         1
 
63648
# INFO: Storage engine used for t1 seems to be able to revert
 
63649
#       changes made by the failing statement.
 
63650
SET @@session.sql_mode = '';
 
63651
SET AUTOCOMMIT= 1;
 
63652
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
63653
COMMIT WORK;
 
63654
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
63655
        
 
63656
# check special-1 success:      1
 
63657
UPDATE t1 SET f_charbig = '';
 
63658
        
 
63659
# check special-2 success:      1
 
63660
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
63661
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63662
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
63663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63664
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63665
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63666
'just inserted' FROM t0_template
 
63667
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63668
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
63669
BEGIN
 
63670
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63671
f_charbig = 'updated by trigger'
 
63672
      WHERE f_int1 = new.f_int1;
 
63673
END|
 
63674
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63675
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
63676
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63677
        
 
63678
# check trigger-1 success:      1
 
63679
DROP TRIGGER trg_1;
 
63680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63682
f_charbig = 'just inserted'
 
63683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63684
DELETE FROM t0_aux
 
63685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63688
'just inserted' FROM t0_template
 
63689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63690
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
63691
BEGIN
 
63692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63693
f_charbig = 'updated by trigger'
 
63694
      WHERE f_int1 = new.f_int1;
 
63695
END|
 
63696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63697
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
63698
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63699
        
 
63700
# check trigger-2 success:      1
 
63701
DROP TRIGGER trg_1;
 
63702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63704
f_charbig = 'just inserted'
 
63705
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63706
DELETE FROM t0_aux
 
63707
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63709
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63710
'just inserted' FROM t0_template
 
63711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63712
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
63713
BEGIN
 
63714
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63715
f_charbig = 'updated by trigger'
 
63716
      WHERE f_int1 = new.f_int1;
 
63717
END|
 
63718
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63719
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63720
        
 
63721
# check trigger-3 success:      1
 
63722
DROP TRIGGER trg_1;
 
63723
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63724
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63725
f_charbig = 'just inserted'
 
63726
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63727
DELETE FROM t0_aux
 
63728
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63729
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63730
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63731
'just inserted' FROM t0_template
 
63732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63733
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
63734
BEGIN
 
63735
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63736
f_charbig = 'updated by trigger'
 
63737
      WHERE f_int1 = - old.f_int1;
 
63738
END|
 
63739
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63740
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63741
        
 
63742
# check trigger-4 success:      1
 
63743
DROP TRIGGER trg_1;
 
63744
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63745
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63746
f_charbig = 'just inserted'
 
63747
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63748
DELETE FROM t0_aux
 
63749
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63750
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63751
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63752
'just inserted' FROM t0_template
 
63753
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63754
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
63755
BEGIN
 
63756
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63757
f_charbig = 'updated by trigger'
 
63758
      WHERE f_int1 = new.f_int1;
 
63759
END|
 
63760
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63761
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63762
        
 
63763
# check trigger-5 success:      1
 
63764
DROP TRIGGER trg_1;
 
63765
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63766
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63767
f_charbig = 'just inserted'
 
63768
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63769
DELETE FROM t0_aux
 
63770
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63771
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63772
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63773
'just inserted' FROM t0_template
 
63774
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63775
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
63776
BEGIN
 
63777
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63778
f_charbig = 'updated by trigger'
 
63779
      WHERE f_int1 = - old.f_int1;
 
63780
END|
 
63781
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
63782
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63783
        
 
63784
# check trigger-6 success:      1
 
63785
DROP TRIGGER trg_1;
 
63786
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63787
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63788
f_charbig = 'just inserted'
 
63789
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63790
DELETE FROM t0_aux
 
63791
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63793
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63794
'just inserted' FROM t0_template
 
63795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63796
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
63797
BEGIN
 
63798
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63799
f_charbig = 'updated by trigger'
 
63800
      WHERE f_int1 = - old.f_int1;
 
63801
END|
 
63802
DELETE FROM t0_aux
 
63803
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63804
        
 
63805
# check trigger-7 success:      1
 
63806
DROP TRIGGER trg_1;
 
63807
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63808
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63809
f_charbig = 'just inserted'
 
63810
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63811
DELETE FROM t0_aux
 
63812
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63813
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63814
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
63815
'just inserted' FROM t0_template
 
63816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63817
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
63818
BEGIN
 
63819
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
63820
f_charbig = 'updated by trigger'
 
63821
      WHERE f_int1 = - old.f_int1;
 
63822
END|
 
63823
DELETE FROM t0_aux
 
63824
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
63825
        
 
63826
# check trigger-8 success:      1
 
63827
DROP TRIGGER trg_1;
 
63828
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63829
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63830
f_charbig = 'just inserted'
 
63831
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
63832
DELETE FROM t0_aux
 
63833
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63834
DELETE FROM t1
 
63835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
63836
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
63837
BEGIN
 
63838
SET new.f_int1 = old.f_int1 + @max_row,
 
63839
new.f_int2 = old.f_int2 - @max_row,
 
63840
new.f_charbig = '####updated per update trigger####';
 
63841
END|
 
63842
UPDATE t1
 
63843
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
63844
f_charbig = '####updated per update statement itself####';
 
63845
        
 
63846
# check trigger-9 success:      1
 
63847
DROP TRIGGER trg_2;
 
63848
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63849
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63850
f_charbig = CONCAT('===',f_char1,'===');
 
63851
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
63852
BEGIN
 
63853
SET new.f_int1 = new.f_int1 + @max_row,
 
63854
new.f_int2 = new.f_int2 - @max_row,
 
63855
new.f_charbig = '####updated per update trigger####';
 
63856
END|
 
63857
UPDATE t1
 
63858
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
63859
f_charbig = '####updated per update statement itself####';
 
63860
        
 
63861
# check trigger-10 success:     1
 
63862
DROP TRIGGER trg_2;
 
63863
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
63864
f_int2 = CAST(f_char1 AS SIGNED INT),
 
63865
f_charbig = CONCAT('===',f_char1,'===');
 
63866
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
63867
BEGIN
 
63868
SET new.f_int1 = @my_max1 + @counter,
 
63869
new.f_int2 = @my_min2 - @counter,
 
63870
new.f_charbig = '####updated per insert trigger####';
 
63871
SET @counter = @counter + 1;
 
63872
END|
 
63873
SET @counter = 1;
 
63874
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
63875
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63876
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
63877
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
63878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
63879
ORDER BY f_int1;
 
63880
DROP TRIGGER trg_3;
 
63881
        
 
63882
# check trigger-11 success:     1
 
63883
DELETE FROM t1
 
63884
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
63885
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
63886
AND f_charbig = '####updated per insert trigger####';
 
63887
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
63888
BEGIN
 
63889
SET new.f_int1 = @my_max1 + @counter,
 
63890
new.f_int2 = @my_min2 - @counter,
 
63891
new.f_charbig = '####updated per insert trigger####';
 
63892
SET @counter = @counter + 1;
 
63893
END|
 
63894
SET @counter = 1;
 
63895
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
63896
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
63897
SELECT CAST(f_int1 AS CHAR),
 
63898
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
63899
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
63900
ORDER BY f_int1;
 
63901
DROP TRIGGER trg_3;
 
63902
        
 
63903
# check trigger-12 success:     1
 
63904
DELETE FROM t1
 
63905
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
63906
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
63907
AND f_charbig = '####updated per insert trigger####';
 
63908
ANALYZE  TABLE t1;
 
63909
Table   Op      Msg_type        Msg_text
 
63910
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
63911
CHECK    TABLE t1 EXTENDED;
 
63912
Table   Op      Msg_type        Msg_text
 
63913
test.t1 check   note    The storage engine for the table doesn't support check
 
63914
CHECKSUM TABLE t1 EXTENDED;
 
63915
Table   Checksum
 
63916
test.t1 <some_value>
 
63917
OPTIMIZE TABLE t1;
 
63918
Table   Op      Msg_type        Msg_text
 
63919
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
63920
# check layout success:    1
 
63921
REPAIR   TABLE t1 EXTENDED;
 
63922
Table   Op      Msg_type        Msg_text
 
63923
test.t1 repair  note    The storage engine for the table doesn't support repair
 
63924
# check layout success:    1
 
63925
TRUNCATE t1;
 
63926
        
 
63927
# check TRUNCATE success:       1
 
63928
# check layout success:    1
 
63929
# End usability test (inc/partition_check.inc)
 
63930
DROP TABLE t1;
 
63931
CREATE TABLE t1 (
 
63932
f_int1 INTEGER,
 
63933
f_int2 INTEGER,
 
63934
f_char1 CHAR(20),
 
63935
f_char2 CHAR(20),
 
63936
f_charbig VARCHAR(1000)
 
63937
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
63938
)
 
63939
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
63940
(PARTITION parta VALUES LESS THAN (0),
 
63941
PARTITION partb VALUES LESS THAN (5),
 
63942
PARTITION partc VALUES LESS THAN (10),
 
63943
PARTITION partd VALUES LESS THAN (2147483646));
 
63944
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63945
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
63946
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
63947
ALTER TABLE t1 DROP INDEX uidx1;
 
63948
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63949
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
63950
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
63951
# Start usability test (inc/partition_check.inc)
 
63952
create_command
 
63953
SHOW CREATE TABLE t1;
 
63954
Table   Create Table
 
63955
t1      CREATE TABLE `t1` (
 
63956
  `f_int1` int(11) DEFAULT NULL,
 
63957
  `f_int2` int(11) DEFAULT NULL,
 
63958
  `f_char1` char(20) DEFAULT NULL,
 
63959
  `f_char2` char(20) DEFAULT NULL,
 
63960
  `f_charbig` varchar(1000) DEFAULT NULL
 
63961
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
63962
 
 
63963
# check prerequisites-1 success:    1
 
63964
# check COUNT(*) success:    1
 
63965
# check MIN/MAX(f_int1) success:    1
 
63966
# check MIN/MAX(f_int2) success:    1
 
63967
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
63968
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
63969
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
63970
WHERE f_int1 IN (2,3);
 
63971
# check prerequisites-3 success:    1
 
63972
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
63973
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
63974
# check read via f_int1 success: 1
 
63975
# check read via f_int2 success: 1
 
63976
        
 
63977
# check multiple-1 success:     1
 
63978
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
63979
        
 
63980
# check multiple-2 success:     1
 
63981
INSERT INTO t1 SELECT * FROM t0_template
 
63982
WHERE MOD(f_int1,3) = 0;
 
63983
        
 
63984
# check multiple-3 success:     1
 
63985
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
63986
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
63987
AND @max_row_div2 + @max_row_div4;
 
63988
        
 
63989
# check multiple-4 success:     1
 
63990
DELETE FROM t1
 
63991
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
63992
AND @max_row_div2 + @max_row_div4 + @max_row;
 
63993
        
 
63994
# check multiple-5 success:     1
 
63995
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
63996
INSERT INTO t1
 
63997
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
63998
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
63999
f_charbig = '#SINGLE#';
 
64000
        
 
64001
# check single-1 success:       1
 
64002
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
64003
INSERT INTO t1
 
64004
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
64005
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
64006
f_charbig = '#SINGLE#';
 
64007
        
 
64008
# check single-2 success:       1
 
64009
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
64010
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
64011
UPDATE t1 SET f_int1 = @cur_value2
 
64012
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
64013
        
 
64014
# check single-3 success:       1
 
64015
SET @cur_value1= -1;
 
64016
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
64017
UPDATE t1 SET f_int1 = @cur_value1
 
64018
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
64019
        
 
64020
# check single-4 success:       1
 
64021
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
64022
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
64023
        
 
64024
# check single-5 success:       1
 
64025
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
64026
        
 
64027
# check single-6 success:       1
 
64028
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
64029
ERROR HY000: Table has no partition for value 2147483647
 
64030
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
64031
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
64032
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
64033
f_charbig = '#NULL#';
 
64034
INSERT INTO t1
 
64035
SET f_int1 = NULL , f_int2 = -@max_row,
 
64036
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
64037
f_charbig = '#NULL#';
 
64038
# check null success:    1
 
64039
        
 
64040
# check null-1 success:         1
 
64041
UPDATE t1 SET f_int1 = -@max_row
 
64042
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64043
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64044
        
 
64045
# check null-2 success:         1
 
64046
UPDATE t1 SET f_int1 = NULL
 
64047
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64048
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64049
        
 
64050
# check null-3 success:         1
 
64051
DELETE FROM t1
 
64052
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64053
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64054
        
 
64055
# check null-4 success:         1
 
64056
DELETE FROM t1
 
64057
WHERE f_int1 = 0 AND f_int2 = 0
 
64058
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
64059
AND f_charbig = '#NULL#';
 
64060
SET AUTOCOMMIT= 0;
 
64061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64062
SELECT f_int1, f_int1, '', '', 'was inserted'
 
64063
FROM t0_template source_tab
 
64064
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
64065
        
 
64066
# check transactions-1 success:         1
 
64067
COMMIT WORK;
 
64068
        
 
64069
# check transactions-2 success:         1
 
64070
ROLLBACK WORK;
 
64071
        
 
64072
# check transactions-3 success:         1
 
64073
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
64074
COMMIT WORK;
 
64075
ROLLBACK WORK;
 
64076
        
 
64077
# check transactions-4 success:         1
 
64078
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64079
SELECT f_int1, f_int1, '', '', 'was inserted'
 
64080
FROM t0_template source_tab
 
64081
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
64082
        
 
64083
# check transactions-5 success:         1
 
64084
ROLLBACK WORK;
 
64085
        
 
64086
# check transactions-6 success:         1
 
64087
# INFO: Storage engine used for t1 seems to be transactional.
 
64088
COMMIT;
 
64089
        
 
64090
# check transactions-7 success:         1
 
64091
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
64092
COMMIT WORK;
 
64093
SET @@session.sql_mode = 'traditional';
 
64094
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
64095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64096
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
64097
'', '', 'was inserted' FROM t0_template
 
64098
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
64099
ERROR 22012: Division by 0
 
64100
COMMIT;
 
64101
        
 
64102
# check transactions-8 success:         1
 
64103
# INFO: Storage engine used for t1 seems to be able to revert
 
64104
#       changes made by the failing statement.
 
64105
SET @@session.sql_mode = '';
 
64106
SET AUTOCOMMIT= 1;
 
64107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
64108
COMMIT WORK;
 
64109
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
64110
        
 
64111
# check special-1 success:      1
 
64112
UPDATE t1 SET f_charbig = '';
 
64113
        
 
64114
# check special-2 success:      1
 
64115
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
64116
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64117
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
64118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64119
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64120
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64121
'just inserted' FROM t0_template
 
64122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64123
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
64124
BEGIN
 
64125
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64126
f_charbig = 'updated by trigger'
 
64127
      WHERE f_int1 = new.f_int1;
 
64128
END|
 
64129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64130
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
64131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64132
        
 
64133
# check trigger-1 success:      1
 
64134
DROP TRIGGER trg_1;
 
64135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64137
f_charbig = 'just inserted'
 
64138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64139
DELETE FROM t0_aux
 
64140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64143
'just inserted' FROM t0_template
 
64144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64145
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
64146
BEGIN
 
64147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64148
f_charbig = 'updated by trigger'
 
64149
      WHERE f_int1 = new.f_int1;
 
64150
END|
 
64151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64152
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
64153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64154
        
 
64155
# check trigger-2 success:      1
 
64156
DROP TRIGGER trg_1;
 
64157
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64158
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64159
f_charbig = 'just inserted'
 
64160
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64161
DELETE FROM t0_aux
 
64162
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64164
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64165
'just inserted' FROM t0_template
 
64166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64167
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
64168
BEGIN
 
64169
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64170
f_charbig = 'updated by trigger'
 
64171
      WHERE f_int1 = new.f_int1;
 
64172
END|
 
64173
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64174
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64175
        
 
64176
# check trigger-3 success:      1
 
64177
DROP TRIGGER trg_1;
 
64178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64180
f_charbig = 'just inserted'
 
64181
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64182
DELETE FROM t0_aux
 
64183
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64184
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64185
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64186
'just inserted' FROM t0_template
 
64187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64188
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
64189
BEGIN
 
64190
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64191
f_charbig = 'updated by trigger'
 
64192
      WHERE f_int1 = - old.f_int1;
 
64193
END|
 
64194
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64195
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64196
        
 
64197
# check trigger-4 success:      1
 
64198
DROP TRIGGER trg_1;
 
64199
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64200
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64201
f_charbig = 'just inserted'
 
64202
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64203
DELETE FROM t0_aux
 
64204
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64205
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64206
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64207
'just inserted' FROM t0_template
 
64208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64209
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
64210
BEGIN
 
64211
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64212
f_charbig = 'updated by trigger'
 
64213
      WHERE f_int1 = new.f_int1;
 
64214
END|
 
64215
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64216
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64217
        
 
64218
# check trigger-5 success:      1
 
64219
DROP TRIGGER trg_1;
 
64220
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64221
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64222
f_charbig = 'just inserted'
 
64223
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64224
DELETE FROM t0_aux
 
64225
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64226
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64227
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64228
'just inserted' FROM t0_template
 
64229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64230
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
64231
BEGIN
 
64232
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64233
f_charbig = 'updated by trigger'
 
64234
      WHERE f_int1 = - old.f_int1;
 
64235
END|
 
64236
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64237
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64238
        
 
64239
# check trigger-6 success:      1
 
64240
DROP TRIGGER trg_1;
 
64241
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64242
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64243
f_charbig = 'just inserted'
 
64244
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64245
DELETE FROM t0_aux
 
64246
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64248
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64249
'just inserted' FROM t0_template
 
64250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64251
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
64252
BEGIN
 
64253
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64254
f_charbig = 'updated by trigger'
 
64255
      WHERE f_int1 = - old.f_int1;
 
64256
END|
 
64257
DELETE FROM t0_aux
 
64258
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64259
        
 
64260
# check trigger-7 success:      1
 
64261
DROP TRIGGER trg_1;
 
64262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64264
f_charbig = 'just inserted'
 
64265
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64266
DELETE FROM t0_aux
 
64267
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64270
'just inserted' FROM t0_template
 
64271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64272
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
64273
BEGIN
 
64274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64275
f_charbig = 'updated by trigger'
 
64276
      WHERE f_int1 = - old.f_int1;
 
64277
END|
 
64278
DELETE FROM t0_aux
 
64279
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64280
        
 
64281
# check trigger-8 success:      1
 
64282
DROP TRIGGER trg_1;
 
64283
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64284
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64285
f_charbig = 'just inserted'
 
64286
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64287
DELETE FROM t0_aux
 
64288
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64289
DELETE FROM t1
 
64290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64291
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
64292
BEGIN
 
64293
SET new.f_int1 = old.f_int1 + @max_row,
 
64294
new.f_int2 = old.f_int2 - @max_row,
 
64295
new.f_charbig = '####updated per update trigger####';
 
64296
END|
 
64297
UPDATE t1
 
64298
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
64299
f_charbig = '####updated per update statement itself####';
 
64300
        
 
64301
# check trigger-9 success:      1
 
64302
DROP TRIGGER trg_2;
 
64303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64305
f_charbig = CONCAT('===',f_char1,'===');
 
64306
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
64307
BEGIN
 
64308
SET new.f_int1 = new.f_int1 + @max_row,
 
64309
new.f_int2 = new.f_int2 - @max_row,
 
64310
new.f_charbig = '####updated per update trigger####';
 
64311
END|
 
64312
UPDATE t1
 
64313
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
64314
f_charbig = '####updated per update statement itself####';
 
64315
        
 
64316
# check trigger-10 success:     1
 
64317
DROP TRIGGER trg_2;
 
64318
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64319
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64320
f_charbig = CONCAT('===',f_char1,'===');
 
64321
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
64322
BEGIN
 
64323
SET new.f_int1 = @my_max1 + @counter,
 
64324
new.f_int2 = @my_min2 - @counter,
 
64325
new.f_charbig = '####updated per insert trigger####';
 
64326
SET @counter = @counter + 1;
 
64327
END|
 
64328
SET @counter = 1;
 
64329
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
64330
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64331
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
64332
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
64333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
64334
ORDER BY f_int1;
 
64335
DROP TRIGGER trg_3;
 
64336
        
 
64337
# check trigger-11 success:     1
 
64338
DELETE FROM t1
 
64339
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
64340
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
64341
AND f_charbig = '####updated per insert trigger####';
 
64342
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
64343
BEGIN
 
64344
SET new.f_int1 = @my_max1 + @counter,
 
64345
new.f_int2 = @my_min2 - @counter,
 
64346
new.f_charbig = '####updated per insert trigger####';
 
64347
SET @counter = @counter + 1;
 
64348
END|
 
64349
SET @counter = 1;
 
64350
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
64351
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
64352
SELECT CAST(f_int1 AS CHAR),
 
64353
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
64354
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
64355
ORDER BY f_int1;
 
64356
DROP TRIGGER trg_3;
 
64357
        
 
64358
# check trigger-12 success:     1
 
64359
DELETE FROM t1
 
64360
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
64361
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
64362
AND f_charbig = '####updated per insert trigger####';
 
64363
ANALYZE  TABLE t1;
 
64364
Table   Op      Msg_type        Msg_text
 
64365
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
64366
CHECK    TABLE t1 EXTENDED;
 
64367
Table   Op      Msg_type        Msg_text
 
64368
test.t1 check   note    The storage engine for the table doesn't support check
 
64369
CHECKSUM TABLE t1 EXTENDED;
 
64370
Table   Checksum
 
64371
test.t1 <some_value>
 
64372
OPTIMIZE TABLE t1;
 
64373
Table   Op      Msg_type        Msg_text
 
64374
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
64375
# check layout success:    1
 
64376
REPAIR   TABLE t1 EXTENDED;
 
64377
Table   Op      Msg_type        Msg_text
 
64378
test.t1 repair  note    The storage engine for the table doesn't support repair
 
64379
# check layout success:    1
 
64380
TRUNCATE t1;
 
64381
        
 
64382
# check TRUNCATE success:       1
 
64383
# check layout success:    1
 
64384
# End usability test (inc/partition_check.inc)
 
64385
DROP TABLE t1;
 
64386
CREATE TABLE t1 (
 
64387
f_int1 INTEGER,
 
64388
f_int2 INTEGER,
 
64389
f_char1 CHAR(20),
 
64390
f_char2 CHAR(20),
 
64391
f_charbig VARCHAR(1000)
 
64392
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
64393
)
 
64394
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
64395
(PARTITION part1 VALUES LESS THAN (0)
 
64396
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
64397
PARTITION part2 VALUES LESS THAN (5)
 
64398
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
64399
PARTITION part3 VALUES LESS THAN (10)
 
64400
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
64401
PARTITION part4 VALUES LESS THAN (2147483646)
 
64402
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
64403
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64404
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
64405
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
64406
ALTER TABLE t1 DROP INDEX uidx1;
 
64407
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64408
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
64409
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
64410
# Start usability test (inc/partition_check.inc)
 
64411
create_command
 
64412
SHOW CREATE TABLE t1;
 
64413
Table   Create Table
 
64414
t1      CREATE TABLE `t1` (
 
64415
  `f_int1` int(11) DEFAULT NULL,
 
64416
  `f_int2` int(11) DEFAULT NULL,
 
64417
  `f_char1` char(20) DEFAULT NULL,
 
64418
  `f_char2` char(20) DEFAULT NULL,
 
64419
  `f_charbig` varchar(1000) DEFAULT NULL
 
64420
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
64421
 
 
64422
# check prerequisites-1 success:    1
 
64423
# check COUNT(*) success:    1
 
64424
# check MIN/MAX(f_int1) success:    1
 
64425
# check MIN/MAX(f_int2) success:    1
 
64426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64427
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
64428
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
64429
WHERE f_int1 IN (2,3);
 
64430
# check prerequisites-3 success:    1
 
64431
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
64432
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
64433
# check read via f_int1 success: 1
 
64434
# check read via f_int2 success: 1
 
64435
        
 
64436
# check multiple-1 success:     1
 
64437
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
64438
        
 
64439
# check multiple-2 success:     1
 
64440
INSERT INTO t1 SELECT * FROM t0_template
 
64441
WHERE MOD(f_int1,3) = 0;
 
64442
        
 
64443
# check multiple-3 success:     1
 
64444
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
64445
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
64446
AND @max_row_div2 + @max_row_div4;
 
64447
        
 
64448
# check multiple-4 success:     1
 
64449
DELETE FROM t1
 
64450
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
64451
AND @max_row_div2 + @max_row_div4 + @max_row;
 
64452
        
 
64453
# check multiple-5 success:     1
 
64454
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
64455
INSERT INTO t1
 
64456
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
64457
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
64458
f_charbig = '#SINGLE#';
 
64459
        
 
64460
# check single-1 success:       1
 
64461
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
64462
INSERT INTO t1
 
64463
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
64464
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
64465
f_charbig = '#SINGLE#';
 
64466
        
 
64467
# check single-2 success:       1
 
64468
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
64469
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
64470
UPDATE t1 SET f_int1 = @cur_value2
 
64471
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
64472
        
 
64473
# check single-3 success:       1
 
64474
SET @cur_value1= -1;
 
64475
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
64476
UPDATE t1 SET f_int1 = @cur_value1
 
64477
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
64478
        
 
64479
# check single-4 success:       1
 
64480
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
64481
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
64482
        
 
64483
# check single-5 success:       1
 
64484
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
64485
        
 
64486
# check single-6 success:       1
 
64487
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
64488
ERROR HY000: Table has no partition for value 2147483647
 
64489
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
64490
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
64491
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
64492
f_charbig = '#NULL#';
 
64493
INSERT INTO t1
 
64494
SET f_int1 = NULL , f_int2 = -@max_row,
 
64495
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
64496
f_charbig = '#NULL#';
 
64497
# check null success:    1
 
64498
        
 
64499
# check null-1 success:         1
 
64500
UPDATE t1 SET f_int1 = -@max_row
 
64501
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64502
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64503
        
 
64504
# check null-2 success:         1
 
64505
UPDATE t1 SET f_int1 = NULL
 
64506
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64507
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64508
        
 
64509
# check null-3 success:         1
 
64510
DELETE FROM t1
 
64511
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64512
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64513
        
 
64514
# check null-4 success:         1
 
64515
DELETE FROM t1
 
64516
WHERE f_int1 = 0 AND f_int2 = 0
 
64517
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
64518
AND f_charbig = '#NULL#';
 
64519
SET AUTOCOMMIT= 0;
 
64520
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64521
SELECT f_int1, f_int1, '', '', 'was inserted'
 
64522
FROM t0_template source_tab
 
64523
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
64524
        
 
64525
# check transactions-1 success:         1
 
64526
COMMIT WORK;
 
64527
        
 
64528
# check transactions-2 success:         1
 
64529
ROLLBACK WORK;
 
64530
        
 
64531
# check transactions-3 success:         1
 
64532
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
64533
COMMIT WORK;
 
64534
ROLLBACK WORK;
 
64535
        
 
64536
# check transactions-4 success:         1
 
64537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64538
SELECT f_int1, f_int1, '', '', 'was inserted'
 
64539
FROM t0_template source_tab
 
64540
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
64541
        
 
64542
# check transactions-5 success:         1
 
64543
ROLLBACK WORK;
 
64544
        
 
64545
# check transactions-6 success:         1
 
64546
# INFO: Storage engine used for t1 seems to be transactional.
 
64547
COMMIT;
 
64548
        
 
64549
# check transactions-7 success:         1
 
64550
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
64551
COMMIT WORK;
 
64552
SET @@session.sql_mode = 'traditional';
 
64553
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
64554
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64555
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
64556
'', '', 'was inserted' FROM t0_template
 
64557
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
64558
ERROR 22012: Division by 0
 
64559
COMMIT;
 
64560
        
 
64561
# check transactions-8 success:         1
 
64562
# INFO: Storage engine used for t1 seems to be able to revert
 
64563
#       changes made by the failing statement.
 
64564
SET @@session.sql_mode = '';
 
64565
SET AUTOCOMMIT= 1;
 
64566
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
64567
COMMIT WORK;
 
64568
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
64569
        
 
64570
# check special-1 success:      1
 
64571
UPDATE t1 SET f_charbig = '';
 
64572
        
 
64573
# check special-2 success:      1
 
64574
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
64575
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64576
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
64577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64580
'just inserted' FROM t0_template
 
64581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64582
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
64583
BEGIN
 
64584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64585
f_charbig = 'updated by trigger'
 
64586
      WHERE f_int1 = new.f_int1;
 
64587
END|
 
64588
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64589
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
64590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64591
        
 
64592
# check trigger-1 success:      1
 
64593
DROP TRIGGER trg_1;
 
64594
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64595
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64596
f_charbig = 'just inserted'
 
64597
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64598
DELETE FROM t0_aux
 
64599
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64601
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64602
'just inserted' FROM t0_template
 
64603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64604
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
64605
BEGIN
 
64606
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64607
f_charbig = 'updated by trigger'
 
64608
      WHERE f_int1 = new.f_int1;
 
64609
END|
 
64610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64611
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
64612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64613
        
 
64614
# check trigger-2 success:      1
 
64615
DROP TRIGGER trg_1;
 
64616
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64617
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64618
f_charbig = 'just inserted'
 
64619
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64620
DELETE FROM t0_aux
 
64621
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64622
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64623
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64624
'just inserted' FROM t0_template
 
64625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64626
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
64627
BEGIN
 
64628
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64629
f_charbig = 'updated by trigger'
 
64630
      WHERE f_int1 = new.f_int1;
 
64631
END|
 
64632
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64633
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64634
        
 
64635
# check trigger-3 success:      1
 
64636
DROP TRIGGER trg_1;
 
64637
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64638
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64639
f_charbig = 'just inserted'
 
64640
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64641
DELETE FROM t0_aux
 
64642
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64643
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64644
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64645
'just inserted' FROM t0_template
 
64646
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64647
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
64648
BEGIN
 
64649
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64650
f_charbig = 'updated by trigger'
 
64651
      WHERE f_int1 = - old.f_int1;
 
64652
END|
 
64653
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64654
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64655
        
 
64656
# check trigger-4 success:      1
 
64657
DROP TRIGGER trg_1;
 
64658
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64659
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64660
f_charbig = 'just inserted'
 
64661
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64662
DELETE FROM t0_aux
 
64663
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64664
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64665
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64666
'just inserted' FROM t0_template
 
64667
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64668
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
64669
BEGIN
 
64670
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64671
f_charbig = 'updated by trigger'
 
64672
      WHERE f_int1 = new.f_int1;
 
64673
END|
 
64674
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64675
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64676
        
 
64677
# check trigger-5 success:      1
 
64678
DROP TRIGGER trg_1;
 
64679
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64680
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64681
f_charbig = 'just inserted'
 
64682
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64683
DELETE FROM t0_aux
 
64684
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64685
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64686
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64687
'just inserted' FROM t0_template
 
64688
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64689
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
64690
BEGIN
 
64691
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64692
f_charbig = 'updated by trigger'
 
64693
      WHERE f_int1 = - old.f_int1;
 
64694
END|
 
64695
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
64696
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64697
        
 
64698
# check trigger-6 success:      1
 
64699
DROP TRIGGER trg_1;
 
64700
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64701
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64702
f_charbig = 'just inserted'
 
64703
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64704
DELETE FROM t0_aux
 
64705
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64706
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64707
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64708
'just inserted' FROM t0_template
 
64709
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64710
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
64711
BEGIN
 
64712
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64713
f_charbig = 'updated by trigger'
 
64714
      WHERE f_int1 = - old.f_int1;
 
64715
END|
 
64716
DELETE FROM t0_aux
 
64717
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64718
        
 
64719
# check trigger-7 success:      1
 
64720
DROP TRIGGER trg_1;
 
64721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64723
f_charbig = 'just inserted'
 
64724
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64725
DELETE FROM t0_aux
 
64726
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64728
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
64729
'just inserted' FROM t0_template
 
64730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64731
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
64732
BEGIN
 
64733
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
64734
f_charbig = 'updated by trigger'
 
64735
      WHERE f_int1 = - old.f_int1;
 
64736
END|
 
64737
DELETE FROM t0_aux
 
64738
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
64739
        
 
64740
# check trigger-8 success:      1
 
64741
DROP TRIGGER trg_1;
 
64742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64743
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64744
f_charbig = 'just inserted'
 
64745
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
64746
DELETE FROM t0_aux
 
64747
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64748
DELETE FROM t1
 
64749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
64750
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
64751
BEGIN
 
64752
SET new.f_int1 = old.f_int1 + @max_row,
 
64753
new.f_int2 = old.f_int2 - @max_row,
 
64754
new.f_charbig = '####updated per update trigger####';
 
64755
END|
 
64756
UPDATE t1
 
64757
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
64758
f_charbig = '####updated per update statement itself####';
 
64759
        
 
64760
# check trigger-9 success:      1
 
64761
DROP TRIGGER trg_2;
 
64762
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64763
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64764
f_charbig = CONCAT('===',f_char1,'===');
 
64765
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
64766
BEGIN
 
64767
SET new.f_int1 = new.f_int1 + @max_row,
 
64768
new.f_int2 = new.f_int2 - @max_row,
 
64769
new.f_charbig = '####updated per update trigger####';
 
64770
END|
 
64771
UPDATE t1
 
64772
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
64773
f_charbig = '####updated per update statement itself####';
 
64774
        
 
64775
# check trigger-10 success:     1
 
64776
DROP TRIGGER trg_2;
 
64777
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
64778
f_int2 = CAST(f_char1 AS SIGNED INT),
 
64779
f_charbig = CONCAT('===',f_char1,'===');
 
64780
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
64781
BEGIN
 
64782
SET new.f_int1 = @my_max1 + @counter,
 
64783
new.f_int2 = @my_min2 - @counter,
 
64784
new.f_charbig = '####updated per insert trigger####';
 
64785
SET @counter = @counter + 1;
 
64786
END|
 
64787
SET @counter = 1;
 
64788
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
64789
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64790
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
64791
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
64792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
64793
ORDER BY f_int1;
 
64794
DROP TRIGGER trg_3;
 
64795
        
 
64796
# check trigger-11 success:     1
 
64797
DELETE FROM t1
 
64798
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
64799
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
64800
AND f_charbig = '####updated per insert trigger####';
 
64801
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
64802
BEGIN
 
64803
SET new.f_int1 = @my_max1 + @counter,
 
64804
new.f_int2 = @my_min2 - @counter,
 
64805
new.f_charbig = '####updated per insert trigger####';
 
64806
SET @counter = @counter + 1;
 
64807
END|
 
64808
SET @counter = 1;
 
64809
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
64810
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
64811
SELECT CAST(f_int1 AS CHAR),
 
64812
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
64813
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
64814
ORDER BY f_int1;
 
64815
DROP TRIGGER trg_3;
 
64816
        
 
64817
# check trigger-12 success:     1
 
64818
DELETE FROM t1
 
64819
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
64820
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
64821
AND f_charbig = '####updated per insert trigger####';
 
64822
ANALYZE  TABLE t1;
 
64823
Table   Op      Msg_type        Msg_text
 
64824
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
64825
CHECK    TABLE t1 EXTENDED;
 
64826
Table   Op      Msg_type        Msg_text
 
64827
test.t1 check   note    The storage engine for the table doesn't support check
 
64828
CHECKSUM TABLE t1 EXTENDED;
 
64829
Table   Checksum
 
64830
test.t1 <some_value>
 
64831
OPTIMIZE TABLE t1;
 
64832
Table   Op      Msg_type        Msg_text
 
64833
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
64834
# check layout success:    1
 
64835
REPAIR   TABLE t1 EXTENDED;
 
64836
Table   Op      Msg_type        Msg_text
 
64837
test.t1 repair  note    The storage engine for the table doesn't support repair
 
64838
# check layout success:    1
 
64839
TRUNCATE t1;
 
64840
        
 
64841
# check TRUNCATE success:       1
 
64842
# check layout success:    1
 
64843
# End usability test (inc/partition_check.inc)
 
64844
DROP TABLE t1;
 
64845
CREATE TABLE t1 (
 
64846
f_int1 INTEGER,
 
64847
f_int2 INTEGER,
 
64848
f_char1 CHAR(20),
 
64849
f_char2 CHAR(20),
 
64850
f_charbig VARCHAR(1000)
 
64851
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
64852
)
 
64853
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
64854
(PARTITION part1 VALUES IN (0)
 
64855
(SUBPARTITION sp11, SUBPARTITION sp12),
 
64856
PARTITION part2 VALUES IN (1)
 
64857
(SUBPARTITION sp21, SUBPARTITION sp22),
 
64858
PARTITION part3 VALUES IN (2)
 
64859
(SUBPARTITION sp31, SUBPARTITION sp32),
 
64860
PARTITION part4 VALUES IN (NULL)
 
64861
(SUBPARTITION sp41, SUBPARTITION sp42));
 
64862
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64863
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
64864
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
64865
ALTER TABLE t1 DROP INDEX uidx1;
 
64866
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64867
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
64868
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
64869
# Start usability test (inc/partition_check.inc)
 
64870
create_command
 
64871
SHOW CREATE TABLE t1;
 
64872
Table   Create Table
 
64873
t1      CREATE TABLE `t1` (
 
64874
  `f_int1` int(11) DEFAULT NULL,
 
64875
  `f_int2` int(11) DEFAULT NULL,
 
64876
  `f_char1` char(20) DEFAULT NULL,
 
64877
  `f_char2` char(20) DEFAULT NULL,
 
64878
  `f_charbig` varchar(1000) DEFAULT NULL
 
64879
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
64880
 
 
64881
# check prerequisites-1 success:    1
 
64882
# check COUNT(*) success:    1
 
64883
# check MIN/MAX(f_int1) success:    1
 
64884
# check MIN/MAX(f_int2) success:    1
 
64885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64886
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
64887
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
64888
WHERE f_int1 IN (2,3);
 
64889
# check prerequisites-3 success:    1
 
64890
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
64891
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
64892
# check read via f_int1 success: 1
 
64893
# check read via f_int2 success: 1
 
64894
        
 
64895
# check multiple-1 success:     1
 
64896
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
64897
        
 
64898
# check multiple-2 success:     1
 
64899
INSERT INTO t1 SELECT * FROM t0_template
 
64900
WHERE MOD(f_int1,3) = 0;
 
64901
        
 
64902
# check multiple-3 success:     1
 
64903
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
64904
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
64905
AND @max_row_div2 + @max_row_div4;
 
64906
        
 
64907
# check multiple-4 success:     1
 
64908
DELETE FROM t1
 
64909
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
64910
AND @max_row_div2 + @max_row_div4 + @max_row;
 
64911
        
 
64912
# check multiple-5 success:     1
 
64913
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
64914
INSERT INTO t1
 
64915
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
64916
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
64917
f_charbig = '#SINGLE#';
 
64918
        
 
64919
# check single-1 success:       1
 
64920
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
64921
INSERT INTO t1
 
64922
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
64923
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
64924
f_charbig = '#SINGLE#';
 
64925
        
 
64926
# check single-2 success:       1
 
64927
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
64928
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
64929
UPDATE t1 SET f_int1 = @cur_value2
 
64930
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
64931
        
 
64932
# check single-3 success:       1
 
64933
SET @cur_value1= -1;
 
64934
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
64935
UPDATE t1 SET f_int1 = @cur_value1
 
64936
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
64937
        
 
64938
# check single-4 success:       1
 
64939
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
64940
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
64941
        
 
64942
# check single-5 success:       1
 
64943
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
64944
        
 
64945
# check single-6 success:       1
 
64946
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
64947
        
 
64948
# check single-7 success:       1
 
64949
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
64950
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
64951
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
64952
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
64953
f_charbig = '#NULL#';
 
64954
INSERT INTO t1
 
64955
SET f_int1 = NULL , f_int2 = -@max_row,
 
64956
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
64957
f_charbig = '#NULL#';
 
64958
# check null success:    1
 
64959
        
 
64960
# check null-1 success:         1
 
64961
UPDATE t1 SET f_int1 = -@max_row
 
64962
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64963
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64964
        
 
64965
# check null-2 success:         1
 
64966
UPDATE t1 SET f_int1 = NULL
 
64967
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64968
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64969
        
 
64970
# check null-3 success:         1
 
64971
DELETE FROM t1
 
64972
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
64973
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
64974
        
 
64975
# check null-4 success:         1
 
64976
DELETE FROM t1
 
64977
WHERE f_int1 = 0 AND f_int2 = 0
 
64978
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
64979
AND f_charbig = '#NULL#';
 
64980
SET AUTOCOMMIT= 0;
 
64981
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64982
SELECT f_int1, f_int1, '', '', 'was inserted'
 
64983
FROM t0_template source_tab
 
64984
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
64985
        
 
64986
# check transactions-1 success:         1
 
64987
COMMIT WORK;
 
64988
        
 
64989
# check transactions-2 success:         1
 
64990
ROLLBACK WORK;
 
64991
        
 
64992
# check transactions-3 success:         1
 
64993
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
64994
COMMIT WORK;
 
64995
ROLLBACK WORK;
 
64996
        
 
64997
# check transactions-4 success:         1
 
64998
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
64999
SELECT f_int1, f_int1, '', '', 'was inserted'
 
65000
FROM t0_template source_tab
 
65001
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65002
        
 
65003
# check transactions-5 success:         1
 
65004
ROLLBACK WORK;
 
65005
        
 
65006
# check transactions-6 success:         1
 
65007
# INFO: Storage engine used for t1 seems to be transactional.
 
65008
COMMIT;
 
65009
        
 
65010
# check transactions-7 success:         1
 
65011
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65012
COMMIT WORK;
 
65013
SET @@session.sql_mode = 'traditional';
 
65014
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
65015
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65016
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
65017
'', '', 'was inserted' FROM t0_template
 
65018
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65019
ERROR 22012: Division by 0
 
65020
COMMIT;
 
65021
        
 
65022
# check transactions-8 success:         1
 
65023
# INFO: Storage engine used for t1 seems to be able to revert
 
65024
#       changes made by the failing statement.
 
65025
SET @@session.sql_mode = '';
 
65026
SET AUTOCOMMIT= 1;
 
65027
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65028
COMMIT WORK;
 
65029
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
65030
        
 
65031
# check special-1 success:      1
 
65032
UPDATE t1 SET f_charbig = '';
 
65033
        
 
65034
# check special-2 success:      1
 
65035
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
65036
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65037
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
65038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65040
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65041
'just inserted' FROM t0_template
 
65042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65043
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
65044
BEGIN
 
65045
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65046
f_charbig = 'updated by trigger'
 
65047
      WHERE f_int1 = new.f_int1;
 
65048
END|
 
65049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65050
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
65051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65052
        
 
65053
# check trigger-1 success:      1
 
65054
DROP TRIGGER trg_1;
 
65055
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65056
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65057
f_charbig = 'just inserted'
 
65058
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65059
DELETE FROM t0_aux
 
65060
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65063
'just inserted' FROM t0_template
 
65064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65065
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
65066
BEGIN
 
65067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65068
f_charbig = 'updated by trigger'
 
65069
      WHERE f_int1 = new.f_int1;
 
65070
END|
 
65071
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65072
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
65073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65074
        
 
65075
# check trigger-2 success:      1
 
65076
DROP TRIGGER trg_1;
 
65077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65079
f_charbig = 'just inserted'
 
65080
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65081
DELETE FROM t0_aux
 
65082
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65083
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65084
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65085
'just inserted' FROM t0_template
 
65086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65087
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
65088
BEGIN
 
65089
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65090
f_charbig = 'updated by trigger'
 
65091
      WHERE f_int1 = new.f_int1;
 
65092
END|
 
65093
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65094
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65095
        
 
65096
# check trigger-3 success:      1
 
65097
DROP TRIGGER trg_1;
 
65098
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65099
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65100
f_charbig = 'just inserted'
 
65101
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65102
DELETE FROM t0_aux
 
65103
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65105
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65106
'just inserted' FROM t0_template
 
65107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65108
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
65109
BEGIN
 
65110
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65111
f_charbig = 'updated by trigger'
 
65112
      WHERE f_int1 = - old.f_int1;
 
65113
END|
 
65114
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65115
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65116
        
 
65117
# check trigger-4 success:      1
 
65118
DROP TRIGGER trg_1;
 
65119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65121
f_charbig = 'just inserted'
 
65122
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65123
DELETE FROM t0_aux
 
65124
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65127
'just inserted' FROM t0_template
 
65128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65129
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
65130
BEGIN
 
65131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65132
f_charbig = 'updated by trigger'
 
65133
      WHERE f_int1 = new.f_int1;
 
65134
END|
 
65135
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65136
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65137
        
 
65138
# check trigger-5 success:      1
 
65139
DROP TRIGGER trg_1;
 
65140
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65141
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65142
f_charbig = 'just inserted'
 
65143
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65144
DELETE FROM t0_aux
 
65145
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65147
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65148
'just inserted' FROM t0_template
 
65149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65150
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
65151
BEGIN
 
65152
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65153
f_charbig = 'updated by trigger'
 
65154
      WHERE f_int1 = - old.f_int1;
 
65155
END|
 
65156
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65157
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65158
        
 
65159
# check trigger-6 success:      1
 
65160
DROP TRIGGER trg_1;
 
65161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65163
f_charbig = 'just inserted'
 
65164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65165
DELETE FROM t0_aux
 
65166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65169
'just inserted' FROM t0_template
 
65170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65171
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
65172
BEGIN
 
65173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65174
f_charbig = 'updated by trigger'
 
65175
      WHERE f_int1 = - old.f_int1;
 
65176
END|
 
65177
DELETE FROM t0_aux
 
65178
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65179
        
 
65180
# check trigger-7 success:      1
 
65181
DROP TRIGGER trg_1;
 
65182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65184
f_charbig = 'just inserted'
 
65185
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65186
DELETE FROM t0_aux
 
65187
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65189
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65190
'just inserted' FROM t0_template
 
65191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65192
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
65193
BEGIN
 
65194
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65195
f_charbig = 'updated by trigger'
 
65196
      WHERE f_int1 = - old.f_int1;
 
65197
END|
 
65198
DELETE FROM t0_aux
 
65199
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65200
        
 
65201
# check trigger-8 success:      1
 
65202
DROP TRIGGER trg_1;
 
65203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65205
f_charbig = 'just inserted'
 
65206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65207
DELETE FROM t0_aux
 
65208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65209
DELETE FROM t1
 
65210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65211
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
65212
BEGIN
 
65213
SET new.f_int1 = old.f_int1 + @max_row,
 
65214
new.f_int2 = old.f_int2 - @max_row,
 
65215
new.f_charbig = '####updated per update trigger####';
 
65216
END|
 
65217
UPDATE t1
 
65218
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
65219
f_charbig = '####updated per update statement itself####';
 
65220
        
 
65221
# check trigger-9 success:      1
 
65222
DROP TRIGGER trg_2;
 
65223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65225
f_charbig = CONCAT('===',f_char1,'===');
 
65226
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
65227
BEGIN
 
65228
SET new.f_int1 = new.f_int1 + @max_row,
 
65229
new.f_int2 = new.f_int2 - @max_row,
 
65230
new.f_charbig = '####updated per update trigger####';
 
65231
END|
 
65232
UPDATE t1
 
65233
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
65234
f_charbig = '####updated per update statement itself####';
 
65235
        
 
65236
# check trigger-10 success:     1
 
65237
DROP TRIGGER trg_2;
 
65238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65240
f_charbig = CONCAT('===',f_char1,'===');
 
65241
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
65242
BEGIN
 
65243
SET new.f_int1 = @my_max1 + @counter,
 
65244
new.f_int2 = @my_min2 - @counter,
 
65245
new.f_charbig = '####updated per insert trigger####';
 
65246
SET @counter = @counter + 1;
 
65247
END|
 
65248
SET @counter = 1;
 
65249
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
65250
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65251
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
65252
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
65253
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
65254
ORDER BY f_int1;
 
65255
DROP TRIGGER trg_3;
 
65256
        
 
65257
# check trigger-11 success:     1
 
65258
DELETE FROM t1
 
65259
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
65260
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
65261
AND f_charbig = '####updated per insert trigger####';
 
65262
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
65263
BEGIN
 
65264
SET new.f_int1 = @my_max1 + @counter,
 
65265
new.f_int2 = @my_min2 - @counter,
 
65266
new.f_charbig = '####updated per insert trigger####';
 
65267
SET @counter = @counter + 1;
 
65268
END|
 
65269
SET @counter = 1;
 
65270
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
65271
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
65272
SELECT CAST(f_int1 AS CHAR),
 
65273
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
65274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
65275
ORDER BY f_int1;
 
65276
DROP TRIGGER trg_3;
 
65277
        
 
65278
# check trigger-12 success:     1
 
65279
DELETE FROM t1
 
65280
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
65281
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
65282
AND f_charbig = '####updated per insert trigger####';
 
65283
ANALYZE  TABLE t1;
 
65284
Table   Op      Msg_type        Msg_text
 
65285
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
65286
CHECK    TABLE t1 EXTENDED;
 
65287
Table   Op      Msg_type        Msg_text
 
65288
test.t1 check   note    The storage engine for the table doesn't support check
 
65289
CHECKSUM TABLE t1 EXTENDED;
 
65290
Table   Checksum
 
65291
test.t1 <some_value>
 
65292
OPTIMIZE TABLE t1;
 
65293
Table   Op      Msg_type        Msg_text
 
65294
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
65295
# check layout success:    1
 
65296
REPAIR   TABLE t1 EXTENDED;
 
65297
Table   Op      Msg_type        Msg_text
 
65298
test.t1 repair  note    The storage engine for the table doesn't support repair
 
65299
# check layout success:    1
 
65300
TRUNCATE t1;
 
65301
        
 
65302
# check TRUNCATE success:       1
 
65303
# check layout success:    1
 
65304
# End usability test (inc/partition_check.inc)
 
65305
DROP TABLE t1;
 
65306
CREATE TABLE t1 (
 
65307
f_int1 INTEGER,
 
65308
f_int2 INTEGER,
 
65309
f_char1 CHAR(20),
 
65310
f_char2 CHAR(20),
 
65311
f_charbig VARCHAR(1000)
 
65312
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
65313
)
 
65314
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
65315
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
65316
(PARTITION part1 VALUES IN (0),
 
65317
 PARTITION part2 VALUES IN (1),
 
65318
 PARTITION part3 VALUES IN (NULL));
 
65319
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65320
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
65321
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
65322
ALTER TABLE t1 DROP INDEX uidx1;
 
65323
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65324
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
65325
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
65326
# Start usability test (inc/partition_check.inc)
 
65327
create_command
 
65328
SHOW CREATE TABLE t1;
 
65329
Table   Create Table
 
65330
t1      CREATE TABLE `t1` (
 
65331
  `f_int1` int(11) DEFAULT NULL,
 
65332
  `f_int2` int(11) DEFAULT NULL,
 
65333
  `f_char1` char(20) DEFAULT NULL,
 
65334
  `f_char2` char(20) DEFAULT NULL,
 
65335
  `f_charbig` varchar(1000) DEFAULT NULL
 
65336
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
65337
 
 
65338
# check prerequisites-1 success:    1
 
65339
# check COUNT(*) success:    1
 
65340
# check MIN/MAX(f_int1) success:    1
 
65341
# check MIN/MAX(f_int2) success:    1
 
65342
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65343
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
65344
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
65345
WHERE f_int1 IN (2,3);
 
65346
# check prerequisites-3 success:    1
 
65347
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
65348
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
65349
# check read via f_int1 success: 1
 
65350
# check read via f_int2 success: 1
 
65351
        
 
65352
# check multiple-1 success:     1
 
65353
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
65354
        
 
65355
# check multiple-2 success:     1
 
65356
INSERT INTO t1 SELECT * FROM t0_template
 
65357
WHERE MOD(f_int1,3) = 0;
 
65358
        
 
65359
# check multiple-3 success:     1
 
65360
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
65361
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
65362
AND @max_row_div2 + @max_row_div4;
 
65363
        
 
65364
# check multiple-4 success:     1
 
65365
DELETE FROM t1
 
65366
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
65367
AND @max_row_div2 + @max_row_div4 + @max_row;
 
65368
        
 
65369
# check multiple-5 success:     1
 
65370
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
65371
INSERT INTO t1
 
65372
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
65373
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
65374
f_charbig = '#SINGLE#';
 
65375
        
 
65376
# check single-1 success:       1
 
65377
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
65378
INSERT INTO t1
 
65379
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
65380
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
65381
f_charbig = '#SINGLE#';
 
65382
        
 
65383
# check single-2 success:       1
 
65384
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
65385
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
65386
UPDATE t1 SET f_int1 = @cur_value2
 
65387
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
65388
        
 
65389
# check single-3 success:       1
 
65390
SET @cur_value1= -1;
 
65391
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
65392
UPDATE t1 SET f_int1 = @cur_value1
 
65393
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
65394
        
 
65395
# check single-4 success:       1
 
65396
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
65397
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
65398
        
 
65399
# check single-5 success:       1
 
65400
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
65401
        
 
65402
# check single-6 success:       1
 
65403
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
65404
        
 
65405
# check single-7 success:       1
 
65406
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
65407
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
65408
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
65409
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
65410
f_charbig = '#NULL#';
 
65411
INSERT INTO t1
 
65412
SET f_int1 = NULL , f_int2 = -@max_row,
 
65413
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
65414
f_charbig = '#NULL#';
 
65415
# check null success:    1
 
65416
        
 
65417
# check null-1 success:         1
 
65418
UPDATE t1 SET f_int1 = -@max_row
 
65419
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
65420
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
65421
        
 
65422
# check null-2 success:         1
 
65423
UPDATE t1 SET f_int1 = NULL
 
65424
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
65425
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
65426
        
 
65427
# check null-3 success:         1
 
65428
DELETE FROM t1
 
65429
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
65430
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
65431
        
 
65432
# check null-4 success:         1
 
65433
DELETE FROM t1
 
65434
WHERE f_int1 = 0 AND f_int2 = 0
 
65435
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
65436
AND f_charbig = '#NULL#';
 
65437
SET AUTOCOMMIT= 0;
 
65438
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65439
SELECT f_int1, f_int1, '', '', 'was inserted'
 
65440
FROM t0_template source_tab
 
65441
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65442
        
 
65443
# check transactions-1 success:         1
 
65444
COMMIT WORK;
 
65445
        
 
65446
# check transactions-2 success:         1
 
65447
ROLLBACK WORK;
 
65448
        
 
65449
# check transactions-3 success:         1
 
65450
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65451
COMMIT WORK;
 
65452
ROLLBACK WORK;
 
65453
        
 
65454
# check transactions-4 success:         1
 
65455
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65456
SELECT f_int1, f_int1, '', '', 'was inserted'
 
65457
FROM t0_template source_tab
 
65458
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65459
        
 
65460
# check transactions-5 success:         1
 
65461
ROLLBACK WORK;
 
65462
        
 
65463
# check transactions-6 success:         1
 
65464
# INFO: Storage engine used for t1 seems to be transactional.
 
65465
COMMIT;
 
65466
        
 
65467
# check transactions-7 success:         1
 
65468
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65469
COMMIT WORK;
 
65470
SET @@session.sql_mode = 'traditional';
 
65471
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
65472
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65473
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
65474
'', '', 'was inserted' FROM t0_template
 
65475
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65476
ERROR 22012: Division by 0
 
65477
COMMIT;
 
65478
        
 
65479
# check transactions-8 success:         1
 
65480
# INFO: Storage engine used for t1 seems to be able to revert
 
65481
#       changes made by the failing statement.
 
65482
SET @@session.sql_mode = '';
 
65483
SET AUTOCOMMIT= 1;
 
65484
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65485
COMMIT WORK;
 
65486
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
65487
        
 
65488
# check special-1 success:      1
 
65489
UPDATE t1 SET f_charbig = '';
 
65490
        
 
65491
# check special-2 success:      1
 
65492
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
65493
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65494
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
65495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65496
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65497
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65498
'just inserted' FROM t0_template
 
65499
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65500
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
65501
BEGIN
 
65502
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65503
f_charbig = 'updated by trigger'
 
65504
      WHERE f_int1 = new.f_int1;
 
65505
END|
 
65506
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65507
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
65508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65509
        
 
65510
# check trigger-1 success:      1
 
65511
DROP TRIGGER trg_1;
 
65512
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65513
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65514
f_charbig = 'just inserted'
 
65515
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65516
DELETE FROM t0_aux
 
65517
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65518
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65519
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65520
'just inserted' FROM t0_template
 
65521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65522
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
65523
BEGIN
 
65524
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65525
f_charbig = 'updated by trigger'
 
65526
      WHERE f_int1 = new.f_int1;
 
65527
END|
 
65528
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65529
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
65530
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65531
        
 
65532
# check trigger-2 success:      1
 
65533
DROP TRIGGER trg_1;
 
65534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65536
f_charbig = 'just inserted'
 
65537
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65538
DELETE FROM t0_aux
 
65539
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65540
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65541
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65542
'just inserted' FROM t0_template
 
65543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65544
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
65545
BEGIN
 
65546
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65547
f_charbig = 'updated by trigger'
 
65548
      WHERE f_int1 = new.f_int1;
 
65549
END|
 
65550
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65551
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65552
        
 
65553
# check trigger-3 success:      1
 
65554
DROP TRIGGER trg_1;
 
65555
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65556
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65557
f_charbig = 'just inserted'
 
65558
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65559
DELETE FROM t0_aux
 
65560
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65561
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65562
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65563
'just inserted' FROM t0_template
 
65564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65565
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
65566
BEGIN
 
65567
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65568
f_charbig = 'updated by trigger'
 
65569
      WHERE f_int1 = - old.f_int1;
 
65570
END|
 
65571
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65572
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65573
        
 
65574
# check trigger-4 success:      1
 
65575
DROP TRIGGER trg_1;
 
65576
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65577
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65578
f_charbig = 'just inserted'
 
65579
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65580
DELETE FROM t0_aux
 
65581
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65582
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65583
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65584
'just inserted' FROM t0_template
 
65585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65586
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
65587
BEGIN
 
65588
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65589
f_charbig = 'updated by trigger'
 
65590
      WHERE f_int1 = new.f_int1;
 
65591
END|
 
65592
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65593
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65594
        
 
65595
# check trigger-5 success:      1
 
65596
DROP TRIGGER trg_1;
 
65597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65599
f_charbig = 'just inserted'
 
65600
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65601
DELETE FROM t0_aux
 
65602
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65604
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65605
'just inserted' FROM t0_template
 
65606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65607
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
65608
BEGIN
 
65609
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65610
f_charbig = 'updated by trigger'
 
65611
      WHERE f_int1 = - old.f_int1;
 
65612
END|
 
65613
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
65614
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65615
        
 
65616
# check trigger-6 success:      1
 
65617
DROP TRIGGER trg_1;
 
65618
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65619
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65620
f_charbig = 'just inserted'
 
65621
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65622
DELETE FROM t0_aux
 
65623
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65625
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65626
'just inserted' FROM t0_template
 
65627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65628
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
65629
BEGIN
 
65630
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65631
f_charbig = 'updated by trigger'
 
65632
      WHERE f_int1 = - old.f_int1;
 
65633
END|
 
65634
DELETE FROM t0_aux
 
65635
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65636
        
 
65637
# check trigger-7 success:      1
 
65638
DROP TRIGGER trg_1;
 
65639
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65640
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65641
f_charbig = 'just inserted'
 
65642
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65643
DELETE FROM t0_aux
 
65644
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65645
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65646
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65647
'just inserted' FROM t0_template
 
65648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65649
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
65650
BEGIN
 
65651
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65652
f_charbig = 'updated by trigger'
 
65653
      WHERE f_int1 = - old.f_int1;
 
65654
END|
 
65655
DELETE FROM t0_aux
 
65656
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
65657
        
 
65658
# check trigger-8 success:      1
 
65659
DROP TRIGGER trg_1;
 
65660
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65661
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65662
f_charbig = 'just inserted'
 
65663
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65664
DELETE FROM t0_aux
 
65665
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65666
DELETE FROM t1
 
65667
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65668
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
65669
BEGIN
 
65670
SET new.f_int1 = old.f_int1 + @max_row,
 
65671
new.f_int2 = old.f_int2 - @max_row,
 
65672
new.f_charbig = '####updated per update trigger####';
 
65673
END|
 
65674
UPDATE t1
 
65675
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
65676
f_charbig = '####updated per update statement itself####';
 
65677
        
 
65678
# check trigger-9 success:      1
 
65679
DROP TRIGGER trg_2;
 
65680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65682
f_charbig = CONCAT('===',f_char1,'===');
 
65683
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
65684
BEGIN
 
65685
SET new.f_int1 = new.f_int1 + @max_row,
 
65686
new.f_int2 = new.f_int2 - @max_row,
 
65687
new.f_charbig = '####updated per update trigger####';
 
65688
END|
 
65689
UPDATE t1
 
65690
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
65691
f_charbig = '####updated per update statement itself####';
 
65692
        
 
65693
# check trigger-10 success:     1
 
65694
DROP TRIGGER trg_2;
 
65695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65697
f_charbig = CONCAT('===',f_char1,'===');
 
65698
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
65699
BEGIN
 
65700
SET new.f_int1 = @my_max1 + @counter,
 
65701
new.f_int2 = @my_min2 - @counter,
 
65702
new.f_charbig = '####updated per insert trigger####';
 
65703
SET @counter = @counter + 1;
 
65704
END|
 
65705
SET @counter = 1;
 
65706
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
65707
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65708
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
65709
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
65710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
65711
ORDER BY f_int1;
 
65712
DROP TRIGGER trg_3;
 
65713
        
 
65714
# check trigger-11 success:     1
 
65715
DELETE FROM t1
 
65716
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
65717
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
65718
AND f_charbig = '####updated per insert trigger####';
 
65719
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
65720
BEGIN
 
65721
SET new.f_int1 = @my_max1 + @counter,
 
65722
new.f_int2 = @my_min2 - @counter,
 
65723
new.f_charbig = '####updated per insert trigger####';
 
65724
SET @counter = @counter + 1;
 
65725
END|
 
65726
SET @counter = 1;
 
65727
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
65728
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
65729
SELECT CAST(f_int1 AS CHAR),
 
65730
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
65731
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
65732
ORDER BY f_int1;
 
65733
DROP TRIGGER trg_3;
 
65734
        
 
65735
# check trigger-12 success:     1
 
65736
DELETE FROM t1
 
65737
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
65738
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
65739
AND f_charbig = '####updated per insert trigger####';
 
65740
ANALYZE  TABLE t1;
 
65741
Table   Op      Msg_type        Msg_text
 
65742
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
65743
CHECK    TABLE t1 EXTENDED;
 
65744
Table   Op      Msg_type        Msg_text
 
65745
test.t1 check   note    The storage engine for the table doesn't support check
 
65746
CHECKSUM TABLE t1 EXTENDED;
 
65747
Table   Checksum
 
65748
test.t1 <some_value>
 
65749
OPTIMIZE TABLE t1;
 
65750
Table   Op      Msg_type        Msg_text
 
65751
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
65752
# check layout success:    1
 
65753
REPAIR   TABLE t1 EXTENDED;
 
65754
Table   Op      Msg_type        Msg_text
 
65755
test.t1 repair  note    The storage engine for the table doesn't support repair
 
65756
# check layout success:    1
 
65757
TRUNCATE t1;
 
65758
        
 
65759
# check TRUNCATE success:       1
 
65760
# check layout success:    1
 
65761
# End usability test (inc/partition_check.inc)
 
65762
DROP TABLE t1;
 
65763
DROP TABLE IF EXISTS t1;
 
65764
CREATE TABLE t1 (
 
65765
f_int1 INTEGER,
 
65766
f_int2 INTEGER,
 
65767
f_char1 CHAR(20),
 
65768
f_char2 CHAR(20),
 
65769
f_charbig VARCHAR(1000)
 
65770
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
65771
)
 
65772
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
65773
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65774
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
65775
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
65776
ALTER TABLE t1 DROP INDEX uidx1;
 
65777
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65778
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
65779
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
65780
# Start usability test (inc/partition_check.inc)
 
65781
create_command
 
65782
SHOW CREATE TABLE t1;
 
65783
Table   Create Table
 
65784
t1      CREATE TABLE `t1` (
 
65785
  `f_int1` int(11) DEFAULT NULL,
 
65786
  `f_int2` int(11) DEFAULT NULL,
 
65787
  `f_char1` char(20) DEFAULT NULL,
 
65788
  `f_char2` char(20) DEFAULT NULL,
 
65789
  `f_charbig` varchar(1000) DEFAULT NULL
 
65790
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
65791
 
 
65792
# check prerequisites-1 success:    1
 
65793
# check COUNT(*) success:    1
 
65794
# check MIN/MAX(f_int1) success:    1
 
65795
# check MIN/MAX(f_int2) success:    1
 
65796
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65797
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
65798
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
65799
WHERE f_int1 IN (2,3);
 
65800
# check prerequisites-3 success:    1
 
65801
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
65802
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
65803
# check read via f_int1 success: 1
 
65804
# check read via f_int2 success: 1
 
65805
        
 
65806
# check multiple-1 success:     1
 
65807
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
65808
        
 
65809
# check multiple-2 success:     1
 
65810
INSERT INTO t1 SELECT * FROM t0_template
 
65811
WHERE MOD(f_int1,3) = 0;
 
65812
        
 
65813
# check multiple-3 success:     1
 
65814
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
65815
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
65816
AND @max_row_div2 + @max_row_div4;
 
65817
        
 
65818
# check multiple-4 success:     1
 
65819
DELETE FROM t1
 
65820
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
65821
AND @max_row_div2 + @max_row_div4 + @max_row;
 
65822
        
 
65823
# check multiple-5 success:     1
 
65824
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
65825
INSERT INTO t1
 
65826
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
65827
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
65828
f_charbig = '#SINGLE#';
 
65829
        
 
65830
# check single-1 success:       1
 
65831
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
65832
INSERT INTO t1
 
65833
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
65834
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
65835
f_charbig = '#SINGLE#';
 
65836
        
 
65837
# check single-2 success:       1
 
65838
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
65839
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
65840
UPDATE t1 SET f_int1 = @cur_value2
 
65841
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
65842
        
 
65843
# check single-3 success:       1
 
65844
SET @cur_value1= -1;
 
65845
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
65846
UPDATE t1 SET f_int1 = @cur_value1
 
65847
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
65848
        
 
65849
# check single-4 success:       1
 
65850
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
65851
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
65852
        
 
65853
# check single-5 success:       1
 
65854
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
65855
        
 
65856
# check single-6 success:       1
 
65857
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
65858
        
 
65859
# check single-7 success:       1
 
65860
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
65861
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
65862
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
65863
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
65864
f_charbig = '#NULL#';
 
65865
INSERT INTO t1
 
65866
SET f_int1 = NULL , f_int2 = -@max_row,
 
65867
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
65868
f_charbig = '#NULL#';
 
65869
# check null success:    1
 
65870
        
 
65871
# check null-1 success:         1
 
65872
UPDATE t1 SET f_int1 = -@max_row
 
65873
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
65874
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
65875
        
 
65876
# check null-2 success:         1
 
65877
UPDATE t1 SET f_int1 = NULL
 
65878
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
65879
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
65880
        
 
65881
# check null-3 success:         1
 
65882
DELETE FROM t1
 
65883
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
65884
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
65885
        
 
65886
# check null-4 success:         1
 
65887
DELETE FROM t1
 
65888
WHERE f_int1 = 0 AND f_int2 = 0
 
65889
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
65890
AND f_charbig = '#NULL#';
 
65891
SET AUTOCOMMIT= 0;
 
65892
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65893
SELECT f_int1, f_int1, '', '', 'was inserted'
 
65894
FROM t0_template source_tab
 
65895
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65896
        
 
65897
# check transactions-1 success:         1
 
65898
COMMIT WORK;
 
65899
        
 
65900
# check transactions-2 success:         1
 
65901
ROLLBACK WORK;
 
65902
        
 
65903
# check transactions-3 success:         1
 
65904
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65905
COMMIT WORK;
 
65906
ROLLBACK WORK;
 
65907
        
 
65908
# check transactions-4 success:         1
 
65909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65910
SELECT f_int1, f_int1, '', '', 'was inserted'
 
65911
FROM t0_template source_tab
 
65912
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65913
        
 
65914
# check transactions-5 success:         1
 
65915
ROLLBACK WORK;
 
65916
        
 
65917
# check transactions-6 success:         1
 
65918
# INFO: Storage engine used for t1 seems to be transactional.
 
65919
COMMIT;
 
65920
        
 
65921
# check transactions-7 success:         1
 
65922
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65923
COMMIT WORK;
 
65924
SET @@session.sql_mode = 'traditional';
 
65925
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
65926
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
65927
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
65928
'', '', 'was inserted' FROM t0_template
 
65929
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
65930
ERROR 22012: Division by 0
 
65931
COMMIT;
 
65932
        
 
65933
# check transactions-8 success:         1
 
65934
# INFO: Storage engine used for t1 seems to be able to revert
 
65935
#       changes made by the failing statement.
 
65936
SET @@session.sql_mode = '';
 
65937
SET AUTOCOMMIT= 1;
 
65938
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
65939
COMMIT WORK;
 
65940
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
65941
        
 
65942
# check special-1 success:      1
 
65943
UPDATE t1 SET f_charbig = '';
 
65944
        
 
65945
# check special-2 success:      1
 
65946
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
65947
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65948
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
65949
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65950
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65951
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65952
'just inserted' FROM t0_template
 
65953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65954
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
65955
BEGIN
 
65956
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65957
f_charbig = 'updated by trigger'
 
65958
      WHERE f_int1 = new.f_int1;
 
65959
END|
 
65960
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65961
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
65962
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65963
        
 
65964
# check trigger-1 success:      1
 
65965
DROP TRIGGER trg_1;
 
65966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65967
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65968
f_charbig = 'just inserted'
 
65969
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65970
DELETE FROM t0_aux
 
65971
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65972
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65973
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65974
'just inserted' FROM t0_template
 
65975
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65976
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
65977
BEGIN
 
65978
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
65979
f_charbig = 'updated by trigger'
 
65980
      WHERE f_int1 = new.f_int1;
 
65981
END|
 
65982
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65983
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
65984
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65985
        
 
65986
# check trigger-2 success:      1
 
65987
DROP TRIGGER trg_1;
 
65988
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
65989
f_int2 = CAST(f_char1 AS SIGNED INT),
 
65990
f_charbig = 'just inserted'
 
65991
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
65992
DELETE FROM t0_aux
 
65993
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
65995
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
65996
'just inserted' FROM t0_template
 
65997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
65998
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
65999
BEGIN
 
66000
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66001
f_charbig = 'updated by trigger'
 
66002
      WHERE f_int1 = new.f_int1;
 
66003
END|
 
66004
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66005
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66006
        
 
66007
# check trigger-3 success:      1
 
66008
DROP TRIGGER trg_1;
 
66009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66011
f_charbig = 'just inserted'
 
66012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66013
DELETE FROM t0_aux
 
66014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66017
'just inserted' FROM t0_template
 
66018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66019
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
66020
BEGIN
 
66021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66022
f_charbig = 'updated by trigger'
 
66023
      WHERE f_int1 = - old.f_int1;
 
66024
END|
 
66025
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66026
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66027
        
 
66028
# check trigger-4 success:      1
 
66029
DROP TRIGGER trg_1;
 
66030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66032
f_charbig = 'just inserted'
 
66033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66034
DELETE FROM t0_aux
 
66035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66037
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66038
'just inserted' FROM t0_template
 
66039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66040
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
66041
BEGIN
 
66042
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66043
f_charbig = 'updated by trigger'
 
66044
      WHERE f_int1 = new.f_int1;
 
66045
END|
 
66046
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66047
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66048
        
 
66049
# check trigger-5 success:      1
 
66050
DROP TRIGGER trg_1;
 
66051
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66052
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66053
f_charbig = 'just inserted'
 
66054
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66055
DELETE FROM t0_aux
 
66056
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66058
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66059
'just inserted' FROM t0_template
 
66060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66061
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
66062
BEGIN
 
66063
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66064
f_charbig = 'updated by trigger'
 
66065
      WHERE f_int1 = - old.f_int1;
 
66066
END|
 
66067
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66068
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66069
        
 
66070
# check trigger-6 success:      1
 
66071
DROP TRIGGER trg_1;
 
66072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66074
f_charbig = 'just inserted'
 
66075
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66076
DELETE FROM t0_aux
 
66077
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66078
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66079
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66080
'just inserted' FROM t0_template
 
66081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66082
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
66083
BEGIN
 
66084
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66085
f_charbig = 'updated by trigger'
 
66086
      WHERE f_int1 = - old.f_int1;
 
66087
END|
 
66088
DELETE FROM t0_aux
 
66089
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66090
        
 
66091
# check trigger-7 success:      1
 
66092
DROP TRIGGER trg_1;
 
66093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66095
f_charbig = 'just inserted'
 
66096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66097
DELETE FROM t0_aux
 
66098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66100
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66101
'just inserted' FROM t0_template
 
66102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66103
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
66104
BEGIN
 
66105
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66106
f_charbig = 'updated by trigger'
 
66107
      WHERE f_int1 = - old.f_int1;
 
66108
END|
 
66109
DELETE FROM t0_aux
 
66110
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66111
        
 
66112
# check trigger-8 success:      1
 
66113
DROP TRIGGER trg_1;
 
66114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66116
f_charbig = 'just inserted'
 
66117
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66118
DELETE FROM t0_aux
 
66119
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66120
DELETE FROM t1
 
66121
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66122
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
66123
BEGIN
 
66124
SET new.f_int1 = old.f_int1 + @max_row,
 
66125
new.f_int2 = old.f_int2 - @max_row,
 
66126
new.f_charbig = '####updated per update trigger####';
 
66127
END|
 
66128
UPDATE t1
 
66129
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
66130
f_charbig = '####updated per update statement itself####';
 
66131
        
 
66132
# check trigger-9 success:      1
 
66133
DROP TRIGGER trg_2;
 
66134
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66135
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66136
f_charbig = CONCAT('===',f_char1,'===');
 
66137
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
66138
BEGIN
 
66139
SET new.f_int1 = new.f_int1 + @max_row,
 
66140
new.f_int2 = new.f_int2 - @max_row,
 
66141
new.f_charbig = '####updated per update trigger####';
 
66142
END|
 
66143
UPDATE t1
 
66144
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
66145
f_charbig = '####updated per update statement itself####';
 
66146
        
 
66147
# check trigger-10 success:     1
 
66148
DROP TRIGGER trg_2;
 
66149
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66150
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66151
f_charbig = CONCAT('===',f_char1,'===');
 
66152
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
66153
BEGIN
 
66154
SET new.f_int1 = @my_max1 + @counter,
 
66155
new.f_int2 = @my_min2 - @counter,
 
66156
new.f_charbig = '####updated per insert trigger####';
 
66157
SET @counter = @counter + 1;
 
66158
END|
 
66159
SET @counter = 1;
 
66160
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
66161
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66162
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
66163
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
66164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
66165
ORDER BY f_int1;
 
66166
DROP TRIGGER trg_3;
 
66167
        
 
66168
# check trigger-11 success:     1
 
66169
DELETE FROM t1
 
66170
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
66171
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
66172
AND f_charbig = '####updated per insert trigger####';
 
66173
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
66174
BEGIN
 
66175
SET new.f_int1 = @my_max1 + @counter,
 
66176
new.f_int2 = @my_min2 - @counter,
 
66177
new.f_charbig = '####updated per insert trigger####';
 
66178
SET @counter = @counter + 1;
 
66179
END|
 
66180
SET @counter = 1;
 
66181
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
66182
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
66183
SELECT CAST(f_int1 AS CHAR),
 
66184
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
66185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
66186
ORDER BY f_int1;
 
66187
DROP TRIGGER trg_3;
 
66188
        
 
66189
# check trigger-12 success:     1
 
66190
DELETE FROM t1
 
66191
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
66192
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
66193
AND f_charbig = '####updated per insert trigger####';
 
66194
ANALYZE  TABLE t1;
 
66195
Table   Op      Msg_type        Msg_text
 
66196
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
66197
CHECK    TABLE t1 EXTENDED;
 
66198
Table   Op      Msg_type        Msg_text
 
66199
test.t1 check   note    The storage engine for the table doesn't support check
 
66200
CHECKSUM TABLE t1 EXTENDED;
 
66201
Table   Checksum
 
66202
test.t1 <some_value>
 
66203
OPTIMIZE TABLE t1;
 
66204
Table   Op      Msg_type        Msg_text
 
66205
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
66206
# check layout success:    1
 
66207
REPAIR   TABLE t1 EXTENDED;
 
66208
Table   Op      Msg_type        Msg_text
 
66209
test.t1 repair  note    The storage engine for the table doesn't support repair
 
66210
# check layout success:    1
 
66211
TRUNCATE t1;
 
66212
        
 
66213
# check TRUNCATE success:       1
 
66214
# check layout success:    1
 
66215
# End usability test (inc/partition_check.inc)
 
66216
DROP TABLE t1;
 
66217
CREATE TABLE t1 (
 
66218
f_int1 INTEGER,
 
66219
f_int2 INTEGER,
 
66220
f_char1 CHAR(20),
 
66221
f_char2 CHAR(20),
 
66222
f_charbig VARCHAR(1000)
 
66223
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
66224
)
 
66225
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
66226
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66227
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
66228
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
66229
ALTER TABLE t1 DROP INDEX uidx1;
 
66230
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66231
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
66232
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
66233
# Start usability test (inc/partition_check.inc)
 
66234
create_command
 
66235
SHOW CREATE TABLE t1;
 
66236
Table   Create Table
 
66237
t1      CREATE TABLE `t1` (
 
66238
  `f_int1` int(11) DEFAULT NULL,
 
66239
  `f_int2` int(11) DEFAULT NULL,
 
66240
  `f_char1` char(20) DEFAULT NULL,
 
66241
  `f_char2` char(20) DEFAULT NULL,
 
66242
  `f_charbig` varchar(1000) DEFAULT NULL
 
66243
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
66244
 
 
66245
# check prerequisites-1 success:    1
 
66246
# check COUNT(*) success:    1
 
66247
# check MIN/MAX(f_int1) success:    1
 
66248
# check MIN/MAX(f_int2) success:    1
 
66249
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66250
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
66251
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
66252
WHERE f_int1 IN (2,3);
 
66253
# check prerequisites-3 success:    1
 
66254
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
66255
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
66256
# check read via f_int1 success: 1
 
66257
# check read via f_int2 success: 1
 
66258
        
 
66259
# check multiple-1 success:     1
 
66260
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
66261
        
 
66262
# check multiple-2 success:     1
 
66263
INSERT INTO t1 SELECT * FROM t0_template
 
66264
WHERE MOD(f_int1,3) = 0;
 
66265
        
 
66266
# check multiple-3 success:     1
 
66267
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
66268
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
66269
AND @max_row_div2 + @max_row_div4;
 
66270
        
 
66271
# check multiple-4 success:     1
 
66272
DELETE FROM t1
 
66273
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
66274
AND @max_row_div2 + @max_row_div4 + @max_row;
 
66275
        
 
66276
# check multiple-5 success:     1
 
66277
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
66278
INSERT INTO t1
 
66279
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
66280
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
66281
f_charbig = '#SINGLE#';
 
66282
        
 
66283
# check single-1 success:       1
 
66284
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
66285
INSERT INTO t1
 
66286
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
66287
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
66288
f_charbig = '#SINGLE#';
 
66289
        
 
66290
# check single-2 success:       1
 
66291
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
66292
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
66293
UPDATE t1 SET f_int1 = @cur_value2
 
66294
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
66295
        
 
66296
# check single-3 success:       1
 
66297
SET @cur_value1= -1;
 
66298
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
66299
UPDATE t1 SET f_int1 = @cur_value1
 
66300
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
66301
        
 
66302
# check single-4 success:       1
 
66303
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
66304
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
66305
        
 
66306
# check single-5 success:       1
 
66307
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
66308
        
 
66309
# check single-6 success:       1
 
66310
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
66311
        
 
66312
# check single-7 success:       1
 
66313
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
66314
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
66315
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
66316
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
66317
f_charbig = '#NULL#';
 
66318
INSERT INTO t1
 
66319
SET f_int1 = NULL , f_int2 = -@max_row,
 
66320
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
66321
f_charbig = '#NULL#';
 
66322
# check null success:    1
 
66323
        
 
66324
# check null-1 success:         1
 
66325
UPDATE t1 SET f_int1 = -@max_row
 
66326
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
66327
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
66328
        
 
66329
# check null-2 success:         1
 
66330
UPDATE t1 SET f_int1 = NULL
 
66331
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
66332
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
66333
        
 
66334
# check null-3 success:         1
 
66335
DELETE FROM t1
 
66336
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
66337
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
66338
        
 
66339
# check null-4 success:         1
 
66340
DELETE FROM t1
 
66341
WHERE f_int1 = 0 AND f_int2 = 0
 
66342
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
66343
AND f_charbig = '#NULL#';
 
66344
SET AUTOCOMMIT= 0;
 
66345
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66346
SELECT f_int1, f_int1, '', '', 'was inserted'
 
66347
FROM t0_template source_tab
 
66348
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
66349
        
 
66350
# check transactions-1 success:         1
 
66351
COMMIT WORK;
 
66352
        
 
66353
# check transactions-2 success:         1
 
66354
ROLLBACK WORK;
 
66355
        
 
66356
# check transactions-3 success:         1
 
66357
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
66358
COMMIT WORK;
 
66359
ROLLBACK WORK;
 
66360
        
 
66361
# check transactions-4 success:         1
 
66362
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66363
SELECT f_int1, f_int1, '', '', 'was inserted'
 
66364
FROM t0_template source_tab
 
66365
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
66366
        
 
66367
# check transactions-5 success:         1
 
66368
ROLLBACK WORK;
 
66369
        
 
66370
# check transactions-6 success:         1
 
66371
# INFO: Storage engine used for t1 seems to be transactional.
 
66372
COMMIT;
 
66373
        
 
66374
# check transactions-7 success:         1
 
66375
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
66376
COMMIT WORK;
 
66377
SET @@session.sql_mode = 'traditional';
 
66378
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
66379
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66380
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
66381
'', '', 'was inserted' FROM t0_template
 
66382
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
66383
ERROR 22012: Division by 0
 
66384
COMMIT;
 
66385
        
 
66386
# check transactions-8 success:         1
 
66387
# INFO: Storage engine used for t1 seems to be able to revert
 
66388
#       changes made by the failing statement.
 
66389
SET @@session.sql_mode = '';
 
66390
SET AUTOCOMMIT= 1;
 
66391
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
66392
COMMIT WORK;
 
66393
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
66394
        
 
66395
# check special-1 success:      1
 
66396
UPDATE t1 SET f_charbig = '';
 
66397
        
 
66398
# check special-2 success:      1
 
66399
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
66400
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66401
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
66402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66403
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66404
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66405
'just inserted' FROM t0_template
 
66406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66407
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
66408
BEGIN
 
66409
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66410
f_charbig = 'updated by trigger'
 
66411
      WHERE f_int1 = new.f_int1;
 
66412
END|
 
66413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66414
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
66415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66416
        
 
66417
# check trigger-1 success:      1
 
66418
DROP TRIGGER trg_1;
 
66419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66421
f_charbig = 'just inserted'
 
66422
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66423
DELETE FROM t0_aux
 
66424
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66425
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66426
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66427
'just inserted' FROM t0_template
 
66428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66429
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
66430
BEGIN
 
66431
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66432
f_charbig = 'updated by trigger'
 
66433
      WHERE f_int1 = new.f_int1;
 
66434
END|
 
66435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66436
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
66437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66438
        
 
66439
# check trigger-2 success:      1
 
66440
DROP TRIGGER trg_1;
 
66441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66443
f_charbig = 'just inserted'
 
66444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66445
DELETE FROM t0_aux
 
66446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66449
'just inserted' FROM t0_template
 
66450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66451
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
66452
BEGIN
 
66453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66454
f_charbig = 'updated by trigger'
 
66455
      WHERE f_int1 = new.f_int1;
 
66456
END|
 
66457
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66459
        
 
66460
# check trigger-3 success:      1
 
66461
DROP TRIGGER trg_1;
 
66462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66464
f_charbig = 'just inserted'
 
66465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66466
DELETE FROM t0_aux
 
66467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66470
'just inserted' FROM t0_template
 
66471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66472
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
66473
BEGIN
 
66474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66475
f_charbig = 'updated by trigger'
 
66476
      WHERE f_int1 = - old.f_int1;
 
66477
END|
 
66478
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66480
        
 
66481
# check trigger-4 success:      1
 
66482
DROP TRIGGER trg_1;
 
66483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66485
f_charbig = 'just inserted'
 
66486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66487
DELETE FROM t0_aux
 
66488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66491
'just inserted' FROM t0_template
 
66492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66493
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
66494
BEGIN
 
66495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66496
f_charbig = 'updated by trigger'
 
66497
      WHERE f_int1 = new.f_int1;
 
66498
END|
 
66499
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66500
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66501
        
 
66502
# check trigger-5 success:      1
 
66503
DROP TRIGGER trg_1;
 
66504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66506
f_charbig = 'just inserted'
 
66507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66508
DELETE FROM t0_aux
 
66509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66512
'just inserted' FROM t0_template
 
66513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66514
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
66515
BEGIN
 
66516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66517
f_charbig = 'updated by trigger'
 
66518
      WHERE f_int1 = - old.f_int1;
 
66519
END|
 
66520
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66521
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66522
        
 
66523
# check trigger-6 success:      1
 
66524
DROP TRIGGER trg_1;
 
66525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66527
f_charbig = 'just inserted'
 
66528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66529
DELETE FROM t0_aux
 
66530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66533
'just inserted' FROM t0_template
 
66534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66535
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
66536
BEGIN
 
66537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66538
f_charbig = 'updated by trigger'
 
66539
      WHERE f_int1 = - old.f_int1;
 
66540
END|
 
66541
DELETE FROM t0_aux
 
66542
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66543
        
 
66544
# check trigger-7 success:      1
 
66545
DROP TRIGGER trg_1;
 
66546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66548
f_charbig = 'just inserted'
 
66549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66550
DELETE FROM t0_aux
 
66551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66554
'just inserted' FROM t0_template
 
66555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66556
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
66557
BEGIN
 
66558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66559
f_charbig = 'updated by trigger'
 
66560
      WHERE f_int1 = - old.f_int1;
 
66561
END|
 
66562
DELETE FROM t0_aux
 
66563
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66564
        
 
66565
# check trigger-8 success:      1
 
66566
DROP TRIGGER trg_1;
 
66567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66569
f_charbig = 'just inserted'
 
66570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66571
DELETE FROM t0_aux
 
66572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66573
DELETE FROM t1
 
66574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66575
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
66576
BEGIN
 
66577
SET new.f_int1 = old.f_int1 + @max_row,
 
66578
new.f_int2 = old.f_int2 - @max_row,
 
66579
new.f_charbig = '####updated per update trigger####';
 
66580
END|
 
66581
UPDATE t1
 
66582
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
66583
f_charbig = '####updated per update statement itself####';
 
66584
        
 
66585
# check trigger-9 success:      1
 
66586
DROP TRIGGER trg_2;
 
66587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66589
f_charbig = CONCAT('===',f_char1,'===');
 
66590
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
66591
BEGIN
 
66592
SET new.f_int1 = new.f_int1 + @max_row,
 
66593
new.f_int2 = new.f_int2 - @max_row,
 
66594
new.f_charbig = '####updated per update trigger####';
 
66595
END|
 
66596
UPDATE t1
 
66597
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
66598
f_charbig = '####updated per update statement itself####';
 
66599
        
 
66600
# check trigger-10 success:     1
 
66601
DROP TRIGGER trg_2;
 
66602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66604
f_charbig = CONCAT('===',f_char1,'===');
 
66605
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
66606
BEGIN
 
66607
SET new.f_int1 = @my_max1 + @counter,
 
66608
new.f_int2 = @my_min2 - @counter,
 
66609
new.f_charbig = '####updated per insert trigger####';
 
66610
SET @counter = @counter + 1;
 
66611
END|
 
66612
SET @counter = 1;
 
66613
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
66614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66615
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
66616
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
66617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
66618
ORDER BY f_int1;
 
66619
DROP TRIGGER trg_3;
 
66620
        
 
66621
# check trigger-11 success:     1
 
66622
DELETE FROM t1
 
66623
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
66624
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
66625
AND f_charbig = '####updated per insert trigger####';
 
66626
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
66627
BEGIN
 
66628
SET new.f_int1 = @my_max1 + @counter,
 
66629
new.f_int2 = @my_min2 - @counter,
 
66630
new.f_charbig = '####updated per insert trigger####';
 
66631
SET @counter = @counter + 1;
 
66632
END|
 
66633
SET @counter = 1;
 
66634
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
66635
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
66636
SELECT CAST(f_int1 AS CHAR),
 
66637
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
66638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
66639
ORDER BY f_int1;
 
66640
DROP TRIGGER trg_3;
 
66641
        
 
66642
# check trigger-12 success:     1
 
66643
DELETE FROM t1
 
66644
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
66645
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
66646
AND f_charbig = '####updated per insert trigger####';
 
66647
ANALYZE  TABLE t1;
 
66648
Table   Op      Msg_type        Msg_text
 
66649
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
66650
CHECK    TABLE t1 EXTENDED;
 
66651
Table   Op      Msg_type        Msg_text
 
66652
test.t1 check   note    The storage engine for the table doesn't support check
 
66653
CHECKSUM TABLE t1 EXTENDED;
 
66654
Table   Checksum
 
66655
test.t1 <some_value>
 
66656
OPTIMIZE TABLE t1;
 
66657
Table   Op      Msg_type        Msg_text
 
66658
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
66659
# check layout success:    1
 
66660
REPAIR   TABLE t1 EXTENDED;
 
66661
Table   Op      Msg_type        Msg_text
 
66662
test.t1 repair  note    The storage engine for the table doesn't support repair
 
66663
# check layout success:    1
 
66664
TRUNCATE t1;
 
66665
        
 
66666
# check TRUNCATE success:       1
 
66667
# check layout success:    1
 
66668
# End usability test (inc/partition_check.inc)
 
66669
DROP TABLE t1;
 
66670
CREATE TABLE t1 (
 
66671
f_int1 INTEGER,
 
66672
f_int2 INTEGER,
 
66673
f_char1 CHAR(20),
 
66674
f_char2 CHAR(20),
 
66675
f_charbig VARCHAR(1000)
 
66676
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
66677
)
 
66678
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
66679
(PARTITION part_3 VALUES IN (-3),
 
66680
PARTITION part_2 VALUES IN (-2),
 
66681
PARTITION part_1 VALUES IN (-1),
 
66682
PARTITION part_N VALUES IN (NULL),
 
66683
PARTITION part0 VALUES IN (0),
 
66684
PARTITION part1 VALUES IN (1),
 
66685
PARTITION part2 VALUES IN (2),
 
66686
PARTITION part3 VALUES IN (3));
 
66687
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66688
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
66689
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
66690
ALTER TABLE t1 DROP INDEX uidx1;
 
66691
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66692
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
66693
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
66694
# Start usability test (inc/partition_check.inc)
 
66695
create_command
 
66696
SHOW CREATE TABLE t1;
 
66697
Table   Create Table
 
66698
t1      CREATE TABLE `t1` (
 
66699
  `f_int1` int(11) DEFAULT NULL,
 
66700
  `f_int2` int(11) DEFAULT NULL,
 
66701
  `f_char1` char(20) DEFAULT NULL,
 
66702
  `f_char2` char(20) DEFAULT NULL,
 
66703
  `f_charbig` varchar(1000) DEFAULT NULL
 
66704
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
66705
 
 
66706
# check prerequisites-1 success:    1
 
66707
# check COUNT(*) success:    1
 
66708
# check MIN/MAX(f_int1) success:    1
 
66709
# check MIN/MAX(f_int2) success:    1
 
66710
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66711
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
66712
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
66713
WHERE f_int1 IN (2,3);
 
66714
# check prerequisites-3 success:    1
 
66715
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
66716
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
66717
# check read via f_int1 success: 1
 
66718
# check read via f_int2 success: 1
 
66719
        
 
66720
# check multiple-1 success:     1
 
66721
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
66722
        
 
66723
# check multiple-2 success:     1
 
66724
INSERT INTO t1 SELECT * FROM t0_template
 
66725
WHERE MOD(f_int1,3) = 0;
 
66726
        
 
66727
# check multiple-3 success:     1
 
66728
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
66729
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
66730
AND @max_row_div2 + @max_row_div4;
 
66731
        
 
66732
# check multiple-4 success:     1
 
66733
DELETE FROM t1
 
66734
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
66735
AND @max_row_div2 + @max_row_div4 + @max_row;
 
66736
        
 
66737
# check multiple-5 success:     1
 
66738
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
66739
INSERT INTO t1
 
66740
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
66741
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
66742
f_charbig = '#SINGLE#';
 
66743
        
 
66744
# check single-1 success:       1
 
66745
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
66746
INSERT INTO t1
 
66747
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
66748
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
66749
f_charbig = '#SINGLE#';
 
66750
        
 
66751
# check single-2 success:       1
 
66752
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
66753
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
66754
UPDATE t1 SET f_int1 = @cur_value2
 
66755
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
66756
        
 
66757
# check single-3 success:       1
 
66758
SET @cur_value1= -1;
 
66759
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
66760
UPDATE t1 SET f_int1 = @cur_value1
 
66761
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
66762
        
 
66763
# check single-4 success:       1
 
66764
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
66765
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
66766
        
 
66767
# check single-5 success:       1
 
66768
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
66769
        
 
66770
# check single-6 success:       1
 
66771
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
66772
        
 
66773
# check single-7 success:       1
 
66774
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
66775
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
66776
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
66777
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
66778
f_charbig = '#NULL#';
 
66779
INSERT INTO t1
 
66780
SET f_int1 = NULL , f_int2 = -@max_row,
 
66781
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
66782
f_charbig = '#NULL#';
 
66783
# check null success:    1
 
66784
        
 
66785
# check null-1 success:         1
 
66786
UPDATE t1 SET f_int1 = -@max_row
 
66787
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
66788
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
66789
        
 
66790
# check null-2 success:         1
 
66791
UPDATE t1 SET f_int1 = NULL
 
66792
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
66793
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
66794
        
 
66795
# check null-3 success:         1
 
66796
DELETE FROM t1
 
66797
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
66798
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
66799
        
 
66800
# check null-4 success:         1
 
66801
DELETE FROM t1
 
66802
WHERE f_int1 = 0 AND f_int2 = 0
 
66803
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
66804
AND f_charbig = '#NULL#';
 
66805
SET AUTOCOMMIT= 0;
 
66806
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66807
SELECT f_int1, f_int1, '', '', 'was inserted'
 
66808
FROM t0_template source_tab
 
66809
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
66810
        
 
66811
# check transactions-1 success:         1
 
66812
COMMIT WORK;
 
66813
        
 
66814
# check transactions-2 success:         1
 
66815
ROLLBACK WORK;
 
66816
        
 
66817
# check transactions-3 success:         1
 
66818
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
66819
COMMIT WORK;
 
66820
ROLLBACK WORK;
 
66821
        
 
66822
# check transactions-4 success:         1
 
66823
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66824
SELECT f_int1, f_int1, '', '', 'was inserted'
 
66825
FROM t0_template source_tab
 
66826
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
66827
        
 
66828
# check transactions-5 success:         1
 
66829
ROLLBACK WORK;
 
66830
        
 
66831
# check transactions-6 success:         1
 
66832
# INFO: Storage engine used for t1 seems to be transactional.
 
66833
COMMIT;
 
66834
        
 
66835
# check transactions-7 success:         1
 
66836
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
66837
COMMIT WORK;
 
66838
SET @@session.sql_mode = 'traditional';
 
66839
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
66840
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
66841
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
66842
'', '', 'was inserted' FROM t0_template
 
66843
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
66844
ERROR 22012: Division by 0
 
66845
COMMIT;
 
66846
        
 
66847
# check transactions-8 success:         1
 
66848
# INFO: Storage engine used for t1 seems to be able to revert
 
66849
#       changes made by the failing statement.
 
66850
SET @@session.sql_mode = '';
 
66851
SET AUTOCOMMIT= 1;
 
66852
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
66853
COMMIT WORK;
 
66854
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
66855
        
 
66856
# check special-1 success:      1
 
66857
UPDATE t1 SET f_charbig = '';
 
66858
        
 
66859
# check special-2 success:      1
 
66860
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
66861
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66862
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
66863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66864
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66865
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66866
'just inserted' FROM t0_template
 
66867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66868
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
66869
BEGIN
 
66870
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66871
f_charbig = 'updated by trigger'
 
66872
      WHERE f_int1 = new.f_int1;
 
66873
END|
 
66874
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66875
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
66876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66877
        
 
66878
# check trigger-1 success:      1
 
66879
DROP TRIGGER trg_1;
 
66880
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66881
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66882
f_charbig = 'just inserted'
 
66883
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66884
DELETE FROM t0_aux
 
66885
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66886
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66887
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66888
'just inserted' FROM t0_template
 
66889
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66890
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
66891
BEGIN
 
66892
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66893
f_charbig = 'updated by trigger'
 
66894
      WHERE f_int1 = new.f_int1;
 
66895
END|
 
66896
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66897
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
66898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66899
        
 
66900
# check trigger-2 success:      1
 
66901
DROP TRIGGER trg_1;
 
66902
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66903
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66904
f_charbig = 'just inserted'
 
66905
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66906
DELETE FROM t0_aux
 
66907
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66908
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66909
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66910
'just inserted' FROM t0_template
 
66911
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66912
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
66913
BEGIN
 
66914
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66915
f_charbig = 'updated by trigger'
 
66916
      WHERE f_int1 = new.f_int1;
 
66917
END|
 
66918
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66919
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66920
        
 
66921
# check trigger-3 success:      1
 
66922
DROP TRIGGER trg_1;
 
66923
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66924
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66925
f_charbig = 'just inserted'
 
66926
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66927
DELETE FROM t0_aux
 
66928
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66929
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66930
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66931
'just inserted' FROM t0_template
 
66932
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66933
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
66934
BEGIN
 
66935
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66936
f_charbig = 'updated by trigger'
 
66937
      WHERE f_int1 = - old.f_int1;
 
66938
END|
 
66939
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66940
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66941
        
 
66942
# check trigger-4 success:      1
 
66943
DROP TRIGGER trg_1;
 
66944
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66945
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66946
f_charbig = 'just inserted'
 
66947
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66948
DELETE FROM t0_aux
 
66949
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66950
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66951
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66952
'just inserted' FROM t0_template
 
66953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66954
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
66955
BEGIN
 
66956
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66957
f_charbig = 'updated by trigger'
 
66958
      WHERE f_int1 = new.f_int1;
 
66959
END|
 
66960
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66961
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66962
        
 
66963
# check trigger-5 success:      1
 
66964
DROP TRIGGER trg_1;
 
66965
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66966
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66967
f_charbig = 'just inserted'
 
66968
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66969
DELETE FROM t0_aux
 
66970
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66971
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66972
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66973
'just inserted' FROM t0_template
 
66974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66975
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
66976
BEGIN
 
66977
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66978
f_charbig = 'updated by trigger'
 
66979
      WHERE f_int1 = - old.f_int1;
 
66980
END|
 
66981
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
66982
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
66983
        
 
66984
# check trigger-6 success:      1
 
66985
DROP TRIGGER trg_1;
 
66986
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
66987
f_int2 = CAST(f_char1 AS SIGNED INT),
 
66988
f_charbig = 'just inserted'
 
66989
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
66990
DELETE FROM t0_aux
 
66991
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66992
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
66993
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
66994
'just inserted' FROM t0_template
 
66995
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
66996
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
66997
BEGIN
 
66998
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
66999
f_charbig = 'updated by trigger'
 
67000
      WHERE f_int1 = - old.f_int1;
 
67001
END|
 
67002
DELETE FROM t0_aux
 
67003
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67004
        
 
67005
# check trigger-7 success:      1
 
67006
DROP TRIGGER trg_1;
 
67007
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67008
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67009
f_charbig = 'just inserted'
 
67010
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67011
DELETE FROM t0_aux
 
67012
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67013
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67014
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67015
'just inserted' FROM t0_template
 
67016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67017
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
67018
BEGIN
 
67019
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67020
f_charbig = 'updated by trigger'
 
67021
      WHERE f_int1 = - old.f_int1;
 
67022
END|
 
67023
DELETE FROM t0_aux
 
67024
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67025
        
 
67026
# check trigger-8 success:      1
 
67027
DROP TRIGGER trg_1;
 
67028
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67029
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67030
f_charbig = 'just inserted'
 
67031
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67032
DELETE FROM t0_aux
 
67033
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67034
DELETE FROM t1
 
67035
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67036
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
67037
BEGIN
 
67038
SET new.f_int1 = old.f_int1 + @max_row,
 
67039
new.f_int2 = old.f_int2 - @max_row,
 
67040
new.f_charbig = '####updated per update trigger####';
 
67041
END|
 
67042
UPDATE t1
 
67043
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
67044
f_charbig = '####updated per update statement itself####';
 
67045
        
 
67046
# check trigger-9 success:      1
 
67047
DROP TRIGGER trg_2;
 
67048
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67049
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67050
f_charbig = CONCAT('===',f_char1,'===');
 
67051
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
67052
BEGIN
 
67053
SET new.f_int1 = new.f_int1 + @max_row,
 
67054
new.f_int2 = new.f_int2 - @max_row,
 
67055
new.f_charbig = '####updated per update trigger####';
 
67056
END|
 
67057
UPDATE t1
 
67058
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
67059
f_charbig = '####updated per update statement itself####';
 
67060
        
 
67061
# check trigger-10 success:     1
 
67062
DROP TRIGGER trg_2;
 
67063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67065
f_charbig = CONCAT('===',f_char1,'===');
 
67066
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
67067
BEGIN
 
67068
SET new.f_int1 = @my_max1 + @counter,
 
67069
new.f_int2 = @my_min2 - @counter,
 
67070
new.f_charbig = '####updated per insert trigger####';
 
67071
SET @counter = @counter + 1;
 
67072
END|
 
67073
SET @counter = 1;
 
67074
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
67075
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67076
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
67077
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
67078
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
67079
ORDER BY f_int1;
 
67080
DROP TRIGGER trg_3;
 
67081
        
 
67082
# check trigger-11 success:     1
 
67083
DELETE FROM t1
 
67084
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
67085
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
67086
AND f_charbig = '####updated per insert trigger####';
 
67087
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
67088
BEGIN
 
67089
SET new.f_int1 = @my_max1 + @counter,
 
67090
new.f_int2 = @my_min2 - @counter,
 
67091
new.f_charbig = '####updated per insert trigger####';
 
67092
SET @counter = @counter + 1;
 
67093
END|
 
67094
SET @counter = 1;
 
67095
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
67096
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
67097
SELECT CAST(f_int1 AS CHAR),
 
67098
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
67099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
67100
ORDER BY f_int1;
 
67101
DROP TRIGGER trg_3;
 
67102
        
 
67103
# check trigger-12 success:     1
 
67104
DELETE FROM t1
 
67105
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
67106
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
67107
AND f_charbig = '####updated per insert trigger####';
 
67108
ANALYZE  TABLE t1;
 
67109
Table   Op      Msg_type        Msg_text
 
67110
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
67111
CHECK    TABLE t1 EXTENDED;
 
67112
Table   Op      Msg_type        Msg_text
 
67113
test.t1 check   note    The storage engine for the table doesn't support check
 
67114
CHECKSUM TABLE t1 EXTENDED;
 
67115
Table   Checksum
 
67116
test.t1 <some_value>
 
67117
OPTIMIZE TABLE t1;
 
67118
Table   Op      Msg_type        Msg_text
 
67119
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
67120
# check layout success:    1
 
67121
REPAIR   TABLE t1 EXTENDED;
 
67122
Table   Op      Msg_type        Msg_text
 
67123
test.t1 repair  note    The storage engine for the table doesn't support repair
 
67124
# check layout success:    1
 
67125
TRUNCATE t1;
 
67126
        
 
67127
# check TRUNCATE success:       1
 
67128
# check layout success:    1
 
67129
# End usability test (inc/partition_check.inc)
 
67130
DROP TABLE t1;
 
67131
CREATE TABLE t1 (
 
67132
f_int1 INTEGER,
 
67133
f_int2 INTEGER,
 
67134
f_char1 CHAR(20),
 
67135
f_char2 CHAR(20),
 
67136
f_charbig VARCHAR(1000)
 
67137
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
67138
)
 
67139
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
67140
(PARTITION parta VALUES LESS THAN (0),
 
67141
PARTITION partb VALUES LESS THAN (5),
 
67142
PARTITION partc VALUES LESS THAN (10),
 
67143
PARTITION partd VALUES LESS THAN (10 + 5),
 
67144
PARTITION parte VALUES LESS THAN (20),
 
67145
PARTITION partf VALUES LESS THAN (2147483646));
 
67146
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67147
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
67148
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
67149
ALTER TABLE t1 DROP INDEX uidx1;
 
67150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67151
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
67152
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
67153
# Start usability test (inc/partition_check.inc)
 
67154
create_command
 
67155
SHOW CREATE TABLE t1;
 
67156
Table   Create Table
 
67157
t1      CREATE TABLE `t1` (
 
67158
  `f_int1` int(11) DEFAULT NULL,
 
67159
  `f_int2` int(11) DEFAULT NULL,
 
67160
  `f_char1` char(20) DEFAULT NULL,
 
67161
  `f_char2` char(20) DEFAULT NULL,
 
67162
  `f_charbig` varchar(1000) DEFAULT NULL
 
67163
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
67164
 
 
67165
# check prerequisites-1 success:    1
 
67166
# check COUNT(*) success:    1
 
67167
# check MIN/MAX(f_int1) success:    1
 
67168
# check MIN/MAX(f_int2) success:    1
 
67169
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67170
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
67171
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
67172
WHERE f_int1 IN (2,3);
 
67173
# check prerequisites-3 success:    1
 
67174
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
67175
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
67176
# check read via f_int1 success: 1
 
67177
# check read via f_int2 success: 1
 
67178
        
 
67179
# check multiple-1 success:     1
 
67180
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
67181
        
 
67182
# check multiple-2 success:     1
 
67183
INSERT INTO t1 SELECT * FROM t0_template
 
67184
WHERE MOD(f_int1,3) = 0;
 
67185
        
 
67186
# check multiple-3 success:     1
 
67187
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
67188
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
67189
AND @max_row_div2 + @max_row_div4;
 
67190
        
 
67191
# check multiple-4 success:     1
 
67192
DELETE FROM t1
 
67193
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
67194
AND @max_row_div2 + @max_row_div4 + @max_row;
 
67195
        
 
67196
# check multiple-5 success:     1
 
67197
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
67198
INSERT INTO t1
 
67199
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
67200
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
67201
f_charbig = '#SINGLE#';
 
67202
        
 
67203
# check single-1 success:       1
 
67204
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
67205
INSERT INTO t1
 
67206
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
67207
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
67208
f_charbig = '#SINGLE#';
 
67209
        
 
67210
# check single-2 success:       1
 
67211
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
67212
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
67213
UPDATE t1 SET f_int1 = @cur_value2
 
67214
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
67215
        
 
67216
# check single-3 success:       1
 
67217
SET @cur_value1= -1;
 
67218
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
67219
UPDATE t1 SET f_int1 = @cur_value1
 
67220
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
67221
        
 
67222
# check single-4 success:       1
 
67223
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
67224
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
67225
        
 
67226
# check single-5 success:       1
 
67227
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
67228
        
 
67229
# check single-6 success:       1
 
67230
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
67231
ERROR HY000: Table has no partition for value 2147483647
 
67232
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
67233
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
67234
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
67235
f_charbig = '#NULL#';
 
67236
INSERT INTO t1
 
67237
SET f_int1 = NULL , f_int2 = -@max_row,
 
67238
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
67239
f_charbig = '#NULL#';
 
67240
# check null success:    1
 
67241
        
 
67242
# check null-1 success:         1
 
67243
UPDATE t1 SET f_int1 = -@max_row
 
67244
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
67245
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
67246
        
 
67247
# check null-2 success:         1
 
67248
UPDATE t1 SET f_int1 = NULL
 
67249
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
67250
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
67251
        
 
67252
# check null-3 success:         1
 
67253
DELETE FROM t1
 
67254
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
67255
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
67256
        
 
67257
# check null-4 success:         1
 
67258
DELETE FROM t1
 
67259
WHERE f_int1 = 0 AND f_int2 = 0
 
67260
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
67261
AND f_charbig = '#NULL#';
 
67262
SET AUTOCOMMIT= 0;
 
67263
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67264
SELECT f_int1, f_int1, '', '', 'was inserted'
 
67265
FROM t0_template source_tab
 
67266
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
67267
        
 
67268
# check transactions-1 success:         1
 
67269
COMMIT WORK;
 
67270
        
 
67271
# check transactions-2 success:         1
 
67272
ROLLBACK WORK;
 
67273
        
 
67274
# check transactions-3 success:         1
 
67275
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
67276
COMMIT WORK;
 
67277
ROLLBACK WORK;
 
67278
        
 
67279
# check transactions-4 success:         1
 
67280
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67281
SELECT f_int1, f_int1, '', '', 'was inserted'
 
67282
FROM t0_template source_tab
 
67283
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
67284
        
 
67285
# check transactions-5 success:         1
 
67286
ROLLBACK WORK;
 
67287
        
 
67288
# check transactions-6 success:         1
 
67289
# INFO: Storage engine used for t1 seems to be transactional.
 
67290
COMMIT;
 
67291
        
 
67292
# check transactions-7 success:         1
 
67293
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
67294
COMMIT WORK;
 
67295
SET @@session.sql_mode = 'traditional';
 
67296
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
67297
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67298
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
67299
'', '', 'was inserted' FROM t0_template
 
67300
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
67301
ERROR 22012: Division by 0
 
67302
COMMIT;
 
67303
        
 
67304
# check transactions-8 success:         1
 
67305
# INFO: Storage engine used for t1 seems to be able to revert
 
67306
#       changes made by the failing statement.
 
67307
SET @@session.sql_mode = '';
 
67308
SET AUTOCOMMIT= 1;
 
67309
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
67310
COMMIT WORK;
 
67311
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
67312
        
 
67313
# check special-1 success:      1
 
67314
UPDATE t1 SET f_charbig = '';
 
67315
        
 
67316
# check special-2 success:      1
 
67317
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
67318
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67319
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
67320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67323
'just inserted' FROM t0_template
 
67324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67325
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
67326
BEGIN
 
67327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67328
f_charbig = 'updated by trigger'
 
67329
      WHERE f_int1 = new.f_int1;
 
67330
END|
 
67331
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67332
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
67333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67334
        
 
67335
# check trigger-1 success:      1
 
67336
DROP TRIGGER trg_1;
 
67337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67339
f_charbig = 'just inserted'
 
67340
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67341
DELETE FROM t0_aux
 
67342
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67343
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67344
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67345
'just inserted' FROM t0_template
 
67346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67347
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
67348
BEGIN
 
67349
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67350
f_charbig = 'updated by trigger'
 
67351
      WHERE f_int1 = new.f_int1;
 
67352
END|
 
67353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67354
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
67355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67356
        
 
67357
# check trigger-2 success:      1
 
67358
DROP TRIGGER trg_1;
 
67359
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67360
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67361
f_charbig = 'just inserted'
 
67362
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67363
DELETE FROM t0_aux
 
67364
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67365
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67366
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67367
'just inserted' FROM t0_template
 
67368
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67369
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
67370
BEGIN
 
67371
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67372
f_charbig = 'updated by trigger'
 
67373
      WHERE f_int1 = new.f_int1;
 
67374
END|
 
67375
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67376
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67377
        
 
67378
# check trigger-3 success:      1
 
67379
DROP TRIGGER trg_1;
 
67380
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67381
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67382
f_charbig = 'just inserted'
 
67383
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67384
DELETE FROM t0_aux
 
67385
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67387
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67388
'just inserted' FROM t0_template
 
67389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67390
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
67391
BEGIN
 
67392
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67393
f_charbig = 'updated by trigger'
 
67394
      WHERE f_int1 = - old.f_int1;
 
67395
END|
 
67396
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67397
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67398
        
 
67399
# check trigger-4 success:      1
 
67400
DROP TRIGGER trg_1;
 
67401
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67402
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67403
f_charbig = 'just inserted'
 
67404
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67405
DELETE FROM t0_aux
 
67406
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67407
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67408
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67409
'just inserted' FROM t0_template
 
67410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67411
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
67412
BEGIN
 
67413
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67414
f_charbig = 'updated by trigger'
 
67415
      WHERE f_int1 = new.f_int1;
 
67416
END|
 
67417
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67418
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67419
        
 
67420
# check trigger-5 success:      1
 
67421
DROP TRIGGER trg_1;
 
67422
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67423
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67424
f_charbig = 'just inserted'
 
67425
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67426
DELETE FROM t0_aux
 
67427
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67428
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67429
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67430
'just inserted' FROM t0_template
 
67431
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67432
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
67433
BEGIN
 
67434
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67435
f_charbig = 'updated by trigger'
 
67436
      WHERE f_int1 = - old.f_int1;
 
67437
END|
 
67438
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67439
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67440
        
 
67441
# check trigger-6 success:      1
 
67442
DROP TRIGGER trg_1;
 
67443
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67444
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67445
f_charbig = 'just inserted'
 
67446
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67447
DELETE FROM t0_aux
 
67448
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67449
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67450
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67451
'just inserted' FROM t0_template
 
67452
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67453
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
67454
BEGIN
 
67455
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67456
f_charbig = 'updated by trigger'
 
67457
      WHERE f_int1 = - old.f_int1;
 
67458
END|
 
67459
DELETE FROM t0_aux
 
67460
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67461
        
 
67462
# check trigger-7 success:      1
 
67463
DROP TRIGGER trg_1;
 
67464
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67465
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67466
f_charbig = 'just inserted'
 
67467
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67468
DELETE FROM t0_aux
 
67469
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67470
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67471
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67472
'just inserted' FROM t0_template
 
67473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67474
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
67475
BEGIN
 
67476
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67477
f_charbig = 'updated by trigger'
 
67478
      WHERE f_int1 = - old.f_int1;
 
67479
END|
 
67480
DELETE FROM t0_aux
 
67481
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67482
        
 
67483
# check trigger-8 success:      1
 
67484
DROP TRIGGER trg_1;
 
67485
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67486
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67487
f_charbig = 'just inserted'
 
67488
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67489
DELETE FROM t0_aux
 
67490
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67491
DELETE FROM t1
 
67492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67493
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
67494
BEGIN
 
67495
SET new.f_int1 = old.f_int1 + @max_row,
 
67496
new.f_int2 = old.f_int2 - @max_row,
 
67497
new.f_charbig = '####updated per update trigger####';
 
67498
END|
 
67499
UPDATE t1
 
67500
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
67501
f_charbig = '####updated per update statement itself####';
 
67502
        
 
67503
# check trigger-9 success:      1
 
67504
DROP TRIGGER trg_2;
 
67505
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67506
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67507
f_charbig = CONCAT('===',f_char1,'===');
 
67508
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
67509
BEGIN
 
67510
SET new.f_int1 = new.f_int1 + @max_row,
 
67511
new.f_int2 = new.f_int2 - @max_row,
 
67512
new.f_charbig = '####updated per update trigger####';
 
67513
END|
 
67514
UPDATE t1
 
67515
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
67516
f_charbig = '####updated per update statement itself####';
 
67517
        
 
67518
# check trigger-10 success:     1
 
67519
DROP TRIGGER trg_2;
 
67520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67522
f_charbig = CONCAT('===',f_char1,'===');
 
67523
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
67524
BEGIN
 
67525
SET new.f_int1 = @my_max1 + @counter,
 
67526
new.f_int2 = @my_min2 - @counter,
 
67527
new.f_charbig = '####updated per insert trigger####';
 
67528
SET @counter = @counter + 1;
 
67529
END|
 
67530
SET @counter = 1;
 
67531
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
67532
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67533
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
67534
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
67535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
67536
ORDER BY f_int1;
 
67537
DROP TRIGGER trg_3;
 
67538
        
 
67539
# check trigger-11 success:     1
 
67540
DELETE FROM t1
 
67541
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
67542
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
67543
AND f_charbig = '####updated per insert trigger####';
 
67544
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
67545
BEGIN
 
67546
SET new.f_int1 = @my_max1 + @counter,
 
67547
new.f_int2 = @my_min2 - @counter,
 
67548
new.f_charbig = '####updated per insert trigger####';
 
67549
SET @counter = @counter + 1;
 
67550
END|
 
67551
SET @counter = 1;
 
67552
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
67553
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
67554
SELECT CAST(f_int1 AS CHAR),
 
67555
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
67556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
67557
ORDER BY f_int1;
 
67558
DROP TRIGGER trg_3;
 
67559
        
 
67560
# check trigger-12 success:     1
 
67561
DELETE FROM t1
 
67562
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
67563
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
67564
AND f_charbig = '####updated per insert trigger####';
 
67565
ANALYZE  TABLE t1;
 
67566
Table   Op      Msg_type        Msg_text
 
67567
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
67568
CHECK    TABLE t1 EXTENDED;
 
67569
Table   Op      Msg_type        Msg_text
 
67570
test.t1 check   note    The storage engine for the table doesn't support check
 
67571
CHECKSUM TABLE t1 EXTENDED;
 
67572
Table   Checksum
 
67573
test.t1 <some_value>
 
67574
OPTIMIZE TABLE t1;
 
67575
Table   Op      Msg_type        Msg_text
 
67576
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
67577
# check layout success:    1
 
67578
REPAIR   TABLE t1 EXTENDED;
 
67579
Table   Op      Msg_type        Msg_text
 
67580
test.t1 repair  note    The storage engine for the table doesn't support repair
 
67581
# check layout success:    1
 
67582
TRUNCATE t1;
 
67583
        
 
67584
# check TRUNCATE success:       1
 
67585
# check layout success:    1
 
67586
# End usability test (inc/partition_check.inc)
 
67587
DROP TABLE t1;
 
67588
CREATE TABLE t1 (
 
67589
f_int1 INTEGER,
 
67590
f_int2 INTEGER,
 
67591
f_char1 CHAR(20),
 
67592
f_char2 CHAR(20),
 
67593
f_charbig VARCHAR(1000)
 
67594
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
67595
)
 
67596
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
67597
(PARTITION parta VALUES LESS THAN (0),
 
67598
PARTITION partb VALUES LESS THAN (5),
 
67599
PARTITION partc VALUES LESS THAN (10),
 
67600
PARTITION partd VALUES LESS THAN (2147483646));
 
67601
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67602
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
67603
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
67604
ALTER TABLE t1 DROP INDEX uidx1;
 
67605
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67606
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
67607
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
67608
# Start usability test (inc/partition_check.inc)
 
67609
create_command
 
67610
SHOW CREATE TABLE t1;
 
67611
Table   Create Table
 
67612
t1      CREATE TABLE `t1` (
 
67613
  `f_int1` int(11) DEFAULT NULL,
 
67614
  `f_int2` int(11) DEFAULT NULL,
 
67615
  `f_char1` char(20) DEFAULT NULL,
 
67616
  `f_char2` char(20) DEFAULT NULL,
 
67617
  `f_charbig` varchar(1000) DEFAULT NULL
 
67618
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
67619
 
 
67620
# check prerequisites-1 success:    1
 
67621
# check COUNT(*) success:    1
 
67622
# check MIN/MAX(f_int1) success:    1
 
67623
# check MIN/MAX(f_int2) success:    1
 
67624
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67625
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
67626
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
67627
WHERE f_int1 IN (2,3);
 
67628
# check prerequisites-3 success:    1
 
67629
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
67630
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
67631
# check read via f_int1 success: 1
 
67632
# check read via f_int2 success: 1
 
67633
        
 
67634
# check multiple-1 success:     1
 
67635
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
67636
        
 
67637
# check multiple-2 success:     1
 
67638
INSERT INTO t1 SELECT * FROM t0_template
 
67639
WHERE MOD(f_int1,3) = 0;
 
67640
        
 
67641
# check multiple-3 success:     1
 
67642
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
67643
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
67644
AND @max_row_div2 + @max_row_div4;
 
67645
        
 
67646
# check multiple-4 success:     1
 
67647
DELETE FROM t1
 
67648
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
67649
AND @max_row_div2 + @max_row_div4 + @max_row;
 
67650
        
 
67651
# check multiple-5 success:     1
 
67652
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
67653
INSERT INTO t1
 
67654
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
67655
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
67656
f_charbig = '#SINGLE#';
 
67657
        
 
67658
# check single-1 success:       1
 
67659
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
67660
INSERT INTO t1
 
67661
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
67662
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
67663
f_charbig = '#SINGLE#';
 
67664
        
 
67665
# check single-2 success:       1
 
67666
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
67667
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
67668
UPDATE t1 SET f_int1 = @cur_value2
 
67669
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
67670
        
 
67671
# check single-3 success:       1
 
67672
SET @cur_value1= -1;
 
67673
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
67674
UPDATE t1 SET f_int1 = @cur_value1
 
67675
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
67676
        
 
67677
# check single-4 success:       1
 
67678
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
67679
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
67680
        
 
67681
# check single-5 success:       1
 
67682
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
67683
        
 
67684
# check single-6 success:       1
 
67685
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
67686
ERROR HY000: Table has no partition for value 2147483647
 
67687
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
67688
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
67689
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
67690
f_charbig = '#NULL#';
 
67691
INSERT INTO t1
 
67692
SET f_int1 = NULL , f_int2 = -@max_row,
 
67693
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
67694
f_charbig = '#NULL#';
 
67695
# check null success:    1
 
67696
        
 
67697
# check null-1 success:         1
 
67698
UPDATE t1 SET f_int1 = -@max_row
 
67699
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
67700
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
67701
        
 
67702
# check null-2 success:         1
 
67703
UPDATE t1 SET f_int1 = NULL
 
67704
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
67705
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
67706
        
 
67707
# check null-3 success:         1
 
67708
DELETE FROM t1
 
67709
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
67710
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
67711
        
 
67712
# check null-4 success:         1
 
67713
DELETE FROM t1
 
67714
WHERE f_int1 = 0 AND f_int2 = 0
 
67715
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
67716
AND f_charbig = '#NULL#';
 
67717
SET AUTOCOMMIT= 0;
 
67718
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67719
SELECT f_int1, f_int1, '', '', 'was inserted'
 
67720
FROM t0_template source_tab
 
67721
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
67722
        
 
67723
# check transactions-1 success:         1
 
67724
COMMIT WORK;
 
67725
        
 
67726
# check transactions-2 success:         1
 
67727
ROLLBACK WORK;
 
67728
        
 
67729
# check transactions-3 success:         1
 
67730
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
67731
COMMIT WORK;
 
67732
ROLLBACK WORK;
 
67733
        
 
67734
# check transactions-4 success:         1
 
67735
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67736
SELECT f_int1, f_int1, '', '', 'was inserted'
 
67737
FROM t0_template source_tab
 
67738
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
67739
        
 
67740
# check transactions-5 success:         1
 
67741
ROLLBACK WORK;
 
67742
        
 
67743
# check transactions-6 success:         1
 
67744
# INFO: Storage engine used for t1 seems to be transactional.
 
67745
COMMIT;
 
67746
        
 
67747
# check transactions-7 success:         1
 
67748
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
67749
COMMIT WORK;
 
67750
SET @@session.sql_mode = 'traditional';
 
67751
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
67752
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67753
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
67754
'', '', 'was inserted' FROM t0_template
 
67755
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
67756
ERROR 22012: Division by 0
 
67757
COMMIT;
 
67758
        
 
67759
# check transactions-8 success:         1
 
67760
# INFO: Storage engine used for t1 seems to be able to revert
 
67761
#       changes made by the failing statement.
 
67762
SET @@session.sql_mode = '';
 
67763
SET AUTOCOMMIT= 1;
 
67764
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
67765
COMMIT WORK;
 
67766
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
67767
        
 
67768
# check special-1 success:      1
 
67769
UPDATE t1 SET f_charbig = '';
 
67770
        
 
67771
# check special-2 success:      1
 
67772
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
67773
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67774
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
67775
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67777
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67778
'just inserted' FROM t0_template
 
67779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67780
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
67781
BEGIN
 
67782
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67783
f_charbig = 'updated by trigger'
 
67784
      WHERE f_int1 = new.f_int1;
 
67785
END|
 
67786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67787
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
67788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67789
        
 
67790
# check trigger-1 success:      1
 
67791
DROP TRIGGER trg_1;
 
67792
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67793
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67794
f_charbig = 'just inserted'
 
67795
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67796
DELETE FROM t0_aux
 
67797
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67798
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67799
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67800
'just inserted' FROM t0_template
 
67801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67802
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
67803
BEGIN
 
67804
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67805
f_charbig = 'updated by trigger'
 
67806
      WHERE f_int1 = new.f_int1;
 
67807
END|
 
67808
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67809
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
67810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67811
        
 
67812
# check trigger-2 success:      1
 
67813
DROP TRIGGER trg_1;
 
67814
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67815
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67816
f_charbig = 'just inserted'
 
67817
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67818
DELETE FROM t0_aux
 
67819
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67820
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67821
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67822
'just inserted' FROM t0_template
 
67823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67824
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
67825
BEGIN
 
67826
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67827
f_charbig = 'updated by trigger'
 
67828
      WHERE f_int1 = new.f_int1;
 
67829
END|
 
67830
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67831
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67832
        
 
67833
# check trigger-3 success:      1
 
67834
DROP TRIGGER trg_1;
 
67835
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67836
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67837
f_charbig = 'just inserted'
 
67838
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67839
DELETE FROM t0_aux
 
67840
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67842
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67843
'just inserted' FROM t0_template
 
67844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67845
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
67846
BEGIN
 
67847
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67848
f_charbig = 'updated by trigger'
 
67849
      WHERE f_int1 = - old.f_int1;
 
67850
END|
 
67851
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67852
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67853
        
 
67854
# check trigger-4 success:      1
 
67855
DROP TRIGGER trg_1;
 
67856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67858
f_charbig = 'just inserted'
 
67859
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67860
DELETE FROM t0_aux
 
67861
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67862
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67863
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67864
'just inserted' FROM t0_template
 
67865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67866
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
67867
BEGIN
 
67868
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67869
f_charbig = 'updated by trigger'
 
67870
      WHERE f_int1 = new.f_int1;
 
67871
END|
 
67872
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67873
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67874
        
 
67875
# check trigger-5 success:      1
 
67876
DROP TRIGGER trg_1;
 
67877
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67878
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67879
f_charbig = 'just inserted'
 
67880
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67881
DELETE FROM t0_aux
 
67882
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67883
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67884
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67885
'just inserted' FROM t0_template
 
67886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67887
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
67888
BEGIN
 
67889
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67890
f_charbig = 'updated by trigger'
 
67891
      WHERE f_int1 = - old.f_int1;
 
67892
END|
 
67893
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
67894
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67895
        
 
67896
# check trigger-6 success:      1
 
67897
DROP TRIGGER trg_1;
 
67898
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67899
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67900
f_charbig = 'just inserted'
 
67901
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67902
DELETE FROM t0_aux
 
67903
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67904
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67905
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67906
'just inserted' FROM t0_template
 
67907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67908
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
67909
BEGIN
 
67910
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67911
f_charbig = 'updated by trigger'
 
67912
      WHERE f_int1 = - old.f_int1;
 
67913
END|
 
67914
DELETE FROM t0_aux
 
67915
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67916
        
 
67917
# check trigger-7 success:      1
 
67918
DROP TRIGGER trg_1;
 
67919
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67920
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67921
f_charbig = 'just inserted'
 
67922
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67923
DELETE FROM t0_aux
 
67924
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67925
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
67926
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
67927
'just inserted' FROM t0_template
 
67928
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67929
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
67930
BEGIN
 
67931
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
67932
f_charbig = 'updated by trigger'
 
67933
      WHERE f_int1 = - old.f_int1;
 
67934
END|
 
67935
DELETE FROM t0_aux
 
67936
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
67937
        
 
67938
# check trigger-8 success:      1
 
67939
DROP TRIGGER trg_1;
 
67940
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67941
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67942
f_charbig = 'just inserted'
 
67943
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
67944
DELETE FROM t0_aux
 
67945
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67946
DELETE FROM t1
 
67947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
67948
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
67949
BEGIN
 
67950
SET new.f_int1 = old.f_int1 + @max_row,
 
67951
new.f_int2 = old.f_int2 - @max_row,
 
67952
new.f_charbig = '####updated per update trigger####';
 
67953
END|
 
67954
UPDATE t1
 
67955
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
67956
f_charbig = '####updated per update statement itself####';
 
67957
        
 
67958
# check trigger-9 success:      1
 
67959
DROP TRIGGER trg_2;
 
67960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67962
f_charbig = CONCAT('===',f_char1,'===');
 
67963
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
67964
BEGIN
 
67965
SET new.f_int1 = new.f_int1 + @max_row,
 
67966
new.f_int2 = new.f_int2 - @max_row,
 
67967
new.f_charbig = '####updated per update trigger####';
 
67968
END|
 
67969
UPDATE t1
 
67970
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
67971
f_charbig = '####updated per update statement itself####';
 
67972
        
 
67973
# check trigger-10 success:     1
 
67974
DROP TRIGGER trg_2;
 
67975
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
67976
f_int2 = CAST(f_char1 AS SIGNED INT),
 
67977
f_charbig = CONCAT('===',f_char1,'===');
 
67978
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
67979
BEGIN
 
67980
SET new.f_int1 = @my_max1 + @counter,
 
67981
new.f_int2 = @my_min2 - @counter,
 
67982
new.f_charbig = '####updated per insert trigger####';
 
67983
SET @counter = @counter + 1;
 
67984
END|
 
67985
SET @counter = 1;
 
67986
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
67987
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
67988
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
67989
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
67990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
67991
ORDER BY f_int1;
 
67992
DROP TRIGGER trg_3;
 
67993
        
 
67994
# check trigger-11 success:     1
 
67995
DELETE FROM t1
 
67996
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
67997
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
67998
AND f_charbig = '####updated per insert trigger####';
 
67999
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
68000
BEGIN
 
68001
SET new.f_int1 = @my_max1 + @counter,
 
68002
new.f_int2 = @my_min2 - @counter,
 
68003
new.f_charbig = '####updated per insert trigger####';
 
68004
SET @counter = @counter + 1;
 
68005
END|
 
68006
SET @counter = 1;
 
68007
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
68008
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
68009
SELECT CAST(f_int1 AS CHAR),
 
68010
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
68011
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
68012
ORDER BY f_int1;
 
68013
DROP TRIGGER trg_3;
 
68014
        
 
68015
# check trigger-12 success:     1
 
68016
DELETE FROM t1
 
68017
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
68018
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
68019
AND f_charbig = '####updated per insert trigger####';
 
68020
ANALYZE  TABLE t1;
 
68021
Table   Op      Msg_type        Msg_text
 
68022
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
68023
CHECK    TABLE t1 EXTENDED;
 
68024
Table   Op      Msg_type        Msg_text
 
68025
test.t1 check   note    The storage engine for the table doesn't support check
 
68026
CHECKSUM TABLE t1 EXTENDED;
 
68027
Table   Checksum
 
68028
test.t1 <some_value>
 
68029
OPTIMIZE TABLE t1;
 
68030
Table   Op      Msg_type        Msg_text
 
68031
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
68032
# check layout success:    1
 
68033
REPAIR   TABLE t1 EXTENDED;
 
68034
Table   Op      Msg_type        Msg_text
 
68035
test.t1 repair  note    The storage engine for the table doesn't support repair
 
68036
# check layout success:    1
 
68037
TRUNCATE t1;
 
68038
        
 
68039
# check TRUNCATE success:       1
 
68040
# check layout success:    1
 
68041
# End usability test (inc/partition_check.inc)
 
68042
DROP TABLE t1;
 
68043
CREATE TABLE t1 (
 
68044
f_int1 INTEGER,
 
68045
f_int2 INTEGER,
 
68046
f_char1 CHAR(20),
 
68047
f_char2 CHAR(20),
 
68048
f_charbig VARCHAR(1000)
 
68049
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
68050
)
 
68051
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
68052
(PARTITION part1 VALUES LESS THAN (0)
 
68053
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
68054
PARTITION part2 VALUES LESS THAN (5)
 
68055
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
68056
PARTITION part3 VALUES LESS THAN (10)
 
68057
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
68058
PARTITION part4 VALUES LESS THAN (2147483646)
 
68059
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
68060
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68061
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
68062
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
68063
ALTER TABLE t1 DROP INDEX uidx1;
 
68064
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68065
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
68066
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
68067
# Start usability test (inc/partition_check.inc)
 
68068
create_command
 
68069
SHOW CREATE TABLE t1;
 
68070
Table   Create Table
 
68071
t1      CREATE TABLE `t1` (
 
68072
  `f_int1` int(11) DEFAULT NULL,
 
68073
  `f_int2` int(11) DEFAULT NULL,
 
68074
  `f_char1` char(20) DEFAULT NULL,
 
68075
  `f_char2` char(20) DEFAULT NULL,
 
68076
  `f_charbig` varchar(1000) DEFAULT NULL
 
68077
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
68078
 
 
68079
# check prerequisites-1 success:    1
 
68080
# check COUNT(*) success:    1
 
68081
# check MIN/MAX(f_int1) success:    1
 
68082
# check MIN/MAX(f_int2) success:    1
 
68083
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68084
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
68085
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
68086
WHERE f_int1 IN (2,3);
 
68087
# check prerequisites-3 success:    1
 
68088
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
68089
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
68090
# check read via f_int1 success: 1
 
68091
# check read via f_int2 success: 1
 
68092
        
 
68093
# check multiple-1 success:     1
 
68094
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
68095
        
 
68096
# check multiple-2 success:     1
 
68097
INSERT INTO t1 SELECT * FROM t0_template
 
68098
WHERE MOD(f_int1,3) = 0;
 
68099
        
 
68100
# check multiple-3 success:     1
 
68101
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
68102
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
68103
AND @max_row_div2 + @max_row_div4;
 
68104
        
 
68105
# check multiple-4 success:     1
 
68106
DELETE FROM t1
 
68107
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
68108
AND @max_row_div2 + @max_row_div4 + @max_row;
 
68109
        
 
68110
# check multiple-5 success:     1
 
68111
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
68112
INSERT INTO t1
 
68113
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
68114
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
68115
f_charbig = '#SINGLE#';
 
68116
        
 
68117
# check single-1 success:       1
 
68118
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
68119
INSERT INTO t1
 
68120
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
68121
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
68122
f_charbig = '#SINGLE#';
 
68123
        
 
68124
# check single-2 success:       1
 
68125
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
68126
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
68127
UPDATE t1 SET f_int1 = @cur_value2
 
68128
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
68129
        
 
68130
# check single-3 success:       1
 
68131
SET @cur_value1= -1;
 
68132
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
68133
UPDATE t1 SET f_int1 = @cur_value1
 
68134
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
68135
        
 
68136
# check single-4 success:       1
 
68137
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
68138
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
68139
        
 
68140
# check single-5 success:       1
 
68141
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
68142
        
 
68143
# check single-6 success:       1
 
68144
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
68145
ERROR HY000: Table has no partition for value 2147483647
 
68146
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
68147
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
68148
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
68149
f_charbig = '#NULL#';
 
68150
INSERT INTO t1
 
68151
SET f_int1 = NULL , f_int2 = -@max_row,
 
68152
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
68153
f_charbig = '#NULL#';
 
68154
# check null success:    1
 
68155
        
 
68156
# check null-1 success:         1
 
68157
UPDATE t1 SET f_int1 = -@max_row
 
68158
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
68159
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
68160
        
 
68161
# check null-2 success:         1
 
68162
UPDATE t1 SET f_int1 = NULL
 
68163
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
68164
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
68165
        
 
68166
# check null-3 success:         1
 
68167
DELETE FROM t1
 
68168
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
68169
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
68170
        
 
68171
# check null-4 success:         1
 
68172
DELETE FROM t1
 
68173
WHERE f_int1 = 0 AND f_int2 = 0
 
68174
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
68175
AND f_charbig = '#NULL#';
 
68176
SET AUTOCOMMIT= 0;
 
68177
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68178
SELECT f_int1, f_int1, '', '', 'was inserted'
 
68179
FROM t0_template source_tab
 
68180
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
68181
        
 
68182
# check transactions-1 success:         1
 
68183
COMMIT WORK;
 
68184
        
 
68185
# check transactions-2 success:         1
 
68186
ROLLBACK WORK;
 
68187
        
 
68188
# check transactions-3 success:         1
 
68189
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
68190
COMMIT WORK;
 
68191
ROLLBACK WORK;
 
68192
        
 
68193
# check transactions-4 success:         1
 
68194
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68195
SELECT f_int1, f_int1, '', '', 'was inserted'
 
68196
FROM t0_template source_tab
 
68197
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
68198
        
 
68199
# check transactions-5 success:         1
 
68200
ROLLBACK WORK;
 
68201
        
 
68202
# check transactions-6 success:         1
 
68203
# INFO: Storage engine used for t1 seems to be transactional.
 
68204
COMMIT;
 
68205
        
 
68206
# check transactions-7 success:         1
 
68207
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
68208
COMMIT WORK;
 
68209
SET @@session.sql_mode = 'traditional';
 
68210
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
68211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68212
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
68213
'', '', 'was inserted' FROM t0_template
 
68214
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
68215
ERROR 22012: Division by 0
 
68216
COMMIT;
 
68217
        
 
68218
# check transactions-8 success:         1
 
68219
# INFO: Storage engine used for t1 seems to be able to revert
 
68220
#       changes made by the failing statement.
 
68221
SET @@session.sql_mode = '';
 
68222
SET AUTOCOMMIT= 1;
 
68223
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
68224
COMMIT WORK;
 
68225
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
68226
        
 
68227
# check special-1 success:      1
 
68228
UPDATE t1 SET f_charbig = '';
 
68229
        
 
68230
# check special-2 success:      1
 
68231
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
68232
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68233
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
68234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68235
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68236
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68237
'just inserted' FROM t0_template
 
68238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68239
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
68240
BEGIN
 
68241
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68242
f_charbig = 'updated by trigger'
 
68243
      WHERE f_int1 = new.f_int1;
 
68244
END|
 
68245
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68246
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
68247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68248
        
 
68249
# check trigger-1 success:      1
 
68250
DROP TRIGGER trg_1;
 
68251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68253
f_charbig = 'just inserted'
 
68254
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68255
DELETE FROM t0_aux
 
68256
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68259
'just inserted' FROM t0_template
 
68260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68261
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
68262
BEGIN
 
68263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68264
f_charbig = 'updated by trigger'
 
68265
      WHERE f_int1 = new.f_int1;
 
68266
END|
 
68267
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68268
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
68269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68270
        
 
68271
# check trigger-2 success:      1
 
68272
DROP TRIGGER trg_1;
 
68273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68275
f_charbig = 'just inserted'
 
68276
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68277
DELETE FROM t0_aux
 
68278
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68280
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68281
'just inserted' FROM t0_template
 
68282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68283
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
68284
BEGIN
 
68285
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68286
f_charbig = 'updated by trigger'
 
68287
      WHERE f_int1 = new.f_int1;
 
68288
END|
 
68289
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68290
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68291
        
 
68292
# check trigger-3 success:      1
 
68293
DROP TRIGGER trg_1;
 
68294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68296
f_charbig = 'just inserted'
 
68297
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68298
DELETE FROM t0_aux
 
68299
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68301
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68302
'just inserted' FROM t0_template
 
68303
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68304
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
68305
BEGIN
 
68306
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68307
f_charbig = 'updated by trigger'
 
68308
      WHERE f_int1 = - old.f_int1;
 
68309
END|
 
68310
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68311
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68312
        
 
68313
# check trigger-4 success:      1
 
68314
DROP TRIGGER trg_1;
 
68315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68317
f_charbig = 'just inserted'
 
68318
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68319
DELETE FROM t0_aux
 
68320
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68323
'just inserted' FROM t0_template
 
68324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68325
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
68326
BEGIN
 
68327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68328
f_charbig = 'updated by trigger'
 
68329
      WHERE f_int1 = new.f_int1;
 
68330
END|
 
68331
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68332
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68333
        
 
68334
# check trigger-5 success:      1
 
68335
DROP TRIGGER trg_1;
 
68336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68338
f_charbig = 'just inserted'
 
68339
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68340
DELETE FROM t0_aux
 
68341
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68342
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68343
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68344
'just inserted' FROM t0_template
 
68345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68346
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
68347
BEGIN
 
68348
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68349
f_charbig = 'updated by trigger'
 
68350
      WHERE f_int1 = - old.f_int1;
 
68351
END|
 
68352
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68353
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68354
        
 
68355
# check trigger-6 success:      1
 
68356
DROP TRIGGER trg_1;
 
68357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68359
f_charbig = 'just inserted'
 
68360
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68361
DELETE FROM t0_aux
 
68362
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68364
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68365
'just inserted' FROM t0_template
 
68366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68367
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
68368
BEGIN
 
68369
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68370
f_charbig = 'updated by trigger'
 
68371
      WHERE f_int1 = - old.f_int1;
 
68372
END|
 
68373
DELETE FROM t0_aux
 
68374
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68375
        
 
68376
# check trigger-7 success:      1
 
68377
DROP TRIGGER trg_1;
 
68378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68379
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68380
f_charbig = 'just inserted'
 
68381
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68382
DELETE FROM t0_aux
 
68383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68386
'just inserted' FROM t0_template
 
68387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68388
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
68389
BEGIN
 
68390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68391
f_charbig = 'updated by trigger'
 
68392
      WHERE f_int1 = - old.f_int1;
 
68393
END|
 
68394
DELETE FROM t0_aux
 
68395
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68396
        
 
68397
# check trigger-8 success:      1
 
68398
DROP TRIGGER trg_1;
 
68399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68401
f_charbig = 'just inserted'
 
68402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68403
DELETE FROM t0_aux
 
68404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68405
DELETE FROM t1
 
68406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68407
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
68408
BEGIN
 
68409
SET new.f_int1 = old.f_int1 + @max_row,
 
68410
new.f_int2 = old.f_int2 - @max_row,
 
68411
new.f_charbig = '####updated per update trigger####';
 
68412
END|
 
68413
UPDATE t1
 
68414
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
68415
f_charbig = '####updated per update statement itself####';
 
68416
        
 
68417
# check trigger-9 success:      1
 
68418
DROP TRIGGER trg_2;
 
68419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68421
f_charbig = CONCAT('===',f_char1,'===');
 
68422
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
68423
BEGIN
 
68424
SET new.f_int1 = new.f_int1 + @max_row,
 
68425
new.f_int2 = new.f_int2 - @max_row,
 
68426
new.f_charbig = '####updated per update trigger####';
 
68427
END|
 
68428
UPDATE t1
 
68429
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
68430
f_charbig = '####updated per update statement itself####';
 
68431
        
 
68432
# check trigger-10 success:     1
 
68433
DROP TRIGGER trg_2;
 
68434
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68435
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68436
f_charbig = CONCAT('===',f_char1,'===');
 
68437
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
68438
BEGIN
 
68439
SET new.f_int1 = @my_max1 + @counter,
 
68440
new.f_int2 = @my_min2 - @counter,
 
68441
new.f_charbig = '####updated per insert trigger####';
 
68442
SET @counter = @counter + 1;
 
68443
END|
 
68444
SET @counter = 1;
 
68445
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
68446
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68447
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
68448
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
68449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
68450
ORDER BY f_int1;
 
68451
DROP TRIGGER trg_3;
 
68452
        
 
68453
# check trigger-11 success:     1
 
68454
DELETE FROM t1
 
68455
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
68456
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
68457
AND f_charbig = '####updated per insert trigger####';
 
68458
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
68459
BEGIN
 
68460
SET new.f_int1 = @my_max1 + @counter,
 
68461
new.f_int2 = @my_min2 - @counter,
 
68462
new.f_charbig = '####updated per insert trigger####';
 
68463
SET @counter = @counter + 1;
 
68464
END|
 
68465
SET @counter = 1;
 
68466
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
68467
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
68468
SELECT CAST(f_int1 AS CHAR),
 
68469
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
68470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
68471
ORDER BY f_int1;
 
68472
DROP TRIGGER trg_3;
 
68473
        
 
68474
# check trigger-12 success:     1
 
68475
DELETE FROM t1
 
68476
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
68477
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
68478
AND f_charbig = '####updated per insert trigger####';
 
68479
ANALYZE  TABLE t1;
 
68480
Table   Op      Msg_type        Msg_text
 
68481
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
68482
CHECK    TABLE t1 EXTENDED;
 
68483
Table   Op      Msg_type        Msg_text
 
68484
test.t1 check   note    The storage engine for the table doesn't support check
 
68485
CHECKSUM TABLE t1 EXTENDED;
 
68486
Table   Checksum
 
68487
test.t1 <some_value>
 
68488
OPTIMIZE TABLE t1;
 
68489
Table   Op      Msg_type        Msg_text
 
68490
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
68491
# check layout success:    1
 
68492
REPAIR   TABLE t1 EXTENDED;
 
68493
Table   Op      Msg_type        Msg_text
 
68494
test.t1 repair  note    The storage engine for the table doesn't support repair
 
68495
# check layout success:    1
 
68496
TRUNCATE t1;
 
68497
        
 
68498
# check TRUNCATE success:       1
 
68499
# check layout success:    1
 
68500
# End usability test (inc/partition_check.inc)
 
68501
DROP TABLE t1;
 
68502
CREATE TABLE t1 (
 
68503
f_int1 INTEGER,
 
68504
f_int2 INTEGER,
 
68505
f_char1 CHAR(20),
 
68506
f_char2 CHAR(20),
 
68507
f_charbig VARCHAR(1000)
 
68508
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
68509
)
 
68510
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
68511
(PARTITION part1 VALUES IN (0)
 
68512
(SUBPARTITION sp11, SUBPARTITION sp12),
 
68513
PARTITION part2 VALUES IN (1)
 
68514
(SUBPARTITION sp21, SUBPARTITION sp22),
 
68515
PARTITION part3 VALUES IN (2)
 
68516
(SUBPARTITION sp31, SUBPARTITION sp32),
 
68517
PARTITION part4 VALUES IN (NULL)
 
68518
(SUBPARTITION sp41, SUBPARTITION sp42));
 
68519
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68520
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
68521
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
68522
ALTER TABLE t1 DROP INDEX uidx1;
 
68523
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68524
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
68525
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
68526
# Start usability test (inc/partition_check.inc)
 
68527
create_command
 
68528
SHOW CREATE TABLE t1;
 
68529
Table   Create Table
 
68530
t1      CREATE TABLE `t1` (
 
68531
  `f_int1` int(11) DEFAULT NULL,
 
68532
  `f_int2` int(11) DEFAULT NULL,
 
68533
  `f_char1` char(20) DEFAULT NULL,
 
68534
  `f_char2` char(20) DEFAULT NULL,
 
68535
  `f_charbig` varchar(1000) DEFAULT NULL
 
68536
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
68537
 
 
68538
# check prerequisites-1 success:    1
 
68539
# check COUNT(*) success:    1
 
68540
# check MIN/MAX(f_int1) success:    1
 
68541
# check MIN/MAX(f_int2) success:    1
 
68542
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68543
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
68544
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
68545
WHERE f_int1 IN (2,3);
 
68546
# check prerequisites-3 success:    1
 
68547
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
68548
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
68549
# check read via f_int1 success: 1
 
68550
# check read via f_int2 success: 1
 
68551
        
 
68552
# check multiple-1 success:     1
 
68553
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
68554
        
 
68555
# check multiple-2 success:     1
 
68556
INSERT INTO t1 SELECT * FROM t0_template
 
68557
WHERE MOD(f_int1,3) = 0;
 
68558
        
 
68559
# check multiple-3 success:     1
 
68560
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
68561
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
68562
AND @max_row_div2 + @max_row_div4;
 
68563
        
 
68564
# check multiple-4 success:     1
 
68565
DELETE FROM t1
 
68566
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
68567
AND @max_row_div2 + @max_row_div4 + @max_row;
 
68568
        
 
68569
# check multiple-5 success:     1
 
68570
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
68571
INSERT INTO t1
 
68572
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
68573
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
68574
f_charbig = '#SINGLE#';
 
68575
        
 
68576
# check single-1 success:       1
 
68577
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
68578
INSERT INTO t1
 
68579
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
68580
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
68581
f_charbig = '#SINGLE#';
 
68582
        
 
68583
# check single-2 success:       1
 
68584
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
68585
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
68586
UPDATE t1 SET f_int1 = @cur_value2
 
68587
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
68588
        
 
68589
# check single-3 success:       1
 
68590
SET @cur_value1= -1;
 
68591
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
68592
UPDATE t1 SET f_int1 = @cur_value1
 
68593
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
68594
        
 
68595
# check single-4 success:       1
 
68596
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
68597
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
68598
        
 
68599
# check single-5 success:       1
 
68600
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
68601
        
 
68602
# check single-6 success:       1
 
68603
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
68604
        
 
68605
# check single-7 success:       1
 
68606
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
68607
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
68608
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
68609
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
68610
f_charbig = '#NULL#';
 
68611
INSERT INTO t1
 
68612
SET f_int1 = NULL , f_int2 = -@max_row,
 
68613
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
68614
f_charbig = '#NULL#';
 
68615
# check null success:    1
 
68616
        
 
68617
# check null-1 success:         1
 
68618
UPDATE t1 SET f_int1 = -@max_row
 
68619
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
68620
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
68621
        
 
68622
# check null-2 success:         1
 
68623
UPDATE t1 SET f_int1 = NULL
 
68624
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
68625
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
68626
        
 
68627
# check null-3 success:         1
 
68628
DELETE FROM t1
 
68629
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
68630
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
68631
        
 
68632
# check null-4 success:         1
 
68633
DELETE FROM t1
 
68634
WHERE f_int1 = 0 AND f_int2 = 0
 
68635
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
68636
AND f_charbig = '#NULL#';
 
68637
SET AUTOCOMMIT= 0;
 
68638
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68639
SELECT f_int1, f_int1, '', '', 'was inserted'
 
68640
FROM t0_template source_tab
 
68641
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
68642
        
 
68643
# check transactions-1 success:         1
 
68644
COMMIT WORK;
 
68645
        
 
68646
# check transactions-2 success:         1
 
68647
ROLLBACK WORK;
 
68648
        
 
68649
# check transactions-3 success:         1
 
68650
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
68651
COMMIT WORK;
 
68652
ROLLBACK WORK;
 
68653
        
 
68654
# check transactions-4 success:         1
 
68655
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68656
SELECT f_int1, f_int1, '', '', 'was inserted'
 
68657
FROM t0_template source_tab
 
68658
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
68659
        
 
68660
# check transactions-5 success:         1
 
68661
ROLLBACK WORK;
 
68662
        
 
68663
# check transactions-6 success:         1
 
68664
# INFO: Storage engine used for t1 seems to be transactional.
 
68665
COMMIT;
 
68666
        
 
68667
# check transactions-7 success:         1
 
68668
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
68669
COMMIT WORK;
 
68670
SET @@session.sql_mode = 'traditional';
 
68671
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
68672
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68673
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
68674
'', '', 'was inserted' FROM t0_template
 
68675
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
68676
ERROR 22012: Division by 0
 
68677
COMMIT;
 
68678
        
 
68679
# check transactions-8 success:         1
 
68680
# INFO: Storage engine used for t1 seems to be able to revert
 
68681
#       changes made by the failing statement.
 
68682
SET @@session.sql_mode = '';
 
68683
SET AUTOCOMMIT= 1;
 
68684
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
68685
COMMIT WORK;
 
68686
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
68687
        
 
68688
# check special-1 success:      1
 
68689
UPDATE t1 SET f_charbig = '';
 
68690
        
 
68691
# check special-2 success:      1
 
68692
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
68693
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68694
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
68695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68697
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68698
'just inserted' FROM t0_template
 
68699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68700
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
68701
BEGIN
 
68702
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68703
f_charbig = 'updated by trigger'
 
68704
      WHERE f_int1 = new.f_int1;
 
68705
END|
 
68706
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68707
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
68708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68709
        
 
68710
# check trigger-1 success:      1
 
68711
DROP TRIGGER trg_1;
 
68712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68714
f_charbig = 'just inserted'
 
68715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68716
DELETE FROM t0_aux
 
68717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68720
'just inserted' FROM t0_template
 
68721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68722
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
68723
BEGIN
 
68724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68725
f_charbig = 'updated by trigger'
 
68726
      WHERE f_int1 = new.f_int1;
 
68727
END|
 
68728
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68729
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
68730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68731
        
 
68732
# check trigger-2 success:      1
 
68733
DROP TRIGGER trg_1;
 
68734
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68735
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68736
f_charbig = 'just inserted'
 
68737
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68738
DELETE FROM t0_aux
 
68739
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68740
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68741
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68742
'just inserted' FROM t0_template
 
68743
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68744
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
68745
BEGIN
 
68746
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68747
f_charbig = 'updated by trigger'
 
68748
      WHERE f_int1 = new.f_int1;
 
68749
END|
 
68750
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68751
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68752
        
 
68753
# check trigger-3 success:      1
 
68754
DROP TRIGGER trg_1;
 
68755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68757
f_charbig = 'just inserted'
 
68758
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68759
DELETE FROM t0_aux
 
68760
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68761
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68762
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68763
'just inserted' FROM t0_template
 
68764
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68765
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
68766
BEGIN
 
68767
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68768
f_charbig = 'updated by trigger'
 
68769
      WHERE f_int1 = - old.f_int1;
 
68770
END|
 
68771
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68772
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68773
        
 
68774
# check trigger-4 success:      1
 
68775
DROP TRIGGER trg_1;
 
68776
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68777
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68778
f_charbig = 'just inserted'
 
68779
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68780
DELETE FROM t0_aux
 
68781
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68782
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68783
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68784
'just inserted' FROM t0_template
 
68785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68786
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
68787
BEGIN
 
68788
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68789
f_charbig = 'updated by trigger'
 
68790
      WHERE f_int1 = new.f_int1;
 
68791
END|
 
68792
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68793
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68794
        
 
68795
# check trigger-5 success:      1
 
68796
DROP TRIGGER trg_1;
 
68797
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68798
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68799
f_charbig = 'just inserted'
 
68800
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68801
DELETE FROM t0_aux
 
68802
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68803
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68804
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68805
'just inserted' FROM t0_template
 
68806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68807
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
68808
BEGIN
 
68809
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68810
f_charbig = 'updated by trigger'
 
68811
      WHERE f_int1 = - old.f_int1;
 
68812
END|
 
68813
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
68814
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68815
        
 
68816
# check trigger-6 success:      1
 
68817
DROP TRIGGER trg_1;
 
68818
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68819
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68820
f_charbig = 'just inserted'
 
68821
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68822
DELETE FROM t0_aux
 
68823
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68824
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68825
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68826
'just inserted' FROM t0_template
 
68827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68828
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
68829
BEGIN
 
68830
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68831
f_charbig = 'updated by trigger'
 
68832
      WHERE f_int1 = - old.f_int1;
 
68833
END|
 
68834
DELETE FROM t0_aux
 
68835
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68836
        
 
68837
# check trigger-7 success:      1
 
68838
DROP TRIGGER trg_1;
 
68839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68841
f_charbig = 'just inserted'
 
68842
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68843
DELETE FROM t0_aux
 
68844
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68845
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68846
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
68847
'just inserted' FROM t0_template
 
68848
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68849
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
68850
BEGIN
 
68851
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
68852
f_charbig = 'updated by trigger'
 
68853
      WHERE f_int1 = - old.f_int1;
 
68854
END|
 
68855
DELETE FROM t0_aux
 
68856
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
68857
        
 
68858
# check trigger-8 success:      1
 
68859
DROP TRIGGER trg_1;
 
68860
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68861
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68862
f_charbig = 'just inserted'
 
68863
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
68864
DELETE FROM t0_aux
 
68865
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68866
DELETE FROM t1
 
68867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
68868
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
68869
BEGIN
 
68870
SET new.f_int1 = old.f_int1 + @max_row,
 
68871
new.f_int2 = old.f_int2 - @max_row,
 
68872
new.f_charbig = '####updated per update trigger####';
 
68873
END|
 
68874
UPDATE t1
 
68875
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
68876
f_charbig = '####updated per update statement itself####';
 
68877
        
 
68878
# check trigger-9 success:      1
 
68879
DROP TRIGGER trg_2;
 
68880
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68881
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68882
f_charbig = CONCAT('===',f_char1,'===');
 
68883
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
68884
BEGIN
 
68885
SET new.f_int1 = new.f_int1 + @max_row,
 
68886
new.f_int2 = new.f_int2 - @max_row,
 
68887
new.f_charbig = '####updated per update trigger####';
 
68888
END|
 
68889
UPDATE t1
 
68890
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
68891
f_charbig = '####updated per update statement itself####';
 
68892
        
 
68893
# check trigger-10 success:     1
 
68894
DROP TRIGGER trg_2;
 
68895
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
68896
f_int2 = CAST(f_char1 AS SIGNED INT),
 
68897
f_charbig = CONCAT('===',f_char1,'===');
 
68898
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
68899
BEGIN
 
68900
SET new.f_int1 = @my_max1 + @counter,
 
68901
new.f_int2 = @my_min2 - @counter,
 
68902
new.f_charbig = '####updated per insert trigger####';
 
68903
SET @counter = @counter + 1;
 
68904
END|
 
68905
SET @counter = 1;
 
68906
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
68907
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
68908
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
68909
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
68910
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
68911
ORDER BY f_int1;
 
68912
DROP TRIGGER trg_3;
 
68913
        
 
68914
# check trigger-11 success:     1
 
68915
DELETE FROM t1
 
68916
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
68917
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
68918
AND f_charbig = '####updated per insert trigger####';
 
68919
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
68920
BEGIN
 
68921
SET new.f_int1 = @my_max1 + @counter,
 
68922
new.f_int2 = @my_min2 - @counter,
 
68923
new.f_charbig = '####updated per insert trigger####';
 
68924
SET @counter = @counter + 1;
 
68925
END|
 
68926
SET @counter = 1;
 
68927
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
68928
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
68929
SELECT CAST(f_int1 AS CHAR),
 
68930
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
68931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
68932
ORDER BY f_int1;
 
68933
DROP TRIGGER trg_3;
 
68934
        
 
68935
# check trigger-12 success:     1
 
68936
DELETE FROM t1
 
68937
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
68938
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
68939
AND f_charbig = '####updated per insert trigger####';
 
68940
ANALYZE  TABLE t1;
 
68941
Table   Op      Msg_type        Msg_text
 
68942
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
68943
CHECK    TABLE t1 EXTENDED;
 
68944
Table   Op      Msg_type        Msg_text
 
68945
test.t1 check   note    The storage engine for the table doesn't support check
 
68946
CHECKSUM TABLE t1 EXTENDED;
 
68947
Table   Checksum
 
68948
test.t1 <some_value>
 
68949
OPTIMIZE TABLE t1;
 
68950
Table   Op      Msg_type        Msg_text
 
68951
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
68952
# check layout success:    1
 
68953
REPAIR   TABLE t1 EXTENDED;
 
68954
Table   Op      Msg_type        Msg_text
 
68955
test.t1 repair  note    The storage engine for the table doesn't support repair
 
68956
# check layout success:    1
 
68957
TRUNCATE t1;
 
68958
        
 
68959
# check TRUNCATE success:       1
 
68960
# check layout success:    1
 
68961
# End usability test (inc/partition_check.inc)
 
68962
DROP TABLE t1;
 
68963
CREATE TABLE t1 (
 
68964
f_int1 INTEGER,
 
68965
f_int2 INTEGER,
 
68966
f_char1 CHAR(20),
 
68967
f_char2 CHAR(20),
 
68968
f_charbig VARCHAR(1000)
 
68969
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
68970
)
 
68971
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
68972
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
68973
(PARTITION part1 VALUES IN (0),
 
68974
 PARTITION part2 VALUES IN (1),
 
68975
 PARTITION part3 VALUES IN (NULL));
 
68976
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68977
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
68978
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
68979
ALTER TABLE t1 DROP INDEX uidx1;
 
68980
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68981
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
68982
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
68983
# Start usability test (inc/partition_check.inc)
 
68984
create_command
 
68985
SHOW CREATE TABLE t1;
 
68986
Table   Create Table
 
68987
t1      CREATE TABLE `t1` (
 
68988
  `f_int1` int(11) DEFAULT NULL,
 
68989
  `f_int2` int(11) DEFAULT NULL,
 
68990
  `f_char1` char(20) DEFAULT NULL,
 
68991
  `f_char2` char(20) DEFAULT NULL,
 
68992
  `f_charbig` varchar(1000) DEFAULT NULL
 
68993
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
68994
 
 
68995
# check prerequisites-1 success:    1
 
68996
# check COUNT(*) success:    1
 
68997
# check MIN/MAX(f_int1) success:    1
 
68998
# check MIN/MAX(f_int2) success:    1
 
68999
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69000
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
69001
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
69002
WHERE f_int1 IN (2,3);
 
69003
# check prerequisites-3 success:    1
 
69004
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
69005
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
69006
# check read via f_int1 success: 1
 
69007
# check read via f_int2 success: 1
 
69008
        
 
69009
# check multiple-1 success:     1
 
69010
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
69011
        
 
69012
# check multiple-2 success:     1
 
69013
INSERT INTO t1 SELECT * FROM t0_template
 
69014
WHERE MOD(f_int1,3) = 0;
 
69015
        
 
69016
# check multiple-3 success:     1
 
69017
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
69018
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
69019
AND @max_row_div2 + @max_row_div4;
 
69020
        
 
69021
# check multiple-4 success:     1
 
69022
DELETE FROM t1
 
69023
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
69024
AND @max_row_div2 + @max_row_div4 + @max_row;
 
69025
        
 
69026
# check multiple-5 success:     1
 
69027
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
69028
INSERT INTO t1
 
69029
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
69030
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
69031
f_charbig = '#SINGLE#';
 
69032
        
 
69033
# check single-1 success:       1
 
69034
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
69035
INSERT INTO t1
 
69036
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
69037
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
69038
f_charbig = '#SINGLE#';
 
69039
        
 
69040
# check single-2 success:       1
 
69041
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
69042
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
69043
UPDATE t1 SET f_int1 = @cur_value2
 
69044
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
69045
        
 
69046
# check single-3 success:       1
 
69047
SET @cur_value1= -1;
 
69048
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
69049
UPDATE t1 SET f_int1 = @cur_value1
 
69050
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
69051
        
 
69052
# check single-4 success:       1
 
69053
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
69054
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
69055
        
 
69056
# check single-5 success:       1
 
69057
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
69058
        
 
69059
# check single-6 success:       1
 
69060
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
69061
        
 
69062
# check single-7 success:       1
 
69063
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
69064
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
69065
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
69066
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
69067
f_charbig = '#NULL#';
 
69068
INSERT INTO t1
 
69069
SET f_int1 = NULL , f_int2 = -@max_row,
 
69070
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
69071
f_charbig = '#NULL#';
 
69072
# check null success:    1
 
69073
        
 
69074
# check null-1 success:         1
 
69075
UPDATE t1 SET f_int1 = -@max_row
 
69076
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
69077
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
69078
        
 
69079
# check null-2 success:         1
 
69080
UPDATE t1 SET f_int1 = NULL
 
69081
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
69082
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
69083
        
 
69084
# check null-3 success:         1
 
69085
DELETE FROM t1
 
69086
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
69087
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
69088
        
 
69089
# check null-4 success:         1
 
69090
DELETE FROM t1
 
69091
WHERE f_int1 = 0 AND f_int2 = 0
 
69092
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
69093
AND f_charbig = '#NULL#';
 
69094
SET AUTOCOMMIT= 0;
 
69095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69096
SELECT f_int1, f_int1, '', '', 'was inserted'
 
69097
FROM t0_template source_tab
 
69098
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69099
        
 
69100
# check transactions-1 success:         1
 
69101
COMMIT WORK;
 
69102
        
 
69103
# check transactions-2 success:         1
 
69104
ROLLBACK WORK;
 
69105
        
 
69106
# check transactions-3 success:         1
 
69107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
69108
COMMIT WORK;
 
69109
ROLLBACK WORK;
 
69110
        
 
69111
# check transactions-4 success:         1
 
69112
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69113
SELECT f_int1, f_int1, '', '', 'was inserted'
 
69114
FROM t0_template source_tab
 
69115
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69116
        
 
69117
# check transactions-5 success:         1
 
69118
ROLLBACK WORK;
 
69119
        
 
69120
# check transactions-6 success:         1
 
69121
# INFO: Storage engine used for t1 seems to be transactional.
 
69122
COMMIT;
 
69123
        
 
69124
# check transactions-7 success:         1
 
69125
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
69126
COMMIT WORK;
 
69127
SET @@session.sql_mode = 'traditional';
 
69128
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
69129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69130
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
69131
'', '', 'was inserted' FROM t0_template
 
69132
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69133
ERROR 22012: Division by 0
 
69134
COMMIT;
 
69135
        
 
69136
# check transactions-8 success:         1
 
69137
# INFO: Storage engine used for t1 seems to be able to revert
 
69138
#       changes made by the failing statement.
 
69139
SET @@session.sql_mode = '';
 
69140
SET AUTOCOMMIT= 1;
 
69141
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
69142
COMMIT WORK;
 
69143
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
69144
        
 
69145
# check special-1 success:      1
 
69146
UPDATE t1 SET f_charbig = '';
 
69147
        
 
69148
# check special-2 success:      1
 
69149
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
69150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69151
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
69152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69155
'just inserted' FROM t0_template
 
69156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69157
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
69158
BEGIN
 
69159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69160
f_charbig = 'updated by trigger'
 
69161
      WHERE f_int1 = new.f_int1;
 
69162
END|
 
69163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69164
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
69165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69166
        
 
69167
# check trigger-1 success:      1
 
69168
DROP TRIGGER trg_1;
 
69169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69171
f_charbig = 'just inserted'
 
69172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69173
DELETE FROM t0_aux
 
69174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69177
'just inserted' FROM t0_template
 
69178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69179
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
69180
BEGIN
 
69181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69182
f_charbig = 'updated by trigger'
 
69183
      WHERE f_int1 = new.f_int1;
 
69184
END|
 
69185
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69186
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
69187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69188
        
 
69189
# check trigger-2 success:      1
 
69190
DROP TRIGGER trg_1;
 
69191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69193
f_charbig = 'just inserted'
 
69194
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69195
DELETE FROM t0_aux
 
69196
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69199
'just inserted' FROM t0_template
 
69200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69201
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
69202
BEGIN
 
69203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69204
f_charbig = 'updated by trigger'
 
69205
      WHERE f_int1 = new.f_int1;
 
69206
END|
 
69207
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69208
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69209
        
 
69210
# check trigger-3 success:      1
 
69211
DROP TRIGGER trg_1;
 
69212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69214
f_charbig = 'just inserted'
 
69215
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69216
DELETE FROM t0_aux
 
69217
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69218
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69219
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69220
'just inserted' FROM t0_template
 
69221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69222
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
69223
BEGIN
 
69224
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69225
f_charbig = 'updated by trigger'
 
69226
      WHERE f_int1 = - old.f_int1;
 
69227
END|
 
69228
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69229
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69230
        
 
69231
# check trigger-4 success:      1
 
69232
DROP TRIGGER trg_1;
 
69233
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69234
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69235
f_charbig = 'just inserted'
 
69236
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69237
DELETE FROM t0_aux
 
69238
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69240
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69241
'just inserted' FROM t0_template
 
69242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69243
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
69244
BEGIN
 
69245
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69246
f_charbig = 'updated by trigger'
 
69247
      WHERE f_int1 = new.f_int1;
 
69248
END|
 
69249
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69250
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69251
        
 
69252
# check trigger-5 success:      1
 
69253
DROP TRIGGER trg_1;
 
69254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69256
f_charbig = 'just inserted'
 
69257
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69258
DELETE FROM t0_aux
 
69259
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69262
'just inserted' FROM t0_template
 
69263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69264
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
69265
BEGIN
 
69266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69267
f_charbig = 'updated by trigger'
 
69268
      WHERE f_int1 = - old.f_int1;
 
69269
END|
 
69270
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69271
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69272
        
 
69273
# check trigger-6 success:      1
 
69274
DROP TRIGGER trg_1;
 
69275
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69276
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69277
f_charbig = 'just inserted'
 
69278
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69279
DELETE FROM t0_aux
 
69280
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69282
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69283
'just inserted' FROM t0_template
 
69284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69285
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
69286
BEGIN
 
69287
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69288
f_charbig = 'updated by trigger'
 
69289
      WHERE f_int1 = - old.f_int1;
 
69290
END|
 
69291
DELETE FROM t0_aux
 
69292
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69293
        
 
69294
# check trigger-7 success:      1
 
69295
DROP TRIGGER trg_1;
 
69296
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69297
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69298
f_charbig = 'just inserted'
 
69299
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69300
DELETE FROM t0_aux
 
69301
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69302
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69303
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69304
'just inserted' FROM t0_template
 
69305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69306
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
69307
BEGIN
 
69308
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69309
f_charbig = 'updated by trigger'
 
69310
      WHERE f_int1 = - old.f_int1;
 
69311
END|
 
69312
DELETE FROM t0_aux
 
69313
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69314
        
 
69315
# check trigger-8 success:      1
 
69316
DROP TRIGGER trg_1;
 
69317
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69318
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69319
f_charbig = 'just inserted'
 
69320
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69321
DELETE FROM t0_aux
 
69322
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69323
DELETE FROM t1
 
69324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69325
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
69326
BEGIN
 
69327
SET new.f_int1 = old.f_int1 + @max_row,
 
69328
new.f_int2 = old.f_int2 - @max_row,
 
69329
new.f_charbig = '####updated per update trigger####';
 
69330
END|
 
69331
UPDATE t1
 
69332
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
69333
f_charbig = '####updated per update statement itself####';
 
69334
        
 
69335
# check trigger-9 success:      1
 
69336
DROP TRIGGER trg_2;
 
69337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69339
f_charbig = CONCAT('===',f_char1,'===');
 
69340
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
69341
BEGIN
 
69342
SET new.f_int1 = new.f_int1 + @max_row,
 
69343
new.f_int2 = new.f_int2 - @max_row,
 
69344
new.f_charbig = '####updated per update trigger####';
 
69345
END|
 
69346
UPDATE t1
 
69347
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
69348
f_charbig = '####updated per update statement itself####';
 
69349
        
 
69350
# check trigger-10 success:     1
 
69351
DROP TRIGGER trg_2;
 
69352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69354
f_charbig = CONCAT('===',f_char1,'===');
 
69355
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
69356
BEGIN
 
69357
SET new.f_int1 = @my_max1 + @counter,
 
69358
new.f_int2 = @my_min2 - @counter,
 
69359
new.f_charbig = '####updated per insert trigger####';
 
69360
SET @counter = @counter + 1;
 
69361
END|
 
69362
SET @counter = 1;
 
69363
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
69364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
69366
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
69367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
69368
ORDER BY f_int1;
 
69369
DROP TRIGGER trg_3;
 
69370
        
 
69371
# check trigger-11 success:     1
 
69372
DELETE FROM t1
 
69373
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
69374
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
69375
AND f_charbig = '####updated per insert trigger####';
 
69376
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
69377
BEGIN
 
69378
SET new.f_int1 = @my_max1 + @counter,
 
69379
new.f_int2 = @my_min2 - @counter,
 
69380
new.f_charbig = '####updated per insert trigger####';
 
69381
SET @counter = @counter + 1;
 
69382
END|
 
69383
SET @counter = 1;
 
69384
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
69385
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
69386
SELECT CAST(f_int1 AS CHAR),
 
69387
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
69388
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
69389
ORDER BY f_int1;
 
69390
DROP TRIGGER trg_3;
 
69391
        
 
69392
# check trigger-12 success:     1
 
69393
DELETE FROM t1
 
69394
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
69395
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
69396
AND f_charbig = '####updated per insert trigger####';
 
69397
ANALYZE  TABLE t1;
 
69398
Table   Op      Msg_type        Msg_text
 
69399
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
69400
CHECK    TABLE t1 EXTENDED;
 
69401
Table   Op      Msg_type        Msg_text
 
69402
test.t1 check   note    The storage engine for the table doesn't support check
 
69403
CHECKSUM TABLE t1 EXTENDED;
 
69404
Table   Checksum
 
69405
test.t1 <some_value>
 
69406
OPTIMIZE TABLE t1;
 
69407
Table   Op      Msg_type        Msg_text
 
69408
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
69409
# check layout success:    1
 
69410
REPAIR   TABLE t1 EXTENDED;
 
69411
Table   Op      Msg_type        Msg_text
 
69412
test.t1 repair  note    The storage engine for the table doesn't support repair
 
69413
# check layout success:    1
 
69414
TRUNCATE t1;
 
69415
        
 
69416
# check TRUNCATE success:       1
 
69417
# check layout success:    1
 
69418
# End usability test (inc/partition_check.inc)
 
69419
DROP TABLE t1;
 
69420
#  2.2.3 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns
 
69421
DROP TABLE IF EXISTS t1;
 
69422
CREATE TABLE t1 (
 
69423
f_int1 INTEGER,
 
69424
f_int2 INTEGER,
 
69425
f_char1 CHAR(20),
 
69426
f_char2 CHAR(20),
 
69427
f_charbig VARCHAR(1000)
 
69428
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
69429
)
 
69430
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
69431
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69432
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
69433
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
69434
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
69435
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69436
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
69437
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
69438
# Start usability test (inc/partition_check.inc)
 
69439
create_command
 
69440
SHOW CREATE TABLE t1;
 
69441
Table   Create Table
 
69442
t1      CREATE TABLE `t1` (
 
69443
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
69444
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
69445
  `f_char1` char(20) DEFAULT NULL,
 
69446
  `f_char2` char(20) DEFAULT NULL,
 
69447
  `f_charbig` varchar(1000) DEFAULT NULL
 
69448
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
69449
 
 
69450
# check prerequisites-1 success:    1
 
69451
# check COUNT(*) success:    1
 
69452
# check MIN/MAX(f_int1) success:    1
 
69453
# check MIN/MAX(f_int2) success:    1
 
69454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69455
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
69456
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
69457
WHERE f_int1 IN (2,3);
 
69458
# check prerequisites-3 success:    1
 
69459
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
69460
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
69461
# check read via f_int1 success: 1
 
69462
# check read via f_int2 success: 1
 
69463
        
 
69464
# check multiple-1 success:     1
 
69465
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
69466
        
 
69467
# check multiple-2 success:     1
 
69468
INSERT INTO t1 SELECT * FROM t0_template
 
69469
WHERE MOD(f_int1,3) = 0;
 
69470
        
 
69471
# check multiple-3 success:     1
 
69472
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
69473
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
69474
AND @max_row_div2 + @max_row_div4;
 
69475
        
 
69476
# check multiple-4 success:     1
 
69477
DELETE FROM t1
 
69478
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
69479
AND @max_row_div2 + @max_row_div4 + @max_row;
 
69480
        
 
69481
# check multiple-5 success:     1
 
69482
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
69483
INSERT INTO t1
 
69484
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
69485
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
69486
f_charbig = '#SINGLE#';
 
69487
        
 
69488
# check single-1 success:       1
 
69489
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
69490
INSERT INTO t1
 
69491
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
69492
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
69493
f_charbig = '#SINGLE#';
 
69494
        
 
69495
# check single-2 success:       1
 
69496
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
69497
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
69498
UPDATE t1 SET f_int1 = @cur_value2
 
69499
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
69500
        
 
69501
# check single-3 success:       1
 
69502
SET @cur_value1= -1;
 
69503
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
69504
UPDATE t1 SET f_int1 = @cur_value1
 
69505
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
69506
        
 
69507
# check single-4 success:       1
 
69508
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
69509
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
69510
        
 
69511
# check single-5 success:       1
 
69512
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
69513
        
 
69514
# check single-6 success:       1
 
69515
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
69516
        
 
69517
# check single-7 success:       1
 
69518
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
69519
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
69520
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
69521
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
69522
f_charbig = '#NULL#';
 
69523
INSERT INTO t1
 
69524
SET f_int1 = NULL , f_int2 = -@max_row,
 
69525
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
69526
f_charbig = '#NULL#';
 
69527
ERROR 23000: Column 'f_int1' cannot be null
 
69528
# check null success:    1
 
69529
DELETE FROM t1
 
69530
WHERE f_int1 = 0 AND f_int2 = 0
 
69531
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
69532
AND f_charbig = '#NULL#';
 
69533
SET AUTOCOMMIT= 0;
 
69534
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69535
SELECT f_int1, f_int1, '', '', 'was inserted'
 
69536
FROM t0_template source_tab
 
69537
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69538
        
 
69539
# check transactions-1 success:         1
 
69540
COMMIT WORK;
 
69541
        
 
69542
# check transactions-2 success:         1
 
69543
ROLLBACK WORK;
 
69544
        
 
69545
# check transactions-3 success:         1
 
69546
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
69547
COMMIT WORK;
 
69548
ROLLBACK WORK;
 
69549
        
 
69550
# check transactions-4 success:         1
 
69551
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69552
SELECT f_int1, f_int1, '', '', 'was inserted'
 
69553
FROM t0_template source_tab
 
69554
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69555
        
 
69556
# check transactions-5 success:         1
 
69557
ROLLBACK WORK;
 
69558
        
 
69559
# check transactions-6 success:         1
 
69560
# INFO: Storage engine used for t1 seems to be transactional.
 
69561
COMMIT;
 
69562
        
 
69563
# check transactions-7 success:         1
 
69564
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
69565
COMMIT WORK;
 
69566
SET @@session.sql_mode = 'traditional';
 
69567
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
69568
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69569
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
69570
'', '', 'was inserted' FROM t0_template
 
69571
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69572
ERROR 22012: Division by 0
 
69573
COMMIT;
 
69574
        
 
69575
# check transactions-8 success:         1
 
69576
# INFO: Storage engine used for t1 seems to be able to revert
 
69577
#       changes made by the failing statement.
 
69578
SET @@session.sql_mode = '';
 
69579
SET AUTOCOMMIT= 1;
 
69580
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
69581
COMMIT WORK;
 
69582
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
69583
        
 
69584
# check special-1 success:      1
 
69585
UPDATE t1 SET f_charbig = '';
 
69586
        
 
69587
# check special-2 success:      1
 
69588
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
69589
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69590
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
69591
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69592
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69593
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69594
'just inserted' FROM t0_template
 
69595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69596
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
69597
BEGIN
 
69598
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69599
f_charbig = 'updated by trigger'
 
69600
      WHERE f_int1 = new.f_int1;
 
69601
END|
 
69602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69603
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
69604
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69605
        
 
69606
# check trigger-1 success:      1
 
69607
DROP TRIGGER trg_1;
 
69608
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69609
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69610
f_charbig = 'just inserted'
 
69611
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69612
DELETE FROM t0_aux
 
69613
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69614
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69615
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69616
'just inserted' FROM t0_template
 
69617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69618
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
69619
BEGIN
 
69620
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69621
f_charbig = 'updated by trigger'
 
69622
      WHERE f_int1 = new.f_int1;
 
69623
END|
 
69624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69625
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
69626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69627
        
 
69628
# check trigger-2 success:      1
 
69629
DROP TRIGGER trg_1;
 
69630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69632
f_charbig = 'just inserted'
 
69633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69634
DELETE FROM t0_aux
 
69635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69638
'just inserted' FROM t0_template
 
69639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69640
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
69641
BEGIN
 
69642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69643
f_charbig = 'updated by trigger'
 
69644
      WHERE f_int1 = new.f_int1;
 
69645
END|
 
69646
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69648
        
 
69649
# check trigger-3 success:      1
 
69650
DROP TRIGGER trg_1;
 
69651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69653
f_charbig = 'just inserted'
 
69654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69655
DELETE FROM t0_aux
 
69656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69659
'just inserted' FROM t0_template
 
69660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69661
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
69662
BEGIN
 
69663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69664
f_charbig = 'updated by trigger'
 
69665
      WHERE f_int1 = - old.f_int1;
 
69666
END|
 
69667
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69668
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69669
        
 
69670
# check trigger-4 success:      1
 
69671
DROP TRIGGER trg_1;
 
69672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69674
f_charbig = 'just inserted'
 
69675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69676
DELETE FROM t0_aux
 
69677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69680
'just inserted' FROM t0_template
 
69681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69682
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
69683
BEGIN
 
69684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69685
f_charbig = 'updated by trigger'
 
69686
      WHERE f_int1 = new.f_int1;
 
69687
END|
 
69688
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69689
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69690
        
 
69691
# check trigger-5 success:      1
 
69692
DROP TRIGGER trg_1;
 
69693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69695
f_charbig = 'just inserted'
 
69696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69697
DELETE FROM t0_aux
 
69698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69701
'just inserted' FROM t0_template
 
69702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69703
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
69704
BEGIN
 
69705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69706
f_charbig = 'updated by trigger'
 
69707
      WHERE f_int1 = - old.f_int1;
 
69708
END|
 
69709
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
69710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69711
        
 
69712
# check trigger-6 success:      1
 
69713
DROP TRIGGER trg_1;
 
69714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69716
f_charbig = 'just inserted'
 
69717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69718
DELETE FROM t0_aux
 
69719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69722
'just inserted' FROM t0_template
 
69723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69724
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
69725
BEGIN
 
69726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69727
f_charbig = 'updated by trigger'
 
69728
      WHERE f_int1 = - old.f_int1;
 
69729
END|
 
69730
DELETE FROM t0_aux
 
69731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69732
        
 
69733
# check trigger-7 success:      1
 
69734
DROP TRIGGER trg_1;
 
69735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69737
f_charbig = 'just inserted'
 
69738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69739
DELETE FROM t0_aux
 
69740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69741
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69742
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
69743
'just inserted' FROM t0_template
 
69744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69745
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
69746
BEGIN
 
69747
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
69748
f_charbig = 'updated by trigger'
 
69749
      WHERE f_int1 = - old.f_int1;
 
69750
END|
 
69751
DELETE FROM t0_aux
 
69752
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
69753
        
 
69754
# check trigger-8 success:      1
 
69755
DROP TRIGGER trg_1;
 
69756
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69757
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69758
f_charbig = 'just inserted'
 
69759
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
69760
DELETE FROM t0_aux
 
69761
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69762
DELETE FROM t1
 
69763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
69764
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
69765
BEGIN
 
69766
SET new.f_int1 = old.f_int1 + @max_row,
 
69767
new.f_int2 = old.f_int2 - @max_row,
 
69768
new.f_charbig = '####updated per update trigger####';
 
69769
END|
 
69770
UPDATE t1
 
69771
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
69772
f_charbig = '####updated per update statement itself####';
 
69773
        
 
69774
# check trigger-9 success:      1
 
69775
DROP TRIGGER trg_2;
 
69776
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69777
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69778
f_charbig = CONCAT('===',f_char1,'===');
 
69779
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
69780
BEGIN
 
69781
SET new.f_int1 = new.f_int1 + @max_row,
 
69782
new.f_int2 = new.f_int2 - @max_row,
 
69783
new.f_charbig = '####updated per update trigger####';
 
69784
END|
 
69785
UPDATE t1
 
69786
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
69787
f_charbig = '####updated per update statement itself####';
 
69788
        
 
69789
# check trigger-10 success:     1
 
69790
DROP TRIGGER trg_2;
 
69791
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
69792
f_int2 = CAST(f_char1 AS SIGNED INT),
 
69793
f_charbig = CONCAT('===',f_char1,'===');
 
69794
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
69795
BEGIN
 
69796
SET new.f_int1 = @my_max1 + @counter,
 
69797
new.f_int2 = @my_min2 - @counter,
 
69798
new.f_charbig = '####updated per insert trigger####';
 
69799
SET @counter = @counter + 1;
 
69800
END|
 
69801
SET @counter = 1;
 
69802
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
69803
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69804
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
69805
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
69806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
69807
ORDER BY f_int1;
 
69808
DROP TRIGGER trg_3;
 
69809
        
 
69810
# check trigger-11 success:     1
 
69811
DELETE FROM t1
 
69812
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
69813
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
69814
AND f_charbig = '####updated per insert trigger####';
 
69815
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
69816
BEGIN
 
69817
SET new.f_int1 = @my_max1 + @counter,
 
69818
new.f_int2 = @my_min2 - @counter,
 
69819
new.f_charbig = '####updated per insert trigger####';
 
69820
SET @counter = @counter + 1;
 
69821
END|
 
69822
SET @counter = 1;
 
69823
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
69824
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
69825
SELECT CAST(f_int1 AS CHAR),
 
69826
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
69827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
69828
ORDER BY f_int1;
 
69829
DROP TRIGGER trg_3;
 
69830
        
 
69831
# check trigger-12 success:     1
 
69832
DELETE FROM t1
 
69833
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
69834
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
69835
AND f_charbig = '####updated per insert trigger####';
 
69836
ANALYZE  TABLE t1;
 
69837
Table   Op      Msg_type        Msg_text
 
69838
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
69839
CHECK    TABLE t1 EXTENDED;
 
69840
Table   Op      Msg_type        Msg_text
 
69841
test.t1 check   note    The storage engine for the table doesn't support check
 
69842
CHECKSUM TABLE t1 EXTENDED;
 
69843
Table   Checksum
 
69844
test.t1 <some_value>
 
69845
OPTIMIZE TABLE t1;
 
69846
Table   Op      Msg_type        Msg_text
 
69847
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
69848
# check layout success:    1
 
69849
REPAIR   TABLE t1 EXTENDED;
 
69850
Table   Op      Msg_type        Msg_text
 
69851
test.t1 repair  note    The storage engine for the table doesn't support repair
 
69852
# check layout success:    1
 
69853
TRUNCATE t1;
 
69854
        
 
69855
# check TRUNCATE success:       1
 
69856
# check layout success:    1
 
69857
# End usability test (inc/partition_check.inc)
 
69858
DROP TABLE t1;
 
69859
CREATE TABLE t1 (
 
69860
f_int1 INTEGER,
 
69861
f_int2 INTEGER,
 
69862
f_char1 CHAR(20),
 
69863
f_char2 CHAR(20),
 
69864
f_charbig VARCHAR(1000)
 
69865
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
69866
)
 
69867
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
69868
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69869
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
69870
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
69871
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
69872
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
69873
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
69874
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
69875
# Start usability test (inc/partition_check.inc)
 
69876
create_command
 
69877
SHOW CREATE TABLE t1;
 
69878
Table   Create Table
 
69879
t1      CREATE TABLE `t1` (
 
69880
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
69881
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
69882
  `f_char1` char(20) DEFAULT NULL,
 
69883
  `f_char2` char(20) DEFAULT NULL,
 
69884
  `f_charbig` varchar(1000) DEFAULT NULL
 
69885
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
69886
 
 
69887
# check prerequisites-1 success:    1
 
69888
# check COUNT(*) success:    1
 
69889
# check MIN/MAX(f_int1) success:    1
 
69890
# check MIN/MAX(f_int2) success:    1
 
69891
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69892
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
69893
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
69894
WHERE f_int1 IN (2,3);
 
69895
# check prerequisites-3 success:    1
 
69896
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
69897
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
69898
# check read via f_int1 success: 1
 
69899
# check read via f_int2 success: 1
 
69900
        
 
69901
# check multiple-1 success:     1
 
69902
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
69903
        
 
69904
# check multiple-2 success:     1
 
69905
INSERT INTO t1 SELECT * FROM t0_template
 
69906
WHERE MOD(f_int1,3) = 0;
 
69907
        
 
69908
# check multiple-3 success:     1
 
69909
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
69910
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
69911
AND @max_row_div2 + @max_row_div4;
 
69912
        
 
69913
# check multiple-4 success:     1
 
69914
DELETE FROM t1
 
69915
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
69916
AND @max_row_div2 + @max_row_div4 + @max_row;
 
69917
        
 
69918
# check multiple-5 success:     1
 
69919
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
69920
INSERT INTO t1
 
69921
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
69922
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
69923
f_charbig = '#SINGLE#';
 
69924
        
 
69925
# check single-1 success:       1
 
69926
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
69927
INSERT INTO t1
 
69928
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
69929
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
69930
f_charbig = '#SINGLE#';
 
69931
        
 
69932
# check single-2 success:       1
 
69933
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
69934
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
69935
UPDATE t1 SET f_int1 = @cur_value2
 
69936
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
69937
        
 
69938
# check single-3 success:       1
 
69939
SET @cur_value1= -1;
 
69940
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
69941
UPDATE t1 SET f_int1 = @cur_value1
 
69942
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
69943
        
 
69944
# check single-4 success:       1
 
69945
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
69946
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
69947
        
 
69948
# check single-5 success:       1
 
69949
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
69950
        
 
69951
# check single-6 success:       1
 
69952
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
69953
        
 
69954
# check single-7 success:       1
 
69955
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
69956
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
69957
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
69958
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
69959
f_charbig = '#NULL#';
 
69960
INSERT INTO t1
 
69961
SET f_int1 = NULL , f_int2 = -@max_row,
 
69962
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
69963
f_charbig = '#NULL#';
 
69964
ERROR 23000: Column 'f_int1' cannot be null
 
69965
# check null success:    1
 
69966
DELETE FROM t1
 
69967
WHERE f_int1 = 0 AND f_int2 = 0
 
69968
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
69969
AND f_charbig = '#NULL#';
 
69970
SET AUTOCOMMIT= 0;
 
69971
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69972
SELECT f_int1, f_int1, '', '', 'was inserted'
 
69973
FROM t0_template source_tab
 
69974
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69975
        
 
69976
# check transactions-1 success:         1
 
69977
COMMIT WORK;
 
69978
        
 
69979
# check transactions-2 success:         1
 
69980
ROLLBACK WORK;
 
69981
        
 
69982
# check transactions-3 success:         1
 
69983
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
69984
COMMIT WORK;
 
69985
ROLLBACK WORK;
 
69986
        
 
69987
# check transactions-4 success:         1
 
69988
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
69989
SELECT f_int1, f_int1, '', '', 'was inserted'
 
69990
FROM t0_template source_tab
 
69991
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
69992
        
 
69993
# check transactions-5 success:         1
 
69994
ROLLBACK WORK;
 
69995
        
 
69996
# check transactions-6 success:         1
 
69997
# INFO: Storage engine used for t1 seems to be transactional.
 
69998
COMMIT;
 
69999
        
 
70000
# check transactions-7 success:         1
 
70001
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70002
COMMIT WORK;
 
70003
SET @@session.sql_mode = 'traditional';
 
70004
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
70005
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70006
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
70007
'', '', 'was inserted' FROM t0_template
 
70008
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
70009
ERROR 22012: Division by 0
 
70010
COMMIT;
 
70011
        
 
70012
# check transactions-8 success:         1
 
70013
# INFO: Storage engine used for t1 seems to be able to revert
 
70014
#       changes made by the failing statement.
 
70015
SET @@session.sql_mode = '';
 
70016
SET AUTOCOMMIT= 1;
 
70017
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70018
COMMIT WORK;
 
70019
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
70020
        
 
70021
# check special-1 success:      1
 
70022
UPDATE t1 SET f_charbig = '';
 
70023
        
 
70024
# check special-2 success:      1
 
70025
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
70026
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70027
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
70028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70029
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70030
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70031
'just inserted' FROM t0_template
 
70032
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70033
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
70034
BEGIN
 
70035
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70036
f_charbig = 'updated by trigger'
 
70037
      WHERE f_int1 = new.f_int1;
 
70038
END|
 
70039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70040
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
70041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70042
        
 
70043
# check trigger-1 success:      1
 
70044
DROP TRIGGER trg_1;
 
70045
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70046
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70047
f_charbig = 'just inserted'
 
70048
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70049
DELETE FROM t0_aux
 
70050
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70051
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70052
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70053
'just inserted' FROM t0_template
 
70054
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70055
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
70056
BEGIN
 
70057
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70058
f_charbig = 'updated by trigger'
 
70059
      WHERE f_int1 = new.f_int1;
 
70060
END|
 
70061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70062
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
70063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70064
        
 
70065
# check trigger-2 success:      1
 
70066
DROP TRIGGER trg_1;
 
70067
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70068
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70069
f_charbig = 'just inserted'
 
70070
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70071
DELETE FROM t0_aux
 
70072
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70073
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70074
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70075
'just inserted' FROM t0_template
 
70076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70077
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
70078
BEGIN
 
70079
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70080
f_charbig = 'updated by trigger'
 
70081
      WHERE f_int1 = new.f_int1;
 
70082
END|
 
70083
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70084
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70085
        
 
70086
# check trigger-3 success:      1
 
70087
DROP TRIGGER trg_1;
 
70088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70089
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70090
f_charbig = 'just inserted'
 
70091
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70092
DELETE FROM t0_aux
 
70093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70096
'just inserted' FROM t0_template
 
70097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70098
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
70099
BEGIN
 
70100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70101
f_charbig = 'updated by trigger'
 
70102
      WHERE f_int1 = - old.f_int1;
 
70103
END|
 
70104
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70105
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70106
        
 
70107
# check trigger-4 success:      1
 
70108
DROP TRIGGER trg_1;
 
70109
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70110
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70111
f_charbig = 'just inserted'
 
70112
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70113
DELETE FROM t0_aux
 
70114
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70115
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70116
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70117
'just inserted' FROM t0_template
 
70118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70119
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
70120
BEGIN
 
70121
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70122
f_charbig = 'updated by trigger'
 
70123
      WHERE f_int1 = new.f_int1;
 
70124
END|
 
70125
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70126
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70127
        
 
70128
# check trigger-5 success:      1
 
70129
DROP TRIGGER trg_1;
 
70130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70132
f_charbig = 'just inserted'
 
70133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70134
DELETE FROM t0_aux
 
70135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70138
'just inserted' FROM t0_template
 
70139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70140
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
70141
BEGIN
 
70142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70143
f_charbig = 'updated by trigger'
 
70144
      WHERE f_int1 = - old.f_int1;
 
70145
END|
 
70146
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70147
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70148
        
 
70149
# check trigger-6 success:      1
 
70150
DROP TRIGGER trg_1;
 
70151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70153
f_charbig = 'just inserted'
 
70154
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70155
DELETE FROM t0_aux
 
70156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70159
'just inserted' FROM t0_template
 
70160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70161
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
70162
BEGIN
 
70163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70164
f_charbig = 'updated by trigger'
 
70165
      WHERE f_int1 = - old.f_int1;
 
70166
END|
 
70167
DELETE FROM t0_aux
 
70168
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70169
        
 
70170
# check trigger-7 success:      1
 
70171
DROP TRIGGER trg_1;
 
70172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70173
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70174
f_charbig = 'just inserted'
 
70175
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70176
DELETE FROM t0_aux
 
70177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70180
'just inserted' FROM t0_template
 
70181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70182
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
70183
BEGIN
 
70184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70185
f_charbig = 'updated by trigger'
 
70186
      WHERE f_int1 = - old.f_int1;
 
70187
END|
 
70188
DELETE FROM t0_aux
 
70189
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70190
        
 
70191
# check trigger-8 success:      1
 
70192
DROP TRIGGER trg_1;
 
70193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70195
f_charbig = 'just inserted'
 
70196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70197
DELETE FROM t0_aux
 
70198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70199
DELETE FROM t1
 
70200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70201
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
70202
BEGIN
 
70203
SET new.f_int1 = old.f_int1 + @max_row,
 
70204
new.f_int2 = old.f_int2 - @max_row,
 
70205
new.f_charbig = '####updated per update trigger####';
 
70206
END|
 
70207
UPDATE t1
 
70208
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
70209
f_charbig = '####updated per update statement itself####';
 
70210
        
 
70211
# check trigger-9 success:      1
 
70212
DROP TRIGGER trg_2;
 
70213
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70214
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70215
f_charbig = CONCAT('===',f_char1,'===');
 
70216
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
70217
BEGIN
 
70218
SET new.f_int1 = new.f_int1 + @max_row,
 
70219
new.f_int2 = new.f_int2 - @max_row,
 
70220
new.f_charbig = '####updated per update trigger####';
 
70221
END|
 
70222
UPDATE t1
 
70223
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
70224
f_charbig = '####updated per update statement itself####';
 
70225
        
 
70226
# check trigger-10 success:     1
 
70227
DROP TRIGGER trg_2;
 
70228
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70229
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70230
f_charbig = CONCAT('===',f_char1,'===');
 
70231
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
70232
BEGIN
 
70233
SET new.f_int1 = @my_max1 + @counter,
 
70234
new.f_int2 = @my_min2 - @counter,
 
70235
new.f_charbig = '####updated per insert trigger####';
 
70236
SET @counter = @counter + 1;
 
70237
END|
 
70238
SET @counter = 1;
 
70239
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
70240
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70241
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
70242
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
70243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
70244
ORDER BY f_int1;
 
70245
DROP TRIGGER trg_3;
 
70246
        
 
70247
# check trigger-11 success:     1
 
70248
DELETE FROM t1
 
70249
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
70250
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
70251
AND f_charbig = '####updated per insert trigger####';
 
70252
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
70253
BEGIN
 
70254
SET new.f_int1 = @my_max1 + @counter,
 
70255
new.f_int2 = @my_min2 - @counter,
 
70256
new.f_charbig = '####updated per insert trigger####';
 
70257
SET @counter = @counter + 1;
 
70258
END|
 
70259
SET @counter = 1;
 
70260
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
70261
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
70262
SELECT CAST(f_int1 AS CHAR),
 
70263
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
70264
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
70265
ORDER BY f_int1;
 
70266
DROP TRIGGER trg_3;
 
70267
        
 
70268
# check trigger-12 success:     1
 
70269
DELETE FROM t1
 
70270
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
70271
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
70272
AND f_charbig = '####updated per insert trigger####';
 
70273
ANALYZE  TABLE t1;
 
70274
Table   Op      Msg_type        Msg_text
 
70275
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
70276
CHECK    TABLE t1 EXTENDED;
 
70277
Table   Op      Msg_type        Msg_text
 
70278
test.t1 check   note    The storage engine for the table doesn't support check
 
70279
CHECKSUM TABLE t1 EXTENDED;
 
70280
Table   Checksum
 
70281
test.t1 <some_value>
 
70282
OPTIMIZE TABLE t1;
 
70283
Table   Op      Msg_type        Msg_text
 
70284
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
70285
# check layout success:    1
 
70286
REPAIR   TABLE t1 EXTENDED;
 
70287
Table   Op      Msg_type        Msg_text
 
70288
test.t1 repair  note    The storage engine for the table doesn't support repair
 
70289
# check layout success:    1
 
70290
TRUNCATE t1;
 
70291
        
 
70292
# check TRUNCATE success:       1
 
70293
# check layout success:    1
 
70294
# End usability test (inc/partition_check.inc)
 
70295
DROP TABLE t1;
 
70296
CREATE TABLE t1 (
 
70297
f_int1 INTEGER,
 
70298
f_int2 INTEGER,
 
70299
f_char1 CHAR(20),
 
70300
f_char2 CHAR(20),
 
70301
f_charbig VARCHAR(1000)
 
70302
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
70303
)
 
70304
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
70305
(PARTITION part_3 VALUES IN (-3),
 
70306
PARTITION part_2 VALUES IN (-2),
 
70307
PARTITION part_1 VALUES IN (-1),
 
70308
PARTITION part_N VALUES IN (NULL),
 
70309
PARTITION part0 VALUES IN (0),
 
70310
PARTITION part1 VALUES IN (1),
 
70311
PARTITION part2 VALUES IN (2),
 
70312
PARTITION part3 VALUES IN (3));
 
70313
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70314
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
70315
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
70316
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
70317
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70318
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
70319
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
70320
# Start usability test (inc/partition_check.inc)
 
70321
create_command
 
70322
SHOW CREATE TABLE t1;
 
70323
Table   Create Table
 
70324
t1      CREATE TABLE `t1` (
 
70325
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
70326
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
70327
  `f_char1` char(20) DEFAULT NULL,
 
70328
  `f_char2` char(20) DEFAULT NULL,
 
70329
  `f_charbig` varchar(1000) DEFAULT NULL
 
70330
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
70331
 
 
70332
# check prerequisites-1 success:    1
 
70333
# check COUNT(*) success:    1
 
70334
# check MIN/MAX(f_int1) success:    1
 
70335
# check MIN/MAX(f_int2) success:    1
 
70336
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70337
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
70338
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
70339
WHERE f_int1 IN (2,3);
 
70340
# check prerequisites-3 success:    1
 
70341
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
70342
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
70343
# check read via f_int1 success: 1
 
70344
# check read via f_int2 success: 1
 
70345
        
 
70346
# check multiple-1 success:     1
 
70347
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
70348
        
 
70349
# check multiple-2 success:     1
 
70350
INSERT INTO t1 SELECT * FROM t0_template
 
70351
WHERE MOD(f_int1,3) = 0;
 
70352
        
 
70353
# check multiple-3 success:     1
 
70354
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
70355
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
70356
AND @max_row_div2 + @max_row_div4;
 
70357
        
 
70358
# check multiple-4 success:     1
 
70359
DELETE FROM t1
 
70360
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
70361
AND @max_row_div2 + @max_row_div4 + @max_row;
 
70362
        
 
70363
# check multiple-5 success:     1
 
70364
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
70365
INSERT INTO t1
 
70366
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
70367
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
70368
f_charbig = '#SINGLE#';
 
70369
        
 
70370
# check single-1 success:       1
 
70371
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
70372
INSERT INTO t1
 
70373
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
70374
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
70375
f_charbig = '#SINGLE#';
 
70376
        
 
70377
# check single-2 success:       1
 
70378
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
70379
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
70380
UPDATE t1 SET f_int1 = @cur_value2
 
70381
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
70382
        
 
70383
# check single-3 success:       1
 
70384
SET @cur_value1= -1;
 
70385
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
70386
UPDATE t1 SET f_int1 = @cur_value1
 
70387
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
70388
        
 
70389
# check single-4 success:       1
 
70390
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
70391
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
70392
        
 
70393
# check single-5 success:       1
 
70394
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
70395
        
 
70396
# check single-6 success:       1
 
70397
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
70398
        
 
70399
# check single-7 success:       1
 
70400
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
70401
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
70402
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
70403
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
70404
f_charbig = '#NULL#';
 
70405
INSERT INTO t1
 
70406
SET f_int1 = NULL , f_int2 = -@max_row,
 
70407
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
70408
f_charbig = '#NULL#';
 
70409
ERROR 23000: Column 'f_int1' cannot be null
 
70410
# check null success:    1
 
70411
DELETE FROM t1
 
70412
WHERE f_int1 = 0 AND f_int2 = 0
 
70413
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
70414
AND f_charbig = '#NULL#';
 
70415
SET AUTOCOMMIT= 0;
 
70416
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70417
SELECT f_int1, f_int1, '', '', 'was inserted'
 
70418
FROM t0_template source_tab
 
70419
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
70420
        
 
70421
# check transactions-1 success:         1
 
70422
COMMIT WORK;
 
70423
        
 
70424
# check transactions-2 success:         1
 
70425
ROLLBACK WORK;
 
70426
        
 
70427
# check transactions-3 success:         1
 
70428
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70429
COMMIT WORK;
 
70430
ROLLBACK WORK;
 
70431
        
 
70432
# check transactions-4 success:         1
 
70433
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70434
SELECT f_int1, f_int1, '', '', 'was inserted'
 
70435
FROM t0_template source_tab
 
70436
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
70437
        
 
70438
# check transactions-5 success:         1
 
70439
ROLLBACK WORK;
 
70440
        
 
70441
# check transactions-6 success:         1
 
70442
# INFO: Storage engine used for t1 seems to be transactional.
 
70443
COMMIT;
 
70444
        
 
70445
# check transactions-7 success:         1
 
70446
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70447
COMMIT WORK;
 
70448
SET @@session.sql_mode = 'traditional';
 
70449
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
70450
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70451
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
70452
'', '', 'was inserted' FROM t0_template
 
70453
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
70454
ERROR 22012: Division by 0
 
70455
COMMIT;
 
70456
        
 
70457
# check transactions-8 success:         1
 
70458
# INFO: Storage engine used for t1 seems to be able to revert
 
70459
#       changes made by the failing statement.
 
70460
SET @@session.sql_mode = '';
 
70461
SET AUTOCOMMIT= 1;
 
70462
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70463
COMMIT WORK;
 
70464
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
70465
        
 
70466
# check special-1 success:      1
 
70467
UPDATE t1 SET f_charbig = '';
 
70468
        
 
70469
# check special-2 success:      1
 
70470
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
70471
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70472
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
70473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70474
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70475
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70476
'just inserted' FROM t0_template
 
70477
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70478
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
70479
BEGIN
 
70480
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70481
f_charbig = 'updated by trigger'
 
70482
      WHERE f_int1 = new.f_int1;
 
70483
END|
 
70484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70485
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
70486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70487
        
 
70488
# check trigger-1 success:      1
 
70489
DROP TRIGGER trg_1;
 
70490
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70491
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70492
f_charbig = 'just inserted'
 
70493
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70494
DELETE FROM t0_aux
 
70495
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70496
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70497
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70498
'just inserted' FROM t0_template
 
70499
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70500
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
70501
BEGIN
 
70502
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70503
f_charbig = 'updated by trigger'
 
70504
      WHERE f_int1 = new.f_int1;
 
70505
END|
 
70506
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70507
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
70508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70509
        
 
70510
# check trigger-2 success:      1
 
70511
DROP TRIGGER trg_1;
 
70512
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70513
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70514
f_charbig = 'just inserted'
 
70515
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70516
DELETE FROM t0_aux
 
70517
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70518
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70519
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70520
'just inserted' FROM t0_template
 
70521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70522
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
70523
BEGIN
 
70524
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70525
f_charbig = 'updated by trigger'
 
70526
      WHERE f_int1 = new.f_int1;
 
70527
END|
 
70528
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70529
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70530
        
 
70531
# check trigger-3 success:      1
 
70532
DROP TRIGGER trg_1;
 
70533
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70534
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70535
f_charbig = 'just inserted'
 
70536
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70537
DELETE FROM t0_aux
 
70538
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70539
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70540
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70541
'just inserted' FROM t0_template
 
70542
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70543
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
70544
BEGIN
 
70545
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70546
f_charbig = 'updated by trigger'
 
70547
      WHERE f_int1 = - old.f_int1;
 
70548
END|
 
70549
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70550
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70551
        
 
70552
# check trigger-4 success:      1
 
70553
DROP TRIGGER trg_1;
 
70554
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70555
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70556
f_charbig = 'just inserted'
 
70557
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70558
DELETE FROM t0_aux
 
70559
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70560
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70561
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70562
'just inserted' FROM t0_template
 
70563
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70564
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
70565
BEGIN
 
70566
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70567
f_charbig = 'updated by trigger'
 
70568
      WHERE f_int1 = new.f_int1;
 
70569
END|
 
70570
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70571
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70572
        
 
70573
# check trigger-5 success:      1
 
70574
DROP TRIGGER trg_1;
 
70575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70577
f_charbig = 'just inserted'
 
70578
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70579
DELETE FROM t0_aux
 
70580
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70582
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70583
'just inserted' FROM t0_template
 
70584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70585
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
70586
BEGIN
 
70587
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70588
f_charbig = 'updated by trigger'
 
70589
      WHERE f_int1 = - old.f_int1;
 
70590
END|
 
70591
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70592
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70593
        
 
70594
# check trigger-6 success:      1
 
70595
DROP TRIGGER trg_1;
 
70596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70598
f_charbig = 'just inserted'
 
70599
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70600
DELETE FROM t0_aux
 
70601
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70604
'just inserted' FROM t0_template
 
70605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70606
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
70607
BEGIN
 
70608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70609
f_charbig = 'updated by trigger'
 
70610
      WHERE f_int1 = - old.f_int1;
 
70611
END|
 
70612
DELETE FROM t0_aux
 
70613
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70614
        
 
70615
# check trigger-7 success:      1
 
70616
DROP TRIGGER trg_1;
 
70617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70619
f_charbig = 'just inserted'
 
70620
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70621
DELETE FROM t0_aux
 
70622
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70623
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70624
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70625
'just inserted' FROM t0_template
 
70626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70627
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
70628
BEGIN
 
70629
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70630
f_charbig = 'updated by trigger'
 
70631
      WHERE f_int1 = - old.f_int1;
 
70632
END|
 
70633
DELETE FROM t0_aux
 
70634
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70635
        
 
70636
# check trigger-8 success:      1
 
70637
DROP TRIGGER trg_1;
 
70638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70640
f_charbig = 'just inserted'
 
70641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70642
DELETE FROM t0_aux
 
70643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70644
DELETE FROM t1
 
70645
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70646
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
70647
BEGIN
 
70648
SET new.f_int1 = old.f_int1 + @max_row,
 
70649
new.f_int2 = old.f_int2 - @max_row,
 
70650
new.f_charbig = '####updated per update trigger####';
 
70651
END|
 
70652
UPDATE t1
 
70653
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
70654
f_charbig = '####updated per update statement itself####';
 
70655
        
 
70656
# check trigger-9 success:      1
 
70657
DROP TRIGGER trg_2;
 
70658
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70659
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70660
f_charbig = CONCAT('===',f_char1,'===');
 
70661
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
70662
BEGIN
 
70663
SET new.f_int1 = new.f_int1 + @max_row,
 
70664
new.f_int2 = new.f_int2 - @max_row,
 
70665
new.f_charbig = '####updated per update trigger####';
 
70666
END|
 
70667
UPDATE t1
 
70668
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
70669
f_charbig = '####updated per update statement itself####';
 
70670
        
 
70671
# check trigger-10 success:     1
 
70672
DROP TRIGGER trg_2;
 
70673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70675
f_charbig = CONCAT('===',f_char1,'===');
 
70676
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
70677
BEGIN
 
70678
SET new.f_int1 = @my_max1 + @counter,
 
70679
new.f_int2 = @my_min2 - @counter,
 
70680
new.f_charbig = '####updated per insert trigger####';
 
70681
SET @counter = @counter + 1;
 
70682
END|
 
70683
SET @counter = 1;
 
70684
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
70685
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70686
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
70687
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
70688
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
70689
ORDER BY f_int1;
 
70690
DROP TRIGGER trg_3;
 
70691
        
 
70692
# check trigger-11 success:     1
 
70693
DELETE FROM t1
 
70694
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
70695
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
70696
AND f_charbig = '####updated per insert trigger####';
 
70697
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
70698
BEGIN
 
70699
SET new.f_int1 = @my_max1 + @counter,
 
70700
new.f_int2 = @my_min2 - @counter,
 
70701
new.f_charbig = '####updated per insert trigger####';
 
70702
SET @counter = @counter + 1;
 
70703
END|
 
70704
SET @counter = 1;
 
70705
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
70706
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
70707
SELECT CAST(f_int1 AS CHAR),
 
70708
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
70709
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
70710
ORDER BY f_int1;
 
70711
DROP TRIGGER trg_3;
 
70712
        
 
70713
# check trigger-12 success:     1
 
70714
DELETE FROM t1
 
70715
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
70716
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
70717
AND f_charbig = '####updated per insert trigger####';
 
70718
ANALYZE  TABLE t1;
 
70719
Table   Op      Msg_type        Msg_text
 
70720
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
70721
CHECK    TABLE t1 EXTENDED;
 
70722
Table   Op      Msg_type        Msg_text
 
70723
test.t1 check   note    The storage engine for the table doesn't support check
 
70724
CHECKSUM TABLE t1 EXTENDED;
 
70725
Table   Checksum
 
70726
test.t1 <some_value>
 
70727
OPTIMIZE TABLE t1;
 
70728
Table   Op      Msg_type        Msg_text
 
70729
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
70730
# check layout success:    1
 
70731
REPAIR   TABLE t1 EXTENDED;
 
70732
Table   Op      Msg_type        Msg_text
 
70733
test.t1 repair  note    The storage engine for the table doesn't support repair
 
70734
# check layout success:    1
 
70735
TRUNCATE t1;
 
70736
        
 
70737
# check TRUNCATE success:       1
 
70738
# check layout success:    1
 
70739
# End usability test (inc/partition_check.inc)
 
70740
DROP TABLE t1;
 
70741
CREATE TABLE t1 (
 
70742
f_int1 INTEGER,
 
70743
f_int2 INTEGER,
 
70744
f_char1 CHAR(20),
 
70745
f_char2 CHAR(20),
 
70746
f_charbig VARCHAR(1000)
 
70747
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
70748
)
 
70749
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
70750
(PARTITION parta VALUES LESS THAN (0),
 
70751
PARTITION partb VALUES LESS THAN (5),
 
70752
PARTITION partc VALUES LESS THAN (10),
 
70753
PARTITION partd VALUES LESS THAN (10 + 5),
 
70754
PARTITION parte VALUES LESS THAN (20),
 
70755
PARTITION partf VALUES LESS THAN (2147483646));
 
70756
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70757
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
70758
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
70759
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
70760
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70761
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
70762
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
70763
# Start usability test (inc/partition_check.inc)
 
70764
create_command
 
70765
SHOW CREATE TABLE t1;
 
70766
Table   Create Table
 
70767
t1      CREATE TABLE `t1` (
 
70768
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
70769
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
70770
  `f_char1` char(20) DEFAULT NULL,
 
70771
  `f_char2` char(20) DEFAULT NULL,
 
70772
  `f_charbig` varchar(1000) DEFAULT NULL
 
70773
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
70774
 
 
70775
# check prerequisites-1 success:    1
 
70776
# check COUNT(*) success:    1
 
70777
# check MIN/MAX(f_int1) success:    1
 
70778
# check MIN/MAX(f_int2) success:    1
 
70779
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70780
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
70781
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
70782
WHERE f_int1 IN (2,3);
 
70783
# check prerequisites-3 success:    1
 
70784
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
70785
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
70786
# check read via f_int1 success: 1
 
70787
# check read via f_int2 success: 1
 
70788
        
 
70789
# check multiple-1 success:     1
 
70790
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
70791
        
 
70792
# check multiple-2 success:     1
 
70793
INSERT INTO t1 SELECT * FROM t0_template
 
70794
WHERE MOD(f_int1,3) = 0;
 
70795
        
 
70796
# check multiple-3 success:     1
 
70797
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
70798
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
70799
AND @max_row_div2 + @max_row_div4;
 
70800
        
 
70801
# check multiple-4 success:     1
 
70802
DELETE FROM t1
 
70803
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
70804
AND @max_row_div2 + @max_row_div4 + @max_row;
 
70805
        
 
70806
# check multiple-5 success:     1
 
70807
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
70808
INSERT INTO t1
 
70809
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
70810
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
70811
f_charbig = '#SINGLE#';
 
70812
        
 
70813
# check single-1 success:       1
 
70814
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
70815
INSERT INTO t1
 
70816
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
70817
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
70818
f_charbig = '#SINGLE#';
 
70819
        
 
70820
# check single-2 success:       1
 
70821
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
70822
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
70823
UPDATE t1 SET f_int1 = @cur_value2
 
70824
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
70825
        
 
70826
# check single-3 success:       1
 
70827
SET @cur_value1= -1;
 
70828
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
70829
UPDATE t1 SET f_int1 = @cur_value1
 
70830
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
70831
        
 
70832
# check single-4 success:       1
 
70833
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
70834
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
70835
        
 
70836
# check single-5 success:       1
 
70837
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
70838
        
 
70839
# check single-6 success:       1
 
70840
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
70841
ERROR HY000: Table has no partition for value 2147483647
 
70842
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
70843
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
70844
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
70845
f_charbig = '#NULL#';
 
70846
INSERT INTO t1
 
70847
SET f_int1 = NULL , f_int2 = -@max_row,
 
70848
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
70849
f_charbig = '#NULL#';
 
70850
ERROR 23000: Column 'f_int1' cannot be null
 
70851
# check null success:    1
 
70852
DELETE FROM t1
 
70853
WHERE f_int1 = 0 AND f_int2 = 0
 
70854
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
70855
AND f_charbig = '#NULL#';
 
70856
SET AUTOCOMMIT= 0;
 
70857
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70858
SELECT f_int1, f_int1, '', '', 'was inserted'
 
70859
FROM t0_template source_tab
 
70860
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
70861
        
 
70862
# check transactions-1 success:         1
 
70863
COMMIT WORK;
 
70864
        
 
70865
# check transactions-2 success:         1
 
70866
ROLLBACK WORK;
 
70867
        
 
70868
# check transactions-3 success:         1
 
70869
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70870
COMMIT WORK;
 
70871
ROLLBACK WORK;
 
70872
        
 
70873
# check transactions-4 success:         1
 
70874
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70875
SELECT f_int1, f_int1, '', '', 'was inserted'
 
70876
FROM t0_template source_tab
 
70877
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
70878
        
 
70879
# check transactions-5 success:         1
 
70880
ROLLBACK WORK;
 
70881
        
 
70882
# check transactions-6 success:         1
 
70883
# INFO: Storage engine used for t1 seems to be transactional.
 
70884
COMMIT;
 
70885
        
 
70886
# check transactions-7 success:         1
 
70887
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70888
COMMIT WORK;
 
70889
SET @@session.sql_mode = 'traditional';
 
70890
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
70891
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
70892
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
70893
'', '', 'was inserted' FROM t0_template
 
70894
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
70895
ERROR 22012: Division by 0
 
70896
COMMIT;
 
70897
        
 
70898
# check transactions-8 success:         1
 
70899
# INFO: Storage engine used for t1 seems to be able to revert
 
70900
#       changes made by the failing statement.
 
70901
SET @@session.sql_mode = '';
 
70902
SET AUTOCOMMIT= 1;
 
70903
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
70904
COMMIT WORK;
 
70905
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
70906
        
 
70907
# check special-1 success:      1
 
70908
UPDATE t1 SET f_charbig = '';
 
70909
        
 
70910
# check special-2 success:      1
 
70911
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
70912
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70913
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
70914
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70915
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70916
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70917
'just inserted' FROM t0_template
 
70918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70919
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
70920
BEGIN
 
70921
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70922
f_charbig = 'updated by trigger'
 
70923
      WHERE f_int1 = new.f_int1;
 
70924
END|
 
70925
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70926
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
70927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70928
        
 
70929
# check trigger-1 success:      1
 
70930
DROP TRIGGER trg_1;
 
70931
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70932
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70933
f_charbig = 'just inserted'
 
70934
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70935
DELETE FROM t0_aux
 
70936
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70937
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70938
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70939
'just inserted' FROM t0_template
 
70940
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70941
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
70942
BEGIN
 
70943
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70944
f_charbig = 'updated by trigger'
 
70945
      WHERE f_int1 = new.f_int1;
 
70946
END|
 
70947
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70948
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
70949
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70950
        
 
70951
# check trigger-2 success:      1
 
70952
DROP TRIGGER trg_1;
 
70953
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70954
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70955
f_charbig = 'just inserted'
 
70956
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70957
DELETE FROM t0_aux
 
70958
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70959
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70960
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70961
'just inserted' FROM t0_template
 
70962
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70963
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
70964
BEGIN
 
70965
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70966
f_charbig = 'updated by trigger'
 
70967
      WHERE f_int1 = new.f_int1;
 
70968
END|
 
70969
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70970
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70971
        
 
70972
# check trigger-3 success:      1
 
70973
DROP TRIGGER trg_1;
 
70974
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70975
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70976
f_charbig = 'just inserted'
 
70977
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70978
DELETE FROM t0_aux
 
70979
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70980
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
70981
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
70982
'just inserted' FROM t0_template
 
70983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
70984
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
70985
BEGIN
 
70986
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
70987
f_charbig = 'updated by trigger'
 
70988
      WHERE f_int1 = - old.f_int1;
 
70989
END|
 
70990
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
70991
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
70992
        
 
70993
# check trigger-4 success:      1
 
70994
DROP TRIGGER trg_1;
 
70995
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
70996
f_int2 = CAST(f_char1 AS SIGNED INT),
 
70997
f_charbig = 'just inserted'
 
70998
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
70999
DELETE FROM t0_aux
 
71000
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71001
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71002
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71003
'just inserted' FROM t0_template
 
71004
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71005
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
71006
BEGIN
 
71007
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71008
f_charbig = 'updated by trigger'
 
71009
      WHERE f_int1 = new.f_int1;
 
71010
END|
 
71011
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71012
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71013
        
 
71014
# check trigger-5 success:      1
 
71015
DROP TRIGGER trg_1;
 
71016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71018
f_charbig = 'just inserted'
 
71019
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71020
DELETE FROM t0_aux
 
71021
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71022
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71023
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71024
'just inserted' FROM t0_template
 
71025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71026
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
71027
BEGIN
 
71028
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71029
f_charbig = 'updated by trigger'
 
71030
      WHERE f_int1 = - old.f_int1;
 
71031
END|
 
71032
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71033
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71034
        
 
71035
# check trigger-6 success:      1
 
71036
DROP TRIGGER trg_1;
 
71037
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71038
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71039
f_charbig = 'just inserted'
 
71040
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71041
DELETE FROM t0_aux
 
71042
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71043
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71044
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71045
'just inserted' FROM t0_template
 
71046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71047
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
71048
BEGIN
 
71049
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71050
f_charbig = 'updated by trigger'
 
71051
      WHERE f_int1 = - old.f_int1;
 
71052
END|
 
71053
DELETE FROM t0_aux
 
71054
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71055
        
 
71056
# check trigger-7 success:      1
 
71057
DROP TRIGGER trg_1;
 
71058
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71059
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71060
f_charbig = 'just inserted'
 
71061
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71062
DELETE FROM t0_aux
 
71063
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71064
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71065
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71066
'just inserted' FROM t0_template
 
71067
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71068
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
71069
BEGIN
 
71070
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71071
f_charbig = 'updated by trigger'
 
71072
      WHERE f_int1 = - old.f_int1;
 
71073
END|
 
71074
DELETE FROM t0_aux
 
71075
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71076
        
 
71077
# check trigger-8 success:      1
 
71078
DROP TRIGGER trg_1;
 
71079
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71080
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71081
f_charbig = 'just inserted'
 
71082
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71083
DELETE FROM t0_aux
 
71084
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71085
DELETE FROM t1
 
71086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71087
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
71088
BEGIN
 
71089
SET new.f_int1 = old.f_int1 + @max_row,
 
71090
new.f_int2 = old.f_int2 - @max_row,
 
71091
new.f_charbig = '####updated per update trigger####';
 
71092
END|
 
71093
UPDATE t1
 
71094
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
71095
f_charbig = '####updated per update statement itself####';
 
71096
        
 
71097
# check trigger-9 success:      1
 
71098
DROP TRIGGER trg_2;
 
71099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71101
f_charbig = CONCAT('===',f_char1,'===');
 
71102
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
71103
BEGIN
 
71104
SET new.f_int1 = new.f_int1 + @max_row,
 
71105
new.f_int2 = new.f_int2 - @max_row,
 
71106
new.f_charbig = '####updated per update trigger####';
 
71107
END|
 
71108
UPDATE t1
 
71109
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
71110
f_charbig = '####updated per update statement itself####';
 
71111
        
 
71112
# check trigger-10 success:     1
 
71113
DROP TRIGGER trg_2;
 
71114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71116
f_charbig = CONCAT('===',f_char1,'===');
 
71117
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
71118
BEGIN
 
71119
SET new.f_int1 = @my_max1 + @counter,
 
71120
new.f_int2 = @my_min2 - @counter,
 
71121
new.f_charbig = '####updated per insert trigger####';
 
71122
SET @counter = @counter + 1;
 
71123
END|
 
71124
SET @counter = 1;
 
71125
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
71126
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71127
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
71128
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
71129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
71130
ORDER BY f_int1;
 
71131
DROP TRIGGER trg_3;
 
71132
        
 
71133
# check trigger-11 success:     1
 
71134
DELETE FROM t1
 
71135
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
71136
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
71137
AND f_charbig = '####updated per insert trigger####';
 
71138
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
71139
BEGIN
 
71140
SET new.f_int1 = @my_max1 + @counter,
 
71141
new.f_int2 = @my_min2 - @counter,
 
71142
new.f_charbig = '####updated per insert trigger####';
 
71143
SET @counter = @counter + 1;
 
71144
END|
 
71145
SET @counter = 1;
 
71146
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
71147
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
71148
SELECT CAST(f_int1 AS CHAR),
 
71149
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
71150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
71151
ORDER BY f_int1;
 
71152
DROP TRIGGER trg_3;
 
71153
        
 
71154
# check trigger-12 success:     1
 
71155
DELETE FROM t1
 
71156
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
71157
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
71158
AND f_charbig = '####updated per insert trigger####';
 
71159
ANALYZE  TABLE t1;
 
71160
Table   Op      Msg_type        Msg_text
 
71161
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
71162
CHECK    TABLE t1 EXTENDED;
 
71163
Table   Op      Msg_type        Msg_text
 
71164
test.t1 check   note    The storage engine for the table doesn't support check
 
71165
CHECKSUM TABLE t1 EXTENDED;
 
71166
Table   Checksum
 
71167
test.t1 <some_value>
 
71168
OPTIMIZE TABLE t1;
 
71169
Table   Op      Msg_type        Msg_text
 
71170
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
71171
# check layout success:    1
 
71172
REPAIR   TABLE t1 EXTENDED;
 
71173
Table   Op      Msg_type        Msg_text
 
71174
test.t1 repair  note    The storage engine for the table doesn't support repair
 
71175
# check layout success:    1
 
71176
TRUNCATE t1;
 
71177
        
 
71178
# check TRUNCATE success:       1
 
71179
# check layout success:    1
 
71180
# End usability test (inc/partition_check.inc)
 
71181
DROP TABLE t1;
 
71182
CREATE TABLE t1 (
 
71183
f_int1 INTEGER,
 
71184
f_int2 INTEGER,
 
71185
f_char1 CHAR(20),
 
71186
f_char2 CHAR(20),
 
71187
f_charbig VARCHAR(1000)
 
71188
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
71189
)
 
71190
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
71191
(PARTITION parta VALUES LESS THAN (0),
 
71192
PARTITION partb VALUES LESS THAN (5),
 
71193
PARTITION partc VALUES LESS THAN (10),
 
71194
PARTITION partd VALUES LESS THAN (2147483646));
 
71195
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71196
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
71197
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
71198
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
71199
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71200
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
71201
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
71202
# Start usability test (inc/partition_check.inc)
 
71203
create_command
 
71204
SHOW CREATE TABLE t1;
 
71205
Table   Create Table
 
71206
t1      CREATE TABLE `t1` (
 
71207
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
71208
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
71209
  `f_char1` char(20) DEFAULT NULL,
 
71210
  `f_char2` char(20) DEFAULT NULL,
 
71211
  `f_charbig` varchar(1000) DEFAULT NULL
 
71212
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
71213
 
 
71214
# check prerequisites-1 success:    1
 
71215
# check COUNT(*) success:    1
 
71216
# check MIN/MAX(f_int1) success:    1
 
71217
# check MIN/MAX(f_int2) success:    1
 
71218
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71219
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
71220
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
71221
WHERE f_int1 IN (2,3);
 
71222
# check prerequisites-3 success:    1
 
71223
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
71224
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
71225
# check read via f_int1 success: 1
 
71226
# check read via f_int2 success: 1
 
71227
        
 
71228
# check multiple-1 success:     1
 
71229
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
71230
        
 
71231
# check multiple-2 success:     1
 
71232
INSERT INTO t1 SELECT * FROM t0_template
 
71233
WHERE MOD(f_int1,3) = 0;
 
71234
        
 
71235
# check multiple-3 success:     1
 
71236
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
71237
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
71238
AND @max_row_div2 + @max_row_div4;
 
71239
        
 
71240
# check multiple-4 success:     1
 
71241
DELETE FROM t1
 
71242
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
71243
AND @max_row_div2 + @max_row_div4 + @max_row;
 
71244
        
 
71245
# check multiple-5 success:     1
 
71246
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
71247
INSERT INTO t1
 
71248
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
71249
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
71250
f_charbig = '#SINGLE#';
 
71251
        
 
71252
# check single-1 success:       1
 
71253
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
71254
INSERT INTO t1
 
71255
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
71256
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
71257
f_charbig = '#SINGLE#';
 
71258
        
 
71259
# check single-2 success:       1
 
71260
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
71261
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
71262
UPDATE t1 SET f_int1 = @cur_value2
 
71263
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
71264
        
 
71265
# check single-3 success:       1
 
71266
SET @cur_value1= -1;
 
71267
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
71268
UPDATE t1 SET f_int1 = @cur_value1
 
71269
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
71270
        
 
71271
# check single-4 success:       1
 
71272
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
71273
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
71274
        
 
71275
# check single-5 success:       1
 
71276
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
71277
        
 
71278
# check single-6 success:       1
 
71279
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
71280
ERROR HY000: Table has no partition for value 2147483647
 
71281
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
71282
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
71283
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
71284
f_charbig = '#NULL#';
 
71285
INSERT INTO t1
 
71286
SET f_int1 = NULL , f_int2 = -@max_row,
 
71287
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
71288
f_charbig = '#NULL#';
 
71289
ERROR 23000: Column 'f_int1' cannot be null
 
71290
# check null success:    1
 
71291
DELETE FROM t1
 
71292
WHERE f_int1 = 0 AND f_int2 = 0
 
71293
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
71294
AND f_charbig = '#NULL#';
 
71295
SET AUTOCOMMIT= 0;
 
71296
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71297
SELECT f_int1, f_int1, '', '', 'was inserted'
 
71298
FROM t0_template source_tab
 
71299
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
71300
        
 
71301
# check transactions-1 success:         1
 
71302
COMMIT WORK;
 
71303
        
 
71304
# check transactions-2 success:         1
 
71305
ROLLBACK WORK;
 
71306
        
 
71307
# check transactions-3 success:         1
 
71308
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
71309
COMMIT WORK;
 
71310
ROLLBACK WORK;
 
71311
        
 
71312
# check transactions-4 success:         1
 
71313
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71314
SELECT f_int1, f_int1, '', '', 'was inserted'
 
71315
FROM t0_template source_tab
 
71316
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
71317
        
 
71318
# check transactions-5 success:         1
 
71319
ROLLBACK WORK;
 
71320
        
 
71321
# check transactions-6 success:         1
 
71322
# INFO: Storage engine used for t1 seems to be transactional.
 
71323
COMMIT;
 
71324
        
 
71325
# check transactions-7 success:         1
 
71326
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
71327
COMMIT WORK;
 
71328
SET @@session.sql_mode = 'traditional';
 
71329
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
71330
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71331
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
71332
'', '', 'was inserted' FROM t0_template
 
71333
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
71334
ERROR 22012: Division by 0
 
71335
COMMIT;
 
71336
        
 
71337
# check transactions-8 success:         1
 
71338
# INFO: Storage engine used for t1 seems to be able to revert
 
71339
#       changes made by the failing statement.
 
71340
SET @@session.sql_mode = '';
 
71341
SET AUTOCOMMIT= 1;
 
71342
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
71343
COMMIT WORK;
 
71344
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
71345
        
 
71346
# check special-1 success:      1
 
71347
UPDATE t1 SET f_charbig = '';
 
71348
        
 
71349
# check special-2 success:      1
 
71350
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
71351
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71352
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
71353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71355
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71356
'just inserted' FROM t0_template
 
71357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71358
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
71359
BEGIN
 
71360
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71361
f_charbig = 'updated by trigger'
 
71362
      WHERE f_int1 = new.f_int1;
 
71363
END|
 
71364
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71365
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
71366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71367
        
 
71368
# check trigger-1 success:      1
 
71369
DROP TRIGGER trg_1;
 
71370
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71371
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71372
f_charbig = 'just inserted'
 
71373
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71374
DELETE FROM t0_aux
 
71375
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71376
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71377
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71378
'just inserted' FROM t0_template
 
71379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71380
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
71381
BEGIN
 
71382
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71383
f_charbig = 'updated by trigger'
 
71384
      WHERE f_int1 = new.f_int1;
 
71385
END|
 
71386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71387
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
71388
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71389
        
 
71390
# check trigger-2 success:      1
 
71391
DROP TRIGGER trg_1;
 
71392
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71393
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71394
f_charbig = 'just inserted'
 
71395
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71396
DELETE FROM t0_aux
 
71397
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71399
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71400
'just inserted' FROM t0_template
 
71401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71402
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
71403
BEGIN
 
71404
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71405
f_charbig = 'updated by trigger'
 
71406
      WHERE f_int1 = new.f_int1;
 
71407
END|
 
71408
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71409
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71410
        
 
71411
# check trigger-3 success:      1
 
71412
DROP TRIGGER trg_1;
 
71413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71415
f_charbig = 'just inserted'
 
71416
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71417
DELETE FROM t0_aux
 
71418
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71419
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71420
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71421
'just inserted' FROM t0_template
 
71422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71423
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
71424
BEGIN
 
71425
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71426
f_charbig = 'updated by trigger'
 
71427
      WHERE f_int1 = - old.f_int1;
 
71428
END|
 
71429
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71430
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71431
        
 
71432
# check trigger-4 success:      1
 
71433
DROP TRIGGER trg_1;
 
71434
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71435
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71436
f_charbig = 'just inserted'
 
71437
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71438
DELETE FROM t0_aux
 
71439
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71442
'just inserted' FROM t0_template
 
71443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71444
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
71445
BEGIN
 
71446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71447
f_charbig = 'updated by trigger'
 
71448
      WHERE f_int1 = new.f_int1;
 
71449
END|
 
71450
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71451
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71452
        
 
71453
# check trigger-5 success:      1
 
71454
DROP TRIGGER trg_1;
 
71455
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71456
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71457
f_charbig = 'just inserted'
 
71458
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71459
DELETE FROM t0_aux
 
71460
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71463
'just inserted' FROM t0_template
 
71464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71465
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
71466
BEGIN
 
71467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71468
f_charbig = 'updated by trigger'
 
71469
      WHERE f_int1 = - old.f_int1;
 
71470
END|
 
71471
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71472
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71473
        
 
71474
# check trigger-6 success:      1
 
71475
DROP TRIGGER trg_1;
 
71476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71478
f_charbig = 'just inserted'
 
71479
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71480
DELETE FROM t0_aux
 
71481
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71483
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71484
'just inserted' FROM t0_template
 
71485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71486
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
71487
BEGIN
 
71488
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71489
f_charbig = 'updated by trigger'
 
71490
      WHERE f_int1 = - old.f_int1;
 
71491
END|
 
71492
DELETE FROM t0_aux
 
71493
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71494
        
 
71495
# check trigger-7 success:      1
 
71496
DROP TRIGGER trg_1;
 
71497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71499
f_charbig = 'just inserted'
 
71500
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71501
DELETE FROM t0_aux
 
71502
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71504
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71505
'just inserted' FROM t0_template
 
71506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71507
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
71508
BEGIN
 
71509
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71510
f_charbig = 'updated by trigger'
 
71511
      WHERE f_int1 = - old.f_int1;
 
71512
END|
 
71513
DELETE FROM t0_aux
 
71514
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71515
        
 
71516
# check trigger-8 success:      1
 
71517
DROP TRIGGER trg_1;
 
71518
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71519
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71520
f_charbig = 'just inserted'
 
71521
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71522
DELETE FROM t0_aux
 
71523
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71524
DELETE FROM t1
 
71525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71526
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
71527
BEGIN
 
71528
SET new.f_int1 = old.f_int1 + @max_row,
 
71529
new.f_int2 = old.f_int2 - @max_row,
 
71530
new.f_charbig = '####updated per update trigger####';
 
71531
END|
 
71532
UPDATE t1
 
71533
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
71534
f_charbig = '####updated per update statement itself####';
 
71535
        
 
71536
# check trigger-9 success:      1
 
71537
DROP TRIGGER trg_2;
 
71538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71539
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71540
f_charbig = CONCAT('===',f_char1,'===');
 
71541
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
71542
BEGIN
 
71543
SET new.f_int1 = new.f_int1 + @max_row,
 
71544
new.f_int2 = new.f_int2 - @max_row,
 
71545
new.f_charbig = '####updated per update trigger####';
 
71546
END|
 
71547
UPDATE t1
 
71548
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
71549
f_charbig = '####updated per update statement itself####';
 
71550
        
 
71551
# check trigger-10 success:     1
 
71552
DROP TRIGGER trg_2;
 
71553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71555
f_charbig = CONCAT('===',f_char1,'===');
 
71556
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
71557
BEGIN
 
71558
SET new.f_int1 = @my_max1 + @counter,
 
71559
new.f_int2 = @my_min2 - @counter,
 
71560
new.f_charbig = '####updated per insert trigger####';
 
71561
SET @counter = @counter + 1;
 
71562
END|
 
71563
SET @counter = 1;
 
71564
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
71565
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71566
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
71567
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
71568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
71569
ORDER BY f_int1;
 
71570
DROP TRIGGER trg_3;
 
71571
        
 
71572
# check trigger-11 success:     1
 
71573
DELETE FROM t1
 
71574
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
71575
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
71576
AND f_charbig = '####updated per insert trigger####';
 
71577
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
71578
BEGIN
 
71579
SET new.f_int1 = @my_max1 + @counter,
 
71580
new.f_int2 = @my_min2 - @counter,
 
71581
new.f_charbig = '####updated per insert trigger####';
 
71582
SET @counter = @counter + 1;
 
71583
END|
 
71584
SET @counter = 1;
 
71585
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
71586
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
71587
SELECT CAST(f_int1 AS CHAR),
 
71588
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
71589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
71590
ORDER BY f_int1;
 
71591
DROP TRIGGER trg_3;
 
71592
        
 
71593
# check trigger-12 success:     1
 
71594
DELETE FROM t1
 
71595
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
71596
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
71597
AND f_charbig = '####updated per insert trigger####';
 
71598
ANALYZE  TABLE t1;
 
71599
Table   Op      Msg_type        Msg_text
 
71600
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
71601
CHECK    TABLE t1 EXTENDED;
 
71602
Table   Op      Msg_type        Msg_text
 
71603
test.t1 check   note    The storage engine for the table doesn't support check
 
71604
CHECKSUM TABLE t1 EXTENDED;
 
71605
Table   Checksum
 
71606
test.t1 <some_value>
 
71607
OPTIMIZE TABLE t1;
 
71608
Table   Op      Msg_type        Msg_text
 
71609
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
71610
# check layout success:    1
 
71611
REPAIR   TABLE t1 EXTENDED;
 
71612
Table   Op      Msg_type        Msg_text
 
71613
test.t1 repair  note    The storage engine for the table doesn't support repair
 
71614
# check layout success:    1
 
71615
TRUNCATE t1;
 
71616
        
 
71617
# check TRUNCATE success:       1
 
71618
# check layout success:    1
 
71619
# End usability test (inc/partition_check.inc)
 
71620
DROP TABLE t1;
 
71621
CREATE TABLE t1 (
 
71622
f_int1 INTEGER,
 
71623
f_int2 INTEGER,
 
71624
f_char1 CHAR(20),
 
71625
f_char2 CHAR(20),
 
71626
f_charbig VARCHAR(1000)
 
71627
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
71628
)
 
71629
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
71630
(PARTITION part1 VALUES LESS THAN (0)
 
71631
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
71632
PARTITION part2 VALUES LESS THAN (5)
 
71633
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
71634
PARTITION part3 VALUES LESS THAN (10)
 
71635
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
71636
PARTITION part4 VALUES LESS THAN (2147483646)
 
71637
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
71638
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71639
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
71640
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
71641
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
71642
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71643
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
71644
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
71645
# Start usability test (inc/partition_check.inc)
 
71646
create_command
 
71647
SHOW CREATE TABLE t1;
 
71648
Table   Create Table
 
71649
t1      CREATE TABLE `t1` (
 
71650
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
71651
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
71652
  `f_char1` char(20) DEFAULT NULL,
 
71653
  `f_char2` char(20) DEFAULT NULL,
 
71654
  `f_charbig` varchar(1000) DEFAULT NULL
 
71655
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
71656
 
 
71657
# check prerequisites-1 success:    1
 
71658
# check COUNT(*) success:    1
 
71659
# check MIN/MAX(f_int1) success:    1
 
71660
# check MIN/MAX(f_int2) success:    1
 
71661
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71662
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
71663
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
71664
WHERE f_int1 IN (2,3);
 
71665
# check prerequisites-3 success:    1
 
71666
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
71667
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
71668
# check read via f_int1 success: 1
 
71669
# check read via f_int2 success: 1
 
71670
        
 
71671
# check multiple-1 success:     1
 
71672
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
71673
        
 
71674
# check multiple-2 success:     1
 
71675
INSERT INTO t1 SELECT * FROM t0_template
 
71676
WHERE MOD(f_int1,3) = 0;
 
71677
        
 
71678
# check multiple-3 success:     1
 
71679
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
71680
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
71681
AND @max_row_div2 + @max_row_div4;
 
71682
        
 
71683
# check multiple-4 success:     1
 
71684
DELETE FROM t1
 
71685
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
71686
AND @max_row_div2 + @max_row_div4 + @max_row;
 
71687
        
 
71688
# check multiple-5 success:     1
 
71689
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
71690
INSERT INTO t1
 
71691
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
71692
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
71693
f_charbig = '#SINGLE#';
 
71694
        
 
71695
# check single-1 success:       1
 
71696
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
71697
INSERT INTO t1
 
71698
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
71699
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
71700
f_charbig = '#SINGLE#';
 
71701
        
 
71702
# check single-2 success:       1
 
71703
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
71704
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
71705
UPDATE t1 SET f_int1 = @cur_value2
 
71706
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
71707
        
 
71708
# check single-3 success:       1
 
71709
SET @cur_value1= -1;
 
71710
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
71711
UPDATE t1 SET f_int1 = @cur_value1
 
71712
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
71713
        
 
71714
# check single-4 success:       1
 
71715
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
71716
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
71717
        
 
71718
# check single-5 success:       1
 
71719
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
71720
        
 
71721
# check single-6 success:       1
 
71722
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
71723
ERROR HY000: Table has no partition for value 2147483647
 
71724
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
71725
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
71726
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
71727
f_charbig = '#NULL#';
 
71728
INSERT INTO t1
 
71729
SET f_int1 = NULL , f_int2 = -@max_row,
 
71730
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
71731
f_charbig = '#NULL#';
 
71732
ERROR 23000: Column 'f_int1' cannot be null
 
71733
# check null success:    1
 
71734
DELETE FROM t1
 
71735
WHERE f_int1 = 0 AND f_int2 = 0
 
71736
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
71737
AND f_charbig = '#NULL#';
 
71738
SET AUTOCOMMIT= 0;
 
71739
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71740
SELECT f_int1, f_int1, '', '', 'was inserted'
 
71741
FROM t0_template source_tab
 
71742
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
71743
        
 
71744
# check transactions-1 success:         1
 
71745
COMMIT WORK;
 
71746
        
 
71747
# check transactions-2 success:         1
 
71748
ROLLBACK WORK;
 
71749
        
 
71750
# check transactions-3 success:         1
 
71751
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
71752
COMMIT WORK;
 
71753
ROLLBACK WORK;
 
71754
        
 
71755
# check transactions-4 success:         1
 
71756
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71757
SELECT f_int1, f_int1, '', '', 'was inserted'
 
71758
FROM t0_template source_tab
 
71759
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
71760
        
 
71761
# check transactions-5 success:         1
 
71762
ROLLBACK WORK;
 
71763
        
 
71764
# check transactions-6 success:         1
 
71765
# INFO: Storage engine used for t1 seems to be transactional.
 
71766
COMMIT;
 
71767
        
 
71768
# check transactions-7 success:         1
 
71769
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
71770
COMMIT WORK;
 
71771
SET @@session.sql_mode = 'traditional';
 
71772
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
71773
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
71774
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
71775
'', '', 'was inserted' FROM t0_template
 
71776
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
71777
ERROR 22012: Division by 0
 
71778
COMMIT;
 
71779
        
 
71780
# check transactions-8 success:         1
 
71781
# INFO: Storage engine used for t1 seems to be able to revert
 
71782
#       changes made by the failing statement.
 
71783
SET @@session.sql_mode = '';
 
71784
SET AUTOCOMMIT= 1;
 
71785
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
71786
COMMIT WORK;
 
71787
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
71788
        
 
71789
# check special-1 success:      1
 
71790
UPDATE t1 SET f_charbig = '';
 
71791
        
 
71792
# check special-2 success:      1
 
71793
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
71794
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71795
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
71796
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71797
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71798
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71799
'just inserted' FROM t0_template
 
71800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71801
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
71802
BEGIN
 
71803
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71804
f_charbig = 'updated by trigger'
 
71805
      WHERE f_int1 = new.f_int1;
 
71806
END|
 
71807
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71808
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
71809
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71810
        
 
71811
# check trigger-1 success:      1
 
71812
DROP TRIGGER trg_1;
 
71813
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71814
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71815
f_charbig = 'just inserted'
 
71816
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71817
DELETE FROM t0_aux
 
71818
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71819
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71820
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71821
'just inserted' FROM t0_template
 
71822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71823
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
71824
BEGIN
 
71825
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71826
f_charbig = 'updated by trigger'
 
71827
      WHERE f_int1 = new.f_int1;
 
71828
END|
 
71829
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71830
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
71831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71832
        
 
71833
# check trigger-2 success:      1
 
71834
DROP TRIGGER trg_1;
 
71835
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71836
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71837
f_charbig = 'just inserted'
 
71838
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71839
DELETE FROM t0_aux
 
71840
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71842
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71843
'just inserted' FROM t0_template
 
71844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71845
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
71846
BEGIN
 
71847
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71848
f_charbig = 'updated by trigger'
 
71849
      WHERE f_int1 = new.f_int1;
 
71850
END|
 
71851
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71852
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71853
        
 
71854
# check trigger-3 success:      1
 
71855
DROP TRIGGER trg_1;
 
71856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71858
f_charbig = 'just inserted'
 
71859
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71860
DELETE FROM t0_aux
 
71861
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71862
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71863
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71864
'just inserted' FROM t0_template
 
71865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71866
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
71867
BEGIN
 
71868
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71869
f_charbig = 'updated by trigger'
 
71870
      WHERE f_int1 = - old.f_int1;
 
71871
END|
 
71872
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71873
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71874
        
 
71875
# check trigger-4 success:      1
 
71876
DROP TRIGGER trg_1;
 
71877
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71878
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71879
f_charbig = 'just inserted'
 
71880
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71881
DELETE FROM t0_aux
 
71882
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71883
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71884
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71885
'just inserted' FROM t0_template
 
71886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71887
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
71888
BEGIN
 
71889
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71890
f_charbig = 'updated by trigger'
 
71891
      WHERE f_int1 = new.f_int1;
 
71892
END|
 
71893
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71894
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71895
        
 
71896
# check trigger-5 success:      1
 
71897
DROP TRIGGER trg_1;
 
71898
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71899
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71900
f_charbig = 'just inserted'
 
71901
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71902
DELETE FROM t0_aux
 
71903
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71904
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71905
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71906
'just inserted' FROM t0_template
 
71907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71908
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
71909
BEGIN
 
71910
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71911
f_charbig = 'updated by trigger'
 
71912
      WHERE f_int1 = - old.f_int1;
 
71913
END|
 
71914
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
71915
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71916
        
 
71917
# check trigger-6 success:      1
 
71918
DROP TRIGGER trg_1;
 
71919
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71920
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71921
f_charbig = 'just inserted'
 
71922
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71923
DELETE FROM t0_aux
 
71924
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71925
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71926
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71927
'just inserted' FROM t0_template
 
71928
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71929
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
71930
BEGIN
 
71931
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71932
f_charbig = 'updated by trigger'
 
71933
      WHERE f_int1 = - old.f_int1;
 
71934
END|
 
71935
DELETE FROM t0_aux
 
71936
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71937
        
 
71938
# check trigger-7 success:      1
 
71939
DROP TRIGGER trg_1;
 
71940
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71941
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71942
f_charbig = 'just inserted'
 
71943
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71944
DELETE FROM t0_aux
 
71945
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71946
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
71947
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
71948
'just inserted' FROM t0_template
 
71949
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71950
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
71951
BEGIN
 
71952
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
71953
f_charbig = 'updated by trigger'
 
71954
      WHERE f_int1 = - old.f_int1;
 
71955
END|
 
71956
DELETE FROM t0_aux
 
71957
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
71958
        
 
71959
# check trigger-8 success:      1
 
71960
DROP TRIGGER trg_1;
 
71961
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71962
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71963
f_charbig = 'just inserted'
 
71964
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
71965
DELETE FROM t0_aux
 
71966
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71967
DELETE FROM t1
 
71968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
71969
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
71970
BEGIN
 
71971
SET new.f_int1 = old.f_int1 + @max_row,
 
71972
new.f_int2 = old.f_int2 - @max_row,
 
71973
new.f_charbig = '####updated per update trigger####';
 
71974
END|
 
71975
UPDATE t1
 
71976
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
71977
f_charbig = '####updated per update statement itself####';
 
71978
        
 
71979
# check trigger-9 success:      1
 
71980
DROP TRIGGER trg_2;
 
71981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71982
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71983
f_charbig = CONCAT('===',f_char1,'===');
 
71984
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
71985
BEGIN
 
71986
SET new.f_int1 = new.f_int1 + @max_row,
 
71987
new.f_int2 = new.f_int2 - @max_row,
 
71988
new.f_charbig = '####updated per update trigger####';
 
71989
END|
 
71990
UPDATE t1
 
71991
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
71992
f_charbig = '####updated per update statement itself####';
 
71993
        
 
71994
# check trigger-10 success:     1
 
71995
DROP TRIGGER trg_2;
 
71996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
71997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
71998
f_charbig = CONCAT('===',f_char1,'===');
 
71999
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
72000
BEGIN
 
72001
SET new.f_int1 = @my_max1 + @counter,
 
72002
new.f_int2 = @my_min2 - @counter,
 
72003
new.f_charbig = '####updated per insert trigger####';
 
72004
SET @counter = @counter + 1;
 
72005
END|
 
72006
SET @counter = 1;
 
72007
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
72008
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72009
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
72010
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
72011
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
72012
ORDER BY f_int1;
 
72013
DROP TRIGGER trg_3;
 
72014
        
 
72015
# check trigger-11 success:     1
 
72016
DELETE FROM t1
 
72017
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
72018
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
72019
AND f_charbig = '####updated per insert trigger####';
 
72020
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
72021
BEGIN
 
72022
SET new.f_int1 = @my_max1 + @counter,
 
72023
new.f_int2 = @my_min2 - @counter,
 
72024
new.f_charbig = '####updated per insert trigger####';
 
72025
SET @counter = @counter + 1;
 
72026
END|
 
72027
SET @counter = 1;
 
72028
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
72029
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
72030
SELECT CAST(f_int1 AS CHAR),
 
72031
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
72032
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
72033
ORDER BY f_int1;
 
72034
DROP TRIGGER trg_3;
 
72035
        
 
72036
# check trigger-12 success:     1
 
72037
DELETE FROM t1
 
72038
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
72039
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
72040
AND f_charbig = '####updated per insert trigger####';
 
72041
ANALYZE  TABLE t1;
 
72042
Table   Op      Msg_type        Msg_text
 
72043
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
72044
CHECK    TABLE t1 EXTENDED;
 
72045
Table   Op      Msg_type        Msg_text
 
72046
test.t1 check   note    The storage engine for the table doesn't support check
 
72047
CHECKSUM TABLE t1 EXTENDED;
 
72048
Table   Checksum
 
72049
test.t1 <some_value>
 
72050
OPTIMIZE TABLE t1;
 
72051
Table   Op      Msg_type        Msg_text
 
72052
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
72053
# check layout success:    1
 
72054
REPAIR   TABLE t1 EXTENDED;
 
72055
Table   Op      Msg_type        Msg_text
 
72056
test.t1 repair  note    The storage engine for the table doesn't support repair
 
72057
# check layout success:    1
 
72058
TRUNCATE t1;
 
72059
        
 
72060
# check TRUNCATE success:       1
 
72061
# check layout success:    1
 
72062
# End usability test (inc/partition_check.inc)
 
72063
DROP TABLE t1;
 
72064
CREATE TABLE t1 (
 
72065
f_int1 INTEGER,
 
72066
f_int2 INTEGER,
 
72067
f_char1 CHAR(20),
 
72068
f_char2 CHAR(20),
 
72069
f_charbig VARCHAR(1000)
 
72070
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
72071
)
 
72072
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
72073
(PARTITION part1 VALUES IN (0)
 
72074
(SUBPARTITION sp11, SUBPARTITION sp12),
 
72075
PARTITION part2 VALUES IN (1)
 
72076
(SUBPARTITION sp21, SUBPARTITION sp22),
 
72077
PARTITION part3 VALUES IN (2)
 
72078
(SUBPARTITION sp31, SUBPARTITION sp32),
 
72079
PARTITION part4 VALUES IN (NULL)
 
72080
(SUBPARTITION sp41, SUBPARTITION sp42));
 
72081
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72082
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
72083
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
72084
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
72085
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72086
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
72087
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
72088
# Start usability test (inc/partition_check.inc)
 
72089
create_command
 
72090
SHOW CREATE TABLE t1;
 
72091
Table   Create Table
 
72092
t1      CREATE TABLE `t1` (
 
72093
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
72094
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
72095
  `f_char1` char(20) DEFAULT NULL,
 
72096
  `f_char2` char(20) DEFAULT NULL,
 
72097
  `f_charbig` varchar(1000) DEFAULT NULL
 
72098
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
72099
 
 
72100
# check prerequisites-1 success:    1
 
72101
# check COUNT(*) success:    1
 
72102
# check MIN/MAX(f_int1) success:    1
 
72103
# check MIN/MAX(f_int2) success:    1
 
72104
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72105
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
72106
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
72107
WHERE f_int1 IN (2,3);
 
72108
# check prerequisites-3 success:    1
 
72109
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
72110
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
72111
# check read via f_int1 success: 1
 
72112
# check read via f_int2 success: 1
 
72113
        
 
72114
# check multiple-1 success:     1
 
72115
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
72116
        
 
72117
# check multiple-2 success:     1
 
72118
INSERT INTO t1 SELECT * FROM t0_template
 
72119
WHERE MOD(f_int1,3) = 0;
 
72120
        
 
72121
# check multiple-3 success:     1
 
72122
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
72123
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
72124
AND @max_row_div2 + @max_row_div4;
 
72125
        
 
72126
# check multiple-4 success:     1
 
72127
DELETE FROM t1
 
72128
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
72129
AND @max_row_div2 + @max_row_div4 + @max_row;
 
72130
        
 
72131
# check multiple-5 success:     1
 
72132
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
72133
INSERT INTO t1
 
72134
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
72135
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
72136
f_charbig = '#SINGLE#';
 
72137
        
 
72138
# check single-1 success:       1
 
72139
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
72140
INSERT INTO t1
 
72141
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
72142
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
72143
f_charbig = '#SINGLE#';
 
72144
        
 
72145
# check single-2 success:       1
 
72146
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
72147
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
72148
UPDATE t1 SET f_int1 = @cur_value2
 
72149
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
72150
        
 
72151
# check single-3 success:       1
 
72152
SET @cur_value1= -1;
 
72153
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
72154
UPDATE t1 SET f_int1 = @cur_value1
 
72155
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
72156
        
 
72157
# check single-4 success:       1
 
72158
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
72159
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
72160
        
 
72161
# check single-5 success:       1
 
72162
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
72163
        
 
72164
# check single-6 success:       1
 
72165
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
72166
        
 
72167
# check single-7 success:       1
 
72168
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
72169
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
72170
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
72171
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
72172
f_charbig = '#NULL#';
 
72173
INSERT INTO t1
 
72174
SET f_int1 = NULL , f_int2 = -@max_row,
 
72175
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
72176
f_charbig = '#NULL#';
 
72177
ERROR 23000: Column 'f_int1' cannot be null
 
72178
# check null success:    1
 
72179
DELETE FROM t1
 
72180
WHERE f_int1 = 0 AND f_int2 = 0
 
72181
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
72182
AND f_charbig = '#NULL#';
 
72183
SET AUTOCOMMIT= 0;
 
72184
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72185
SELECT f_int1, f_int1, '', '', 'was inserted'
 
72186
FROM t0_template source_tab
 
72187
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
72188
        
 
72189
# check transactions-1 success:         1
 
72190
COMMIT WORK;
 
72191
        
 
72192
# check transactions-2 success:         1
 
72193
ROLLBACK WORK;
 
72194
        
 
72195
# check transactions-3 success:         1
 
72196
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
72197
COMMIT WORK;
 
72198
ROLLBACK WORK;
 
72199
        
 
72200
# check transactions-4 success:         1
 
72201
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72202
SELECT f_int1, f_int1, '', '', 'was inserted'
 
72203
FROM t0_template source_tab
 
72204
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
72205
        
 
72206
# check transactions-5 success:         1
 
72207
ROLLBACK WORK;
 
72208
        
 
72209
# check transactions-6 success:         1
 
72210
# INFO: Storage engine used for t1 seems to be transactional.
 
72211
COMMIT;
 
72212
        
 
72213
# check transactions-7 success:         1
 
72214
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
72215
COMMIT WORK;
 
72216
SET @@session.sql_mode = 'traditional';
 
72217
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
72218
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72219
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
72220
'', '', 'was inserted' FROM t0_template
 
72221
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
72222
ERROR 22012: Division by 0
 
72223
COMMIT;
 
72224
        
 
72225
# check transactions-8 success:         1
 
72226
# INFO: Storage engine used for t1 seems to be able to revert
 
72227
#       changes made by the failing statement.
 
72228
SET @@session.sql_mode = '';
 
72229
SET AUTOCOMMIT= 1;
 
72230
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
72231
COMMIT WORK;
 
72232
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
72233
        
 
72234
# check special-1 success:      1
 
72235
UPDATE t1 SET f_charbig = '';
 
72236
        
 
72237
# check special-2 success:      1
 
72238
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
72239
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72240
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
72241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72242
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72243
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72244
'just inserted' FROM t0_template
 
72245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72246
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
72247
BEGIN
 
72248
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72249
f_charbig = 'updated by trigger'
 
72250
      WHERE f_int1 = new.f_int1;
 
72251
END|
 
72252
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72253
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
72254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72255
        
 
72256
# check trigger-1 success:      1
 
72257
DROP TRIGGER trg_1;
 
72258
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72259
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72260
f_charbig = 'just inserted'
 
72261
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72262
DELETE FROM t0_aux
 
72263
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72264
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72265
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72266
'just inserted' FROM t0_template
 
72267
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72268
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
72269
BEGIN
 
72270
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72271
f_charbig = 'updated by trigger'
 
72272
      WHERE f_int1 = new.f_int1;
 
72273
END|
 
72274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72275
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
72276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72277
        
 
72278
# check trigger-2 success:      1
 
72279
DROP TRIGGER trg_1;
 
72280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72282
f_charbig = 'just inserted'
 
72283
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72284
DELETE FROM t0_aux
 
72285
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72286
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72287
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72288
'just inserted' FROM t0_template
 
72289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72290
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
72291
BEGIN
 
72292
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72293
f_charbig = 'updated by trigger'
 
72294
      WHERE f_int1 = new.f_int1;
 
72295
END|
 
72296
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72297
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72298
        
 
72299
# check trigger-3 success:      1
 
72300
DROP TRIGGER trg_1;
 
72301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72303
f_charbig = 'just inserted'
 
72304
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72305
DELETE FROM t0_aux
 
72306
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72307
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72308
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72309
'just inserted' FROM t0_template
 
72310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72311
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
72312
BEGIN
 
72313
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72314
f_charbig = 'updated by trigger'
 
72315
      WHERE f_int1 = - old.f_int1;
 
72316
END|
 
72317
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72318
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72319
        
 
72320
# check trigger-4 success:      1
 
72321
DROP TRIGGER trg_1;
 
72322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72324
f_charbig = 'just inserted'
 
72325
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72326
DELETE FROM t0_aux
 
72327
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72329
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72330
'just inserted' FROM t0_template
 
72331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72332
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
72333
BEGIN
 
72334
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72335
f_charbig = 'updated by trigger'
 
72336
      WHERE f_int1 = new.f_int1;
 
72337
END|
 
72338
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72339
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72340
        
 
72341
# check trigger-5 success:      1
 
72342
DROP TRIGGER trg_1;
 
72343
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72344
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72345
f_charbig = 'just inserted'
 
72346
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72347
DELETE FROM t0_aux
 
72348
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72349
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72350
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72351
'just inserted' FROM t0_template
 
72352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72353
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
72354
BEGIN
 
72355
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72356
f_charbig = 'updated by trigger'
 
72357
      WHERE f_int1 = - old.f_int1;
 
72358
END|
 
72359
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72360
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72361
        
 
72362
# check trigger-6 success:      1
 
72363
DROP TRIGGER trg_1;
 
72364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72366
f_charbig = 'just inserted'
 
72367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72368
DELETE FROM t0_aux
 
72369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72370
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72371
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72372
'just inserted' FROM t0_template
 
72373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72374
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
72375
BEGIN
 
72376
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72377
f_charbig = 'updated by trigger'
 
72378
      WHERE f_int1 = - old.f_int1;
 
72379
END|
 
72380
DELETE FROM t0_aux
 
72381
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72382
        
 
72383
# check trigger-7 success:      1
 
72384
DROP TRIGGER trg_1;
 
72385
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72386
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72387
f_charbig = 'just inserted'
 
72388
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72389
DELETE FROM t0_aux
 
72390
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72391
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72392
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72393
'just inserted' FROM t0_template
 
72394
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72395
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
72396
BEGIN
 
72397
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72398
f_charbig = 'updated by trigger'
 
72399
      WHERE f_int1 = - old.f_int1;
 
72400
END|
 
72401
DELETE FROM t0_aux
 
72402
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72403
        
 
72404
# check trigger-8 success:      1
 
72405
DROP TRIGGER trg_1;
 
72406
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72407
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72408
f_charbig = 'just inserted'
 
72409
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72410
DELETE FROM t0_aux
 
72411
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72412
DELETE FROM t1
 
72413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72414
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
72415
BEGIN
 
72416
SET new.f_int1 = old.f_int1 + @max_row,
 
72417
new.f_int2 = old.f_int2 - @max_row,
 
72418
new.f_charbig = '####updated per update trigger####';
 
72419
END|
 
72420
UPDATE t1
 
72421
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
72422
f_charbig = '####updated per update statement itself####';
 
72423
        
 
72424
# check trigger-9 success:      1
 
72425
DROP TRIGGER trg_2;
 
72426
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72427
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72428
f_charbig = CONCAT('===',f_char1,'===');
 
72429
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
72430
BEGIN
 
72431
SET new.f_int1 = new.f_int1 + @max_row,
 
72432
new.f_int2 = new.f_int2 - @max_row,
 
72433
new.f_charbig = '####updated per update trigger####';
 
72434
END|
 
72435
UPDATE t1
 
72436
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
72437
f_charbig = '####updated per update statement itself####';
 
72438
        
 
72439
# check trigger-10 success:     1
 
72440
DROP TRIGGER trg_2;
 
72441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72443
f_charbig = CONCAT('===',f_char1,'===');
 
72444
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
72445
BEGIN
 
72446
SET new.f_int1 = @my_max1 + @counter,
 
72447
new.f_int2 = @my_min2 - @counter,
 
72448
new.f_charbig = '####updated per insert trigger####';
 
72449
SET @counter = @counter + 1;
 
72450
END|
 
72451
SET @counter = 1;
 
72452
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
72453
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72454
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
72455
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
72456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
72457
ORDER BY f_int1;
 
72458
DROP TRIGGER trg_3;
 
72459
        
 
72460
# check trigger-11 success:     1
 
72461
DELETE FROM t1
 
72462
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
72463
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
72464
AND f_charbig = '####updated per insert trigger####';
 
72465
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
72466
BEGIN
 
72467
SET new.f_int1 = @my_max1 + @counter,
 
72468
new.f_int2 = @my_min2 - @counter,
 
72469
new.f_charbig = '####updated per insert trigger####';
 
72470
SET @counter = @counter + 1;
 
72471
END|
 
72472
SET @counter = 1;
 
72473
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
72474
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
72475
SELECT CAST(f_int1 AS CHAR),
 
72476
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
72477
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
72478
ORDER BY f_int1;
 
72479
DROP TRIGGER trg_3;
 
72480
        
 
72481
# check trigger-12 success:     1
 
72482
DELETE FROM t1
 
72483
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
72484
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
72485
AND f_charbig = '####updated per insert trigger####';
 
72486
ANALYZE  TABLE t1;
 
72487
Table   Op      Msg_type        Msg_text
 
72488
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
72489
CHECK    TABLE t1 EXTENDED;
 
72490
Table   Op      Msg_type        Msg_text
 
72491
test.t1 check   note    The storage engine for the table doesn't support check
 
72492
CHECKSUM TABLE t1 EXTENDED;
 
72493
Table   Checksum
 
72494
test.t1 <some_value>
 
72495
OPTIMIZE TABLE t1;
 
72496
Table   Op      Msg_type        Msg_text
 
72497
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
72498
# check layout success:    1
 
72499
REPAIR   TABLE t1 EXTENDED;
 
72500
Table   Op      Msg_type        Msg_text
 
72501
test.t1 repair  note    The storage engine for the table doesn't support repair
 
72502
# check layout success:    1
 
72503
TRUNCATE t1;
 
72504
        
 
72505
# check TRUNCATE success:       1
 
72506
# check layout success:    1
 
72507
# End usability test (inc/partition_check.inc)
 
72508
DROP TABLE t1;
 
72509
CREATE TABLE t1 (
 
72510
f_int1 INTEGER,
 
72511
f_int2 INTEGER,
 
72512
f_char1 CHAR(20),
 
72513
f_char2 CHAR(20),
 
72514
f_charbig VARCHAR(1000)
 
72515
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
72516
)
 
72517
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
72518
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
72519
(PARTITION part1 VALUES IN (0),
 
72520
 PARTITION part2 VALUES IN (1),
 
72521
 PARTITION part3 VALUES IN (NULL));
 
72522
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72523
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
72524
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
72525
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
72526
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72527
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
72528
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
72529
# Start usability test (inc/partition_check.inc)
 
72530
create_command
 
72531
SHOW CREATE TABLE t1;
 
72532
Table   Create Table
 
72533
t1      CREATE TABLE `t1` (
 
72534
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
72535
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
72536
  `f_char1` char(20) DEFAULT NULL,
 
72537
  `f_char2` char(20) DEFAULT NULL,
 
72538
  `f_charbig` varchar(1000) DEFAULT NULL
 
72539
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
72540
 
 
72541
# check prerequisites-1 success:    1
 
72542
# check COUNT(*) success:    1
 
72543
# check MIN/MAX(f_int1) success:    1
 
72544
# check MIN/MAX(f_int2) success:    1
 
72545
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72546
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
72547
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
72548
WHERE f_int1 IN (2,3);
 
72549
# check prerequisites-3 success:    1
 
72550
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
72551
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
72552
# check read via f_int1 success: 1
 
72553
# check read via f_int2 success: 1
 
72554
        
 
72555
# check multiple-1 success:     1
 
72556
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
72557
        
 
72558
# check multiple-2 success:     1
 
72559
INSERT INTO t1 SELECT * FROM t0_template
 
72560
WHERE MOD(f_int1,3) = 0;
 
72561
        
 
72562
# check multiple-3 success:     1
 
72563
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
72564
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
72565
AND @max_row_div2 + @max_row_div4;
 
72566
        
 
72567
# check multiple-4 success:     1
 
72568
DELETE FROM t1
 
72569
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
72570
AND @max_row_div2 + @max_row_div4 + @max_row;
 
72571
        
 
72572
# check multiple-5 success:     1
 
72573
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
72574
INSERT INTO t1
 
72575
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
72576
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
72577
f_charbig = '#SINGLE#';
 
72578
        
 
72579
# check single-1 success:       1
 
72580
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
72581
INSERT INTO t1
 
72582
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
72583
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
72584
f_charbig = '#SINGLE#';
 
72585
        
 
72586
# check single-2 success:       1
 
72587
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
72588
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
72589
UPDATE t1 SET f_int1 = @cur_value2
 
72590
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
72591
        
 
72592
# check single-3 success:       1
 
72593
SET @cur_value1= -1;
 
72594
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
72595
UPDATE t1 SET f_int1 = @cur_value1
 
72596
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
72597
        
 
72598
# check single-4 success:       1
 
72599
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
72600
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
72601
        
 
72602
# check single-5 success:       1
 
72603
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
72604
        
 
72605
# check single-6 success:       1
 
72606
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
72607
        
 
72608
# check single-7 success:       1
 
72609
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
72610
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
72611
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
72612
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
72613
f_charbig = '#NULL#';
 
72614
INSERT INTO t1
 
72615
SET f_int1 = NULL , f_int2 = -@max_row,
 
72616
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
72617
f_charbig = '#NULL#';
 
72618
ERROR 23000: Column 'f_int1' cannot be null
 
72619
# check null success:    1
 
72620
DELETE FROM t1
 
72621
WHERE f_int1 = 0 AND f_int2 = 0
 
72622
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
72623
AND f_charbig = '#NULL#';
 
72624
SET AUTOCOMMIT= 0;
 
72625
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72626
SELECT f_int1, f_int1, '', '', 'was inserted'
 
72627
FROM t0_template source_tab
 
72628
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
72629
        
 
72630
# check transactions-1 success:         1
 
72631
COMMIT WORK;
 
72632
        
 
72633
# check transactions-2 success:         1
 
72634
ROLLBACK WORK;
 
72635
        
 
72636
# check transactions-3 success:         1
 
72637
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
72638
COMMIT WORK;
 
72639
ROLLBACK WORK;
 
72640
        
 
72641
# check transactions-4 success:         1
 
72642
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72643
SELECT f_int1, f_int1, '', '', 'was inserted'
 
72644
FROM t0_template source_tab
 
72645
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
72646
        
 
72647
# check transactions-5 success:         1
 
72648
ROLLBACK WORK;
 
72649
        
 
72650
# check transactions-6 success:         1
 
72651
# INFO: Storage engine used for t1 seems to be transactional.
 
72652
COMMIT;
 
72653
        
 
72654
# check transactions-7 success:         1
 
72655
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
72656
COMMIT WORK;
 
72657
SET @@session.sql_mode = 'traditional';
 
72658
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
72659
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72660
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
72661
'', '', 'was inserted' FROM t0_template
 
72662
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
72663
ERROR 22012: Division by 0
 
72664
COMMIT;
 
72665
        
 
72666
# check transactions-8 success:         1
 
72667
# INFO: Storage engine used for t1 seems to be able to revert
 
72668
#       changes made by the failing statement.
 
72669
SET @@session.sql_mode = '';
 
72670
SET AUTOCOMMIT= 1;
 
72671
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
72672
COMMIT WORK;
 
72673
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
72674
        
 
72675
# check special-1 success:      1
 
72676
UPDATE t1 SET f_charbig = '';
 
72677
        
 
72678
# check special-2 success:      1
 
72679
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
72680
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72681
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
72682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72685
'just inserted' FROM t0_template
 
72686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72687
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
72688
BEGIN
 
72689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72690
f_charbig = 'updated by trigger'
 
72691
      WHERE f_int1 = new.f_int1;
 
72692
END|
 
72693
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72694
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
72695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72696
        
 
72697
# check trigger-1 success:      1
 
72698
DROP TRIGGER trg_1;
 
72699
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72700
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72701
f_charbig = 'just inserted'
 
72702
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72703
DELETE FROM t0_aux
 
72704
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72705
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72706
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72707
'just inserted' FROM t0_template
 
72708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72709
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
72710
BEGIN
 
72711
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72712
f_charbig = 'updated by trigger'
 
72713
      WHERE f_int1 = new.f_int1;
 
72714
END|
 
72715
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72716
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
72717
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72718
        
 
72719
# check trigger-2 success:      1
 
72720
DROP TRIGGER trg_1;
 
72721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72723
f_charbig = 'just inserted'
 
72724
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72725
DELETE FROM t0_aux
 
72726
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72728
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72729
'just inserted' FROM t0_template
 
72730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72731
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
72732
BEGIN
 
72733
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72734
f_charbig = 'updated by trigger'
 
72735
      WHERE f_int1 = new.f_int1;
 
72736
END|
 
72737
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72738
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72739
        
 
72740
# check trigger-3 success:      1
 
72741
DROP TRIGGER trg_1;
 
72742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72743
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72744
f_charbig = 'just inserted'
 
72745
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72746
DELETE FROM t0_aux
 
72747
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72748
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72749
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72750
'just inserted' FROM t0_template
 
72751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72752
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
72753
BEGIN
 
72754
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72755
f_charbig = 'updated by trigger'
 
72756
      WHERE f_int1 = - old.f_int1;
 
72757
END|
 
72758
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72759
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72760
        
 
72761
# check trigger-4 success:      1
 
72762
DROP TRIGGER trg_1;
 
72763
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72764
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72765
f_charbig = 'just inserted'
 
72766
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72767
DELETE FROM t0_aux
 
72768
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72769
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72770
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72771
'just inserted' FROM t0_template
 
72772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72773
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
72774
BEGIN
 
72775
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72776
f_charbig = 'updated by trigger'
 
72777
      WHERE f_int1 = new.f_int1;
 
72778
END|
 
72779
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72780
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72781
        
 
72782
# check trigger-5 success:      1
 
72783
DROP TRIGGER trg_1;
 
72784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72786
f_charbig = 'just inserted'
 
72787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72788
DELETE FROM t0_aux
 
72789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72790
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72791
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72792
'just inserted' FROM t0_template
 
72793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72794
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
72795
BEGIN
 
72796
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72797
f_charbig = 'updated by trigger'
 
72798
      WHERE f_int1 = - old.f_int1;
 
72799
END|
 
72800
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
72801
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72802
        
 
72803
# check trigger-6 success:      1
 
72804
DROP TRIGGER trg_1;
 
72805
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72806
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72807
f_charbig = 'just inserted'
 
72808
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72809
DELETE FROM t0_aux
 
72810
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72811
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72812
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72813
'just inserted' FROM t0_template
 
72814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72815
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
72816
BEGIN
 
72817
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72818
f_charbig = 'updated by trigger'
 
72819
      WHERE f_int1 = - old.f_int1;
 
72820
END|
 
72821
DELETE FROM t0_aux
 
72822
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72823
        
 
72824
# check trigger-7 success:      1
 
72825
DROP TRIGGER trg_1;
 
72826
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72827
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72828
f_charbig = 'just inserted'
 
72829
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72830
DELETE FROM t0_aux
 
72831
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72832
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72833
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
72834
'just inserted' FROM t0_template
 
72835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72836
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
72837
BEGIN
 
72838
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
72839
f_charbig = 'updated by trigger'
 
72840
      WHERE f_int1 = - old.f_int1;
 
72841
END|
 
72842
DELETE FROM t0_aux
 
72843
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
72844
        
 
72845
# check trigger-8 success:      1
 
72846
DROP TRIGGER trg_1;
 
72847
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72848
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72849
f_charbig = 'just inserted'
 
72850
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
72851
DELETE FROM t0_aux
 
72852
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72853
DELETE FROM t1
 
72854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
72855
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
72856
BEGIN
 
72857
SET new.f_int1 = old.f_int1 + @max_row,
 
72858
new.f_int2 = old.f_int2 - @max_row,
 
72859
new.f_charbig = '####updated per update trigger####';
 
72860
END|
 
72861
UPDATE t1
 
72862
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
72863
f_charbig = '####updated per update statement itself####';
 
72864
        
 
72865
# check trigger-9 success:      1
 
72866
DROP TRIGGER trg_2;
 
72867
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72868
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72869
f_charbig = CONCAT('===',f_char1,'===');
 
72870
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
72871
BEGIN
 
72872
SET new.f_int1 = new.f_int1 + @max_row,
 
72873
new.f_int2 = new.f_int2 - @max_row,
 
72874
new.f_charbig = '####updated per update trigger####';
 
72875
END|
 
72876
UPDATE t1
 
72877
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
72878
f_charbig = '####updated per update statement itself####';
 
72879
        
 
72880
# check trigger-10 success:     1
 
72881
DROP TRIGGER trg_2;
 
72882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
72883
f_int2 = CAST(f_char1 AS SIGNED INT),
 
72884
f_charbig = CONCAT('===',f_char1,'===');
 
72885
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
72886
BEGIN
 
72887
SET new.f_int1 = @my_max1 + @counter,
 
72888
new.f_int2 = @my_min2 - @counter,
 
72889
new.f_charbig = '####updated per insert trigger####';
 
72890
SET @counter = @counter + 1;
 
72891
END|
 
72892
SET @counter = 1;
 
72893
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
72894
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72895
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
72896
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
72897
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
72898
ORDER BY f_int1;
 
72899
DROP TRIGGER trg_3;
 
72900
        
 
72901
# check trigger-11 success:     1
 
72902
DELETE FROM t1
 
72903
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
72904
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
72905
AND f_charbig = '####updated per insert trigger####';
 
72906
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
72907
BEGIN
 
72908
SET new.f_int1 = @my_max1 + @counter,
 
72909
new.f_int2 = @my_min2 - @counter,
 
72910
new.f_charbig = '####updated per insert trigger####';
 
72911
SET @counter = @counter + 1;
 
72912
END|
 
72913
SET @counter = 1;
 
72914
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
72915
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
72916
SELECT CAST(f_int1 AS CHAR),
 
72917
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
72918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
72919
ORDER BY f_int1;
 
72920
DROP TRIGGER trg_3;
 
72921
        
 
72922
# check trigger-12 success:     1
 
72923
DELETE FROM t1
 
72924
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
72925
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
72926
AND f_charbig = '####updated per insert trigger####';
 
72927
ANALYZE  TABLE t1;
 
72928
Table   Op      Msg_type        Msg_text
 
72929
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
72930
CHECK    TABLE t1 EXTENDED;
 
72931
Table   Op      Msg_type        Msg_text
 
72932
test.t1 check   note    The storage engine for the table doesn't support check
 
72933
CHECKSUM TABLE t1 EXTENDED;
 
72934
Table   Checksum
 
72935
test.t1 <some_value>
 
72936
OPTIMIZE TABLE t1;
 
72937
Table   Op      Msg_type        Msg_text
 
72938
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
72939
# check layout success:    1
 
72940
REPAIR   TABLE t1 EXTENDED;
 
72941
Table   Op      Msg_type        Msg_text
 
72942
test.t1 repair  note    The storage engine for the table doesn't support repair
 
72943
# check layout success:    1
 
72944
TRUNCATE t1;
 
72945
        
 
72946
# check TRUNCATE success:       1
 
72947
# check layout success:    1
 
72948
# End usability test (inc/partition_check.inc)
 
72949
DROP TABLE t1;
 
72950
DROP TABLE IF EXISTS t1;
 
72951
CREATE TABLE t1 (
 
72952
f_int1 INTEGER,
 
72953
f_int2 INTEGER,
 
72954
f_char1 CHAR(20),
 
72955
f_char2 CHAR(20),
 
72956
f_charbig VARCHAR(1000)
 
72957
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
72958
)
 
72959
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
72960
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72961
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
72962
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
72963
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
72964
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
72965
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
72966
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
72967
# Start usability test (inc/partition_check.inc)
 
72968
create_command
 
72969
SHOW CREATE TABLE t1;
 
72970
Table   Create Table
 
72971
t1      CREATE TABLE `t1` (
 
72972
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
72973
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
72974
  `f_char1` char(20) DEFAULT NULL,
 
72975
  `f_char2` char(20) DEFAULT NULL,
 
72976
  `f_charbig` varchar(1000) DEFAULT NULL
 
72977
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
72978
 
 
72979
# check prerequisites-1 success:    1
 
72980
# check COUNT(*) success:    1
 
72981
# check MIN/MAX(f_int1) success:    1
 
72982
# check MIN/MAX(f_int2) success:    1
 
72983
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
72984
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
72985
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
72986
WHERE f_int1 IN (2,3);
 
72987
# check prerequisites-3 success:    1
 
72988
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
72989
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
72990
# check read via f_int1 success: 1
 
72991
# check read via f_int2 success: 1
 
72992
        
 
72993
# check multiple-1 success:     1
 
72994
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
72995
        
 
72996
# check multiple-2 success:     1
 
72997
INSERT INTO t1 SELECT * FROM t0_template
 
72998
WHERE MOD(f_int1,3) = 0;
 
72999
        
 
73000
# check multiple-3 success:     1
 
73001
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
73002
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
73003
AND @max_row_div2 + @max_row_div4;
 
73004
        
 
73005
# check multiple-4 success:     1
 
73006
DELETE FROM t1
 
73007
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
73008
AND @max_row_div2 + @max_row_div4 + @max_row;
 
73009
        
 
73010
# check multiple-5 success:     1
 
73011
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
73012
INSERT INTO t1
 
73013
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
73014
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
73015
f_charbig = '#SINGLE#';
 
73016
        
 
73017
# check single-1 success:       1
 
73018
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
73019
INSERT INTO t1
 
73020
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
73021
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
73022
f_charbig = '#SINGLE#';
 
73023
        
 
73024
# check single-2 success:       1
 
73025
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
73026
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
73027
UPDATE t1 SET f_int1 = @cur_value2
 
73028
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
73029
        
 
73030
# check single-3 success:       1
 
73031
SET @cur_value1= -1;
 
73032
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
73033
UPDATE t1 SET f_int1 = @cur_value1
 
73034
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
73035
        
 
73036
# check single-4 success:       1
 
73037
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
73038
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
73039
        
 
73040
# check single-5 success:       1
 
73041
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
73042
        
 
73043
# check single-6 success:       1
 
73044
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
73045
        
 
73046
# check single-7 success:       1
 
73047
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
73048
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
73049
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
73050
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
73051
f_charbig = '#NULL#';
 
73052
INSERT INTO t1
 
73053
SET f_int1 = NULL , f_int2 = -@max_row,
 
73054
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
73055
f_charbig = '#NULL#';
 
73056
ERROR 23000: Column 'f_int1' cannot be null
 
73057
# check null success:    1
 
73058
DELETE FROM t1
 
73059
WHERE f_int1 = 0 AND f_int2 = 0
 
73060
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
73061
AND f_charbig = '#NULL#';
 
73062
SET AUTOCOMMIT= 0;
 
73063
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73064
SELECT f_int1, f_int1, '', '', 'was inserted'
 
73065
FROM t0_template source_tab
 
73066
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73067
        
 
73068
# check transactions-1 success:         1
 
73069
COMMIT WORK;
 
73070
        
 
73071
# check transactions-2 success:         1
 
73072
ROLLBACK WORK;
 
73073
        
 
73074
# check transactions-3 success:         1
 
73075
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73076
COMMIT WORK;
 
73077
ROLLBACK WORK;
 
73078
        
 
73079
# check transactions-4 success:         1
 
73080
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73081
SELECT f_int1, f_int1, '', '', 'was inserted'
 
73082
FROM t0_template source_tab
 
73083
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73084
        
 
73085
# check transactions-5 success:         1
 
73086
ROLLBACK WORK;
 
73087
        
 
73088
# check transactions-6 success:         1
 
73089
# INFO: Storage engine used for t1 seems to be transactional.
 
73090
COMMIT;
 
73091
        
 
73092
# check transactions-7 success:         1
 
73093
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73094
COMMIT WORK;
 
73095
SET @@session.sql_mode = 'traditional';
 
73096
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
73097
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73098
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
73099
'', '', 'was inserted' FROM t0_template
 
73100
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73101
ERROR 22012: Division by 0
 
73102
COMMIT;
 
73103
        
 
73104
# check transactions-8 success:         1
 
73105
# INFO: Storage engine used for t1 seems to be able to revert
 
73106
#       changes made by the failing statement.
 
73107
SET @@session.sql_mode = '';
 
73108
SET AUTOCOMMIT= 1;
 
73109
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73110
COMMIT WORK;
 
73111
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
73112
        
 
73113
# check special-1 success:      1
 
73114
UPDATE t1 SET f_charbig = '';
 
73115
        
 
73116
# check special-2 success:      1
 
73117
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
73118
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73119
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
73120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73121
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73122
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73123
'just inserted' FROM t0_template
 
73124
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73125
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
73126
BEGIN
 
73127
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73128
f_charbig = 'updated by trigger'
 
73129
      WHERE f_int1 = new.f_int1;
 
73130
END|
 
73131
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73132
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
73133
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73134
        
 
73135
# check trigger-1 success:      1
 
73136
DROP TRIGGER trg_1;
 
73137
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73138
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73139
f_charbig = 'just inserted'
 
73140
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73141
DELETE FROM t0_aux
 
73142
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73144
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73145
'just inserted' FROM t0_template
 
73146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73147
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
73148
BEGIN
 
73149
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73150
f_charbig = 'updated by trigger'
 
73151
      WHERE f_int1 = new.f_int1;
 
73152
END|
 
73153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73154
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
73155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73156
        
 
73157
# check trigger-2 success:      1
 
73158
DROP TRIGGER trg_1;
 
73159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73161
f_charbig = 'just inserted'
 
73162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73163
DELETE FROM t0_aux
 
73164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73167
'just inserted' FROM t0_template
 
73168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73169
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
73170
BEGIN
 
73171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73172
f_charbig = 'updated by trigger'
 
73173
      WHERE f_int1 = new.f_int1;
 
73174
END|
 
73175
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73177
        
 
73178
# check trigger-3 success:      1
 
73179
DROP TRIGGER trg_1;
 
73180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73182
f_charbig = 'just inserted'
 
73183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73184
DELETE FROM t0_aux
 
73185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73186
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73187
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73188
'just inserted' FROM t0_template
 
73189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73190
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
73191
BEGIN
 
73192
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73193
f_charbig = 'updated by trigger'
 
73194
      WHERE f_int1 = - old.f_int1;
 
73195
END|
 
73196
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73197
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73198
        
 
73199
# check trigger-4 success:      1
 
73200
DROP TRIGGER trg_1;
 
73201
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73202
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73203
f_charbig = 'just inserted'
 
73204
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73205
DELETE FROM t0_aux
 
73206
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73207
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73208
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73209
'just inserted' FROM t0_template
 
73210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73211
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
73212
BEGIN
 
73213
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73214
f_charbig = 'updated by trigger'
 
73215
      WHERE f_int1 = new.f_int1;
 
73216
END|
 
73217
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73218
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73219
        
 
73220
# check trigger-5 success:      1
 
73221
DROP TRIGGER trg_1;
 
73222
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73223
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73224
f_charbig = 'just inserted'
 
73225
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73226
DELETE FROM t0_aux
 
73227
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73228
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73229
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73230
'just inserted' FROM t0_template
 
73231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73232
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
73233
BEGIN
 
73234
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73235
f_charbig = 'updated by trigger'
 
73236
      WHERE f_int1 = - old.f_int1;
 
73237
END|
 
73238
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73239
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73240
        
 
73241
# check trigger-6 success:      1
 
73242
DROP TRIGGER trg_1;
 
73243
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73244
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73245
f_charbig = 'just inserted'
 
73246
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73247
DELETE FROM t0_aux
 
73248
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73249
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73250
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73251
'just inserted' FROM t0_template
 
73252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73253
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
73254
BEGIN
 
73255
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73256
f_charbig = 'updated by trigger'
 
73257
      WHERE f_int1 = - old.f_int1;
 
73258
END|
 
73259
DELETE FROM t0_aux
 
73260
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73261
        
 
73262
# check trigger-7 success:      1
 
73263
DROP TRIGGER trg_1;
 
73264
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73265
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73266
f_charbig = 'just inserted'
 
73267
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73268
DELETE FROM t0_aux
 
73269
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73270
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73271
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73272
'just inserted' FROM t0_template
 
73273
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73274
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
73275
BEGIN
 
73276
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73277
f_charbig = 'updated by trigger'
 
73278
      WHERE f_int1 = - old.f_int1;
 
73279
END|
 
73280
DELETE FROM t0_aux
 
73281
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73282
        
 
73283
# check trigger-8 success:      1
 
73284
DROP TRIGGER trg_1;
 
73285
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73286
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73287
f_charbig = 'just inserted'
 
73288
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73289
DELETE FROM t0_aux
 
73290
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73291
DELETE FROM t1
 
73292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73293
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
73294
BEGIN
 
73295
SET new.f_int1 = old.f_int1 + @max_row,
 
73296
new.f_int2 = old.f_int2 - @max_row,
 
73297
new.f_charbig = '####updated per update trigger####';
 
73298
END|
 
73299
UPDATE t1
 
73300
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
73301
f_charbig = '####updated per update statement itself####';
 
73302
        
 
73303
# check trigger-9 success:      1
 
73304
DROP TRIGGER trg_2;
 
73305
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73306
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73307
f_charbig = CONCAT('===',f_char1,'===');
 
73308
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
73309
BEGIN
 
73310
SET new.f_int1 = new.f_int1 + @max_row,
 
73311
new.f_int2 = new.f_int2 - @max_row,
 
73312
new.f_charbig = '####updated per update trigger####';
 
73313
END|
 
73314
UPDATE t1
 
73315
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
73316
f_charbig = '####updated per update statement itself####';
 
73317
        
 
73318
# check trigger-10 success:     1
 
73319
DROP TRIGGER trg_2;
 
73320
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73321
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73322
f_charbig = CONCAT('===',f_char1,'===');
 
73323
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
73324
BEGIN
 
73325
SET new.f_int1 = @my_max1 + @counter,
 
73326
new.f_int2 = @my_min2 - @counter,
 
73327
new.f_charbig = '####updated per insert trigger####';
 
73328
SET @counter = @counter + 1;
 
73329
END|
 
73330
SET @counter = 1;
 
73331
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
73332
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73333
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
73334
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
73335
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
73336
ORDER BY f_int1;
 
73337
DROP TRIGGER trg_3;
 
73338
        
 
73339
# check trigger-11 success:     1
 
73340
DELETE FROM t1
 
73341
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
73342
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
73343
AND f_charbig = '####updated per insert trigger####';
 
73344
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
73345
BEGIN
 
73346
SET new.f_int1 = @my_max1 + @counter,
 
73347
new.f_int2 = @my_min2 - @counter,
 
73348
new.f_charbig = '####updated per insert trigger####';
 
73349
SET @counter = @counter + 1;
 
73350
END|
 
73351
SET @counter = 1;
 
73352
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
73353
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
73354
SELECT CAST(f_int1 AS CHAR),
 
73355
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
73356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
73357
ORDER BY f_int1;
 
73358
DROP TRIGGER trg_3;
 
73359
        
 
73360
# check trigger-12 success:     1
 
73361
DELETE FROM t1
 
73362
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
73363
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
73364
AND f_charbig = '####updated per insert trigger####';
 
73365
ANALYZE  TABLE t1;
 
73366
Table   Op      Msg_type        Msg_text
 
73367
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
73368
CHECK    TABLE t1 EXTENDED;
 
73369
Table   Op      Msg_type        Msg_text
 
73370
test.t1 check   note    The storage engine for the table doesn't support check
 
73371
CHECKSUM TABLE t1 EXTENDED;
 
73372
Table   Checksum
 
73373
test.t1 <some_value>
 
73374
OPTIMIZE TABLE t1;
 
73375
Table   Op      Msg_type        Msg_text
 
73376
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
73377
# check layout success:    1
 
73378
REPAIR   TABLE t1 EXTENDED;
 
73379
Table   Op      Msg_type        Msg_text
 
73380
test.t1 repair  note    The storage engine for the table doesn't support repair
 
73381
# check layout success:    1
 
73382
TRUNCATE t1;
 
73383
        
 
73384
# check TRUNCATE success:       1
 
73385
# check layout success:    1
 
73386
# End usability test (inc/partition_check.inc)
 
73387
DROP TABLE t1;
 
73388
CREATE TABLE t1 (
 
73389
f_int1 INTEGER,
 
73390
f_int2 INTEGER,
 
73391
f_char1 CHAR(20),
 
73392
f_char2 CHAR(20),
 
73393
f_charbig VARCHAR(1000)
 
73394
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
73395
)
 
73396
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
73397
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73398
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
73399
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
73400
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
73401
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73402
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
73403
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
73404
# Start usability test (inc/partition_check.inc)
 
73405
create_command
 
73406
SHOW CREATE TABLE t1;
 
73407
Table   Create Table
 
73408
t1      CREATE TABLE `t1` (
 
73409
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
73410
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
73411
  `f_char1` char(20) DEFAULT NULL,
 
73412
  `f_char2` char(20) DEFAULT NULL,
 
73413
  `f_charbig` varchar(1000) DEFAULT NULL
 
73414
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
73415
 
 
73416
# check prerequisites-1 success:    1
 
73417
# check COUNT(*) success:    1
 
73418
# check MIN/MAX(f_int1) success:    1
 
73419
# check MIN/MAX(f_int2) success:    1
 
73420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73421
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
73422
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
73423
WHERE f_int1 IN (2,3);
 
73424
# check prerequisites-3 success:    1
 
73425
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
73426
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
73427
# check read via f_int1 success: 1
 
73428
# check read via f_int2 success: 1
 
73429
        
 
73430
# check multiple-1 success:     1
 
73431
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
73432
        
 
73433
# check multiple-2 success:     1
 
73434
INSERT INTO t1 SELECT * FROM t0_template
 
73435
WHERE MOD(f_int1,3) = 0;
 
73436
        
 
73437
# check multiple-3 success:     1
 
73438
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
73439
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
73440
AND @max_row_div2 + @max_row_div4;
 
73441
        
 
73442
# check multiple-4 success:     1
 
73443
DELETE FROM t1
 
73444
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
73445
AND @max_row_div2 + @max_row_div4 + @max_row;
 
73446
        
 
73447
# check multiple-5 success:     1
 
73448
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
73449
INSERT INTO t1
 
73450
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
73451
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
73452
f_charbig = '#SINGLE#';
 
73453
        
 
73454
# check single-1 success:       1
 
73455
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
73456
INSERT INTO t1
 
73457
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
73458
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
73459
f_charbig = '#SINGLE#';
 
73460
        
 
73461
# check single-2 success:       1
 
73462
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
73463
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
73464
UPDATE t1 SET f_int1 = @cur_value2
 
73465
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
73466
        
 
73467
# check single-3 success:       1
 
73468
SET @cur_value1= -1;
 
73469
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
73470
UPDATE t1 SET f_int1 = @cur_value1
 
73471
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
73472
        
 
73473
# check single-4 success:       1
 
73474
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
73475
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
73476
        
 
73477
# check single-5 success:       1
 
73478
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
73479
        
 
73480
# check single-6 success:       1
 
73481
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
73482
        
 
73483
# check single-7 success:       1
 
73484
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
73485
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
73486
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
73487
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
73488
f_charbig = '#NULL#';
 
73489
INSERT INTO t1
 
73490
SET f_int1 = NULL , f_int2 = -@max_row,
 
73491
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
73492
f_charbig = '#NULL#';
 
73493
ERROR 23000: Column 'f_int1' cannot be null
 
73494
# check null success:    1
 
73495
DELETE FROM t1
 
73496
WHERE f_int1 = 0 AND f_int2 = 0
 
73497
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
73498
AND f_charbig = '#NULL#';
 
73499
SET AUTOCOMMIT= 0;
 
73500
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73501
SELECT f_int1, f_int1, '', '', 'was inserted'
 
73502
FROM t0_template source_tab
 
73503
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73504
        
 
73505
# check transactions-1 success:         1
 
73506
COMMIT WORK;
 
73507
        
 
73508
# check transactions-2 success:         1
 
73509
ROLLBACK WORK;
 
73510
        
 
73511
# check transactions-3 success:         1
 
73512
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73513
COMMIT WORK;
 
73514
ROLLBACK WORK;
 
73515
        
 
73516
# check transactions-4 success:         1
 
73517
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73518
SELECT f_int1, f_int1, '', '', 'was inserted'
 
73519
FROM t0_template source_tab
 
73520
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73521
        
 
73522
# check transactions-5 success:         1
 
73523
ROLLBACK WORK;
 
73524
        
 
73525
# check transactions-6 success:         1
 
73526
# INFO: Storage engine used for t1 seems to be transactional.
 
73527
COMMIT;
 
73528
        
 
73529
# check transactions-7 success:         1
 
73530
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73531
COMMIT WORK;
 
73532
SET @@session.sql_mode = 'traditional';
 
73533
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
73534
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73535
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
73536
'', '', 'was inserted' FROM t0_template
 
73537
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73538
ERROR 22012: Division by 0
 
73539
COMMIT;
 
73540
        
 
73541
# check transactions-8 success:         1
 
73542
# INFO: Storage engine used for t1 seems to be able to revert
 
73543
#       changes made by the failing statement.
 
73544
SET @@session.sql_mode = '';
 
73545
SET AUTOCOMMIT= 1;
 
73546
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73547
COMMIT WORK;
 
73548
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
73549
        
 
73550
# check special-1 success:      1
 
73551
UPDATE t1 SET f_charbig = '';
 
73552
        
 
73553
# check special-2 success:      1
 
73554
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
73555
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73556
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
73557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73558
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73559
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73560
'just inserted' FROM t0_template
 
73561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73562
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
73563
BEGIN
 
73564
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73565
f_charbig = 'updated by trigger'
 
73566
      WHERE f_int1 = new.f_int1;
 
73567
END|
 
73568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73569
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
73570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73571
        
 
73572
# check trigger-1 success:      1
 
73573
DROP TRIGGER trg_1;
 
73574
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73575
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73576
f_charbig = 'just inserted'
 
73577
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73578
DELETE FROM t0_aux
 
73579
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73580
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73581
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73582
'just inserted' FROM t0_template
 
73583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73584
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
73585
BEGIN
 
73586
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73587
f_charbig = 'updated by trigger'
 
73588
      WHERE f_int1 = new.f_int1;
 
73589
END|
 
73590
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73591
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
73592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73593
        
 
73594
# check trigger-2 success:      1
 
73595
DROP TRIGGER trg_1;
 
73596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73598
f_charbig = 'just inserted'
 
73599
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73600
DELETE FROM t0_aux
 
73601
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73604
'just inserted' FROM t0_template
 
73605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73606
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
73607
BEGIN
 
73608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73609
f_charbig = 'updated by trigger'
 
73610
      WHERE f_int1 = new.f_int1;
 
73611
END|
 
73612
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73613
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73614
        
 
73615
# check trigger-3 success:      1
 
73616
DROP TRIGGER trg_1;
 
73617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73619
f_charbig = 'just inserted'
 
73620
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73621
DELETE FROM t0_aux
 
73622
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73623
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73624
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73625
'just inserted' FROM t0_template
 
73626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73627
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
73628
BEGIN
 
73629
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73630
f_charbig = 'updated by trigger'
 
73631
      WHERE f_int1 = - old.f_int1;
 
73632
END|
 
73633
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73634
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73635
        
 
73636
# check trigger-4 success:      1
 
73637
DROP TRIGGER trg_1;
 
73638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73640
f_charbig = 'just inserted'
 
73641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73642
DELETE FROM t0_aux
 
73643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73646
'just inserted' FROM t0_template
 
73647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73648
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
73649
BEGIN
 
73650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73651
f_charbig = 'updated by trigger'
 
73652
      WHERE f_int1 = new.f_int1;
 
73653
END|
 
73654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73656
        
 
73657
# check trigger-5 success:      1
 
73658
DROP TRIGGER trg_1;
 
73659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73661
f_charbig = 'just inserted'
 
73662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73663
DELETE FROM t0_aux
 
73664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73667
'just inserted' FROM t0_template
 
73668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73669
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
73670
BEGIN
 
73671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73672
f_charbig = 'updated by trigger'
 
73673
      WHERE f_int1 = - old.f_int1;
 
73674
END|
 
73675
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
73676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73677
        
 
73678
# check trigger-6 success:      1
 
73679
DROP TRIGGER trg_1;
 
73680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73682
f_charbig = 'just inserted'
 
73683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73684
DELETE FROM t0_aux
 
73685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73688
'just inserted' FROM t0_template
 
73689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73690
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
73691
BEGIN
 
73692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73693
f_charbig = 'updated by trigger'
 
73694
      WHERE f_int1 = - old.f_int1;
 
73695
END|
 
73696
DELETE FROM t0_aux
 
73697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73698
        
 
73699
# check trigger-7 success:      1
 
73700
DROP TRIGGER trg_1;
 
73701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73703
f_charbig = 'just inserted'
 
73704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73705
DELETE FROM t0_aux
 
73706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73707
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73708
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
73709
'just inserted' FROM t0_template
 
73710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73711
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
73712
BEGIN
 
73713
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
73714
f_charbig = 'updated by trigger'
 
73715
      WHERE f_int1 = - old.f_int1;
 
73716
END|
 
73717
DELETE FROM t0_aux
 
73718
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
73719
        
 
73720
# check trigger-8 success:      1
 
73721
DROP TRIGGER trg_1;
 
73722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73724
f_charbig = 'just inserted'
 
73725
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
73726
DELETE FROM t0_aux
 
73727
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73728
DELETE FROM t1
 
73729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
73730
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
73731
BEGIN
 
73732
SET new.f_int1 = old.f_int1 + @max_row,
 
73733
new.f_int2 = old.f_int2 - @max_row,
 
73734
new.f_charbig = '####updated per update trigger####';
 
73735
END|
 
73736
UPDATE t1
 
73737
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
73738
f_charbig = '####updated per update statement itself####';
 
73739
        
 
73740
# check trigger-9 success:      1
 
73741
DROP TRIGGER trg_2;
 
73742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73743
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73744
f_charbig = CONCAT('===',f_char1,'===');
 
73745
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
73746
BEGIN
 
73747
SET new.f_int1 = new.f_int1 + @max_row,
 
73748
new.f_int2 = new.f_int2 - @max_row,
 
73749
new.f_charbig = '####updated per update trigger####';
 
73750
END|
 
73751
UPDATE t1
 
73752
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
73753
f_charbig = '####updated per update statement itself####';
 
73754
        
 
73755
# check trigger-10 success:     1
 
73756
DROP TRIGGER trg_2;
 
73757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
73758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
73759
f_charbig = CONCAT('===',f_char1,'===');
 
73760
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
73761
BEGIN
 
73762
SET new.f_int1 = @my_max1 + @counter,
 
73763
new.f_int2 = @my_min2 - @counter,
 
73764
new.f_charbig = '####updated per insert trigger####';
 
73765
SET @counter = @counter + 1;
 
73766
END|
 
73767
SET @counter = 1;
 
73768
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
73769
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73770
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
73771
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
73772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
73773
ORDER BY f_int1;
 
73774
DROP TRIGGER trg_3;
 
73775
        
 
73776
# check trigger-11 success:     1
 
73777
DELETE FROM t1
 
73778
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
73779
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
73780
AND f_charbig = '####updated per insert trigger####';
 
73781
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
73782
BEGIN
 
73783
SET new.f_int1 = @my_max1 + @counter,
 
73784
new.f_int2 = @my_min2 - @counter,
 
73785
new.f_charbig = '####updated per insert trigger####';
 
73786
SET @counter = @counter + 1;
 
73787
END|
 
73788
SET @counter = 1;
 
73789
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
73790
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
73791
SELECT CAST(f_int1 AS CHAR),
 
73792
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
73793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
73794
ORDER BY f_int1;
 
73795
DROP TRIGGER trg_3;
 
73796
        
 
73797
# check trigger-12 success:     1
 
73798
DELETE FROM t1
 
73799
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
73800
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
73801
AND f_charbig = '####updated per insert trigger####';
 
73802
ANALYZE  TABLE t1;
 
73803
Table   Op      Msg_type        Msg_text
 
73804
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
73805
CHECK    TABLE t1 EXTENDED;
 
73806
Table   Op      Msg_type        Msg_text
 
73807
test.t1 check   note    The storage engine for the table doesn't support check
 
73808
CHECKSUM TABLE t1 EXTENDED;
 
73809
Table   Checksum
 
73810
test.t1 <some_value>
 
73811
OPTIMIZE TABLE t1;
 
73812
Table   Op      Msg_type        Msg_text
 
73813
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
73814
# check layout success:    1
 
73815
REPAIR   TABLE t1 EXTENDED;
 
73816
Table   Op      Msg_type        Msg_text
 
73817
test.t1 repair  note    The storage engine for the table doesn't support repair
 
73818
# check layout success:    1
 
73819
TRUNCATE t1;
 
73820
        
 
73821
# check TRUNCATE success:       1
 
73822
# check layout success:    1
 
73823
# End usability test (inc/partition_check.inc)
 
73824
DROP TABLE t1;
 
73825
CREATE TABLE t1 (
 
73826
f_int1 INTEGER,
 
73827
f_int2 INTEGER,
 
73828
f_char1 CHAR(20),
 
73829
f_char2 CHAR(20),
 
73830
f_charbig VARCHAR(1000)
 
73831
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
73832
)
 
73833
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
73834
(PARTITION part_3 VALUES IN (-3),
 
73835
PARTITION part_2 VALUES IN (-2),
 
73836
PARTITION part_1 VALUES IN (-1),
 
73837
PARTITION part_N VALUES IN (NULL),
 
73838
PARTITION part0 VALUES IN (0),
 
73839
PARTITION part1 VALUES IN (1),
 
73840
PARTITION part2 VALUES IN (2),
 
73841
PARTITION part3 VALUES IN (3));
 
73842
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73843
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
73844
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
73845
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
73846
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
73847
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
73848
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
73849
# Start usability test (inc/partition_check.inc)
 
73850
create_command
 
73851
SHOW CREATE TABLE t1;
 
73852
Table   Create Table
 
73853
t1      CREATE TABLE `t1` (
 
73854
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
73855
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
73856
  `f_char1` char(20) DEFAULT NULL,
 
73857
  `f_char2` char(20) DEFAULT NULL,
 
73858
  `f_charbig` varchar(1000) DEFAULT NULL
 
73859
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
73860
 
 
73861
# check prerequisites-1 success:    1
 
73862
# check COUNT(*) success:    1
 
73863
# check MIN/MAX(f_int1) success:    1
 
73864
# check MIN/MAX(f_int2) success:    1
 
73865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73866
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
73867
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
73868
WHERE f_int1 IN (2,3);
 
73869
# check prerequisites-3 success:    1
 
73870
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
73871
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
73872
# check read via f_int1 success: 1
 
73873
# check read via f_int2 success: 1
 
73874
        
 
73875
# check multiple-1 success:     1
 
73876
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
73877
        
 
73878
# check multiple-2 success:     1
 
73879
INSERT INTO t1 SELECT * FROM t0_template
 
73880
WHERE MOD(f_int1,3) = 0;
 
73881
        
 
73882
# check multiple-3 success:     1
 
73883
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
73884
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
73885
AND @max_row_div2 + @max_row_div4;
 
73886
        
 
73887
# check multiple-4 success:     1
 
73888
DELETE FROM t1
 
73889
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
73890
AND @max_row_div2 + @max_row_div4 + @max_row;
 
73891
        
 
73892
# check multiple-5 success:     1
 
73893
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
73894
INSERT INTO t1
 
73895
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
73896
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
73897
f_charbig = '#SINGLE#';
 
73898
        
 
73899
# check single-1 success:       1
 
73900
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
73901
INSERT INTO t1
 
73902
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
73903
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
73904
f_charbig = '#SINGLE#';
 
73905
        
 
73906
# check single-2 success:       1
 
73907
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
73908
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
73909
UPDATE t1 SET f_int1 = @cur_value2
 
73910
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
73911
        
 
73912
# check single-3 success:       1
 
73913
SET @cur_value1= -1;
 
73914
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
73915
UPDATE t1 SET f_int1 = @cur_value1
 
73916
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
73917
        
 
73918
# check single-4 success:       1
 
73919
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
73920
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
73921
        
 
73922
# check single-5 success:       1
 
73923
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
73924
        
 
73925
# check single-6 success:       1
 
73926
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
73927
        
 
73928
# check single-7 success:       1
 
73929
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
73930
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
73931
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
73932
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
73933
f_charbig = '#NULL#';
 
73934
INSERT INTO t1
 
73935
SET f_int1 = NULL , f_int2 = -@max_row,
 
73936
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
73937
f_charbig = '#NULL#';
 
73938
ERROR 23000: Column 'f_int1' cannot be null
 
73939
# check null success:    1
 
73940
DELETE FROM t1
 
73941
WHERE f_int1 = 0 AND f_int2 = 0
 
73942
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
73943
AND f_charbig = '#NULL#';
 
73944
SET AUTOCOMMIT= 0;
 
73945
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73946
SELECT f_int1, f_int1, '', '', 'was inserted'
 
73947
FROM t0_template source_tab
 
73948
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73949
        
 
73950
# check transactions-1 success:         1
 
73951
COMMIT WORK;
 
73952
        
 
73953
# check transactions-2 success:         1
 
73954
ROLLBACK WORK;
 
73955
        
 
73956
# check transactions-3 success:         1
 
73957
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73958
COMMIT WORK;
 
73959
ROLLBACK WORK;
 
73960
        
 
73961
# check transactions-4 success:         1
 
73962
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73963
SELECT f_int1, f_int1, '', '', 'was inserted'
 
73964
FROM t0_template source_tab
 
73965
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73966
        
 
73967
# check transactions-5 success:         1
 
73968
ROLLBACK WORK;
 
73969
        
 
73970
# check transactions-6 success:         1
 
73971
# INFO: Storage engine used for t1 seems to be transactional.
 
73972
COMMIT;
 
73973
        
 
73974
# check transactions-7 success:         1
 
73975
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73976
COMMIT WORK;
 
73977
SET @@session.sql_mode = 'traditional';
 
73978
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
73979
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
73980
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
73981
'', '', 'was inserted' FROM t0_template
 
73982
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
73983
ERROR 22012: Division by 0
 
73984
COMMIT;
 
73985
        
 
73986
# check transactions-8 success:         1
 
73987
# INFO: Storage engine used for t1 seems to be able to revert
 
73988
#       changes made by the failing statement.
 
73989
SET @@session.sql_mode = '';
 
73990
SET AUTOCOMMIT= 1;
 
73991
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
73992
COMMIT WORK;
 
73993
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
73994
        
 
73995
# check special-1 success:      1
 
73996
UPDATE t1 SET f_charbig = '';
 
73997
        
 
73998
# check special-2 success:      1
 
73999
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
74000
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74001
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
74002
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74003
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74004
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74005
'just inserted' FROM t0_template
 
74006
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74007
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
74008
BEGIN
 
74009
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74010
f_charbig = 'updated by trigger'
 
74011
      WHERE f_int1 = new.f_int1;
 
74012
END|
 
74013
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74014
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
74015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74016
        
 
74017
# check trigger-1 success:      1
 
74018
DROP TRIGGER trg_1;
 
74019
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74020
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74021
f_charbig = 'just inserted'
 
74022
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74023
DELETE FROM t0_aux
 
74024
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74026
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74027
'just inserted' FROM t0_template
 
74028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74029
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
74030
BEGIN
 
74031
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74032
f_charbig = 'updated by trigger'
 
74033
      WHERE f_int1 = new.f_int1;
 
74034
END|
 
74035
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74036
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
74037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74038
        
 
74039
# check trigger-2 success:      1
 
74040
DROP TRIGGER trg_1;
 
74041
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74042
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74043
f_charbig = 'just inserted'
 
74044
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74045
DELETE FROM t0_aux
 
74046
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74048
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74049
'just inserted' FROM t0_template
 
74050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74051
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
74052
BEGIN
 
74053
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74054
f_charbig = 'updated by trigger'
 
74055
      WHERE f_int1 = new.f_int1;
 
74056
END|
 
74057
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74058
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74059
        
 
74060
# check trigger-3 success:      1
 
74061
DROP TRIGGER trg_1;
 
74062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74064
f_charbig = 'just inserted'
 
74065
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74066
DELETE FROM t0_aux
 
74067
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74068
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74069
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74070
'just inserted' FROM t0_template
 
74071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74072
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
74073
BEGIN
 
74074
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74075
f_charbig = 'updated by trigger'
 
74076
      WHERE f_int1 = - old.f_int1;
 
74077
END|
 
74078
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74079
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74080
        
 
74081
# check trigger-4 success:      1
 
74082
DROP TRIGGER trg_1;
 
74083
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74084
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74085
f_charbig = 'just inserted'
 
74086
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74087
DELETE FROM t0_aux
 
74088
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74090
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74091
'just inserted' FROM t0_template
 
74092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74093
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
74094
BEGIN
 
74095
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74096
f_charbig = 'updated by trigger'
 
74097
      WHERE f_int1 = new.f_int1;
 
74098
END|
 
74099
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74100
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74101
        
 
74102
# check trigger-5 success:      1
 
74103
DROP TRIGGER trg_1;
 
74104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74106
f_charbig = 'just inserted'
 
74107
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74108
DELETE FROM t0_aux
 
74109
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74111
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74112
'just inserted' FROM t0_template
 
74113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74114
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
74115
BEGIN
 
74116
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74117
f_charbig = 'updated by trigger'
 
74118
      WHERE f_int1 = - old.f_int1;
 
74119
END|
 
74120
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74121
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74122
        
 
74123
# check trigger-6 success:      1
 
74124
DROP TRIGGER trg_1;
 
74125
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74126
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74127
f_charbig = 'just inserted'
 
74128
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74129
DELETE FROM t0_aux
 
74130
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74131
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74132
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74133
'just inserted' FROM t0_template
 
74134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74135
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
74136
BEGIN
 
74137
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74138
f_charbig = 'updated by trigger'
 
74139
      WHERE f_int1 = - old.f_int1;
 
74140
END|
 
74141
DELETE FROM t0_aux
 
74142
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74143
        
 
74144
# check trigger-7 success:      1
 
74145
DROP TRIGGER trg_1;
 
74146
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74147
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74148
f_charbig = 'just inserted'
 
74149
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74150
DELETE FROM t0_aux
 
74151
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74152
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74153
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74154
'just inserted' FROM t0_template
 
74155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74156
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
74157
BEGIN
 
74158
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74159
f_charbig = 'updated by trigger'
 
74160
      WHERE f_int1 = - old.f_int1;
 
74161
END|
 
74162
DELETE FROM t0_aux
 
74163
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74164
        
 
74165
# check trigger-8 success:      1
 
74166
DROP TRIGGER trg_1;
 
74167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74169
f_charbig = 'just inserted'
 
74170
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74171
DELETE FROM t0_aux
 
74172
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74173
DELETE FROM t1
 
74174
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74175
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
74176
BEGIN
 
74177
SET new.f_int1 = old.f_int1 + @max_row,
 
74178
new.f_int2 = old.f_int2 - @max_row,
 
74179
new.f_charbig = '####updated per update trigger####';
 
74180
END|
 
74181
UPDATE t1
 
74182
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
74183
f_charbig = '####updated per update statement itself####';
 
74184
        
 
74185
# check trigger-9 success:      1
 
74186
DROP TRIGGER trg_2;
 
74187
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74188
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74189
f_charbig = CONCAT('===',f_char1,'===');
 
74190
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
74191
BEGIN
 
74192
SET new.f_int1 = new.f_int1 + @max_row,
 
74193
new.f_int2 = new.f_int2 - @max_row,
 
74194
new.f_charbig = '####updated per update trigger####';
 
74195
END|
 
74196
UPDATE t1
 
74197
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
74198
f_charbig = '####updated per update statement itself####';
 
74199
        
 
74200
# check trigger-10 success:     1
 
74201
DROP TRIGGER trg_2;
 
74202
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74203
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74204
f_charbig = CONCAT('===',f_char1,'===');
 
74205
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
74206
BEGIN
 
74207
SET new.f_int1 = @my_max1 + @counter,
 
74208
new.f_int2 = @my_min2 - @counter,
 
74209
new.f_charbig = '####updated per insert trigger####';
 
74210
SET @counter = @counter + 1;
 
74211
END|
 
74212
SET @counter = 1;
 
74213
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
74214
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74215
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
74216
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
74217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
74218
ORDER BY f_int1;
 
74219
DROP TRIGGER trg_3;
 
74220
        
 
74221
# check trigger-11 success:     1
 
74222
DELETE FROM t1
 
74223
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
74224
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
74225
AND f_charbig = '####updated per insert trigger####';
 
74226
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
74227
BEGIN
 
74228
SET new.f_int1 = @my_max1 + @counter,
 
74229
new.f_int2 = @my_min2 - @counter,
 
74230
new.f_charbig = '####updated per insert trigger####';
 
74231
SET @counter = @counter + 1;
 
74232
END|
 
74233
SET @counter = 1;
 
74234
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
74235
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
74236
SELECT CAST(f_int1 AS CHAR),
 
74237
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
74238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
74239
ORDER BY f_int1;
 
74240
DROP TRIGGER trg_3;
 
74241
        
 
74242
# check trigger-12 success:     1
 
74243
DELETE FROM t1
 
74244
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
74245
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
74246
AND f_charbig = '####updated per insert trigger####';
 
74247
ANALYZE  TABLE t1;
 
74248
Table   Op      Msg_type        Msg_text
 
74249
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
74250
CHECK    TABLE t1 EXTENDED;
 
74251
Table   Op      Msg_type        Msg_text
 
74252
test.t1 check   note    The storage engine for the table doesn't support check
 
74253
CHECKSUM TABLE t1 EXTENDED;
 
74254
Table   Checksum
 
74255
test.t1 <some_value>
 
74256
OPTIMIZE TABLE t1;
 
74257
Table   Op      Msg_type        Msg_text
 
74258
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
74259
# check layout success:    1
 
74260
REPAIR   TABLE t1 EXTENDED;
 
74261
Table   Op      Msg_type        Msg_text
 
74262
test.t1 repair  note    The storage engine for the table doesn't support repair
 
74263
# check layout success:    1
 
74264
TRUNCATE t1;
 
74265
        
 
74266
# check TRUNCATE success:       1
 
74267
# check layout success:    1
 
74268
# End usability test (inc/partition_check.inc)
 
74269
DROP TABLE t1;
 
74270
CREATE TABLE t1 (
 
74271
f_int1 INTEGER,
 
74272
f_int2 INTEGER,
 
74273
f_char1 CHAR(20),
 
74274
f_char2 CHAR(20),
 
74275
f_charbig VARCHAR(1000)
 
74276
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
74277
)
 
74278
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
74279
(PARTITION parta VALUES LESS THAN (0),
 
74280
PARTITION partb VALUES LESS THAN (5),
 
74281
PARTITION partc VALUES LESS THAN (10),
 
74282
PARTITION partd VALUES LESS THAN (10 + 5),
 
74283
PARTITION parte VALUES LESS THAN (20),
 
74284
PARTITION partf VALUES LESS THAN (2147483646));
 
74285
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74286
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
74287
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
74288
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
74289
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74290
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
74291
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
74292
# Start usability test (inc/partition_check.inc)
 
74293
create_command
 
74294
SHOW CREATE TABLE t1;
 
74295
Table   Create Table
 
74296
t1      CREATE TABLE `t1` (
 
74297
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
74298
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
74299
  `f_char1` char(20) DEFAULT NULL,
 
74300
  `f_char2` char(20) DEFAULT NULL,
 
74301
  `f_charbig` varchar(1000) DEFAULT NULL
 
74302
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
74303
 
 
74304
# check prerequisites-1 success:    1
 
74305
# check COUNT(*) success:    1
 
74306
# check MIN/MAX(f_int1) success:    1
 
74307
# check MIN/MAX(f_int2) success:    1
 
74308
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74309
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
74310
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
74311
WHERE f_int1 IN (2,3);
 
74312
# check prerequisites-3 success:    1
 
74313
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
74314
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
74315
# check read via f_int1 success: 1
 
74316
# check read via f_int2 success: 1
 
74317
        
 
74318
# check multiple-1 success:     1
 
74319
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
74320
        
 
74321
# check multiple-2 success:     1
 
74322
INSERT INTO t1 SELECT * FROM t0_template
 
74323
WHERE MOD(f_int1,3) = 0;
 
74324
        
 
74325
# check multiple-3 success:     1
 
74326
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
74327
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
74328
AND @max_row_div2 + @max_row_div4;
 
74329
        
 
74330
# check multiple-4 success:     1
 
74331
DELETE FROM t1
 
74332
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
74333
AND @max_row_div2 + @max_row_div4 + @max_row;
 
74334
        
 
74335
# check multiple-5 success:     1
 
74336
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
74337
INSERT INTO t1
 
74338
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
74339
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
74340
f_charbig = '#SINGLE#';
 
74341
        
 
74342
# check single-1 success:       1
 
74343
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
74344
INSERT INTO t1
 
74345
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
74346
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
74347
f_charbig = '#SINGLE#';
 
74348
        
 
74349
# check single-2 success:       1
 
74350
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
74351
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
74352
UPDATE t1 SET f_int1 = @cur_value2
 
74353
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
74354
        
 
74355
# check single-3 success:       1
 
74356
SET @cur_value1= -1;
 
74357
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
74358
UPDATE t1 SET f_int1 = @cur_value1
 
74359
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
74360
        
 
74361
# check single-4 success:       1
 
74362
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
74363
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
74364
        
 
74365
# check single-5 success:       1
 
74366
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
74367
        
 
74368
# check single-6 success:       1
 
74369
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
74370
ERROR HY000: Table has no partition for value 2147483647
 
74371
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
74372
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
74373
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
74374
f_charbig = '#NULL#';
 
74375
INSERT INTO t1
 
74376
SET f_int1 = NULL , f_int2 = -@max_row,
 
74377
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
74378
f_charbig = '#NULL#';
 
74379
ERROR 23000: Column 'f_int1' cannot be null
 
74380
# check null success:    1
 
74381
DELETE FROM t1
 
74382
WHERE f_int1 = 0 AND f_int2 = 0
 
74383
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
74384
AND f_charbig = '#NULL#';
 
74385
SET AUTOCOMMIT= 0;
 
74386
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74387
SELECT f_int1, f_int1, '', '', 'was inserted'
 
74388
FROM t0_template source_tab
 
74389
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
74390
        
 
74391
# check transactions-1 success:         1
 
74392
COMMIT WORK;
 
74393
        
 
74394
# check transactions-2 success:         1
 
74395
ROLLBACK WORK;
 
74396
        
 
74397
# check transactions-3 success:         1
 
74398
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
74399
COMMIT WORK;
 
74400
ROLLBACK WORK;
 
74401
        
 
74402
# check transactions-4 success:         1
 
74403
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74404
SELECT f_int1, f_int1, '', '', 'was inserted'
 
74405
FROM t0_template source_tab
 
74406
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
74407
        
 
74408
# check transactions-5 success:         1
 
74409
ROLLBACK WORK;
 
74410
        
 
74411
# check transactions-6 success:         1
 
74412
# INFO: Storage engine used for t1 seems to be transactional.
 
74413
COMMIT;
 
74414
        
 
74415
# check transactions-7 success:         1
 
74416
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
74417
COMMIT WORK;
 
74418
SET @@session.sql_mode = 'traditional';
 
74419
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
74420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74421
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
74422
'', '', 'was inserted' FROM t0_template
 
74423
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
74424
ERROR 22012: Division by 0
 
74425
COMMIT;
 
74426
        
 
74427
# check transactions-8 success:         1
 
74428
# INFO: Storage engine used for t1 seems to be able to revert
 
74429
#       changes made by the failing statement.
 
74430
SET @@session.sql_mode = '';
 
74431
SET AUTOCOMMIT= 1;
 
74432
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
74433
COMMIT WORK;
 
74434
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
74435
        
 
74436
# check special-1 success:      1
 
74437
UPDATE t1 SET f_charbig = '';
 
74438
        
 
74439
# check special-2 success:      1
 
74440
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
74441
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74442
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
74443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74444
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74445
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74446
'just inserted' FROM t0_template
 
74447
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74448
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
74449
BEGIN
 
74450
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74451
f_charbig = 'updated by trigger'
 
74452
      WHERE f_int1 = new.f_int1;
 
74453
END|
 
74454
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74455
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
74456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74457
        
 
74458
# check trigger-1 success:      1
 
74459
DROP TRIGGER trg_1;
 
74460
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74461
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74462
f_charbig = 'just inserted'
 
74463
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74464
DELETE FROM t0_aux
 
74465
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74466
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74467
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74468
'just inserted' FROM t0_template
 
74469
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74470
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
74471
BEGIN
 
74472
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74473
f_charbig = 'updated by trigger'
 
74474
      WHERE f_int1 = new.f_int1;
 
74475
END|
 
74476
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74477
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
74478
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74479
        
 
74480
# check trigger-2 success:      1
 
74481
DROP TRIGGER trg_1;
 
74482
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74483
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74484
f_charbig = 'just inserted'
 
74485
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74486
DELETE FROM t0_aux
 
74487
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74488
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74489
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74490
'just inserted' FROM t0_template
 
74491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74492
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
74493
BEGIN
 
74494
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74495
f_charbig = 'updated by trigger'
 
74496
      WHERE f_int1 = new.f_int1;
 
74497
END|
 
74498
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74499
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74500
        
 
74501
# check trigger-3 success:      1
 
74502
DROP TRIGGER trg_1;
 
74503
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74504
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74505
f_charbig = 'just inserted'
 
74506
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74507
DELETE FROM t0_aux
 
74508
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74510
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74511
'just inserted' FROM t0_template
 
74512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74513
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
74514
BEGIN
 
74515
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74516
f_charbig = 'updated by trigger'
 
74517
      WHERE f_int1 = - old.f_int1;
 
74518
END|
 
74519
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74520
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74521
        
 
74522
# check trigger-4 success:      1
 
74523
DROP TRIGGER trg_1;
 
74524
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74525
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74526
f_charbig = 'just inserted'
 
74527
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74528
DELETE FROM t0_aux
 
74529
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74530
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74531
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74532
'just inserted' FROM t0_template
 
74533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74534
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
74535
BEGIN
 
74536
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74537
f_charbig = 'updated by trigger'
 
74538
      WHERE f_int1 = new.f_int1;
 
74539
END|
 
74540
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74541
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74542
        
 
74543
# check trigger-5 success:      1
 
74544
DROP TRIGGER trg_1;
 
74545
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74546
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74547
f_charbig = 'just inserted'
 
74548
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74549
DELETE FROM t0_aux
 
74550
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74552
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74553
'just inserted' FROM t0_template
 
74554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74555
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
74556
BEGIN
 
74557
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74558
f_charbig = 'updated by trigger'
 
74559
      WHERE f_int1 = - old.f_int1;
 
74560
END|
 
74561
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74562
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74563
        
 
74564
# check trigger-6 success:      1
 
74565
DROP TRIGGER trg_1;
 
74566
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74567
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74568
f_charbig = 'just inserted'
 
74569
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74570
DELETE FROM t0_aux
 
74571
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74572
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74573
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74574
'just inserted' FROM t0_template
 
74575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74576
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
74577
BEGIN
 
74578
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74579
f_charbig = 'updated by trigger'
 
74580
      WHERE f_int1 = - old.f_int1;
 
74581
END|
 
74582
DELETE FROM t0_aux
 
74583
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74584
        
 
74585
# check trigger-7 success:      1
 
74586
DROP TRIGGER trg_1;
 
74587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74589
f_charbig = 'just inserted'
 
74590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74591
DELETE FROM t0_aux
 
74592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74595
'just inserted' FROM t0_template
 
74596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74597
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
74598
BEGIN
 
74599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74600
f_charbig = 'updated by trigger'
 
74601
      WHERE f_int1 = - old.f_int1;
 
74602
END|
 
74603
DELETE FROM t0_aux
 
74604
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74605
        
 
74606
# check trigger-8 success:      1
 
74607
DROP TRIGGER trg_1;
 
74608
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74609
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74610
f_charbig = 'just inserted'
 
74611
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74612
DELETE FROM t0_aux
 
74613
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74614
DELETE FROM t1
 
74615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74616
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
74617
BEGIN
 
74618
SET new.f_int1 = old.f_int1 + @max_row,
 
74619
new.f_int2 = old.f_int2 - @max_row,
 
74620
new.f_charbig = '####updated per update trigger####';
 
74621
END|
 
74622
UPDATE t1
 
74623
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
74624
f_charbig = '####updated per update statement itself####';
 
74625
        
 
74626
# check trigger-9 success:      1
 
74627
DROP TRIGGER trg_2;
 
74628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74630
f_charbig = CONCAT('===',f_char1,'===');
 
74631
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
74632
BEGIN
 
74633
SET new.f_int1 = new.f_int1 + @max_row,
 
74634
new.f_int2 = new.f_int2 - @max_row,
 
74635
new.f_charbig = '####updated per update trigger####';
 
74636
END|
 
74637
UPDATE t1
 
74638
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
74639
f_charbig = '####updated per update statement itself####';
 
74640
        
 
74641
# check trigger-10 success:     1
 
74642
DROP TRIGGER trg_2;
 
74643
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74644
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74645
f_charbig = CONCAT('===',f_char1,'===');
 
74646
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
74647
BEGIN
 
74648
SET new.f_int1 = @my_max1 + @counter,
 
74649
new.f_int2 = @my_min2 - @counter,
 
74650
new.f_charbig = '####updated per insert trigger####';
 
74651
SET @counter = @counter + 1;
 
74652
END|
 
74653
SET @counter = 1;
 
74654
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
74655
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74656
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
74657
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
74658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
74659
ORDER BY f_int1;
 
74660
DROP TRIGGER trg_3;
 
74661
        
 
74662
# check trigger-11 success:     1
 
74663
DELETE FROM t1
 
74664
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
74665
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
74666
AND f_charbig = '####updated per insert trigger####';
 
74667
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
74668
BEGIN
 
74669
SET new.f_int1 = @my_max1 + @counter,
 
74670
new.f_int2 = @my_min2 - @counter,
 
74671
new.f_charbig = '####updated per insert trigger####';
 
74672
SET @counter = @counter + 1;
 
74673
END|
 
74674
SET @counter = 1;
 
74675
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
74676
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
74677
SELECT CAST(f_int1 AS CHAR),
 
74678
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
74679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
74680
ORDER BY f_int1;
 
74681
DROP TRIGGER trg_3;
 
74682
        
 
74683
# check trigger-12 success:     1
 
74684
DELETE FROM t1
 
74685
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
74686
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
74687
AND f_charbig = '####updated per insert trigger####';
 
74688
ANALYZE  TABLE t1;
 
74689
Table   Op      Msg_type        Msg_text
 
74690
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
74691
CHECK    TABLE t1 EXTENDED;
 
74692
Table   Op      Msg_type        Msg_text
 
74693
test.t1 check   note    The storage engine for the table doesn't support check
 
74694
CHECKSUM TABLE t1 EXTENDED;
 
74695
Table   Checksum
 
74696
test.t1 <some_value>
 
74697
OPTIMIZE TABLE t1;
 
74698
Table   Op      Msg_type        Msg_text
 
74699
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
74700
# check layout success:    1
 
74701
REPAIR   TABLE t1 EXTENDED;
 
74702
Table   Op      Msg_type        Msg_text
 
74703
test.t1 repair  note    The storage engine for the table doesn't support repair
 
74704
# check layout success:    1
 
74705
TRUNCATE t1;
 
74706
        
 
74707
# check TRUNCATE success:       1
 
74708
# check layout success:    1
 
74709
# End usability test (inc/partition_check.inc)
 
74710
DROP TABLE t1;
 
74711
CREATE TABLE t1 (
 
74712
f_int1 INTEGER,
 
74713
f_int2 INTEGER,
 
74714
f_char1 CHAR(20),
 
74715
f_char2 CHAR(20),
 
74716
f_charbig VARCHAR(1000)
 
74717
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
74718
)
 
74719
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
74720
(PARTITION parta VALUES LESS THAN (0),
 
74721
PARTITION partb VALUES LESS THAN (5),
 
74722
PARTITION partc VALUES LESS THAN (10),
 
74723
PARTITION partd VALUES LESS THAN (2147483646));
 
74724
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74725
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
74726
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
74727
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
74728
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74729
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
74730
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
74731
# Start usability test (inc/partition_check.inc)
 
74732
create_command
 
74733
SHOW CREATE TABLE t1;
 
74734
Table   Create Table
 
74735
t1      CREATE TABLE `t1` (
 
74736
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
74737
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
74738
  `f_char1` char(20) DEFAULT NULL,
 
74739
  `f_char2` char(20) DEFAULT NULL,
 
74740
  `f_charbig` varchar(1000) DEFAULT NULL
 
74741
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
74742
 
 
74743
# check prerequisites-1 success:    1
 
74744
# check COUNT(*) success:    1
 
74745
# check MIN/MAX(f_int1) success:    1
 
74746
# check MIN/MAX(f_int2) success:    1
 
74747
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74748
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
74749
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
74750
WHERE f_int1 IN (2,3);
 
74751
# check prerequisites-3 success:    1
 
74752
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
74753
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
74754
# check read via f_int1 success: 1
 
74755
# check read via f_int2 success: 1
 
74756
        
 
74757
# check multiple-1 success:     1
 
74758
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
74759
        
 
74760
# check multiple-2 success:     1
 
74761
INSERT INTO t1 SELECT * FROM t0_template
 
74762
WHERE MOD(f_int1,3) = 0;
 
74763
        
 
74764
# check multiple-3 success:     1
 
74765
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
74766
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
74767
AND @max_row_div2 + @max_row_div4;
 
74768
        
 
74769
# check multiple-4 success:     1
 
74770
DELETE FROM t1
 
74771
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
74772
AND @max_row_div2 + @max_row_div4 + @max_row;
 
74773
        
 
74774
# check multiple-5 success:     1
 
74775
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
74776
INSERT INTO t1
 
74777
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
74778
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
74779
f_charbig = '#SINGLE#';
 
74780
        
 
74781
# check single-1 success:       1
 
74782
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
74783
INSERT INTO t1
 
74784
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
74785
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
74786
f_charbig = '#SINGLE#';
 
74787
        
 
74788
# check single-2 success:       1
 
74789
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
74790
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
74791
UPDATE t1 SET f_int1 = @cur_value2
 
74792
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
74793
        
 
74794
# check single-3 success:       1
 
74795
SET @cur_value1= -1;
 
74796
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
74797
UPDATE t1 SET f_int1 = @cur_value1
 
74798
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
74799
        
 
74800
# check single-4 success:       1
 
74801
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
74802
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
74803
        
 
74804
# check single-5 success:       1
 
74805
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
74806
        
 
74807
# check single-6 success:       1
 
74808
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
74809
ERROR HY000: Table has no partition for value 2147483647
 
74810
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
74811
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
74812
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
74813
f_charbig = '#NULL#';
 
74814
INSERT INTO t1
 
74815
SET f_int1 = NULL , f_int2 = -@max_row,
 
74816
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
74817
f_charbig = '#NULL#';
 
74818
ERROR 23000: Column 'f_int1' cannot be null
 
74819
# check null success:    1
 
74820
DELETE FROM t1
 
74821
WHERE f_int1 = 0 AND f_int2 = 0
 
74822
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
74823
AND f_charbig = '#NULL#';
 
74824
SET AUTOCOMMIT= 0;
 
74825
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74826
SELECT f_int1, f_int1, '', '', 'was inserted'
 
74827
FROM t0_template source_tab
 
74828
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
74829
        
 
74830
# check transactions-1 success:         1
 
74831
COMMIT WORK;
 
74832
        
 
74833
# check transactions-2 success:         1
 
74834
ROLLBACK WORK;
 
74835
        
 
74836
# check transactions-3 success:         1
 
74837
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
74838
COMMIT WORK;
 
74839
ROLLBACK WORK;
 
74840
        
 
74841
# check transactions-4 success:         1
 
74842
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74843
SELECT f_int1, f_int1, '', '', 'was inserted'
 
74844
FROM t0_template source_tab
 
74845
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
74846
        
 
74847
# check transactions-5 success:         1
 
74848
ROLLBACK WORK;
 
74849
        
 
74850
# check transactions-6 success:         1
 
74851
# INFO: Storage engine used for t1 seems to be transactional.
 
74852
COMMIT;
 
74853
        
 
74854
# check transactions-7 success:         1
 
74855
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
74856
COMMIT WORK;
 
74857
SET @@session.sql_mode = 'traditional';
 
74858
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
74859
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
74860
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
74861
'', '', 'was inserted' FROM t0_template
 
74862
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
74863
ERROR 22012: Division by 0
 
74864
COMMIT;
 
74865
        
 
74866
# check transactions-8 success:         1
 
74867
# INFO: Storage engine used for t1 seems to be able to revert
 
74868
#       changes made by the failing statement.
 
74869
SET @@session.sql_mode = '';
 
74870
SET AUTOCOMMIT= 1;
 
74871
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
74872
COMMIT WORK;
 
74873
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
74874
        
 
74875
# check special-1 success:      1
 
74876
UPDATE t1 SET f_charbig = '';
 
74877
        
 
74878
# check special-2 success:      1
 
74879
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
74880
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74881
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
74882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74883
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74884
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74885
'just inserted' FROM t0_template
 
74886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74887
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
74888
BEGIN
 
74889
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74890
f_charbig = 'updated by trigger'
 
74891
      WHERE f_int1 = new.f_int1;
 
74892
END|
 
74893
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74894
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
74895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74896
        
 
74897
# check trigger-1 success:      1
 
74898
DROP TRIGGER trg_1;
 
74899
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74900
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74901
f_charbig = 'just inserted'
 
74902
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74903
DELETE FROM t0_aux
 
74904
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74905
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74906
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74907
'just inserted' FROM t0_template
 
74908
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74909
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
74910
BEGIN
 
74911
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74912
f_charbig = 'updated by trigger'
 
74913
      WHERE f_int1 = new.f_int1;
 
74914
END|
 
74915
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74916
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
74917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74918
        
 
74919
# check trigger-2 success:      1
 
74920
DROP TRIGGER trg_1;
 
74921
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74922
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74923
f_charbig = 'just inserted'
 
74924
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74925
DELETE FROM t0_aux
 
74926
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74927
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74928
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74929
'just inserted' FROM t0_template
 
74930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74931
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
74932
BEGIN
 
74933
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74934
f_charbig = 'updated by trigger'
 
74935
      WHERE f_int1 = new.f_int1;
 
74936
END|
 
74937
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74938
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74939
        
 
74940
# check trigger-3 success:      1
 
74941
DROP TRIGGER trg_1;
 
74942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74944
f_charbig = 'just inserted'
 
74945
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74946
DELETE FROM t0_aux
 
74947
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74948
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74949
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74950
'just inserted' FROM t0_template
 
74951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74952
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
74953
BEGIN
 
74954
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74955
f_charbig = 'updated by trigger'
 
74956
      WHERE f_int1 = - old.f_int1;
 
74957
END|
 
74958
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74959
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74960
        
 
74961
# check trigger-4 success:      1
 
74962
DROP TRIGGER trg_1;
 
74963
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74964
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74965
f_charbig = 'just inserted'
 
74966
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74967
DELETE FROM t0_aux
 
74968
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74969
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74970
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74971
'just inserted' FROM t0_template
 
74972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74973
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
74974
BEGIN
 
74975
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74976
f_charbig = 'updated by trigger'
 
74977
      WHERE f_int1 = new.f_int1;
 
74978
END|
 
74979
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
74980
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
74981
        
 
74982
# check trigger-5 success:      1
 
74983
DROP TRIGGER trg_1;
 
74984
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
74985
f_int2 = CAST(f_char1 AS SIGNED INT),
 
74986
f_charbig = 'just inserted'
 
74987
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
74988
DELETE FROM t0_aux
 
74989
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74991
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
74992
'just inserted' FROM t0_template
 
74993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
74994
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
74995
BEGIN
 
74996
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
74997
f_charbig = 'updated by trigger'
 
74998
      WHERE f_int1 = - old.f_int1;
 
74999
END|
 
75000
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75001
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75002
        
 
75003
# check trigger-6 success:      1
 
75004
DROP TRIGGER trg_1;
 
75005
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75006
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75007
f_charbig = 'just inserted'
 
75008
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75009
DELETE FROM t0_aux
 
75010
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75011
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75012
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75013
'just inserted' FROM t0_template
 
75014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75015
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
75016
BEGIN
 
75017
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75018
f_charbig = 'updated by trigger'
 
75019
      WHERE f_int1 = - old.f_int1;
 
75020
END|
 
75021
DELETE FROM t0_aux
 
75022
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75023
        
 
75024
# check trigger-7 success:      1
 
75025
DROP TRIGGER trg_1;
 
75026
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75027
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75028
f_charbig = 'just inserted'
 
75029
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75030
DELETE FROM t0_aux
 
75031
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75032
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75033
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75034
'just inserted' FROM t0_template
 
75035
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75036
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
75037
BEGIN
 
75038
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75039
f_charbig = 'updated by trigger'
 
75040
      WHERE f_int1 = - old.f_int1;
 
75041
END|
 
75042
DELETE FROM t0_aux
 
75043
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75044
        
 
75045
# check trigger-8 success:      1
 
75046
DROP TRIGGER trg_1;
 
75047
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75048
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75049
f_charbig = 'just inserted'
 
75050
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75051
DELETE FROM t0_aux
 
75052
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75053
DELETE FROM t1
 
75054
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75055
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
75056
BEGIN
 
75057
SET new.f_int1 = old.f_int1 + @max_row,
 
75058
new.f_int2 = old.f_int2 - @max_row,
 
75059
new.f_charbig = '####updated per update trigger####';
 
75060
END|
 
75061
UPDATE t1
 
75062
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
75063
f_charbig = '####updated per update statement itself####';
 
75064
        
 
75065
# check trigger-9 success:      1
 
75066
DROP TRIGGER trg_2;
 
75067
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75068
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75069
f_charbig = CONCAT('===',f_char1,'===');
 
75070
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
75071
BEGIN
 
75072
SET new.f_int1 = new.f_int1 + @max_row,
 
75073
new.f_int2 = new.f_int2 - @max_row,
 
75074
new.f_charbig = '####updated per update trigger####';
 
75075
END|
 
75076
UPDATE t1
 
75077
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
75078
f_charbig = '####updated per update statement itself####';
 
75079
        
 
75080
# check trigger-10 success:     1
 
75081
DROP TRIGGER trg_2;
 
75082
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75083
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75084
f_charbig = CONCAT('===',f_char1,'===');
 
75085
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
75086
BEGIN
 
75087
SET new.f_int1 = @my_max1 + @counter,
 
75088
new.f_int2 = @my_min2 - @counter,
 
75089
new.f_charbig = '####updated per insert trigger####';
 
75090
SET @counter = @counter + 1;
 
75091
END|
 
75092
SET @counter = 1;
 
75093
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
75094
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75095
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
75096
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
75097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
75098
ORDER BY f_int1;
 
75099
DROP TRIGGER trg_3;
 
75100
        
 
75101
# check trigger-11 success:     1
 
75102
DELETE FROM t1
 
75103
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
75104
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
75105
AND f_charbig = '####updated per insert trigger####';
 
75106
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
75107
BEGIN
 
75108
SET new.f_int1 = @my_max1 + @counter,
 
75109
new.f_int2 = @my_min2 - @counter,
 
75110
new.f_charbig = '####updated per insert trigger####';
 
75111
SET @counter = @counter + 1;
 
75112
END|
 
75113
SET @counter = 1;
 
75114
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
75115
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
75116
SELECT CAST(f_int1 AS CHAR),
 
75117
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
75118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
75119
ORDER BY f_int1;
 
75120
DROP TRIGGER trg_3;
 
75121
        
 
75122
# check trigger-12 success:     1
 
75123
DELETE FROM t1
 
75124
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
75125
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
75126
AND f_charbig = '####updated per insert trigger####';
 
75127
ANALYZE  TABLE t1;
 
75128
Table   Op      Msg_type        Msg_text
 
75129
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
75130
CHECK    TABLE t1 EXTENDED;
 
75131
Table   Op      Msg_type        Msg_text
 
75132
test.t1 check   note    The storage engine for the table doesn't support check
 
75133
CHECKSUM TABLE t1 EXTENDED;
 
75134
Table   Checksum
 
75135
test.t1 <some_value>
 
75136
OPTIMIZE TABLE t1;
 
75137
Table   Op      Msg_type        Msg_text
 
75138
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
75139
# check layout success:    1
 
75140
REPAIR   TABLE t1 EXTENDED;
 
75141
Table   Op      Msg_type        Msg_text
 
75142
test.t1 repair  note    The storage engine for the table doesn't support repair
 
75143
# check layout success:    1
 
75144
TRUNCATE t1;
 
75145
        
 
75146
# check TRUNCATE success:       1
 
75147
# check layout success:    1
 
75148
# End usability test (inc/partition_check.inc)
 
75149
DROP TABLE t1;
 
75150
CREATE TABLE t1 (
 
75151
f_int1 INTEGER,
 
75152
f_int2 INTEGER,
 
75153
f_char1 CHAR(20),
 
75154
f_char2 CHAR(20),
 
75155
f_charbig VARCHAR(1000)
 
75156
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
75157
)
 
75158
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
75159
(PARTITION part1 VALUES LESS THAN (0)
 
75160
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
75161
PARTITION part2 VALUES LESS THAN (5)
 
75162
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
75163
PARTITION part3 VALUES LESS THAN (10)
 
75164
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
75165
PARTITION part4 VALUES LESS THAN (2147483646)
 
75166
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
75167
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75168
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
75169
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
75170
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
75171
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75172
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
75173
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
75174
# Start usability test (inc/partition_check.inc)
 
75175
create_command
 
75176
SHOW CREATE TABLE t1;
 
75177
Table   Create Table
 
75178
t1      CREATE TABLE `t1` (
 
75179
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
75180
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
75181
  `f_char1` char(20) DEFAULT NULL,
 
75182
  `f_char2` char(20) DEFAULT NULL,
 
75183
  `f_charbig` varchar(1000) DEFAULT NULL
 
75184
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
75185
 
 
75186
# check prerequisites-1 success:    1
 
75187
# check COUNT(*) success:    1
 
75188
# check MIN/MAX(f_int1) success:    1
 
75189
# check MIN/MAX(f_int2) success:    1
 
75190
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75191
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
75192
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
75193
WHERE f_int1 IN (2,3);
 
75194
# check prerequisites-3 success:    1
 
75195
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
75196
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
75197
# check read via f_int1 success: 1
 
75198
# check read via f_int2 success: 1
 
75199
        
 
75200
# check multiple-1 success:     1
 
75201
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
75202
        
 
75203
# check multiple-2 success:     1
 
75204
INSERT INTO t1 SELECT * FROM t0_template
 
75205
WHERE MOD(f_int1,3) = 0;
 
75206
        
 
75207
# check multiple-3 success:     1
 
75208
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
75209
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
75210
AND @max_row_div2 + @max_row_div4;
 
75211
        
 
75212
# check multiple-4 success:     1
 
75213
DELETE FROM t1
 
75214
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
75215
AND @max_row_div2 + @max_row_div4 + @max_row;
 
75216
        
 
75217
# check multiple-5 success:     1
 
75218
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
75219
INSERT INTO t1
 
75220
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
75221
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
75222
f_charbig = '#SINGLE#';
 
75223
        
 
75224
# check single-1 success:       1
 
75225
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
75226
INSERT INTO t1
 
75227
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
75228
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
75229
f_charbig = '#SINGLE#';
 
75230
        
 
75231
# check single-2 success:       1
 
75232
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
75233
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
75234
UPDATE t1 SET f_int1 = @cur_value2
 
75235
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
75236
        
 
75237
# check single-3 success:       1
 
75238
SET @cur_value1= -1;
 
75239
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
75240
UPDATE t1 SET f_int1 = @cur_value1
 
75241
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
75242
        
 
75243
# check single-4 success:       1
 
75244
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
75245
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
75246
        
 
75247
# check single-5 success:       1
 
75248
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
75249
        
 
75250
# check single-6 success:       1
 
75251
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
75252
ERROR HY000: Table has no partition for value 2147483647
 
75253
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
75254
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
75255
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
75256
f_charbig = '#NULL#';
 
75257
INSERT INTO t1
 
75258
SET f_int1 = NULL , f_int2 = -@max_row,
 
75259
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
75260
f_charbig = '#NULL#';
 
75261
ERROR 23000: Column 'f_int1' cannot be null
 
75262
# check null success:    1
 
75263
DELETE FROM t1
 
75264
WHERE f_int1 = 0 AND f_int2 = 0
 
75265
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
75266
AND f_charbig = '#NULL#';
 
75267
SET AUTOCOMMIT= 0;
 
75268
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75269
SELECT f_int1, f_int1, '', '', 'was inserted'
 
75270
FROM t0_template source_tab
 
75271
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
75272
        
 
75273
# check transactions-1 success:         1
 
75274
COMMIT WORK;
 
75275
        
 
75276
# check transactions-2 success:         1
 
75277
ROLLBACK WORK;
 
75278
        
 
75279
# check transactions-3 success:         1
 
75280
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
75281
COMMIT WORK;
 
75282
ROLLBACK WORK;
 
75283
        
 
75284
# check transactions-4 success:         1
 
75285
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75286
SELECT f_int1, f_int1, '', '', 'was inserted'
 
75287
FROM t0_template source_tab
 
75288
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
75289
        
 
75290
# check transactions-5 success:         1
 
75291
ROLLBACK WORK;
 
75292
        
 
75293
# check transactions-6 success:         1
 
75294
# INFO: Storage engine used for t1 seems to be transactional.
 
75295
COMMIT;
 
75296
        
 
75297
# check transactions-7 success:         1
 
75298
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
75299
COMMIT WORK;
 
75300
SET @@session.sql_mode = 'traditional';
 
75301
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
75302
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75303
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
75304
'', '', 'was inserted' FROM t0_template
 
75305
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
75306
ERROR 22012: Division by 0
 
75307
COMMIT;
 
75308
        
 
75309
# check transactions-8 success:         1
 
75310
# INFO: Storage engine used for t1 seems to be able to revert
 
75311
#       changes made by the failing statement.
 
75312
SET @@session.sql_mode = '';
 
75313
SET AUTOCOMMIT= 1;
 
75314
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
75315
COMMIT WORK;
 
75316
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
75317
        
 
75318
# check special-1 success:      1
 
75319
UPDATE t1 SET f_charbig = '';
 
75320
        
 
75321
# check special-2 success:      1
 
75322
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
75323
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75324
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
75325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75326
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75327
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75328
'just inserted' FROM t0_template
 
75329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75330
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
75331
BEGIN
 
75332
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75333
f_charbig = 'updated by trigger'
 
75334
      WHERE f_int1 = new.f_int1;
 
75335
END|
 
75336
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75337
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
75338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75339
        
 
75340
# check trigger-1 success:      1
 
75341
DROP TRIGGER trg_1;
 
75342
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75343
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75344
f_charbig = 'just inserted'
 
75345
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75346
DELETE FROM t0_aux
 
75347
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75348
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75349
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75350
'just inserted' FROM t0_template
 
75351
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75352
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
75353
BEGIN
 
75354
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75355
f_charbig = 'updated by trigger'
 
75356
      WHERE f_int1 = new.f_int1;
 
75357
END|
 
75358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75359
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
75360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75361
        
 
75362
# check trigger-2 success:      1
 
75363
DROP TRIGGER trg_1;
 
75364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75366
f_charbig = 'just inserted'
 
75367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75368
DELETE FROM t0_aux
 
75369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75370
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75371
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75372
'just inserted' FROM t0_template
 
75373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75374
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
75375
BEGIN
 
75376
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75377
f_charbig = 'updated by trigger'
 
75378
      WHERE f_int1 = new.f_int1;
 
75379
END|
 
75380
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75381
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75382
        
 
75383
# check trigger-3 success:      1
 
75384
DROP TRIGGER trg_1;
 
75385
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75386
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75387
f_charbig = 'just inserted'
 
75388
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75389
DELETE FROM t0_aux
 
75390
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75391
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75392
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75393
'just inserted' FROM t0_template
 
75394
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75395
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
75396
BEGIN
 
75397
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75398
f_charbig = 'updated by trigger'
 
75399
      WHERE f_int1 = - old.f_int1;
 
75400
END|
 
75401
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75402
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75403
        
 
75404
# check trigger-4 success:      1
 
75405
DROP TRIGGER trg_1;
 
75406
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75407
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75408
f_charbig = 'just inserted'
 
75409
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75410
DELETE FROM t0_aux
 
75411
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75412
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75413
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75414
'just inserted' FROM t0_template
 
75415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75416
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
75417
BEGIN
 
75418
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75419
f_charbig = 'updated by trigger'
 
75420
      WHERE f_int1 = new.f_int1;
 
75421
END|
 
75422
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75423
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75424
        
 
75425
# check trigger-5 success:      1
 
75426
DROP TRIGGER trg_1;
 
75427
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75428
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75429
f_charbig = 'just inserted'
 
75430
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75431
DELETE FROM t0_aux
 
75432
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75434
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75435
'just inserted' FROM t0_template
 
75436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75437
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
75438
BEGIN
 
75439
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75440
f_charbig = 'updated by trigger'
 
75441
      WHERE f_int1 = - old.f_int1;
 
75442
END|
 
75443
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75444
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75445
        
 
75446
# check trigger-6 success:      1
 
75447
DROP TRIGGER trg_1;
 
75448
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75449
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75450
f_charbig = 'just inserted'
 
75451
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75452
DELETE FROM t0_aux
 
75453
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75454
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75455
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75456
'just inserted' FROM t0_template
 
75457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75458
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
75459
BEGIN
 
75460
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75461
f_charbig = 'updated by trigger'
 
75462
      WHERE f_int1 = - old.f_int1;
 
75463
END|
 
75464
DELETE FROM t0_aux
 
75465
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75466
        
 
75467
# check trigger-7 success:      1
 
75468
DROP TRIGGER trg_1;
 
75469
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75470
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75471
f_charbig = 'just inserted'
 
75472
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75473
DELETE FROM t0_aux
 
75474
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75475
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75476
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75477
'just inserted' FROM t0_template
 
75478
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75479
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
75480
BEGIN
 
75481
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75482
f_charbig = 'updated by trigger'
 
75483
      WHERE f_int1 = - old.f_int1;
 
75484
END|
 
75485
DELETE FROM t0_aux
 
75486
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75487
        
 
75488
# check trigger-8 success:      1
 
75489
DROP TRIGGER trg_1;
 
75490
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75491
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75492
f_charbig = 'just inserted'
 
75493
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75494
DELETE FROM t0_aux
 
75495
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75496
DELETE FROM t1
 
75497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75498
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
75499
BEGIN
 
75500
SET new.f_int1 = old.f_int1 + @max_row,
 
75501
new.f_int2 = old.f_int2 - @max_row,
 
75502
new.f_charbig = '####updated per update trigger####';
 
75503
END|
 
75504
UPDATE t1
 
75505
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
75506
f_charbig = '####updated per update statement itself####';
 
75507
        
 
75508
# check trigger-9 success:      1
 
75509
DROP TRIGGER trg_2;
 
75510
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75511
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75512
f_charbig = CONCAT('===',f_char1,'===');
 
75513
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
75514
BEGIN
 
75515
SET new.f_int1 = new.f_int1 + @max_row,
 
75516
new.f_int2 = new.f_int2 - @max_row,
 
75517
new.f_charbig = '####updated per update trigger####';
 
75518
END|
 
75519
UPDATE t1
 
75520
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
75521
f_charbig = '####updated per update statement itself####';
 
75522
        
 
75523
# check trigger-10 success:     1
 
75524
DROP TRIGGER trg_2;
 
75525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75527
f_charbig = CONCAT('===',f_char1,'===');
 
75528
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
75529
BEGIN
 
75530
SET new.f_int1 = @my_max1 + @counter,
 
75531
new.f_int2 = @my_min2 - @counter,
 
75532
new.f_charbig = '####updated per insert trigger####';
 
75533
SET @counter = @counter + 1;
 
75534
END|
 
75535
SET @counter = 1;
 
75536
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
75537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75538
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
75539
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
75540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
75541
ORDER BY f_int1;
 
75542
DROP TRIGGER trg_3;
 
75543
        
 
75544
# check trigger-11 success:     1
 
75545
DELETE FROM t1
 
75546
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
75547
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
75548
AND f_charbig = '####updated per insert trigger####';
 
75549
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
75550
BEGIN
 
75551
SET new.f_int1 = @my_max1 + @counter,
 
75552
new.f_int2 = @my_min2 - @counter,
 
75553
new.f_charbig = '####updated per insert trigger####';
 
75554
SET @counter = @counter + 1;
 
75555
END|
 
75556
SET @counter = 1;
 
75557
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
75558
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
75559
SELECT CAST(f_int1 AS CHAR),
 
75560
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
75561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
75562
ORDER BY f_int1;
 
75563
DROP TRIGGER trg_3;
 
75564
        
 
75565
# check trigger-12 success:     1
 
75566
DELETE FROM t1
 
75567
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
75568
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
75569
AND f_charbig = '####updated per insert trigger####';
 
75570
ANALYZE  TABLE t1;
 
75571
Table   Op      Msg_type        Msg_text
 
75572
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
75573
CHECK    TABLE t1 EXTENDED;
 
75574
Table   Op      Msg_type        Msg_text
 
75575
test.t1 check   note    The storage engine for the table doesn't support check
 
75576
CHECKSUM TABLE t1 EXTENDED;
 
75577
Table   Checksum
 
75578
test.t1 <some_value>
 
75579
OPTIMIZE TABLE t1;
 
75580
Table   Op      Msg_type        Msg_text
 
75581
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
75582
# check layout success:    1
 
75583
REPAIR   TABLE t1 EXTENDED;
 
75584
Table   Op      Msg_type        Msg_text
 
75585
test.t1 repair  note    The storage engine for the table doesn't support repair
 
75586
# check layout success:    1
 
75587
TRUNCATE t1;
 
75588
        
 
75589
# check TRUNCATE success:       1
 
75590
# check layout success:    1
 
75591
# End usability test (inc/partition_check.inc)
 
75592
DROP TABLE t1;
 
75593
CREATE TABLE t1 (
 
75594
f_int1 INTEGER,
 
75595
f_int2 INTEGER,
 
75596
f_char1 CHAR(20),
 
75597
f_char2 CHAR(20),
 
75598
f_charbig VARCHAR(1000)
 
75599
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
75600
)
 
75601
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
75602
(PARTITION part1 VALUES IN (0)
 
75603
(SUBPARTITION sp11, SUBPARTITION sp12),
 
75604
PARTITION part2 VALUES IN (1)
 
75605
(SUBPARTITION sp21, SUBPARTITION sp22),
 
75606
PARTITION part3 VALUES IN (2)
 
75607
(SUBPARTITION sp31, SUBPARTITION sp32),
 
75608
PARTITION part4 VALUES IN (NULL)
 
75609
(SUBPARTITION sp41, SUBPARTITION sp42));
 
75610
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75611
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
75612
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
75613
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
75614
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75615
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
75616
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
75617
# Start usability test (inc/partition_check.inc)
 
75618
create_command
 
75619
SHOW CREATE TABLE t1;
 
75620
Table   Create Table
 
75621
t1      CREATE TABLE `t1` (
 
75622
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
75623
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
75624
  `f_char1` char(20) DEFAULT NULL,
 
75625
  `f_char2` char(20) DEFAULT NULL,
 
75626
  `f_charbig` varchar(1000) DEFAULT NULL
 
75627
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
75628
 
 
75629
# check prerequisites-1 success:    1
 
75630
# check COUNT(*) success:    1
 
75631
# check MIN/MAX(f_int1) success:    1
 
75632
# check MIN/MAX(f_int2) success:    1
 
75633
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75634
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
75635
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
75636
WHERE f_int1 IN (2,3);
 
75637
# check prerequisites-3 success:    1
 
75638
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
75639
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
75640
# check read via f_int1 success: 1
 
75641
# check read via f_int2 success: 1
 
75642
        
 
75643
# check multiple-1 success:     1
 
75644
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
75645
        
 
75646
# check multiple-2 success:     1
 
75647
INSERT INTO t1 SELECT * FROM t0_template
 
75648
WHERE MOD(f_int1,3) = 0;
 
75649
        
 
75650
# check multiple-3 success:     1
 
75651
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
75652
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
75653
AND @max_row_div2 + @max_row_div4;
 
75654
        
 
75655
# check multiple-4 success:     1
 
75656
DELETE FROM t1
 
75657
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
75658
AND @max_row_div2 + @max_row_div4 + @max_row;
 
75659
        
 
75660
# check multiple-5 success:     1
 
75661
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
75662
INSERT INTO t1
 
75663
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
75664
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
75665
f_charbig = '#SINGLE#';
 
75666
        
 
75667
# check single-1 success:       1
 
75668
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
75669
INSERT INTO t1
 
75670
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
75671
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
75672
f_charbig = '#SINGLE#';
 
75673
        
 
75674
# check single-2 success:       1
 
75675
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
75676
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
75677
UPDATE t1 SET f_int1 = @cur_value2
 
75678
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
75679
        
 
75680
# check single-3 success:       1
 
75681
SET @cur_value1= -1;
 
75682
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
75683
UPDATE t1 SET f_int1 = @cur_value1
 
75684
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
75685
        
 
75686
# check single-4 success:       1
 
75687
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
75688
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
75689
        
 
75690
# check single-5 success:       1
 
75691
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
75692
        
 
75693
# check single-6 success:       1
 
75694
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
75695
        
 
75696
# check single-7 success:       1
 
75697
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
75698
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
75699
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
75700
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
75701
f_charbig = '#NULL#';
 
75702
INSERT INTO t1
 
75703
SET f_int1 = NULL , f_int2 = -@max_row,
 
75704
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
75705
f_charbig = '#NULL#';
 
75706
ERROR 23000: Column 'f_int1' cannot be null
 
75707
# check null success:    1
 
75708
DELETE FROM t1
 
75709
WHERE f_int1 = 0 AND f_int2 = 0
 
75710
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
75711
AND f_charbig = '#NULL#';
 
75712
SET AUTOCOMMIT= 0;
 
75713
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75714
SELECT f_int1, f_int1, '', '', 'was inserted'
 
75715
FROM t0_template source_tab
 
75716
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
75717
        
 
75718
# check transactions-1 success:         1
 
75719
COMMIT WORK;
 
75720
        
 
75721
# check transactions-2 success:         1
 
75722
ROLLBACK WORK;
 
75723
        
 
75724
# check transactions-3 success:         1
 
75725
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
75726
COMMIT WORK;
 
75727
ROLLBACK WORK;
 
75728
        
 
75729
# check transactions-4 success:         1
 
75730
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75731
SELECT f_int1, f_int1, '', '', 'was inserted'
 
75732
FROM t0_template source_tab
 
75733
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
75734
        
 
75735
# check transactions-5 success:         1
 
75736
ROLLBACK WORK;
 
75737
        
 
75738
# check transactions-6 success:         1
 
75739
# INFO: Storage engine used for t1 seems to be transactional.
 
75740
COMMIT;
 
75741
        
 
75742
# check transactions-7 success:         1
 
75743
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
75744
COMMIT WORK;
 
75745
SET @@session.sql_mode = 'traditional';
 
75746
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
75747
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75748
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
75749
'', '', 'was inserted' FROM t0_template
 
75750
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
75751
ERROR 22012: Division by 0
 
75752
COMMIT;
 
75753
        
 
75754
# check transactions-8 success:         1
 
75755
# INFO: Storage engine used for t1 seems to be able to revert
 
75756
#       changes made by the failing statement.
 
75757
SET @@session.sql_mode = '';
 
75758
SET AUTOCOMMIT= 1;
 
75759
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
75760
COMMIT WORK;
 
75761
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
75762
        
 
75763
# check special-1 success:      1
 
75764
UPDATE t1 SET f_charbig = '';
 
75765
        
 
75766
# check special-2 success:      1
 
75767
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
75768
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75769
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
75770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75771
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75772
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75773
'just inserted' FROM t0_template
 
75774
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75775
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
75776
BEGIN
 
75777
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75778
f_charbig = 'updated by trigger'
 
75779
      WHERE f_int1 = new.f_int1;
 
75780
END|
 
75781
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75782
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
75783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75784
        
 
75785
# check trigger-1 success:      1
 
75786
DROP TRIGGER trg_1;
 
75787
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75788
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75789
f_charbig = 'just inserted'
 
75790
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75791
DELETE FROM t0_aux
 
75792
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75793
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75794
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75795
'just inserted' FROM t0_template
 
75796
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75797
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
75798
BEGIN
 
75799
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75800
f_charbig = 'updated by trigger'
 
75801
      WHERE f_int1 = new.f_int1;
 
75802
END|
 
75803
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75804
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
75805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75806
        
 
75807
# check trigger-2 success:      1
 
75808
DROP TRIGGER trg_1;
 
75809
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75810
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75811
f_charbig = 'just inserted'
 
75812
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75813
DELETE FROM t0_aux
 
75814
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75815
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75816
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75817
'just inserted' FROM t0_template
 
75818
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75819
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
75820
BEGIN
 
75821
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75822
f_charbig = 'updated by trigger'
 
75823
      WHERE f_int1 = new.f_int1;
 
75824
END|
 
75825
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75826
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75827
        
 
75828
# check trigger-3 success:      1
 
75829
DROP TRIGGER trg_1;
 
75830
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75831
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75832
f_charbig = 'just inserted'
 
75833
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75834
DELETE FROM t0_aux
 
75835
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75836
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75837
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75838
'just inserted' FROM t0_template
 
75839
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75840
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
75841
BEGIN
 
75842
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75843
f_charbig = 'updated by trigger'
 
75844
      WHERE f_int1 = - old.f_int1;
 
75845
END|
 
75846
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75847
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75848
        
 
75849
# check trigger-4 success:      1
 
75850
DROP TRIGGER trg_1;
 
75851
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75852
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75853
f_charbig = 'just inserted'
 
75854
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75855
DELETE FROM t0_aux
 
75856
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75857
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75858
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75859
'just inserted' FROM t0_template
 
75860
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75861
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
75862
BEGIN
 
75863
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75864
f_charbig = 'updated by trigger'
 
75865
      WHERE f_int1 = new.f_int1;
 
75866
END|
 
75867
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75868
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75869
        
 
75870
# check trigger-5 success:      1
 
75871
DROP TRIGGER trg_1;
 
75872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75874
f_charbig = 'just inserted'
 
75875
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75876
DELETE FROM t0_aux
 
75877
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75878
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75879
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75880
'just inserted' FROM t0_template
 
75881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75882
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
75883
BEGIN
 
75884
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75885
f_charbig = 'updated by trigger'
 
75886
      WHERE f_int1 = - old.f_int1;
 
75887
END|
 
75888
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
75889
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75890
        
 
75891
# check trigger-6 success:      1
 
75892
DROP TRIGGER trg_1;
 
75893
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75894
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75895
f_charbig = 'just inserted'
 
75896
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75897
DELETE FROM t0_aux
 
75898
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75899
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75900
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75901
'just inserted' FROM t0_template
 
75902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75903
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
75904
BEGIN
 
75905
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75906
f_charbig = 'updated by trigger'
 
75907
      WHERE f_int1 = - old.f_int1;
 
75908
END|
 
75909
DELETE FROM t0_aux
 
75910
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75911
        
 
75912
# check trigger-7 success:      1
 
75913
DROP TRIGGER trg_1;
 
75914
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75915
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75916
f_charbig = 'just inserted'
 
75917
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75918
DELETE FROM t0_aux
 
75919
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75920
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
75921
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
75922
'just inserted' FROM t0_template
 
75923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75924
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
75925
BEGIN
 
75926
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
75927
f_charbig = 'updated by trigger'
 
75928
      WHERE f_int1 = - old.f_int1;
 
75929
END|
 
75930
DELETE FROM t0_aux
 
75931
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
75932
        
 
75933
# check trigger-8 success:      1
 
75934
DROP TRIGGER trg_1;
 
75935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75937
f_charbig = 'just inserted'
 
75938
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
75939
DELETE FROM t0_aux
 
75940
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75941
DELETE FROM t1
 
75942
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
75943
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
75944
BEGIN
 
75945
SET new.f_int1 = old.f_int1 + @max_row,
 
75946
new.f_int2 = old.f_int2 - @max_row,
 
75947
new.f_charbig = '####updated per update trigger####';
 
75948
END|
 
75949
UPDATE t1
 
75950
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
75951
f_charbig = '####updated per update statement itself####';
 
75952
        
 
75953
# check trigger-9 success:      1
 
75954
DROP TRIGGER trg_2;
 
75955
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75956
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75957
f_charbig = CONCAT('===',f_char1,'===');
 
75958
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
75959
BEGIN
 
75960
SET new.f_int1 = new.f_int1 + @max_row,
 
75961
new.f_int2 = new.f_int2 - @max_row,
 
75962
new.f_charbig = '####updated per update trigger####';
 
75963
END|
 
75964
UPDATE t1
 
75965
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
75966
f_charbig = '####updated per update statement itself####';
 
75967
        
 
75968
# check trigger-10 success:     1
 
75969
DROP TRIGGER trg_2;
 
75970
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
75971
f_int2 = CAST(f_char1 AS SIGNED INT),
 
75972
f_charbig = CONCAT('===',f_char1,'===');
 
75973
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
75974
BEGIN
 
75975
SET new.f_int1 = @my_max1 + @counter,
 
75976
new.f_int2 = @my_min2 - @counter,
 
75977
new.f_charbig = '####updated per insert trigger####';
 
75978
SET @counter = @counter + 1;
 
75979
END|
 
75980
SET @counter = 1;
 
75981
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
75982
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
75983
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
75984
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
75985
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
75986
ORDER BY f_int1;
 
75987
DROP TRIGGER trg_3;
 
75988
        
 
75989
# check trigger-11 success:     1
 
75990
DELETE FROM t1
 
75991
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
75992
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
75993
AND f_charbig = '####updated per insert trigger####';
 
75994
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
75995
BEGIN
 
75996
SET new.f_int1 = @my_max1 + @counter,
 
75997
new.f_int2 = @my_min2 - @counter,
 
75998
new.f_charbig = '####updated per insert trigger####';
 
75999
SET @counter = @counter + 1;
 
76000
END|
 
76001
SET @counter = 1;
 
76002
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
76003
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
76004
SELECT CAST(f_int1 AS CHAR),
 
76005
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
76006
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
76007
ORDER BY f_int1;
 
76008
DROP TRIGGER trg_3;
 
76009
        
 
76010
# check trigger-12 success:     1
 
76011
DELETE FROM t1
 
76012
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
76013
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
76014
AND f_charbig = '####updated per insert trigger####';
 
76015
ANALYZE  TABLE t1;
 
76016
Table   Op      Msg_type        Msg_text
 
76017
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
76018
CHECK    TABLE t1 EXTENDED;
 
76019
Table   Op      Msg_type        Msg_text
 
76020
test.t1 check   note    The storage engine for the table doesn't support check
 
76021
CHECKSUM TABLE t1 EXTENDED;
 
76022
Table   Checksum
 
76023
test.t1 <some_value>
 
76024
OPTIMIZE TABLE t1;
 
76025
Table   Op      Msg_type        Msg_text
 
76026
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
76027
# check layout success:    1
 
76028
REPAIR   TABLE t1 EXTENDED;
 
76029
Table   Op      Msg_type        Msg_text
 
76030
test.t1 repair  note    The storage engine for the table doesn't support repair
 
76031
# check layout success:    1
 
76032
TRUNCATE t1;
 
76033
        
 
76034
# check TRUNCATE success:       1
 
76035
# check layout success:    1
 
76036
# End usability test (inc/partition_check.inc)
 
76037
DROP TABLE t1;
 
76038
CREATE TABLE t1 (
 
76039
f_int1 INTEGER,
 
76040
f_int2 INTEGER,
 
76041
f_char1 CHAR(20),
 
76042
f_char2 CHAR(20),
 
76043
f_charbig VARCHAR(1000)
 
76044
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
76045
)
 
76046
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
76047
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
76048
(PARTITION part1 VALUES IN (0),
 
76049
 PARTITION part2 VALUES IN (1),
 
76050
 PARTITION part3 VALUES IN (NULL));
 
76051
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76052
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
76053
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
76054
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
76055
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76056
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
76057
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
76058
# Start usability test (inc/partition_check.inc)
 
76059
create_command
 
76060
SHOW CREATE TABLE t1;
 
76061
Table   Create Table
 
76062
t1      CREATE TABLE `t1` (
 
76063
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
76064
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
76065
  `f_char1` char(20) DEFAULT NULL,
 
76066
  `f_char2` char(20) DEFAULT NULL,
 
76067
  `f_charbig` varchar(1000) DEFAULT NULL
 
76068
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
76069
 
 
76070
# check prerequisites-1 success:    1
 
76071
# check COUNT(*) success:    1
 
76072
# check MIN/MAX(f_int1) success:    1
 
76073
# check MIN/MAX(f_int2) success:    1
 
76074
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76075
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
76076
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
76077
WHERE f_int1 IN (2,3);
 
76078
# check prerequisites-3 success:    1
 
76079
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
76080
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
76081
# check read via f_int1 success: 1
 
76082
# check read via f_int2 success: 1
 
76083
        
 
76084
# check multiple-1 success:     1
 
76085
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
76086
        
 
76087
# check multiple-2 success:     1
 
76088
INSERT INTO t1 SELECT * FROM t0_template
 
76089
WHERE MOD(f_int1,3) = 0;
 
76090
        
 
76091
# check multiple-3 success:     1
 
76092
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
76093
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
76094
AND @max_row_div2 + @max_row_div4;
 
76095
        
 
76096
# check multiple-4 success:     1
 
76097
DELETE FROM t1
 
76098
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
76099
AND @max_row_div2 + @max_row_div4 + @max_row;
 
76100
        
 
76101
# check multiple-5 success:     1
 
76102
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
76103
INSERT INTO t1
 
76104
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
76105
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
76106
f_charbig = '#SINGLE#';
 
76107
        
 
76108
# check single-1 success:       1
 
76109
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
76110
INSERT INTO t1
 
76111
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
76112
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
76113
f_charbig = '#SINGLE#';
 
76114
        
 
76115
# check single-2 success:       1
 
76116
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
76117
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
76118
UPDATE t1 SET f_int1 = @cur_value2
 
76119
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
76120
        
 
76121
# check single-3 success:       1
 
76122
SET @cur_value1= -1;
 
76123
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
76124
UPDATE t1 SET f_int1 = @cur_value1
 
76125
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
76126
        
 
76127
# check single-4 success:       1
 
76128
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
76129
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
76130
        
 
76131
# check single-5 success:       1
 
76132
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
76133
        
 
76134
# check single-6 success:       1
 
76135
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
76136
        
 
76137
# check single-7 success:       1
 
76138
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
76139
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
76140
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
76141
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
76142
f_charbig = '#NULL#';
 
76143
INSERT INTO t1
 
76144
SET f_int1 = NULL , f_int2 = -@max_row,
 
76145
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
76146
f_charbig = '#NULL#';
 
76147
ERROR 23000: Column 'f_int1' cannot be null
 
76148
# check null success:    1
 
76149
DELETE FROM t1
 
76150
WHERE f_int1 = 0 AND f_int2 = 0
 
76151
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
76152
AND f_charbig = '#NULL#';
 
76153
SET AUTOCOMMIT= 0;
 
76154
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76155
SELECT f_int1, f_int1, '', '', 'was inserted'
 
76156
FROM t0_template source_tab
 
76157
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
76158
        
 
76159
# check transactions-1 success:         1
 
76160
COMMIT WORK;
 
76161
        
 
76162
# check transactions-2 success:         1
 
76163
ROLLBACK WORK;
 
76164
        
 
76165
# check transactions-3 success:         1
 
76166
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
76167
COMMIT WORK;
 
76168
ROLLBACK WORK;
 
76169
        
 
76170
# check transactions-4 success:         1
 
76171
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76172
SELECT f_int1, f_int1, '', '', 'was inserted'
 
76173
FROM t0_template source_tab
 
76174
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
76175
        
 
76176
# check transactions-5 success:         1
 
76177
ROLLBACK WORK;
 
76178
        
 
76179
# check transactions-6 success:         1
 
76180
# INFO: Storage engine used for t1 seems to be transactional.
 
76181
COMMIT;
 
76182
        
 
76183
# check transactions-7 success:         1
 
76184
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
76185
COMMIT WORK;
 
76186
SET @@session.sql_mode = 'traditional';
 
76187
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
76188
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76189
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
76190
'', '', 'was inserted' FROM t0_template
 
76191
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
76192
ERROR 22012: Division by 0
 
76193
COMMIT;
 
76194
        
 
76195
# check transactions-8 success:         1
 
76196
# INFO: Storage engine used for t1 seems to be able to revert
 
76197
#       changes made by the failing statement.
 
76198
SET @@session.sql_mode = '';
 
76199
SET AUTOCOMMIT= 1;
 
76200
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
76201
COMMIT WORK;
 
76202
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
76203
        
 
76204
# check special-1 success:      1
 
76205
UPDATE t1 SET f_charbig = '';
 
76206
        
 
76207
# check special-2 success:      1
 
76208
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
76209
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76210
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
76211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76212
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76213
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76214
'just inserted' FROM t0_template
 
76215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76216
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
76217
BEGIN
 
76218
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76219
f_charbig = 'updated by trigger'
 
76220
      WHERE f_int1 = new.f_int1;
 
76221
END|
 
76222
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76223
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
76224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76225
        
 
76226
# check trigger-1 success:      1
 
76227
DROP TRIGGER trg_1;
 
76228
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76229
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76230
f_charbig = 'just inserted'
 
76231
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76232
DELETE FROM t0_aux
 
76233
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76234
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76235
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76236
'just inserted' FROM t0_template
 
76237
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76238
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
76239
BEGIN
 
76240
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76241
f_charbig = 'updated by trigger'
 
76242
      WHERE f_int1 = new.f_int1;
 
76243
END|
 
76244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76245
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
76246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76247
        
 
76248
# check trigger-2 success:      1
 
76249
DROP TRIGGER trg_1;
 
76250
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76251
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76252
f_charbig = 'just inserted'
 
76253
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76254
DELETE FROM t0_aux
 
76255
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76257
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76258
'just inserted' FROM t0_template
 
76259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76260
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
76261
BEGIN
 
76262
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76263
f_charbig = 'updated by trigger'
 
76264
      WHERE f_int1 = new.f_int1;
 
76265
END|
 
76266
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76267
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76268
        
 
76269
# check trigger-3 success:      1
 
76270
DROP TRIGGER trg_1;
 
76271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76272
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76273
f_charbig = 'just inserted'
 
76274
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76275
DELETE FROM t0_aux
 
76276
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76278
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76279
'just inserted' FROM t0_template
 
76280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76281
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
76282
BEGIN
 
76283
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76284
f_charbig = 'updated by trigger'
 
76285
      WHERE f_int1 = - old.f_int1;
 
76286
END|
 
76287
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76288
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76289
        
 
76290
# check trigger-4 success:      1
 
76291
DROP TRIGGER trg_1;
 
76292
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76293
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76294
f_charbig = 'just inserted'
 
76295
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76296
DELETE FROM t0_aux
 
76297
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76298
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76299
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76300
'just inserted' FROM t0_template
 
76301
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76302
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
76303
BEGIN
 
76304
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76305
f_charbig = 'updated by trigger'
 
76306
      WHERE f_int1 = new.f_int1;
 
76307
END|
 
76308
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76309
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76310
        
 
76311
# check trigger-5 success:      1
 
76312
DROP TRIGGER trg_1;
 
76313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76315
f_charbig = 'just inserted'
 
76316
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76317
DELETE FROM t0_aux
 
76318
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76319
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76320
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76321
'just inserted' FROM t0_template
 
76322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76323
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
76324
BEGIN
 
76325
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76326
f_charbig = 'updated by trigger'
 
76327
      WHERE f_int1 = - old.f_int1;
 
76328
END|
 
76329
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76330
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76331
        
 
76332
# check trigger-6 success:      1
 
76333
DROP TRIGGER trg_1;
 
76334
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76335
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76336
f_charbig = 'just inserted'
 
76337
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76338
DELETE FROM t0_aux
 
76339
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76341
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76342
'just inserted' FROM t0_template
 
76343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76344
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
76345
BEGIN
 
76346
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76347
f_charbig = 'updated by trigger'
 
76348
      WHERE f_int1 = - old.f_int1;
 
76349
END|
 
76350
DELETE FROM t0_aux
 
76351
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76352
        
 
76353
# check trigger-7 success:      1
 
76354
DROP TRIGGER trg_1;
 
76355
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76356
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76357
f_charbig = 'just inserted'
 
76358
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76359
DELETE FROM t0_aux
 
76360
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76361
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76362
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76363
'just inserted' FROM t0_template
 
76364
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76365
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
76366
BEGIN
 
76367
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76368
f_charbig = 'updated by trigger'
 
76369
      WHERE f_int1 = - old.f_int1;
 
76370
END|
 
76371
DELETE FROM t0_aux
 
76372
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76373
        
 
76374
# check trigger-8 success:      1
 
76375
DROP TRIGGER trg_1;
 
76376
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76377
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76378
f_charbig = 'just inserted'
 
76379
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76380
DELETE FROM t0_aux
 
76381
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76382
DELETE FROM t1
 
76383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76384
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
76385
BEGIN
 
76386
SET new.f_int1 = old.f_int1 + @max_row,
 
76387
new.f_int2 = old.f_int2 - @max_row,
 
76388
new.f_charbig = '####updated per update trigger####';
 
76389
END|
 
76390
UPDATE t1
 
76391
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
76392
f_charbig = '####updated per update statement itself####';
 
76393
        
 
76394
# check trigger-9 success:      1
 
76395
DROP TRIGGER trg_2;
 
76396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76398
f_charbig = CONCAT('===',f_char1,'===');
 
76399
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
76400
BEGIN
 
76401
SET new.f_int1 = new.f_int1 + @max_row,
 
76402
new.f_int2 = new.f_int2 - @max_row,
 
76403
new.f_charbig = '####updated per update trigger####';
 
76404
END|
 
76405
UPDATE t1
 
76406
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
76407
f_charbig = '####updated per update statement itself####';
 
76408
        
 
76409
# check trigger-10 success:     1
 
76410
DROP TRIGGER trg_2;
 
76411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76413
f_charbig = CONCAT('===',f_char1,'===');
 
76414
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
76415
BEGIN
 
76416
SET new.f_int1 = @my_max1 + @counter,
 
76417
new.f_int2 = @my_min2 - @counter,
 
76418
new.f_charbig = '####updated per insert trigger####';
 
76419
SET @counter = @counter + 1;
 
76420
END|
 
76421
SET @counter = 1;
 
76422
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
76423
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76424
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
76425
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
76426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
76427
ORDER BY f_int1;
 
76428
DROP TRIGGER trg_3;
 
76429
        
 
76430
# check trigger-11 success:     1
 
76431
DELETE FROM t1
 
76432
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
76433
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
76434
AND f_charbig = '####updated per insert trigger####';
 
76435
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
76436
BEGIN
 
76437
SET new.f_int1 = @my_max1 + @counter,
 
76438
new.f_int2 = @my_min2 - @counter,
 
76439
new.f_charbig = '####updated per insert trigger####';
 
76440
SET @counter = @counter + 1;
 
76441
END|
 
76442
SET @counter = 1;
 
76443
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
76444
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
76445
SELECT CAST(f_int1 AS CHAR),
 
76446
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
76447
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
76448
ORDER BY f_int1;
 
76449
DROP TRIGGER trg_3;
 
76450
        
 
76451
# check trigger-12 success:     1
 
76452
DELETE FROM t1
 
76453
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
76454
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
76455
AND f_charbig = '####updated per insert trigger####';
 
76456
ANALYZE  TABLE t1;
 
76457
Table   Op      Msg_type        Msg_text
 
76458
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
76459
CHECK    TABLE t1 EXTENDED;
 
76460
Table   Op      Msg_type        Msg_text
 
76461
test.t1 check   note    The storage engine for the table doesn't support check
 
76462
CHECKSUM TABLE t1 EXTENDED;
 
76463
Table   Checksum
 
76464
test.t1 <some_value>
 
76465
OPTIMIZE TABLE t1;
 
76466
Table   Op      Msg_type        Msg_text
 
76467
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
76468
# check layout success:    1
 
76469
REPAIR   TABLE t1 EXTENDED;
 
76470
Table   Op      Msg_type        Msg_text
 
76471
test.t1 repair  note    The storage engine for the table doesn't support repair
 
76472
# check layout success:    1
 
76473
TRUNCATE t1;
 
76474
        
 
76475
# check TRUNCATE success:       1
 
76476
# check layout success:    1
 
76477
# End usability test (inc/partition_check.inc)
 
76478
DROP TABLE t1;
 
76479
DROP TABLE IF EXISTS t1;
 
76480
CREATE TABLE t1 (
 
76481
f_int1 INTEGER,
 
76482
f_int2 INTEGER,
 
76483
f_char1 CHAR(20),
 
76484
f_char2 CHAR(20),
 
76485
f_charbig VARCHAR(1000)
 
76486
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
76487
)
 
76488
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
76489
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76490
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
76491
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
76492
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
76493
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76494
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
76495
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
76496
# Start usability test (inc/partition_check.inc)
 
76497
create_command
 
76498
SHOW CREATE TABLE t1;
 
76499
Table   Create Table
 
76500
t1      CREATE TABLE `t1` (
 
76501
  `f_int1` int(11) DEFAULT NULL,
 
76502
  `f_int2` int(11) DEFAULT NULL,
 
76503
  `f_char1` char(20) DEFAULT NULL,
 
76504
  `f_char2` char(20) DEFAULT NULL,
 
76505
  `f_charbig` varchar(1000) DEFAULT NULL
 
76506
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
76507
 
 
76508
# check prerequisites-1 success:    1
 
76509
# check COUNT(*) success:    1
 
76510
# check MIN/MAX(f_int1) success:    1
 
76511
# check MIN/MAX(f_int2) success:    1
 
76512
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76513
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
76514
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
76515
WHERE f_int1 IN (2,3);
 
76516
# check prerequisites-3 success:    1
 
76517
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
76518
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
76519
# check read via f_int1 success: 1
 
76520
# check read via f_int2 success: 1
 
76521
        
 
76522
# check multiple-1 success:     1
 
76523
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
76524
        
 
76525
# check multiple-2 success:     1
 
76526
INSERT INTO t1 SELECT * FROM t0_template
 
76527
WHERE MOD(f_int1,3) = 0;
 
76528
        
 
76529
# check multiple-3 success:     1
 
76530
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
76531
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
76532
AND @max_row_div2 + @max_row_div4;
 
76533
        
 
76534
# check multiple-4 success:     1
 
76535
DELETE FROM t1
 
76536
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
76537
AND @max_row_div2 + @max_row_div4 + @max_row;
 
76538
        
 
76539
# check multiple-5 success:     1
 
76540
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
76541
INSERT INTO t1
 
76542
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
76543
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
76544
f_charbig = '#SINGLE#';
 
76545
        
 
76546
# check single-1 success:       1
 
76547
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
76548
INSERT INTO t1
 
76549
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
76550
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
76551
f_charbig = '#SINGLE#';
 
76552
        
 
76553
# check single-2 success:       1
 
76554
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
76555
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
76556
UPDATE t1 SET f_int1 = @cur_value2
 
76557
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
76558
        
 
76559
# check single-3 success:       1
 
76560
SET @cur_value1= -1;
 
76561
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
76562
UPDATE t1 SET f_int1 = @cur_value1
 
76563
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
76564
        
 
76565
# check single-4 success:       1
 
76566
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
76567
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
76568
        
 
76569
# check single-5 success:       1
 
76570
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
76571
        
 
76572
# check single-6 success:       1
 
76573
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
76574
        
 
76575
# check single-7 success:       1
 
76576
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
76577
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
76578
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
76579
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
76580
f_charbig = '#NULL#';
 
76581
INSERT INTO t1
 
76582
SET f_int1 = NULL , f_int2 = -@max_row,
 
76583
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
76584
f_charbig = '#NULL#';
 
76585
# check null success:    1
 
76586
        
 
76587
# check null-1 success:         1
 
76588
UPDATE t1 SET f_int1 = -@max_row
 
76589
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
76590
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
76591
        
 
76592
# check null-2 success:         1
 
76593
UPDATE t1 SET f_int1 = NULL
 
76594
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
76595
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
76596
        
 
76597
# check null-3 success:         1
 
76598
DELETE FROM t1
 
76599
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
76600
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
76601
        
 
76602
# check null-4 success:         1
 
76603
DELETE FROM t1
 
76604
WHERE f_int1 = 0 AND f_int2 = 0
 
76605
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
76606
AND f_charbig = '#NULL#';
 
76607
SET AUTOCOMMIT= 0;
 
76608
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76609
SELECT f_int1, f_int1, '', '', 'was inserted'
 
76610
FROM t0_template source_tab
 
76611
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
76612
        
 
76613
# check transactions-1 success:         1
 
76614
COMMIT WORK;
 
76615
        
 
76616
# check transactions-2 success:         1
 
76617
ROLLBACK WORK;
 
76618
        
 
76619
# check transactions-3 success:         1
 
76620
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
76621
COMMIT WORK;
 
76622
ROLLBACK WORK;
 
76623
        
 
76624
# check transactions-4 success:         1
 
76625
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76626
SELECT f_int1, f_int1, '', '', 'was inserted'
 
76627
FROM t0_template source_tab
 
76628
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
76629
        
 
76630
# check transactions-5 success:         1
 
76631
ROLLBACK WORK;
 
76632
        
 
76633
# check transactions-6 success:         1
 
76634
# INFO: Storage engine used for t1 seems to be transactional.
 
76635
COMMIT;
 
76636
        
 
76637
# check transactions-7 success:         1
 
76638
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
76639
COMMIT WORK;
 
76640
SET @@session.sql_mode = 'traditional';
 
76641
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
76642
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76643
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
76644
'', '', 'was inserted' FROM t0_template
 
76645
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
76646
ERROR 22012: Division by 0
 
76647
COMMIT;
 
76648
        
 
76649
# check transactions-8 success:         1
 
76650
# INFO: Storage engine used for t1 seems to be able to revert
 
76651
#       changes made by the failing statement.
 
76652
SET @@session.sql_mode = '';
 
76653
SET AUTOCOMMIT= 1;
 
76654
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
76655
COMMIT WORK;
 
76656
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
76657
        
 
76658
# check special-1 success:      1
 
76659
UPDATE t1 SET f_charbig = '';
 
76660
        
 
76661
# check special-2 success:      1
 
76662
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
76663
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76664
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
76665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76666
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76667
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76668
'just inserted' FROM t0_template
 
76669
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76670
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
76671
BEGIN
 
76672
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76673
f_charbig = 'updated by trigger'
 
76674
      WHERE f_int1 = new.f_int1;
 
76675
END|
 
76676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76677
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
76678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76679
        
 
76680
# check trigger-1 success:      1
 
76681
DROP TRIGGER trg_1;
 
76682
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76683
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76684
f_charbig = 'just inserted'
 
76685
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76686
DELETE FROM t0_aux
 
76687
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76689
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76690
'just inserted' FROM t0_template
 
76691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76692
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
76693
BEGIN
 
76694
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76695
f_charbig = 'updated by trigger'
 
76696
      WHERE f_int1 = new.f_int1;
 
76697
END|
 
76698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76699
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
76700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76701
        
 
76702
# check trigger-2 success:      1
 
76703
DROP TRIGGER trg_1;
 
76704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76706
f_charbig = 'just inserted'
 
76707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76708
DELETE FROM t0_aux
 
76709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76712
'just inserted' FROM t0_template
 
76713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76714
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
76715
BEGIN
 
76716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76717
f_charbig = 'updated by trigger'
 
76718
      WHERE f_int1 = new.f_int1;
 
76719
END|
 
76720
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76721
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76722
        
 
76723
# check trigger-3 success:      1
 
76724
DROP TRIGGER trg_1;
 
76725
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76726
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76727
f_charbig = 'just inserted'
 
76728
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76729
DELETE FROM t0_aux
 
76730
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76731
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76732
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76733
'just inserted' FROM t0_template
 
76734
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76735
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
76736
BEGIN
 
76737
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76738
f_charbig = 'updated by trigger'
 
76739
      WHERE f_int1 = - old.f_int1;
 
76740
END|
 
76741
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76742
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76743
        
 
76744
# check trigger-4 success:      1
 
76745
DROP TRIGGER trg_1;
 
76746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76748
f_charbig = 'just inserted'
 
76749
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76750
DELETE FROM t0_aux
 
76751
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76752
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76753
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76754
'just inserted' FROM t0_template
 
76755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76756
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
76757
BEGIN
 
76758
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76759
f_charbig = 'updated by trigger'
 
76760
      WHERE f_int1 = new.f_int1;
 
76761
END|
 
76762
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76763
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76764
        
 
76765
# check trigger-5 success:      1
 
76766
DROP TRIGGER trg_1;
 
76767
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76768
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76769
f_charbig = 'just inserted'
 
76770
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76771
DELETE FROM t0_aux
 
76772
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76773
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76774
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76775
'just inserted' FROM t0_template
 
76776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76777
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
76778
BEGIN
 
76779
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76780
f_charbig = 'updated by trigger'
 
76781
      WHERE f_int1 = - old.f_int1;
 
76782
END|
 
76783
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
76784
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76785
        
 
76786
# check trigger-6 success:      1
 
76787
DROP TRIGGER trg_1;
 
76788
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76789
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76790
f_charbig = 'just inserted'
 
76791
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76792
DELETE FROM t0_aux
 
76793
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76794
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76795
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76796
'just inserted' FROM t0_template
 
76797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76798
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
76799
BEGIN
 
76800
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76801
f_charbig = 'updated by trigger'
 
76802
      WHERE f_int1 = - old.f_int1;
 
76803
END|
 
76804
DELETE FROM t0_aux
 
76805
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76806
        
 
76807
# check trigger-7 success:      1
 
76808
DROP TRIGGER trg_1;
 
76809
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76810
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76811
f_charbig = 'just inserted'
 
76812
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76813
DELETE FROM t0_aux
 
76814
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76815
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76816
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
76817
'just inserted' FROM t0_template
 
76818
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76819
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
76820
BEGIN
 
76821
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
76822
f_charbig = 'updated by trigger'
 
76823
      WHERE f_int1 = - old.f_int1;
 
76824
END|
 
76825
DELETE FROM t0_aux
 
76826
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
76827
        
 
76828
# check trigger-8 success:      1
 
76829
DROP TRIGGER trg_1;
 
76830
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76831
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76832
f_charbig = 'just inserted'
 
76833
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
76834
DELETE FROM t0_aux
 
76835
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76836
DELETE FROM t1
 
76837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
76838
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
76839
BEGIN
 
76840
SET new.f_int1 = old.f_int1 + @max_row,
 
76841
new.f_int2 = old.f_int2 - @max_row,
 
76842
new.f_charbig = '####updated per update trigger####';
 
76843
END|
 
76844
UPDATE t1
 
76845
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
76846
f_charbig = '####updated per update statement itself####';
 
76847
        
 
76848
# check trigger-9 success:      1
 
76849
DROP TRIGGER trg_2;
 
76850
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76851
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76852
f_charbig = CONCAT('===',f_char1,'===');
 
76853
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
76854
BEGIN
 
76855
SET new.f_int1 = new.f_int1 + @max_row,
 
76856
new.f_int2 = new.f_int2 - @max_row,
 
76857
new.f_charbig = '####updated per update trigger####';
 
76858
END|
 
76859
UPDATE t1
 
76860
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
76861
f_charbig = '####updated per update statement itself####';
 
76862
        
 
76863
# check trigger-10 success:     1
 
76864
DROP TRIGGER trg_2;
 
76865
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
76866
f_int2 = CAST(f_char1 AS SIGNED INT),
 
76867
f_charbig = CONCAT('===',f_char1,'===');
 
76868
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
76869
BEGIN
 
76870
SET new.f_int1 = @my_max1 + @counter,
 
76871
new.f_int2 = @my_min2 - @counter,
 
76872
new.f_charbig = '####updated per insert trigger####';
 
76873
SET @counter = @counter + 1;
 
76874
END|
 
76875
SET @counter = 1;
 
76876
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
76877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76878
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
76879
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
76880
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
76881
ORDER BY f_int1;
 
76882
DROP TRIGGER trg_3;
 
76883
        
 
76884
# check trigger-11 success:     1
 
76885
DELETE FROM t1
 
76886
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
76887
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
76888
AND f_charbig = '####updated per insert trigger####';
 
76889
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
76890
BEGIN
 
76891
SET new.f_int1 = @my_max1 + @counter,
 
76892
new.f_int2 = @my_min2 - @counter,
 
76893
new.f_charbig = '####updated per insert trigger####';
 
76894
SET @counter = @counter + 1;
 
76895
END|
 
76896
SET @counter = 1;
 
76897
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
76898
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
76899
SELECT CAST(f_int1 AS CHAR),
 
76900
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
76901
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
76902
ORDER BY f_int1;
 
76903
DROP TRIGGER trg_3;
 
76904
        
 
76905
# check trigger-12 success:     1
 
76906
DELETE FROM t1
 
76907
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
76908
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
76909
AND f_charbig = '####updated per insert trigger####';
 
76910
ANALYZE  TABLE t1;
 
76911
Table   Op      Msg_type        Msg_text
 
76912
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
76913
CHECK    TABLE t1 EXTENDED;
 
76914
Table   Op      Msg_type        Msg_text
 
76915
test.t1 check   note    The storage engine for the table doesn't support check
 
76916
CHECKSUM TABLE t1 EXTENDED;
 
76917
Table   Checksum
 
76918
test.t1 <some_value>
 
76919
OPTIMIZE TABLE t1;
 
76920
Table   Op      Msg_type        Msg_text
 
76921
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
76922
# check layout success:    1
 
76923
REPAIR   TABLE t1 EXTENDED;
 
76924
Table   Op      Msg_type        Msg_text
 
76925
test.t1 repair  note    The storage engine for the table doesn't support repair
 
76926
# check layout success:    1
 
76927
TRUNCATE t1;
 
76928
        
 
76929
# check TRUNCATE success:       1
 
76930
# check layout success:    1
 
76931
# End usability test (inc/partition_check.inc)
 
76932
DROP TABLE t1;
 
76933
CREATE TABLE t1 (
 
76934
f_int1 INTEGER,
 
76935
f_int2 INTEGER,
 
76936
f_char1 CHAR(20),
 
76937
f_char2 CHAR(20),
 
76938
f_charbig VARCHAR(1000)
 
76939
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
76940
)
 
76941
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
76942
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76943
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
76944
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
76945
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
76946
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
76947
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
76948
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
76949
# Start usability test (inc/partition_check.inc)
 
76950
create_command
 
76951
SHOW CREATE TABLE t1;
 
76952
Table   Create Table
 
76953
t1      CREATE TABLE `t1` (
 
76954
  `f_int1` int(11) DEFAULT NULL,
 
76955
  `f_int2` int(11) DEFAULT NULL,
 
76956
  `f_char1` char(20) DEFAULT NULL,
 
76957
  `f_char2` char(20) DEFAULT NULL,
 
76958
  `f_charbig` varchar(1000) DEFAULT NULL
 
76959
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
76960
 
 
76961
# check prerequisites-1 success:    1
 
76962
# check COUNT(*) success:    1
 
76963
# check MIN/MAX(f_int1) success:    1
 
76964
# check MIN/MAX(f_int2) success:    1
 
76965
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
76966
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
76967
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
76968
WHERE f_int1 IN (2,3);
 
76969
# check prerequisites-3 success:    1
 
76970
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
76971
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
76972
# check read via f_int1 success: 1
 
76973
# check read via f_int2 success: 1
 
76974
        
 
76975
# check multiple-1 success:     1
 
76976
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
76977
        
 
76978
# check multiple-2 success:     1
 
76979
INSERT INTO t1 SELECT * FROM t0_template
 
76980
WHERE MOD(f_int1,3) = 0;
 
76981
        
 
76982
# check multiple-3 success:     1
 
76983
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
76984
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
76985
AND @max_row_div2 + @max_row_div4;
 
76986
        
 
76987
# check multiple-4 success:     1
 
76988
DELETE FROM t1
 
76989
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
76990
AND @max_row_div2 + @max_row_div4 + @max_row;
 
76991
        
 
76992
# check multiple-5 success:     1
 
76993
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
76994
INSERT INTO t1
 
76995
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
76996
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
76997
f_charbig = '#SINGLE#';
 
76998
        
 
76999
# check single-1 success:       1
 
77000
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
77001
INSERT INTO t1
 
77002
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
77003
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
77004
f_charbig = '#SINGLE#';
 
77005
        
 
77006
# check single-2 success:       1
 
77007
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
77008
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
77009
UPDATE t1 SET f_int1 = @cur_value2
 
77010
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
77011
        
 
77012
# check single-3 success:       1
 
77013
SET @cur_value1= -1;
 
77014
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
77015
UPDATE t1 SET f_int1 = @cur_value1
 
77016
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
77017
        
 
77018
# check single-4 success:       1
 
77019
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
77020
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
77021
        
 
77022
# check single-5 success:       1
 
77023
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
77024
        
 
77025
# check single-6 success:       1
 
77026
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
77027
        
 
77028
# check single-7 success:       1
 
77029
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
77030
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
77031
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
77032
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
77033
f_charbig = '#NULL#';
 
77034
INSERT INTO t1
 
77035
SET f_int1 = NULL , f_int2 = -@max_row,
 
77036
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
77037
f_charbig = '#NULL#';
 
77038
# check null success:    1
 
77039
        
 
77040
# check null-1 success:         1
 
77041
UPDATE t1 SET f_int1 = -@max_row
 
77042
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77043
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77044
        
 
77045
# check null-2 success:         1
 
77046
UPDATE t1 SET f_int1 = NULL
 
77047
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77048
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77049
        
 
77050
# check null-3 success:         1
 
77051
DELETE FROM t1
 
77052
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77053
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77054
        
 
77055
# check null-4 success:         1
 
77056
DELETE FROM t1
 
77057
WHERE f_int1 = 0 AND f_int2 = 0
 
77058
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
77059
AND f_charbig = '#NULL#';
 
77060
SET AUTOCOMMIT= 0;
 
77061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77062
SELECT f_int1, f_int1, '', '', 'was inserted'
 
77063
FROM t0_template source_tab
 
77064
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
77065
        
 
77066
# check transactions-1 success:         1
 
77067
COMMIT WORK;
 
77068
        
 
77069
# check transactions-2 success:         1
 
77070
ROLLBACK WORK;
 
77071
        
 
77072
# check transactions-3 success:         1
 
77073
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
77074
COMMIT WORK;
 
77075
ROLLBACK WORK;
 
77076
        
 
77077
# check transactions-4 success:         1
 
77078
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77079
SELECT f_int1, f_int1, '', '', 'was inserted'
 
77080
FROM t0_template source_tab
 
77081
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
77082
        
 
77083
# check transactions-5 success:         1
 
77084
ROLLBACK WORK;
 
77085
        
 
77086
# check transactions-6 success:         1
 
77087
# INFO: Storage engine used for t1 seems to be transactional.
 
77088
COMMIT;
 
77089
        
 
77090
# check transactions-7 success:         1
 
77091
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
77092
COMMIT WORK;
 
77093
SET @@session.sql_mode = 'traditional';
 
77094
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
77095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77096
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
77097
'', '', 'was inserted' FROM t0_template
 
77098
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
77099
ERROR 22012: Division by 0
 
77100
COMMIT;
 
77101
        
 
77102
# check transactions-8 success:         1
 
77103
# INFO: Storage engine used for t1 seems to be able to revert
 
77104
#       changes made by the failing statement.
 
77105
SET @@session.sql_mode = '';
 
77106
SET AUTOCOMMIT= 1;
 
77107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
77108
COMMIT WORK;
 
77109
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
77110
        
 
77111
# check special-1 success:      1
 
77112
UPDATE t1 SET f_charbig = '';
 
77113
        
 
77114
# check special-2 success:      1
 
77115
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
77116
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77117
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
77118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77119
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77120
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77121
'just inserted' FROM t0_template
 
77122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77123
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
77124
BEGIN
 
77125
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77126
f_charbig = 'updated by trigger'
 
77127
      WHERE f_int1 = new.f_int1;
 
77128
END|
 
77129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77130
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
77131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77132
        
 
77133
# check trigger-1 success:      1
 
77134
DROP TRIGGER trg_1;
 
77135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77137
f_charbig = 'just inserted'
 
77138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77139
DELETE FROM t0_aux
 
77140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77143
'just inserted' FROM t0_template
 
77144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77145
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
77146
BEGIN
 
77147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77148
f_charbig = 'updated by trigger'
 
77149
      WHERE f_int1 = new.f_int1;
 
77150
END|
 
77151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77152
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
77153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77154
        
 
77155
# check trigger-2 success:      1
 
77156
DROP TRIGGER trg_1;
 
77157
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77158
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77159
f_charbig = 'just inserted'
 
77160
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77161
DELETE FROM t0_aux
 
77162
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77164
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77165
'just inserted' FROM t0_template
 
77166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77167
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
77168
BEGIN
 
77169
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77170
f_charbig = 'updated by trigger'
 
77171
      WHERE f_int1 = new.f_int1;
 
77172
END|
 
77173
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77174
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77175
        
 
77176
# check trigger-3 success:      1
 
77177
DROP TRIGGER trg_1;
 
77178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77180
f_charbig = 'just inserted'
 
77181
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77182
DELETE FROM t0_aux
 
77183
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77184
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77185
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77186
'just inserted' FROM t0_template
 
77187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77188
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
77189
BEGIN
 
77190
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77191
f_charbig = 'updated by trigger'
 
77192
      WHERE f_int1 = - old.f_int1;
 
77193
END|
 
77194
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77195
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77196
        
 
77197
# check trigger-4 success:      1
 
77198
DROP TRIGGER trg_1;
 
77199
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77200
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77201
f_charbig = 'just inserted'
 
77202
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77203
DELETE FROM t0_aux
 
77204
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77205
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77206
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77207
'just inserted' FROM t0_template
 
77208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77209
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
77210
BEGIN
 
77211
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77212
f_charbig = 'updated by trigger'
 
77213
      WHERE f_int1 = new.f_int1;
 
77214
END|
 
77215
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77216
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77217
        
 
77218
# check trigger-5 success:      1
 
77219
DROP TRIGGER trg_1;
 
77220
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77221
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77222
f_charbig = 'just inserted'
 
77223
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77224
DELETE FROM t0_aux
 
77225
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77226
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77227
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77228
'just inserted' FROM t0_template
 
77229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77230
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
77231
BEGIN
 
77232
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77233
f_charbig = 'updated by trigger'
 
77234
      WHERE f_int1 = - old.f_int1;
 
77235
END|
 
77236
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77237
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77238
        
 
77239
# check trigger-6 success:      1
 
77240
DROP TRIGGER trg_1;
 
77241
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77242
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77243
f_charbig = 'just inserted'
 
77244
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77245
DELETE FROM t0_aux
 
77246
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77248
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77249
'just inserted' FROM t0_template
 
77250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77251
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
77252
BEGIN
 
77253
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77254
f_charbig = 'updated by trigger'
 
77255
      WHERE f_int1 = - old.f_int1;
 
77256
END|
 
77257
DELETE FROM t0_aux
 
77258
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77259
        
 
77260
# check trigger-7 success:      1
 
77261
DROP TRIGGER trg_1;
 
77262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77264
f_charbig = 'just inserted'
 
77265
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77266
DELETE FROM t0_aux
 
77267
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77270
'just inserted' FROM t0_template
 
77271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77272
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
77273
BEGIN
 
77274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77275
f_charbig = 'updated by trigger'
 
77276
      WHERE f_int1 = - old.f_int1;
 
77277
END|
 
77278
DELETE FROM t0_aux
 
77279
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77280
        
 
77281
# check trigger-8 success:      1
 
77282
DROP TRIGGER trg_1;
 
77283
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77284
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77285
f_charbig = 'just inserted'
 
77286
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77287
DELETE FROM t0_aux
 
77288
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77289
DELETE FROM t1
 
77290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77291
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
77292
BEGIN
 
77293
SET new.f_int1 = old.f_int1 + @max_row,
 
77294
new.f_int2 = old.f_int2 - @max_row,
 
77295
new.f_charbig = '####updated per update trigger####';
 
77296
END|
 
77297
UPDATE t1
 
77298
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
77299
f_charbig = '####updated per update statement itself####';
 
77300
        
 
77301
# check trigger-9 success:      1
 
77302
DROP TRIGGER trg_2;
 
77303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77305
f_charbig = CONCAT('===',f_char1,'===');
 
77306
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
77307
BEGIN
 
77308
SET new.f_int1 = new.f_int1 + @max_row,
 
77309
new.f_int2 = new.f_int2 - @max_row,
 
77310
new.f_charbig = '####updated per update trigger####';
 
77311
END|
 
77312
UPDATE t1
 
77313
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
77314
f_charbig = '####updated per update statement itself####';
 
77315
        
 
77316
# check trigger-10 success:     1
 
77317
DROP TRIGGER trg_2;
 
77318
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77319
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77320
f_charbig = CONCAT('===',f_char1,'===');
 
77321
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
77322
BEGIN
 
77323
SET new.f_int1 = @my_max1 + @counter,
 
77324
new.f_int2 = @my_min2 - @counter,
 
77325
new.f_charbig = '####updated per insert trigger####';
 
77326
SET @counter = @counter + 1;
 
77327
END|
 
77328
SET @counter = 1;
 
77329
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
77330
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77331
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
77332
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
77333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
77334
ORDER BY f_int1;
 
77335
DROP TRIGGER trg_3;
 
77336
        
 
77337
# check trigger-11 success:     1
 
77338
DELETE FROM t1
 
77339
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
77340
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
77341
AND f_charbig = '####updated per insert trigger####';
 
77342
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
77343
BEGIN
 
77344
SET new.f_int1 = @my_max1 + @counter,
 
77345
new.f_int2 = @my_min2 - @counter,
 
77346
new.f_charbig = '####updated per insert trigger####';
 
77347
SET @counter = @counter + 1;
 
77348
END|
 
77349
SET @counter = 1;
 
77350
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
77351
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
77352
SELECT CAST(f_int1 AS CHAR),
 
77353
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
77354
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
77355
ORDER BY f_int1;
 
77356
DROP TRIGGER trg_3;
 
77357
        
 
77358
# check trigger-12 success:     1
 
77359
DELETE FROM t1
 
77360
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
77361
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
77362
AND f_charbig = '####updated per insert trigger####';
 
77363
ANALYZE  TABLE t1;
 
77364
Table   Op      Msg_type        Msg_text
 
77365
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
77366
CHECK    TABLE t1 EXTENDED;
 
77367
Table   Op      Msg_type        Msg_text
 
77368
test.t1 check   note    The storage engine for the table doesn't support check
 
77369
CHECKSUM TABLE t1 EXTENDED;
 
77370
Table   Checksum
 
77371
test.t1 <some_value>
 
77372
OPTIMIZE TABLE t1;
 
77373
Table   Op      Msg_type        Msg_text
 
77374
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
77375
# check layout success:    1
 
77376
REPAIR   TABLE t1 EXTENDED;
 
77377
Table   Op      Msg_type        Msg_text
 
77378
test.t1 repair  note    The storage engine for the table doesn't support repair
 
77379
# check layout success:    1
 
77380
TRUNCATE t1;
 
77381
        
 
77382
# check TRUNCATE success:       1
 
77383
# check layout success:    1
 
77384
# End usability test (inc/partition_check.inc)
 
77385
DROP TABLE t1;
 
77386
CREATE TABLE t1 (
 
77387
f_int1 INTEGER,
 
77388
f_int2 INTEGER,
 
77389
f_char1 CHAR(20),
 
77390
f_char2 CHAR(20),
 
77391
f_charbig VARCHAR(1000)
 
77392
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
77393
)
 
77394
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
77395
(PARTITION part_3 VALUES IN (-3),
 
77396
PARTITION part_2 VALUES IN (-2),
 
77397
PARTITION part_1 VALUES IN (-1),
 
77398
PARTITION part_N VALUES IN (NULL),
 
77399
PARTITION part0 VALUES IN (0),
 
77400
PARTITION part1 VALUES IN (1),
 
77401
PARTITION part2 VALUES IN (2),
 
77402
PARTITION part3 VALUES IN (3));
 
77403
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77404
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
77405
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
77406
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
77407
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77408
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
77409
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
77410
# Start usability test (inc/partition_check.inc)
 
77411
create_command
 
77412
SHOW CREATE TABLE t1;
 
77413
Table   Create Table
 
77414
t1      CREATE TABLE `t1` (
 
77415
  `f_int1` int(11) DEFAULT NULL,
 
77416
  `f_int2` int(11) DEFAULT NULL,
 
77417
  `f_char1` char(20) DEFAULT NULL,
 
77418
  `f_char2` char(20) DEFAULT NULL,
 
77419
  `f_charbig` varchar(1000) DEFAULT NULL
 
77420
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
77421
 
 
77422
# check prerequisites-1 success:    1
 
77423
# check COUNT(*) success:    1
 
77424
# check MIN/MAX(f_int1) success:    1
 
77425
# check MIN/MAX(f_int2) success:    1
 
77426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77427
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
77428
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
77429
WHERE f_int1 IN (2,3);
 
77430
# check prerequisites-3 success:    1
 
77431
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
77432
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
77433
# check read via f_int1 success: 1
 
77434
# check read via f_int2 success: 1
 
77435
        
 
77436
# check multiple-1 success:     1
 
77437
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
77438
        
 
77439
# check multiple-2 success:     1
 
77440
INSERT INTO t1 SELECT * FROM t0_template
 
77441
WHERE MOD(f_int1,3) = 0;
 
77442
        
 
77443
# check multiple-3 success:     1
 
77444
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
77445
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
77446
AND @max_row_div2 + @max_row_div4;
 
77447
        
 
77448
# check multiple-4 success:     1
 
77449
DELETE FROM t1
 
77450
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
77451
AND @max_row_div2 + @max_row_div4 + @max_row;
 
77452
        
 
77453
# check multiple-5 success:     1
 
77454
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
77455
INSERT INTO t1
 
77456
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
77457
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
77458
f_charbig = '#SINGLE#';
 
77459
        
 
77460
# check single-1 success:       1
 
77461
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
77462
INSERT INTO t1
 
77463
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
77464
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
77465
f_charbig = '#SINGLE#';
 
77466
        
 
77467
# check single-2 success:       1
 
77468
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
77469
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
77470
UPDATE t1 SET f_int1 = @cur_value2
 
77471
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
77472
        
 
77473
# check single-3 success:       1
 
77474
SET @cur_value1= -1;
 
77475
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
77476
UPDATE t1 SET f_int1 = @cur_value1
 
77477
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
77478
        
 
77479
# check single-4 success:       1
 
77480
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
77481
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
77482
        
 
77483
# check single-5 success:       1
 
77484
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
77485
        
 
77486
# check single-6 success:       1
 
77487
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
77488
        
 
77489
# check single-7 success:       1
 
77490
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
77491
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
77492
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
77493
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
77494
f_charbig = '#NULL#';
 
77495
INSERT INTO t1
 
77496
SET f_int1 = NULL , f_int2 = -@max_row,
 
77497
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
77498
f_charbig = '#NULL#';
 
77499
# check null success:    1
 
77500
        
 
77501
# check null-1 success:         1
 
77502
UPDATE t1 SET f_int1 = -@max_row
 
77503
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77504
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77505
        
 
77506
# check null-2 success:         1
 
77507
UPDATE t1 SET f_int1 = NULL
 
77508
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77509
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77510
        
 
77511
# check null-3 success:         1
 
77512
DELETE FROM t1
 
77513
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77514
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77515
        
 
77516
# check null-4 success:         1
 
77517
DELETE FROM t1
 
77518
WHERE f_int1 = 0 AND f_int2 = 0
 
77519
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
77520
AND f_charbig = '#NULL#';
 
77521
SET AUTOCOMMIT= 0;
 
77522
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77523
SELECT f_int1, f_int1, '', '', 'was inserted'
 
77524
FROM t0_template source_tab
 
77525
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
77526
        
 
77527
# check transactions-1 success:         1
 
77528
COMMIT WORK;
 
77529
        
 
77530
# check transactions-2 success:         1
 
77531
ROLLBACK WORK;
 
77532
        
 
77533
# check transactions-3 success:         1
 
77534
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
77535
COMMIT WORK;
 
77536
ROLLBACK WORK;
 
77537
        
 
77538
# check transactions-4 success:         1
 
77539
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77540
SELECT f_int1, f_int1, '', '', 'was inserted'
 
77541
FROM t0_template source_tab
 
77542
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
77543
        
 
77544
# check transactions-5 success:         1
 
77545
ROLLBACK WORK;
 
77546
        
 
77547
# check transactions-6 success:         1
 
77548
# INFO: Storage engine used for t1 seems to be transactional.
 
77549
COMMIT;
 
77550
        
 
77551
# check transactions-7 success:         1
 
77552
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
77553
COMMIT WORK;
 
77554
SET @@session.sql_mode = 'traditional';
 
77555
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
77556
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77557
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
77558
'', '', 'was inserted' FROM t0_template
 
77559
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
77560
ERROR 22012: Division by 0
 
77561
COMMIT;
 
77562
        
 
77563
# check transactions-8 success:         1
 
77564
# INFO: Storage engine used for t1 seems to be able to revert
 
77565
#       changes made by the failing statement.
 
77566
SET @@session.sql_mode = '';
 
77567
SET AUTOCOMMIT= 1;
 
77568
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
77569
COMMIT WORK;
 
77570
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
77571
        
 
77572
# check special-1 success:      1
 
77573
UPDATE t1 SET f_charbig = '';
 
77574
        
 
77575
# check special-2 success:      1
 
77576
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
77577
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77578
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
77579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77580
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77581
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77582
'just inserted' FROM t0_template
 
77583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77584
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
77585
BEGIN
 
77586
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77587
f_charbig = 'updated by trigger'
 
77588
      WHERE f_int1 = new.f_int1;
 
77589
END|
 
77590
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77591
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
77592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77593
        
 
77594
# check trigger-1 success:      1
 
77595
DROP TRIGGER trg_1;
 
77596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77598
f_charbig = 'just inserted'
 
77599
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77600
DELETE FROM t0_aux
 
77601
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77604
'just inserted' FROM t0_template
 
77605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77606
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
77607
BEGIN
 
77608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77609
f_charbig = 'updated by trigger'
 
77610
      WHERE f_int1 = new.f_int1;
 
77611
END|
 
77612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77613
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
77614
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77615
        
 
77616
# check trigger-2 success:      1
 
77617
DROP TRIGGER trg_1;
 
77618
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77619
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77620
f_charbig = 'just inserted'
 
77621
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77622
DELETE FROM t0_aux
 
77623
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77625
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77626
'just inserted' FROM t0_template
 
77627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77628
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
77629
BEGIN
 
77630
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77631
f_charbig = 'updated by trigger'
 
77632
      WHERE f_int1 = new.f_int1;
 
77633
END|
 
77634
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77635
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77636
        
 
77637
# check trigger-3 success:      1
 
77638
DROP TRIGGER trg_1;
 
77639
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77640
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77641
f_charbig = 'just inserted'
 
77642
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77643
DELETE FROM t0_aux
 
77644
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77645
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77646
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77647
'just inserted' FROM t0_template
 
77648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77649
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
77650
BEGIN
 
77651
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77652
f_charbig = 'updated by trigger'
 
77653
      WHERE f_int1 = - old.f_int1;
 
77654
END|
 
77655
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77656
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77657
        
 
77658
# check trigger-4 success:      1
 
77659
DROP TRIGGER trg_1;
 
77660
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77661
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77662
f_charbig = 'just inserted'
 
77663
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77664
DELETE FROM t0_aux
 
77665
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77666
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77667
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77668
'just inserted' FROM t0_template
 
77669
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77670
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
77671
BEGIN
 
77672
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77673
f_charbig = 'updated by trigger'
 
77674
      WHERE f_int1 = new.f_int1;
 
77675
END|
 
77676
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77677
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77678
        
 
77679
# check trigger-5 success:      1
 
77680
DROP TRIGGER trg_1;
 
77681
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77682
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77683
f_charbig = 'just inserted'
 
77684
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77685
DELETE FROM t0_aux
 
77686
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77687
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77688
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77689
'just inserted' FROM t0_template
 
77690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77691
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
77692
BEGIN
 
77693
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77694
f_charbig = 'updated by trigger'
 
77695
      WHERE f_int1 = - old.f_int1;
 
77696
END|
 
77697
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
77698
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77699
        
 
77700
# check trigger-6 success:      1
 
77701
DROP TRIGGER trg_1;
 
77702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77704
f_charbig = 'just inserted'
 
77705
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77706
DELETE FROM t0_aux
 
77707
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77709
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77710
'just inserted' FROM t0_template
 
77711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77712
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
77713
BEGIN
 
77714
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77715
f_charbig = 'updated by trigger'
 
77716
      WHERE f_int1 = - old.f_int1;
 
77717
END|
 
77718
DELETE FROM t0_aux
 
77719
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77720
        
 
77721
# check trigger-7 success:      1
 
77722
DROP TRIGGER trg_1;
 
77723
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77724
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77725
f_charbig = 'just inserted'
 
77726
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77727
DELETE FROM t0_aux
 
77728
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77729
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77730
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
77731
'just inserted' FROM t0_template
 
77732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77733
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
77734
BEGIN
 
77735
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
77736
f_charbig = 'updated by trigger'
 
77737
      WHERE f_int1 = - old.f_int1;
 
77738
END|
 
77739
DELETE FROM t0_aux
 
77740
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
77741
        
 
77742
# check trigger-8 success:      1
 
77743
DROP TRIGGER trg_1;
 
77744
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77745
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77746
f_charbig = 'just inserted'
 
77747
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
77748
DELETE FROM t0_aux
 
77749
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77750
DELETE FROM t1
 
77751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
77752
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
77753
BEGIN
 
77754
SET new.f_int1 = old.f_int1 + @max_row,
 
77755
new.f_int2 = old.f_int2 - @max_row,
 
77756
new.f_charbig = '####updated per update trigger####';
 
77757
END|
 
77758
UPDATE t1
 
77759
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
77760
f_charbig = '####updated per update statement itself####';
 
77761
        
 
77762
# check trigger-9 success:      1
 
77763
DROP TRIGGER trg_2;
 
77764
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77765
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77766
f_charbig = CONCAT('===',f_char1,'===');
 
77767
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
77768
BEGIN
 
77769
SET new.f_int1 = new.f_int1 + @max_row,
 
77770
new.f_int2 = new.f_int2 - @max_row,
 
77771
new.f_charbig = '####updated per update trigger####';
 
77772
END|
 
77773
UPDATE t1
 
77774
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
77775
f_charbig = '####updated per update statement itself####';
 
77776
        
 
77777
# check trigger-10 success:     1
 
77778
DROP TRIGGER trg_2;
 
77779
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
77780
f_int2 = CAST(f_char1 AS SIGNED INT),
 
77781
f_charbig = CONCAT('===',f_char1,'===');
 
77782
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
77783
BEGIN
 
77784
SET new.f_int1 = @my_max1 + @counter,
 
77785
new.f_int2 = @my_min2 - @counter,
 
77786
new.f_charbig = '####updated per insert trigger####';
 
77787
SET @counter = @counter + 1;
 
77788
END|
 
77789
SET @counter = 1;
 
77790
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
77791
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77792
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
77793
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
77794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
77795
ORDER BY f_int1;
 
77796
DROP TRIGGER trg_3;
 
77797
        
 
77798
# check trigger-11 success:     1
 
77799
DELETE FROM t1
 
77800
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
77801
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
77802
AND f_charbig = '####updated per insert trigger####';
 
77803
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
77804
BEGIN
 
77805
SET new.f_int1 = @my_max1 + @counter,
 
77806
new.f_int2 = @my_min2 - @counter,
 
77807
new.f_charbig = '####updated per insert trigger####';
 
77808
SET @counter = @counter + 1;
 
77809
END|
 
77810
SET @counter = 1;
 
77811
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
77812
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
77813
SELECT CAST(f_int1 AS CHAR),
 
77814
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
77815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
77816
ORDER BY f_int1;
 
77817
DROP TRIGGER trg_3;
 
77818
        
 
77819
# check trigger-12 success:     1
 
77820
DELETE FROM t1
 
77821
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
77822
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
77823
AND f_charbig = '####updated per insert trigger####';
 
77824
ANALYZE  TABLE t1;
 
77825
Table   Op      Msg_type        Msg_text
 
77826
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
77827
CHECK    TABLE t1 EXTENDED;
 
77828
Table   Op      Msg_type        Msg_text
 
77829
test.t1 check   note    The storage engine for the table doesn't support check
 
77830
CHECKSUM TABLE t1 EXTENDED;
 
77831
Table   Checksum
 
77832
test.t1 <some_value>
 
77833
OPTIMIZE TABLE t1;
 
77834
Table   Op      Msg_type        Msg_text
 
77835
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
77836
# check layout success:    1
 
77837
REPAIR   TABLE t1 EXTENDED;
 
77838
Table   Op      Msg_type        Msg_text
 
77839
test.t1 repair  note    The storage engine for the table doesn't support repair
 
77840
# check layout success:    1
 
77841
TRUNCATE t1;
 
77842
        
 
77843
# check TRUNCATE success:       1
 
77844
# check layout success:    1
 
77845
# End usability test (inc/partition_check.inc)
 
77846
DROP TABLE t1;
 
77847
CREATE TABLE t1 (
 
77848
f_int1 INTEGER,
 
77849
f_int2 INTEGER,
 
77850
f_char1 CHAR(20),
 
77851
f_char2 CHAR(20),
 
77852
f_charbig VARCHAR(1000)
 
77853
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
77854
)
 
77855
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
77856
(PARTITION parta VALUES LESS THAN (0),
 
77857
PARTITION partb VALUES LESS THAN (5),
 
77858
PARTITION partc VALUES LESS THAN (10),
 
77859
PARTITION partd VALUES LESS THAN (10 + 5),
 
77860
PARTITION parte VALUES LESS THAN (20),
 
77861
PARTITION partf VALUES LESS THAN (2147483646));
 
77862
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77863
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
77864
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
77865
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
77866
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
77867
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
77868
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
77869
# Start usability test (inc/partition_check.inc)
 
77870
create_command
 
77871
SHOW CREATE TABLE t1;
 
77872
Table   Create Table
 
77873
t1      CREATE TABLE `t1` (
 
77874
  `f_int1` int(11) DEFAULT NULL,
 
77875
  `f_int2` int(11) DEFAULT NULL,
 
77876
  `f_char1` char(20) DEFAULT NULL,
 
77877
  `f_char2` char(20) DEFAULT NULL,
 
77878
  `f_charbig` varchar(1000) DEFAULT NULL
 
77879
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
77880
 
 
77881
# check prerequisites-1 success:    1
 
77882
# check COUNT(*) success:    1
 
77883
# check MIN/MAX(f_int1) success:    1
 
77884
# check MIN/MAX(f_int2) success:    1
 
77885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77886
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
77887
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
77888
WHERE f_int1 IN (2,3);
 
77889
# check prerequisites-3 success:    1
 
77890
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
77891
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
77892
# check read via f_int1 success: 1
 
77893
# check read via f_int2 success: 1
 
77894
        
 
77895
# check multiple-1 success:     1
 
77896
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
77897
        
 
77898
# check multiple-2 success:     1
 
77899
INSERT INTO t1 SELECT * FROM t0_template
 
77900
WHERE MOD(f_int1,3) = 0;
 
77901
        
 
77902
# check multiple-3 success:     1
 
77903
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
77904
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
77905
AND @max_row_div2 + @max_row_div4;
 
77906
        
 
77907
# check multiple-4 success:     1
 
77908
DELETE FROM t1
 
77909
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
77910
AND @max_row_div2 + @max_row_div4 + @max_row;
 
77911
        
 
77912
# check multiple-5 success:     1
 
77913
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
77914
INSERT INTO t1
 
77915
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
77916
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
77917
f_charbig = '#SINGLE#';
 
77918
        
 
77919
# check single-1 success:       1
 
77920
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
77921
INSERT INTO t1
 
77922
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
77923
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
77924
f_charbig = '#SINGLE#';
 
77925
        
 
77926
# check single-2 success:       1
 
77927
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
77928
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
77929
UPDATE t1 SET f_int1 = @cur_value2
 
77930
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
77931
        
 
77932
# check single-3 success:       1
 
77933
SET @cur_value1= -1;
 
77934
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
77935
UPDATE t1 SET f_int1 = @cur_value1
 
77936
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
77937
        
 
77938
# check single-4 success:       1
 
77939
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
77940
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
77941
        
 
77942
# check single-5 success:       1
 
77943
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
77944
        
 
77945
# check single-6 success:       1
 
77946
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
77947
ERROR HY000: Table has no partition for value 2147483647
 
77948
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
77949
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
77950
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
77951
f_charbig = '#NULL#';
 
77952
INSERT INTO t1
 
77953
SET f_int1 = NULL , f_int2 = -@max_row,
 
77954
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
77955
f_charbig = '#NULL#';
 
77956
# check null success:    1
 
77957
        
 
77958
# check null-1 success:         1
 
77959
UPDATE t1 SET f_int1 = -@max_row
 
77960
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77961
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77962
        
 
77963
# check null-2 success:         1
 
77964
UPDATE t1 SET f_int1 = NULL
 
77965
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77966
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77967
        
 
77968
# check null-3 success:         1
 
77969
DELETE FROM t1
 
77970
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
77971
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
77972
        
 
77973
# check null-4 success:         1
 
77974
DELETE FROM t1
 
77975
WHERE f_int1 = 0 AND f_int2 = 0
 
77976
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
77977
AND f_charbig = '#NULL#';
 
77978
SET AUTOCOMMIT= 0;
 
77979
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77980
SELECT f_int1, f_int1, '', '', 'was inserted'
 
77981
FROM t0_template source_tab
 
77982
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
77983
        
 
77984
# check transactions-1 success:         1
 
77985
COMMIT WORK;
 
77986
        
 
77987
# check transactions-2 success:         1
 
77988
ROLLBACK WORK;
 
77989
        
 
77990
# check transactions-3 success:         1
 
77991
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
77992
COMMIT WORK;
 
77993
ROLLBACK WORK;
 
77994
        
 
77995
# check transactions-4 success:         1
 
77996
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
77997
SELECT f_int1, f_int1, '', '', 'was inserted'
 
77998
FROM t0_template source_tab
 
77999
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78000
        
 
78001
# check transactions-5 success:         1
 
78002
ROLLBACK WORK;
 
78003
        
 
78004
# check transactions-6 success:         1
 
78005
# INFO: Storage engine used for t1 seems to be transactional.
 
78006
COMMIT;
 
78007
        
 
78008
# check transactions-7 success:         1
 
78009
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78010
COMMIT WORK;
 
78011
SET @@session.sql_mode = 'traditional';
 
78012
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
78013
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78014
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
78015
'', '', 'was inserted' FROM t0_template
 
78016
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78017
ERROR 22012: Division by 0
 
78018
COMMIT;
 
78019
        
 
78020
# check transactions-8 success:         1
 
78021
# INFO: Storage engine used for t1 seems to be able to revert
 
78022
#       changes made by the failing statement.
 
78023
SET @@session.sql_mode = '';
 
78024
SET AUTOCOMMIT= 1;
 
78025
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78026
COMMIT WORK;
 
78027
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
78028
        
 
78029
# check special-1 success:      1
 
78030
UPDATE t1 SET f_charbig = '';
 
78031
        
 
78032
# check special-2 success:      1
 
78033
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
78034
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78035
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
78036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78037
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78038
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78039
'just inserted' FROM t0_template
 
78040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78041
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
78042
BEGIN
 
78043
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78044
f_charbig = 'updated by trigger'
 
78045
      WHERE f_int1 = new.f_int1;
 
78046
END|
 
78047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78048
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
78049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78050
        
 
78051
# check trigger-1 success:      1
 
78052
DROP TRIGGER trg_1;
 
78053
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78054
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78055
f_charbig = 'just inserted'
 
78056
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78057
DELETE FROM t0_aux
 
78058
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78059
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78060
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78061
'just inserted' FROM t0_template
 
78062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78063
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
78064
BEGIN
 
78065
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78066
f_charbig = 'updated by trigger'
 
78067
      WHERE f_int1 = new.f_int1;
 
78068
END|
 
78069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78070
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
78071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78072
        
 
78073
# check trigger-2 success:      1
 
78074
DROP TRIGGER trg_1;
 
78075
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78076
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78077
f_charbig = 'just inserted'
 
78078
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78079
DELETE FROM t0_aux
 
78080
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78083
'just inserted' FROM t0_template
 
78084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78085
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
78086
BEGIN
 
78087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78088
f_charbig = 'updated by trigger'
 
78089
      WHERE f_int1 = new.f_int1;
 
78090
END|
 
78091
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78092
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78093
        
 
78094
# check trigger-3 success:      1
 
78095
DROP TRIGGER trg_1;
 
78096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78098
f_charbig = 'just inserted'
 
78099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78100
DELETE FROM t0_aux
 
78101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78103
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78104
'just inserted' FROM t0_template
 
78105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78106
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
78107
BEGIN
 
78108
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78109
f_charbig = 'updated by trigger'
 
78110
      WHERE f_int1 = - old.f_int1;
 
78111
END|
 
78112
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78113
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78114
        
 
78115
# check trigger-4 success:      1
 
78116
DROP TRIGGER trg_1;
 
78117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78119
f_charbig = 'just inserted'
 
78120
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78121
DELETE FROM t0_aux
 
78122
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78123
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78124
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78125
'just inserted' FROM t0_template
 
78126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78127
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
78128
BEGIN
 
78129
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78130
f_charbig = 'updated by trigger'
 
78131
      WHERE f_int1 = new.f_int1;
 
78132
END|
 
78133
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78134
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78135
        
 
78136
# check trigger-5 success:      1
 
78137
DROP TRIGGER trg_1;
 
78138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78140
f_charbig = 'just inserted'
 
78141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78142
DELETE FROM t0_aux
 
78143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78146
'just inserted' FROM t0_template
 
78147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78148
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
78149
BEGIN
 
78150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78151
f_charbig = 'updated by trigger'
 
78152
      WHERE f_int1 = - old.f_int1;
 
78153
END|
 
78154
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78155
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78156
        
 
78157
# check trigger-6 success:      1
 
78158
DROP TRIGGER trg_1;
 
78159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78161
f_charbig = 'just inserted'
 
78162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78163
DELETE FROM t0_aux
 
78164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78167
'just inserted' FROM t0_template
 
78168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78169
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
78170
BEGIN
 
78171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78172
f_charbig = 'updated by trigger'
 
78173
      WHERE f_int1 = - old.f_int1;
 
78174
END|
 
78175
DELETE FROM t0_aux
 
78176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78177
        
 
78178
# check trigger-7 success:      1
 
78179
DROP TRIGGER trg_1;
 
78180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78182
f_charbig = 'just inserted'
 
78183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78184
DELETE FROM t0_aux
 
78185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78186
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78187
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78188
'just inserted' FROM t0_template
 
78189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78190
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
78191
BEGIN
 
78192
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78193
f_charbig = 'updated by trigger'
 
78194
      WHERE f_int1 = - old.f_int1;
 
78195
END|
 
78196
DELETE FROM t0_aux
 
78197
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78198
        
 
78199
# check trigger-8 success:      1
 
78200
DROP TRIGGER trg_1;
 
78201
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78202
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78203
f_charbig = 'just inserted'
 
78204
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78205
DELETE FROM t0_aux
 
78206
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78207
DELETE FROM t1
 
78208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78209
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
78210
BEGIN
 
78211
SET new.f_int1 = old.f_int1 + @max_row,
 
78212
new.f_int2 = old.f_int2 - @max_row,
 
78213
new.f_charbig = '####updated per update trigger####';
 
78214
END|
 
78215
UPDATE t1
 
78216
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
78217
f_charbig = '####updated per update statement itself####';
 
78218
        
 
78219
# check trigger-9 success:      1
 
78220
DROP TRIGGER trg_2;
 
78221
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78222
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78223
f_charbig = CONCAT('===',f_char1,'===');
 
78224
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
78225
BEGIN
 
78226
SET new.f_int1 = new.f_int1 + @max_row,
 
78227
new.f_int2 = new.f_int2 - @max_row,
 
78228
new.f_charbig = '####updated per update trigger####';
 
78229
END|
 
78230
UPDATE t1
 
78231
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
78232
f_charbig = '####updated per update statement itself####';
 
78233
        
 
78234
# check trigger-10 success:     1
 
78235
DROP TRIGGER trg_2;
 
78236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78238
f_charbig = CONCAT('===',f_char1,'===');
 
78239
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
78240
BEGIN
 
78241
SET new.f_int1 = @my_max1 + @counter,
 
78242
new.f_int2 = @my_min2 - @counter,
 
78243
new.f_charbig = '####updated per insert trigger####';
 
78244
SET @counter = @counter + 1;
 
78245
END|
 
78246
SET @counter = 1;
 
78247
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
78248
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78249
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
78250
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
78251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
78252
ORDER BY f_int1;
 
78253
DROP TRIGGER trg_3;
 
78254
        
 
78255
# check trigger-11 success:     1
 
78256
DELETE FROM t1
 
78257
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
78258
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
78259
AND f_charbig = '####updated per insert trigger####';
 
78260
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
78261
BEGIN
 
78262
SET new.f_int1 = @my_max1 + @counter,
 
78263
new.f_int2 = @my_min2 - @counter,
 
78264
new.f_charbig = '####updated per insert trigger####';
 
78265
SET @counter = @counter + 1;
 
78266
END|
 
78267
SET @counter = 1;
 
78268
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
78269
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
78270
SELECT CAST(f_int1 AS CHAR),
 
78271
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
78272
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
78273
ORDER BY f_int1;
 
78274
DROP TRIGGER trg_3;
 
78275
        
 
78276
# check trigger-12 success:     1
 
78277
DELETE FROM t1
 
78278
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
78279
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
78280
AND f_charbig = '####updated per insert trigger####';
 
78281
ANALYZE  TABLE t1;
 
78282
Table   Op      Msg_type        Msg_text
 
78283
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
78284
CHECK    TABLE t1 EXTENDED;
 
78285
Table   Op      Msg_type        Msg_text
 
78286
test.t1 check   note    The storage engine for the table doesn't support check
 
78287
CHECKSUM TABLE t1 EXTENDED;
 
78288
Table   Checksum
 
78289
test.t1 <some_value>
 
78290
OPTIMIZE TABLE t1;
 
78291
Table   Op      Msg_type        Msg_text
 
78292
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
78293
# check layout success:    1
 
78294
REPAIR   TABLE t1 EXTENDED;
 
78295
Table   Op      Msg_type        Msg_text
 
78296
test.t1 repair  note    The storage engine for the table doesn't support repair
 
78297
# check layout success:    1
 
78298
TRUNCATE t1;
 
78299
        
 
78300
# check TRUNCATE success:       1
 
78301
# check layout success:    1
 
78302
# End usability test (inc/partition_check.inc)
 
78303
DROP TABLE t1;
 
78304
CREATE TABLE t1 (
 
78305
f_int1 INTEGER,
 
78306
f_int2 INTEGER,
 
78307
f_char1 CHAR(20),
 
78308
f_char2 CHAR(20),
 
78309
f_charbig VARCHAR(1000)
 
78310
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
78311
)
 
78312
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
78313
(PARTITION parta VALUES LESS THAN (0),
 
78314
PARTITION partb VALUES LESS THAN (5),
 
78315
PARTITION partc VALUES LESS THAN (10),
 
78316
PARTITION partd VALUES LESS THAN (2147483646));
 
78317
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78318
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
78319
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
78320
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
78321
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78322
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
78323
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
78324
# Start usability test (inc/partition_check.inc)
 
78325
create_command
 
78326
SHOW CREATE TABLE t1;
 
78327
Table   Create Table
 
78328
t1      CREATE TABLE `t1` (
 
78329
  `f_int1` int(11) DEFAULT NULL,
 
78330
  `f_int2` int(11) DEFAULT NULL,
 
78331
  `f_char1` char(20) DEFAULT NULL,
 
78332
  `f_char2` char(20) DEFAULT NULL,
 
78333
  `f_charbig` varchar(1000) DEFAULT NULL
 
78334
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
78335
 
 
78336
# check prerequisites-1 success:    1
 
78337
# check COUNT(*) success:    1
 
78338
# check MIN/MAX(f_int1) success:    1
 
78339
# check MIN/MAX(f_int2) success:    1
 
78340
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78341
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
78342
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
78343
WHERE f_int1 IN (2,3);
 
78344
# check prerequisites-3 success:    1
 
78345
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
78346
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
78347
# check read via f_int1 success: 1
 
78348
# check read via f_int2 success: 1
 
78349
        
 
78350
# check multiple-1 success:     1
 
78351
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
78352
        
 
78353
# check multiple-2 success:     1
 
78354
INSERT INTO t1 SELECT * FROM t0_template
 
78355
WHERE MOD(f_int1,3) = 0;
 
78356
        
 
78357
# check multiple-3 success:     1
 
78358
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
78359
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
78360
AND @max_row_div2 + @max_row_div4;
 
78361
        
 
78362
# check multiple-4 success:     1
 
78363
DELETE FROM t1
 
78364
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
78365
AND @max_row_div2 + @max_row_div4 + @max_row;
 
78366
        
 
78367
# check multiple-5 success:     1
 
78368
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
78369
INSERT INTO t1
 
78370
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
78371
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
78372
f_charbig = '#SINGLE#';
 
78373
        
 
78374
# check single-1 success:       1
 
78375
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
78376
INSERT INTO t1
 
78377
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
78378
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
78379
f_charbig = '#SINGLE#';
 
78380
        
 
78381
# check single-2 success:       1
 
78382
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
78383
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
78384
UPDATE t1 SET f_int1 = @cur_value2
 
78385
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
78386
        
 
78387
# check single-3 success:       1
 
78388
SET @cur_value1= -1;
 
78389
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
78390
UPDATE t1 SET f_int1 = @cur_value1
 
78391
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
78392
        
 
78393
# check single-4 success:       1
 
78394
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
78395
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
78396
        
 
78397
# check single-5 success:       1
 
78398
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
78399
        
 
78400
# check single-6 success:       1
 
78401
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
78402
ERROR HY000: Table has no partition for value 2147483647
 
78403
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
78404
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
78405
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
78406
f_charbig = '#NULL#';
 
78407
INSERT INTO t1
 
78408
SET f_int1 = NULL , f_int2 = -@max_row,
 
78409
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
78410
f_charbig = '#NULL#';
 
78411
# check null success:    1
 
78412
        
 
78413
# check null-1 success:         1
 
78414
UPDATE t1 SET f_int1 = -@max_row
 
78415
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
78416
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
78417
        
 
78418
# check null-2 success:         1
 
78419
UPDATE t1 SET f_int1 = NULL
 
78420
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
78421
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
78422
        
 
78423
# check null-3 success:         1
 
78424
DELETE FROM t1
 
78425
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
78426
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
78427
        
 
78428
# check null-4 success:         1
 
78429
DELETE FROM t1
 
78430
WHERE f_int1 = 0 AND f_int2 = 0
 
78431
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
78432
AND f_charbig = '#NULL#';
 
78433
SET AUTOCOMMIT= 0;
 
78434
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78435
SELECT f_int1, f_int1, '', '', 'was inserted'
 
78436
FROM t0_template source_tab
 
78437
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78438
        
 
78439
# check transactions-1 success:         1
 
78440
COMMIT WORK;
 
78441
        
 
78442
# check transactions-2 success:         1
 
78443
ROLLBACK WORK;
 
78444
        
 
78445
# check transactions-3 success:         1
 
78446
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78447
COMMIT WORK;
 
78448
ROLLBACK WORK;
 
78449
        
 
78450
# check transactions-4 success:         1
 
78451
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78452
SELECT f_int1, f_int1, '', '', 'was inserted'
 
78453
FROM t0_template source_tab
 
78454
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78455
        
 
78456
# check transactions-5 success:         1
 
78457
ROLLBACK WORK;
 
78458
        
 
78459
# check transactions-6 success:         1
 
78460
# INFO: Storage engine used for t1 seems to be transactional.
 
78461
COMMIT;
 
78462
        
 
78463
# check transactions-7 success:         1
 
78464
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78465
COMMIT WORK;
 
78466
SET @@session.sql_mode = 'traditional';
 
78467
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
78468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78469
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
78470
'', '', 'was inserted' FROM t0_template
 
78471
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78472
ERROR 22012: Division by 0
 
78473
COMMIT;
 
78474
        
 
78475
# check transactions-8 success:         1
 
78476
# INFO: Storage engine used for t1 seems to be able to revert
 
78477
#       changes made by the failing statement.
 
78478
SET @@session.sql_mode = '';
 
78479
SET AUTOCOMMIT= 1;
 
78480
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78481
COMMIT WORK;
 
78482
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
78483
        
 
78484
# check special-1 success:      1
 
78485
UPDATE t1 SET f_charbig = '';
 
78486
        
 
78487
# check special-2 success:      1
 
78488
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
78489
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78490
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
78491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78492
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78493
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78494
'just inserted' FROM t0_template
 
78495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78496
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
78497
BEGIN
 
78498
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78499
f_charbig = 'updated by trigger'
 
78500
      WHERE f_int1 = new.f_int1;
 
78501
END|
 
78502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78503
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
78504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78505
        
 
78506
# check trigger-1 success:      1
 
78507
DROP TRIGGER trg_1;
 
78508
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78509
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78510
f_charbig = 'just inserted'
 
78511
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78512
DELETE FROM t0_aux
 
78513
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78514
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78515
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78516
'just inserted' FROM t0_template
 
78517
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78518
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
78519
BEGIN
 
78520
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78521
f_charbig = 'updated by trigger'
 
78522
      WHERE f_int1 = new.f_int1;
 
78523
END|
 
78524
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78525
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
78526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78527
        
 
78528
# check trigger-2 success:      1
 
78529
DROP TRIGGER trg_1;
 
78530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78532
f_charbig = 'just inserted'
 
78533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78534
DELETE FROM t0_aux
 
78535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78536
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78537
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78538
'just inserted' FROM t0_template
 
78539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78540
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
78541
BEGIN
 
78542
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78543
f_charbig = 'updated by trigger'
 
78544
      WHERE f_int1 = new.f_int1;
 
78545
END|
 
78546
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78547
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78548
        
 
78549
# check trigger-3 success:      1
 
78550
DROP TRIGGER trg_1;
 
78551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78553
f_charbig = 'just inserted'
 
78554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78555
DELETE FROM t0_aux
 
78556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78559
'just inserted' FROM t0_template
 
78560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78561
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
78562
BEGIN
 
78563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78564
f_charbig = 'updated by trigger'
 
78565
      WHERE f_int1 = - old.f_int1;
 
78566
END|
 
78567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78569
        
 
78570
# check trigger-4 success:      1
 
78571
DROP TRIGGER trg_1;
 
78572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78574
f_charbig = 'just inserted'
 
78575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78576
DELETE FROM t0_aux
 
78577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78580
'just inserted' FROM t0_template
 
78581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78582
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
78583
BEGIN
 
78584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78585
f_charbig = 'updated by trigger'
 
78586
      WHERE f_int1 = new.f_int1;
 
78587
END|
 
78588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78590
        
 
78591
# check trigger-5 success:      1
 
78592
DROP TRIGGER trg_1;
 
78593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78595
f_charbig = 'just inserted'
 
78596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78597
DELETE FROM t0_aux
 
78598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78601
'just inserted' FROM t0_template
 
78602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78603
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
78604
BEGIN
 
78605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78606
f_charbig = 'updated by trigger'
 
78607
      WHERE f_int1 = - old.f_int1;
 
78608
END|
 
78609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
78610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78611
        
 
78612
# check trigger-6 success:      1
 
78613
DROP TRIGGER trg_1;
 
78614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78616
f_charbig = 'just inserted'
 
78617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78618
DELETE FROM t0_aux
 
78619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78622
'just inserted' FROM t0_template
 
78623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78624
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
78625
BEGIN
 
78626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78627
f_charbig = 'updated by trigger'
 
78628
      WHERE f_int1 = - old.f_int1;
 
78629
END|
 
78630
DELETE FROM t0_aux
 
78631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78632
        
 
78633
# check trigger-7 success:      1
 
78634
DROP TRIGGER trg_1;
 
78635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78637
f_charbig = 'just inserted'
 
78638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78639
DELETE FROM t0_aux
 
78640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78643
'just inserted' FROM t0_template
 
78644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78645
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
78646
BEGIN
 
78647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78648
f_charbig = 'updated by trigger'
 
78649
      WHERE f_int1 = - old.f_int1;
 
78650
END|
 
78651
DELETE FROM t0_aux
 
78652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
78653
        
 
78654
# check trigger-8 success:      1
 
78655
DROP TRIGGER trg_1;
 
78656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78658
f_charbig = 'just inserted'
 
78659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78660
DELETE FROM t0_aux
 
78661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78662
DELETE FROM t1
 
78663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78664
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
78665
BEGIN
 
78666
SET new.f_int1 = old.f_int1 + @max_row,
 
78667
new.f_int2 = old.f_int2 - @max_row,
 
78668
new.f_charbig = '####updated per update trigger####';
 
78669
END|
 
78670
UPDATE t1
 
78671
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
78672
f_charbig = '####updated per update statement itself####';
 
78673
        
 
78674
# check trigger-9 success:      1
 
78675
DROP TRIGGER trg_2;
 
78676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78678
f_charbig = CONCAT('===',f_char1,'===');
 
78679
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
78680
BEGIN
 
78681
SET new.f_int1 = new.f_int1 + @max_row,
 
78682
new.f_int2 = new.f_int2 - @max_row,
 
78683
new.f_charbig = '####updated per update trigger####';
 
78684
END|
 
78685
UPDATE t1
 
78686
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
78687
f_charbig = '####updated per update statement itself####';
 
78688
        
 
78689
# check trigger-10 success:     1
 
78690
DROP TRIGGER trg_2;
 
78691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78693
f_charbig = CONCAT('===',f_char1,'===');
 
78694
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
78695
BEGIN
 
78696
SET new.f_int1 = @my_max1 + @counter,
 
78697
new.f_int2 = @my_min2 - @counter,
 
78698
new.f_charbig = '####updated per insert trigger####';
 
78699
SET @counter = @counter + 1;
 
78700
END|
 
78701
SET @counter = 1;
 
78702
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
78703
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78704
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
78705
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
78706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
78707
ORDER BY f_int1;
 
78708
DROP TRIGGER trg_3;
 
78709
        
 
78710
# check trigger-11 success:     1
 
78711
DELETE FROM t1
 
78712
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
78713
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
78714
AND f_charbig = '####updated per insert trigger####';
 
78715
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
78716
BEGIN
 
78717
SET new.f_int1 = @my_max1 + @counter,
 
78718
new.f_int2 = @my_min2 - @counter,
 
78719
new.f_charbig = '####updated per insert trigger####';
 
78720
SET @counter = @counter + 1;
 
78721
END|
 
78722
SET @counter = 1;
 
78723
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
78724
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
78725
SELECT CAST(f_int1 AS CHAR),
 
78726
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
78727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
78728
ORDER BY f_int1;
 
78729
DROP TRIGGER trg_3;
 
78730
        
 
78731
# check trigger-12 success:     1
 
78732
DELETE FROM t1
 
78733
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
78734
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
78735
AND f_charbig = '####updated per insert trigger####';
 
78736
ANALYZE  TABLE t1;
 
78737
Table   Op      Msg_type        Msg_text
 
78738
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
78739
CHECK    TABLE t1 EXTENDED;
 
78740
Table   Op      Msg_type        Msg_text
 
78741
test.t1 check   note    The storage engine for the table doesn't support check
 
78742
CHECKSUM TABLE t1 EXTENDED;
 
78743
Table   Checksum
 
78744
test.t1 <some_value>
 
78745
OPTIMIZE TABLE t1;
 
78746
Table   Op      Msg_type        Msg_text
 
78747
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
78748
# check layout success:    1
 
78749
REPAIR   TABLE t1 EXTENDED;
 
78750
Table   Op      Msg_type        Msg_text
 
78751
test.t1 repair  note    The storage engine for the table doesn't support repair
 
78752
# check layout success:    1
 
78753
TRUNCATE t1;
 
78754
        
 
78755
# check TRUNCATE success:       1
 
78756
# check layout success:    1
 
78757
# End usability test (inc/partition_check.inc)
 
78758
DROP TABLE t1;
 
78759
CREATE TABLE t1 (
 
78760
f_int1 INTEGER,
 
78761
f_int2 INTEGER,
 
78762
f_char1 CHAR(20),
 
78763
f_char2 CHAR(20),
 
78764
f_charbig VARCHAR(1000)
 
78765
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
78766
)
 
78767
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
78768
(PARTITION part1 VALUES LESS THAN (0)
 
78769
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
78770
PARTITION part2 VALUES LESS THAN (5)
 
78771
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
78772
PARTITION part3 VALUES LESS THAN (10)
 
78773
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
78774
PARTITION part4 VALUES LESS THAN (2147483646)
 
78775
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
78776
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78777
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
78778
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
78779
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
78780
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78781
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
78782
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
78783
# Start usability test (inc/partition_check.inc)
 
78784
create_command
 
78785
SHOW CREATE TABLE t1;
 
78786
Table   Create Table
 
78787
t1      CREATE TABLE `t1` (
 
78788
  `f_int1` int(11) DEFAULT NULL,
 
78789
  `f_int2` int(11) DEFAULT NULL,
 
78790
  `f_char1` char(20) DEFAULT NULL,
 
78791
  `f_char2` char(20) DEFAULT NULL,
 
78792
  `f_charbig` varchar(1000) DEFAULT NULL
 
78793
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
78794
 
 
78795
# check prerequisites-1 success:    1
 
78796
# check COUNT(*) success:    1
 
78797
# check MIN/MAX(f_int1) success:    1
 
78798
# check MIN/MAX(f_int2) success:    1
 
78799
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78800
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
78801
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
78802
WHERE f_int1 IN (2,3);
 
78803
# check prerequisites-3 success:    1
 
78804
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
78805
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
78806
# check read via f_int1 success: 1
 
78807
# check read via f_int2 success: 1
 
78808
        
 
78809
# check multiple-1 success:     1
 
78810
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
78811
        
 
78812
# check multiple-2 success:     1
 
78813
INSERT INTO t1 SELECT * FROM t0_template
 
78814
WHERE MOD(f_int1,3) = 0;
 
78815
        
 
78816
# check multiple-3 success:     1
 
78817
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
78818
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
78819
AND @max_row_div2 + @max_row_div4;
 
78820
        
 
78821
# check multiple-4 success:     1
 
78822
DELETE FROM t1
 
78823
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
78824
AND @max_row_div2 + @max_row_div4 + @max_row;
 
78825
        
 
78826
# check multiple-5 success:     1
 
78827
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
78828
INSERT INTO t1
 
78829
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
78830
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
78831
f_charbig = '#SINGLE#';
 
78832
        
 
78833
# check single-1 success:       1
 
78834
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
78835
INSERT INTO t1
 
78836
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
78837
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
78838
f_charbig = '#SINGLE#';
 
78839
        
 
78840
# check single-2 success:       1
 
78841
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
78842
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
78843
UPDATE t1 SET f_int1 = @cur_value2
 
78844
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
78845
        
 
78846
# check single-3 success:       1
 
78847
SET @cur_value1= -1;
 
78848
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
78849
UPDATE t1 SET f_int1 = @cur_value1
 
78850
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
78851
        
 
78852
# check single-4 success:       1
 
78853
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
78854
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
78855
        
 
78856
# check single-5 success:       1
 
78857
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
78858
        
 
78859
# check single-6 success:       1
 
78860
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
78861
ERROR HY000: Table has no partition for value 2147483647
 
78862
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
78863
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
78864
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
78865
f_charbig = '#NULL#';
 
78866
INSERT INTO t1
 
78867
SET f_int1 = NULL , f_int2 = -@max_row,
 
78868
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
78869
f_charbig = '#NULL#';
 
78870
# check null success:    1
 
78871
        
 
78872
# check null-1 success:         1
 
78873
UPDATE t1 SET f_int1 = -@max_row
 
78874
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
78875
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
78876
        
 
78877
# check null-2 success:         1
 
78878
UPDATE t1 SET f_int1 = NULL
 
78879
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
78880
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
78881
        
 
78882
# check null-3 success:         1
 
78883
DELETE FROM t1
 
78884
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
78885
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
78886
        
 
78887
# check null-4 success:         1
 
78888
DELETE FROM t1
 
78889
WHERE f_int1 = 0 AND f_int2 = 0
 
78890
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
78891
AND f_charbig = '#NULL#';
 
78892
SET AUTOCOMMIT= 0;
 
78893
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78894
SELECT f_int1, f_int1, '', '', 'was inserted'
 
78895
FROM t0_template source_tab
 
78896
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78897
        
 
78898
# check transactions-1 success:         1
 
78899
COMMIT WORK;
 
78900
        
 
78901
# check transactions-2 success:         1
 
78902
ROLLBACK WORK;
 
78903
        
 
78904
# check transactions-3 success:         1
 
78905
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78906
COMMIT WORK;
 
78907
ROLLBACK WORK;
 
78908
        
 
78909
# check transactions-4 success:         1
 
78910
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78911
SELECT f_int1, f_int1, '', '', 'was inserted'
 
78912
FROM t0_template source_tab
 
78913
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78914
        
 
78915
# check transactions-5 success:         1
 
78916
ROLLBACK WORK;
 
78917
        
 
78918
# check transactions-6 success:         1
 
78919
# INFO: Storage engine used for t1 seems to be transactional.
 
78920
COMMIT;
 
78921
        
 
78922
# check transactions-7 success:         1
 
78923
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78924
COMMIT WORK;
 
78925
SET @@session.sql_mode = 'traditional';
 
78926
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
78927
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
78928
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
78929
'', '', 'was inserted' FROM t0_template
 
78930
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
78931
ERROR 22012: Division by 0
 
78932
COMMIT;
 
78933
        
 
78934
# check transactions-8 success:         1
 
78935
# INFO: Storage engine used for t1 seems to be able to revert
 
78936
#       changes made by the failing statement.
 
78937
SET @@session.sql_mode = '';
 
78938
SET AUTOCOMMIT= 1;
 
78939
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
78940
COMMIT WORK;
 
78941
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
78942
        
 
78943
# check special-1 success:      1
 
78944
UPDATE t1 SET f_charbig = '';
 
78945
        
 
78946
# check special-2 success:      1
 
78947
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
78948
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78949
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
78950
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78953
'just inserted' FROM t0_template
 
78954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78955
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
78956
BEGIN
 
78957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78958
f_charbig = 'updated by trigger'
 
78959
      WHERE f_int1 = new.f_int1;
 
78960
END|
 
78961
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78962
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
78963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78964
        
 
78965
# check trigger-1 success:      1
 
78966
DROP TRIGGER trg_1;
 
78967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78969
f_charbig = 'just inserted'
 
78970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78971
DELETE FROM t0_aux
 
78972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78974
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78975
'just inserted' FROM t0_template
 
78976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78977
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
78978
BEGIN
 
78979
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
78980
f_charbig = 'updated by trigger'
 
78981
      WHERE f_int1 = new.f_int1;
 
78982
END|
 
78983
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78984
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
78985
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78986
        
 
78987
# check trigger-2 success:      1
 
78988
DROP TRIGGER trg_1;
 
78989
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
78990
f_int2 = CAST(f_char1 AS SIGNED INT),
 
78991
f_charbig = 'just inserted'
 
78992
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
78993
DELETE FROM t0_aux
 
78994
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78995
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
78996
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
78997
'just inserted' FROM t0_template
 
78998
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
78999
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
79000
BEGIN
 
79001
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79002
f_charbig = 'updated by trigger'
 
79003
      WHERE f_int1 = new.f_int1;
 
79004
END|
 
79005
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79006
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79007
        
 
79008
# check trigger-3 success:      1
 
79009
DROP TRIGGER trg_1;
 
79010
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79011
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79012
f_charbig = 'just inserted'
 
79013
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79014
DELETE FROM t0_aux
 
79015
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79018
'just inserted' FROM t0_template
 
79019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79020
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
79021
BEGIN
 
79022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79023
f_charbig = 'updated by trigger'
 
79024
      WHERE f_int1 = - old.f_int1;
 
79025
END|
 
79026
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79027
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79028
        
 
79029
# check trigger-4 success:      1
 
79030
DROP TRIGGER trg_1;
 
79031
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79032
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79033
f_charbig = 'just inserted'
 
79034
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79035
DELETE FROM t0_aux
 
79036
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79037
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79038
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79039
'just inserted' FROM t0_template
 
79040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79041
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
79042
BEGIN
 
79043
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79044
f_charbig = 'updated by trigger'
 
79045
      WHERE f_int1 = new.f_int1;
 
79046
END|
 
79047
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79048
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79049
        
 
79050
# check trigger-5 success:      1
 
79051
DROP TRIGGER trg_1;
 
79052
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79053
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79054
f_charbig = 'just inserted'
 
79055
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79056
DELETE FROM t0_aux
 
79057
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79059
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79060
'just inserted' FROM t0_template
 
79061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79062
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
79063
BEGIN
 
79064
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79065
f_charbig = 'updated by trigger'
 
79066
      WHERE f_int1 = - old.f_int1;
 
79067
END|
 
79068
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79069
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79070
        
 
79071
# check trigger-6 success:      1
 
79072
DROP TRIGGER trg_1;
 
79073
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79074
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79075
f_charbig = 'just inserted'
 
79076
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79077
DELETE FROM t0_aux
 
79078
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79080
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79081
'just inserted' FROM t0_template
 
79082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79083
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
79084
BEGIN
 
79085
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79086
f_charbig = 'updated by trigger'
 
79087
      WHERE f_int1 = - old.f_int1;
 
79088
END|
 
79089
DELETE FROM t0_aux
 
79090
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79091
        
 
79092
# check trigger-7 success:      1
 
79093
DROP TRIGGER trg_1;
 
79094
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79095
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79096
f_charbig = 'just inserted'
 
79097
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79098
DELETE FROM t0_aux
 
79099
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79100
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79101
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79102
'just inserted' FROM t0_template
 
79103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79104
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
79105
BEGIN
 
79106
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79107
f_charbig = 'updated by trigger'
 
79108
      WHERE f_int1 = - old.f_int1;
 
79109
END|
 
79110
DELETE FROM t0_aux
 
79111
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79112
        
 
79113
# check trigger-8 success:      1
 
79114
DROP TRIGGER trg_1;
 
79115
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79116
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79117
f_charbig = 'just inserted'
 
79118
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79119
DELETE FROM t0_aux
 
79120
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79121
DELETE FROM t1
 
79122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79123
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
79124
BEGIN
 
79125
SET new.f_int1 = old.f_int1 + @max_row,
 
79126
new.f_int2 = old.f_int2 - @max_row,
 
79127
new.f_charbig = '####updated per update trigger####';
 
79128
END|
 
79129
UPDATE t1
 
79130
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
79131
f_charbig = '####updated per update statement itself####';
 
79132
        
 
79133
# check trigger-9 success:      1
 
79134
DROP TRIGGER trg_2;
 
79135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79137
f_charbig = CONCAT('===',f_char1,'===');
 
79138
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
79139
BEGIN
 
79140
SET new.f_int1 = new.f_int1 + @max_row,
 
79141
new.f_int2 = new.f_int2 - @max_row,
 
79142
new.f_charbig = '####updated per update trigger####';
 
79143
END|
 
79144
UPDATE t1
 
79145
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
79146
f_charbig = '####updated per update statement itself####';
 
79147
        
 
79148
# check trigger-10 success:     1
 
79149
DROP TRIGGER trg_2;
 
79150
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79151
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79152
f_charbig = CONCAT('===',f_char1,'===');
 
79153
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
79154
BEGIN
 
79155
SET new.f_int1 = @my_max1 + @counter,
 
79156
new.f_int2 = @my_min2 - @counter,
 
79157
new.f_charbig = '####updated per insert trigger####';
 
79158
SET @counter = @counter + 1;
 
79159
END|
 
79160
SET @counter = 1;
 
79161
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
79162
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79163
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
79164
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
79165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
79166
ORDER BY f_int1;
 
79167
DROP TRIGGER trg_3;
 
79168
        
 
79169
# check trigger-11 success:     1
 
79170
DELETE FROM t1
 
79171
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
79172
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
79173
AND f_charbig = '####updated per insert trigger####';
 
79174
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
79175
BEGIN
 
79176
SET new.f_int1 = @my_max1 + @counter,
 
79177
new.f_int2 = @my_min2 - @counter,
 
79178
new.f_charbig = '####updated per insert trigger####';
 
79179
SET @counter = @counter + 1;
 
79180
END|
 
79181
SET @counter = 1;
 
79182
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
79183
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
79184
SELECT CAST(f_int1 AS CHAR),
 
79185
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
79186
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
79187
ORDER BY f_int1;
 
79188
DROP TRIGGER trg_3;
 
79189
        
 
79190
# check trigger-12 success:     1
 
79191
DELETE FROM t1
 
79192
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
79193
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
79194
AND f_charbig = '####updated per insert trigger####';
 
79195
ANALYZE  TABLE t1;
 
79196
Table   Op      Msg_type        Msg_text
 
79197
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
79198
CHECK    TABLE t1 EXTENDED;
 
79199
Table   Op      Msg_type        Msg_text
 
79200
test.t1 check   note    The storage engine for the table doesn't support check
 
79201
CHECKSUM TABLE t1 EXTENDED;
 
79202
Table   Checksum
 
79203
test.t1 <some_value>
 
79204
OPTIMIZE TABLE t1;
 
79205
Table   Op      Msg_type        Msg_text
 
79206
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
79207
# check layout success:    1
 
79208
REPAIR   TABLE t1 EXTENDED;
 
79209
Table   Op      Msg_type        Msg_text
 
79210
test.t1 repair  note    The storage engine for the table doesn't support repair
 
79211
# check layout success:    1
 
79212
TRUNCATE t1;
 
79213
        
 
79214
# check TRUNCATE success:       1
 
79215
# check layout success:    1
 
79216
# End usability test (inc/partition_check.inc)
 
79217
DROP TABLE t1;
 
79218
CREATE TABLE t1 (
 
79219
f_int1 INTEGER,
 
79220
f_int2 INTEGER,
 
79221
f_char1 CHAR(20),
 
79222
f_char2 CHAR(20),
 
79223
f_charbig VARCHAR(1000)
 
79224
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
79225
)
 
79226
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
79227
(PARTITION part1 VALUES IN (0)
 
79228
(SUBPARTITION sp11, SUBPARTITION sp12),
 
79229
PARTITION part2 VALUES IN (1)
 
79230
(SUBPARTITION sp21, SUBPARTITION sp22),
 
79231
PARTITION part3 VALUES IN (2)
 
79232
(SUBPARTITION sp31, SUBPARTITION sp32),
 
79233
PARTITION part4 VALUES IN (NULL)
 
79234
(SUBPARTITION sp41, SUBPARTITION sp42));
 
79235
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79236
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
79237
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
79238
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
79239
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79240
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
79241
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
79242
# Start usability test (inc/partition_check.inc)
 
79243
create_command
 
79244
SHOW CREATE TABLE t1;
 
79245
Table   Create Table
 
79246
t1      CREATE TABLE `t1` (
 
79247
  `f_int1` int(11) DEFAULT NULL,
 
79248
  `f_int2` int(11) DEFAULT NULL,
 
79249
  `f_char1` char(20) DEFAULT NULL,
 
79250
  `f_char2` char(20) DEFAULT NULL,
 
79251
  `f_charbig` varchar(1000) DEFAULT NULL
 
79252
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
79253
 
 
79254
# check prerequisites-1 success:    1
 
79255
# check COUNT(*) success:    1
 
79256
# check MIN/MAX(f_int1) success:    1
 
79257
# check MIN/MAX(f_int2) success:    1
 
79258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79259
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
79260
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
79261
WHERE f_int1 IN (2,3);
 
79262
# check prerequisites-3 success:    1
 
79263
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
79264
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
79265
# check read via f_int1 success: 1
 
79266
# check read via f_int2 success: 1
 
79267
        
 
79268
# check multiple-1 success:     1
 
79269
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
79270
        
 
79271
# check multiple-2 success:     1
 
79272
INSERT INTO t1 SELECT * FROM t0_template
 
79273
WHERE MOD(f_int1,3) = 0;
 
79274
        
 
79275
# check multiple-3 success:     1
 
79276
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
79277
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
79278
AND @max_row_div2 + @max_row_div4;
 
79279
        
 
79280
# check multiple-4 success:     1
 
79281
DELETE FROM t1
 
79282
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
79283
AND @max_row_div2 + @max_row_div4 + @max_row;
 
79284
        
 
79285
# check multiple-5 success:     1
 
79286
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
79287
INSERT INTO t1
 
79288
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
79289
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
79290
f_charbig = '#SINGLE#';
 
79291
        
 
79292
# check single-1 success:       1
 
79293
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
79294
INSERT INTO t1
 
79295
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
79296
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
79297
f_charbig = '#SINGLE#';
 
79298
        
 
79299
# check single-2 success:       1
 
79300
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
79301
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
79302
UPDATE t1 SET f_int1 = @cur_value2
 
79303
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
79304
        
 
79305
# check single-3 success:       1
 
79306
SET @cur_value1= -1;
 
79307
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
79308
UPDATE t1 SET f_int1 = @cur_value1
 
79309
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
79310
        
 
79311
# check single-4 success:       1
 
79312
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
79313
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
79314
        
 
79315
# check single-5 success:       1
 
79316
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
79317
        
 
79318
# check single-6 success:       1
 
79319
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
79320
        
 
79321
# check single-7 success:       1
 
79322
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
79323
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
79324
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
79325
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
79326
f_charbig = '#NULL#';
 
79327
INSERT INTO t1
 
79328
SET f_int1 = NULL , f_int2 = -@max_row,
 
79329
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
79330
f_charbig = '#NULL#';
 
79331
# check null success:    1
 
79332
        
 
79333
# check null-1 success:         1
 
79334
UPDATE t1 SET f_int1 = -@max_row
 
79335
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
79336
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
79337
        
 
79338
# check null-2 success:         1
 
79339
UPDATE t1 SET f_int1 = NULL
 
79340
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
79341
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
79342
        
 
79343
# check null-3 success:         1
 
79344
DELETE FROM t1
 
79345
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
79346
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
79347
        
 
79348
# check null-4 success:         1
 
79349
DELETE FROM t1
 
79350
WHERE f_int1 = 0 AND f_int2 = 0
 
79351
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
79352
AND f_charbig = '#NULL#';
 
79353
SET AUTOCOMMIT= 0;
 
79354
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79355
SELECT f_int1, f_int1, '', '', 'was inserted'
 
79356
FROM t0_template source_tab
 
79357
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
79358
        
 
79359
# check transactions-1 success:         1
 
79360
COMMIT WORK;
 
79361
        
 
79362
# check transactions-2 success:         1
 
79363
ROLLBACK WORK;
 
79364
        
 
79365
# check transactions-3 success:         1
 
79366
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
79367
COMMIT WORK;
 
79368
ROLLBACK WORK;
 
79369
        
 
79370
# check transactions-4 success:         1
 
79371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79372
SELECT f_int1, f_int1, '', '', 'was inserted'
 
79373
FROM t0_template source_tab
 
79374
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
79375
        
 
79376
# check transactions-5 success:         1
 
79377
ROLLBACK WORK;
 
79378
        
 
79379
# check transactions-6 success:         1
 
79380
# INFO: Storage engine used for t1 seems to be transactional.
 
79381
COMMIT;
 
79382
        
 
79383
# check transactions-7 success:         1
 
79384
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
79385
COMMIT WORK;
 
79386
SET @@session.sql_mode = 'traditional';
 
79387
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
79388
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79389
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
79390
'', '', 'was inserted' FROM t0_template
 
79391
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
79392
ERROR 22012: Division by 0
 
79393
COMMIT;
 
79394
        
 
79395
# check transactions-8 success:         1
 
79396
# INFO: Storage engine used for t1 seems to be able to revert
 
79397
#       changes made by the failing statement.
 
79398
SET @@session.sql_mode = '';
 
79399
SET AUTOCOMMIT= 1;
 
79400
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
79401
COMMIT WORK;
 
79402
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
79403
        
 
79404
# check special-1 success:      1
 
79405
UPDATE t1 SET f_charbig = '';
 
79406
        
 
79407
# check special-2 success:      1
 
79408
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
79409
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79410
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
79411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79412
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79413
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79414
'just inserted' FROM t0_template
 
79415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79416
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
79417
BEGIN
 
79418
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79419
f_charbig = 'updated by trigger'
 
79420
      WHERE f_int1 = new.f_int1;
 
79421
END|
 
79422
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79423
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
79424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79425
        
 
79426
# check trigger-1 success:      1
 
79427
DROP TRIGGER trg_1;
 
79428
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79429
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79430
f_charbig = 'just inserted'
 
79431
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79432
DELETE FROM t0_aux
 
79433
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79434
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79435
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79436
'just inserted' FROM t0_template
 
79437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79438
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
79439
BEGIN
 
79440
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79441
f_charbig = 'updated by trigger'
 
79442
      WHERE f_int1 = new.f_int1;
 
79443
END|
 
79444
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79445
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
79446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79447
        
 
79448
# check trigger-2 success:      1
 
79449
DROP TRIGGER trg_1;
 
79450
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79451
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79452
f_charbig = 'just inserted'
 
79453
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79454
DELETE FROM t0_aux
 
79455
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79456
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79457
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79458
'just inserted' FROM t0_template
 
79459
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79460
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
79461
BEGIN
 
79462
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79463
f_charbig = 'updated by trigger'
 
79464
      WHERE f_int1 = new.f_int1;
 
79465
END|
 
79466
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79467
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79468
        
 
79469
# check trigger-3 success:      1
 
79470
DROP TRIGGER trg_1;
 
79471
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79472
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79473
f_charbig = 'just inserted'
 
79474
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79475
DELETE FROM t0_aux
 
79476
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79477
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79478
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79479
'just inserted' FROM t0_template
 
79480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79481
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
79482
BEGIN
 
79483
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79484
f_charbig = 'updated by trigger'
 
79485
      WHERE f_int1 = - old.f_int1;
 
79486
END|
 
79487
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79488
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79489
        
 
79490
# check trigger-4 success:      1
 
79491
DROP TRIGGER trg_1;
 
79492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79494
f_charbig = 'just inserted'
 
79495
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79496
DELETE FROM t0_aux
 
79497
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79498
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79499
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79500
'just inserted' FROM t0_template
 
79501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79502
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
79503
BEGIN
 
79504
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79505
f_charbig = 'updated by trigger'
 
79506
      WHERE f_int1 = new.f_int1;
 
79507
END|
 
79508
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79509
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79510
        
 
79511
# check trigger-5 success:      1
 
79512
DROP TRIGGER trg_1;
 
79513
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79514
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79515
f_charbig = 'just inserted'
 
79516
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79517
DELETE FROM t0_aux
 
79518
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79521
'just inserted' FROM t0_template
 
79522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79523
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
79524
BEGIN
 
79525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79526
f_charbig = 'updated by trigger'
 
79527
      WHERE f_int1 = - old.f_int1;
 
79528
END|
 
79529
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79530
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79531
        
 
79532
# check trigger-6 success:      1
 
79533
DROP TRIGGER trg_1;
 
79534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79536
f_charbig = 'just inserted'
 
79537
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79538
DELETE FROM t0_aux
 
79539
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79540
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79541
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79542
'just inserted' FROM t0_template
 
79543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79544
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
79545
BEGIN
 
79546
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79547
f_charbig = 'updated by trigger'
 
79548
      WHERE f_int1 = - old.f_int1;
 
79549
END|
 
79550
DELETE FROM t0_aux
 
79551
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79552
        
 
79553
# check trigger-7 success:      1
 
79554
DROP TRIGGER trg_1;
 
79555
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79556
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79557
f_charbig = 'just inserted'
 
79558
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79559
DELETE FROM t0_aux
 
79560
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79561
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79562
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79563
'just inserted' FROM t0_template
 
79564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79565
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
79566
BEGIN
 
79567
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79568
f_charbig = 'updated by trigger'
 
79569
      WHERE f_int1 = - old.f_int1;
 
79570
END|
 
79571
DELETE FROM t0_aux
 
79572
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79573
        
 
79574
# check trigger-8 success:      1
 
79575
DROP TRIGGER trg_1;
 
79576
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79577
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79578
f_charbig = 'just inserted'
 
79579
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79580
DELETE FROM t0_aux
 
79581
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79582
DELETE FROM t1
 
79583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79584
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
79585
BEGIN
 
79586
SET new.f_int1 = old.f_int1 + @max_row,
 
79587
new.f_int2 = old.f_int2 - @max_row,
 
79588
new.f_charbig = '####updated per update trigger####';
 
79589
END|
 
79590
UPDATE t1
 
79591
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
79592
f_charbig = '####updated per update statement itself####';
 
79593
        
 
79594
# check trigger-9 success:      1
 
79595
DROP TRIGGER trg_2;
 
79596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79598
f_charbig = CONCAT('===',f_char1,'===');
 
79599
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
79600
BEGIN
 
79601
SET new.f_int1 = new.f_int1 + @max_row,
 
79602
new.f_int2 = new.f_int2 - @max_row,
 
79603
new.f_charbig = '####updated per update trigger####';
 
79604
END|
 
79605
UPDATE t1
 
79606
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
79607
f_charbig = '####updated per update statement itself####';
 
79608
        
 
79609
# check trigger-10 success:     1
 
79610
DROP TRIGGER trg_2;
 
79611
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79612
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79613
f_charbig = CONCAT('===',f_char1,'===');
 
79614
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
79615
BEGIN
 
79616
SET new.f_int1 = @my_max1 + @counter,
 
79617
new.f_int2 = @my_min2 - @counter,
 
79618
new.f_charbig = '####updated per insert trigger####';
 
79619
SET @counter = @counter + 1;
 
79620
END|
 
79621
SET @counter = 1;
 
79622
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
79623
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79624
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
79625
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
79626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
79627
ORDER BY f_int1;
 
79628
DROP TRIGGER trg_3;
 
79629
        
 
79630
# check trigger-11 success:     1
 
79631
DELETE FROM t1
 
79632
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
79633
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
79634
AND f_charbig = '####updated per insert trigger####';
 
79635
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
79636
BEGIN
 
79637
SET new.f_int1 = @my_max1 + @counter,
 
79638
new.f_int2 = @my_min2 - @counter,
 
79639
new.f_charbig = '####updated per insert trigger####';
 
79640
SET @counter = @counter + 1;
 
79641
END|
 
79642
SET @counter = 1;
 
79643
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
79644
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
79645
SELECT CAST(f_int1 AS CHAR),
 
79646
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
79647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
79648
ORDER BY f_int1;
 
79649
DROP TRIGGER trg_3;
 
79650
        
 
79651
# check trigger-12 success:     1
 
79652
DELETE FROM t1
 
79653
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
79654
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
79655
AND f_charbig = '####updated per insert trigger####';
 
79656
ANALYZE  TABLE t1;
 
79657
Table   Op      Msg_type        Msg_text
 
79658
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
79659
CHECK    TABLE t1 EXTENDED;
 
79660
Table   Op      Msg_type        Msg_text
 
79661
test.t1 check   note    The storage engine for the table doesn't support check
 
79662
CHECKSUM TABLE t1 EXTENDED;
 
79663
Table   Checksum
 
79664
test.t1 <some_value>
 
79665
OPTIMIZE TABLE t1;
 
79666
Table   Op      Msg_type        Msg_text
 
79667
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
79668
# check layout success:    1
 
79669
REPAIR   TABLE t1 EXTENDED;
 
79670
Table   Op      Msg_type        Msg_text
 
79671
test.t1 repair  note    The storage engine for the table doesn't support repair
 
79672
# check layout success:    1
 
79673
TRUNCATE t1;
 
79674
        
 
79675
# check TRUNCATE success:       1
 
79676
# check layout success:    1
 
79677
# End usability test (inc/partition_check.inc)
 
79678
DROP TABLE t1;
 
79679
CREATE TABLE t1 (
 
79680
f_int1 INTEGER,
 
79681
f_int2 INTEGER,
 
79682
f_char1 CHAR(20),
 
79683
f_char2 CHAR(20),
 
79684
f_charbig VARCHAR(1000)
 
79685
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
79686
)
 
79687
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
79688
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
79689
(PARTITION part1 VALUES IN (0),
 
79690
 PARTITION part2 VALUES IN (1),
 
79691
 PARTITION part3 VALUES IN (NULL));
 
79692
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79693
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
79694
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
79695
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
79696
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79697
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
79698
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
79699
# Start usability test (inc/partition_check.inc)
 
79700
create_command
 
79701
SHOW CREATE TABLE t1;
 
79702
Table   Create Table
 
79703
t1      CREATE TABLE `t1` (
 
79704
  `f_int1` int(11) DEFAULT NULL,
 
79705
  `f_int2` int(11) DEFAULT NULL,
 
79706
  `f_char1` char(20) DEFAULT NULL,
 
79707
  `f_char2` char(20) DEFAULT NULL,
 
79708
  `f_charbig` varchar(1000) DEFAULT NULL
 
79709
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
79710
 
 
79711
# check prerequisites-1 success:    1
 
79712
# check COUNT(*) success:    1
 
79713
# check MIN/MAX(f_int1) success:    1
 
79714
# check MIN/MAX(f_int2) success:    1
 
79715
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79716
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
79717
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
79718
WHERE f_int1 IN (2,3);
 
79719
# check prerequisites-3 success:    1
 
79720
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
79721
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
79722
# check read via f_int1 success: 1
 
79723
# check read via f_int2 success: 1
 
79724
        
 
79725
# check multiple-1 success:     1
 
79726
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
79727
        
 
79728
# check multiple-2 success:     1
 
79729
INSERT INTO t1 SELECT * FROM t0_template
 
79730
WHERE MOD(f_int1,3) = 0;
 
79731
        
 
79732
# check multiple-3 success:     1
 
79733
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
79734
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
79735
AND @max_row_div2 + @max_row_div4;
 
79736
        
 
79737
# check multiple-4 success:     1
 
79738
DELETE FROM t1
 
79739
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
79740
AND @max_row_div2 + @max_row_div4 + @max_row;
 
79741
        
 
79742
# check multiple-5 success:     1
 
79743
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
79744
INSERT INTO t1
 
79745
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
79746
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
79747
f_charbig = '#SINGLE#';
 
79748
        
 
79749
# check single-1 success:       1
 
79750
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
79751
INSERT INTO t1
 
79752
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
79753
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
79754
f_charbig = '#SINGLE#';
 
79755
        
 
79756
# check single-2 success:       1
 
79757
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
79758
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
79759
UPDATE t1 SET f_int1 = @cur_value2
 
79760
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
79761
        
 
79762
# check single-3 success:       1
 
79763
SET @cur_value1= -1;
 
79764
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
79765
UPDATE t1 SET f_int1 = @cur_value1
 
79766
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
79767
        
 
79768
# check single-4 success:       1
 
79769
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
79770
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
79771
        
 
79772
# check single-5 success:       1
 
79773
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
79774
        
 
79775
# check single-6 success:       1
 
79776
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
79777
        
 
79778
# check single-7 success:       1
 
79779
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
79780
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
79781
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
79782
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
79783
f_charbig = '#NULL#';
 
79784
INSERT INTO t1
 
79785
SET f_int1 = NULL , f_int2 = -@max_row,
 
79786
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
79787
f_charbig = '#NULL#';
 
79788
# check null success:    1
 
79789
        
 
79790
# check null-1 success:         1
 
79791
UPDATE t1 SET f_int1 = -@max_row
 
79792
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
79793
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
79794
        
 
79795
# check null-2 success:         1
 
79796
UPDATE t1 SET f_int1 = NULL
 
79797
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
79798
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
79799
        
 
79800
# check null-3 success:         1
 
79801
DELETE FROM t1
 
79802
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
79803
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
79804
        
 
79805
# check null-4 success:         1
 
79806
DELETE FROM t1
 
79807
WHERE f_int1 = 0 AND f_int2 = 0
 
79808
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
79809
AND f_charbig = '#NULL#';
 
79810
SET AUTOCOMMIT= 0;
 
79811
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79812
SELECT f_int1, f_int1, '', '', 'was inserted'
 
79813
FROM t0_template source_tab
 
79814
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
79815
        
 
79816
# check transactions-1 success:         1
 
79817
COMMIT WORK;
 
79818
        
 
79819
# check transactions-2 success:         1
 
79820
ROLLBACK WORK;
 
79821
        
 
79822
# check transactions-3 success:         1
 
79823
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
79824
COMMIT WORK;
 
79825
ROLLBACK WORK;
 
79826
        
 
79827
# check transactions-4 success:         1
 
79828
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79829
SELECT f_int1, f_int1, '', '', 'was inserted'
 
79830
FROM t0_template source_tab
 
79831
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
79832
        
 
79833
# check transactions-5 success:         1
 
79834
ROLLBACK WORK;
 
79835
        
 
79836
# check transactions-6 success:         1
 
79837
# INFO: Storage engine used for t1 seems to be transactional.
 
79838
COMMIT;
 
79839
        
 
79840
# check transactions-7 success:         1
 
79841
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
79842
COMMIT WORK;
 
79843
SET @@session.sql_mode = 'traditional';
 
79844
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
79845
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
79846
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
79847
'', '', 'was inserted' FROM t0_template
 
79848
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
79849
ERROR 22012: Division by 0
 
79850
COMMIT;
 
79851
        
 
79852
# check transactions-8 success:         1
 
79853
# INFO: Storage engine used for t1 seems to be able to revert
 
79854
#       changes made by the failing statement.
 
79855
SET @@session.sql_mode = '';
 
79856
SET AUTOCOMMIT= 1;
 
79857
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
79858
COMMIT WORK;
 
79859
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
79860
        
 
79861
# check special-1 success:      1
 
79862
UPDATE t1 SET f_charbig = '';
 
79863
        
 
79864
# check special-2 success:      1
 
79865
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
79866
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79867
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
79868
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79869
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79870
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79871
'just inserted' FROM t0_template
 
79872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79873
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
79874
BEGIN
 
79875
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79876
f_charbig = 'updated by trigger'
 
79877
      WHERE f_int1 = new.f_int1;
 
79878
END|
 
79879
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79880
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
79881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79882
        
 
79883
# check trigger-1 success:      1
 
79884
DROP TRIGGER trg_1;
 
79885
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79886
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79887
f_charbig = 'just inserted'
 
79888
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79889
DELETE FROM t0_aux
 
79890
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79891
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79892
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79893
'just inserted' FROM t0_template
 
79894
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79895
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
79896
BEGIN
 
79897
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79898
f_charbig = 'updated by trigger'
 
79899
      WHERE f_int1 = new.f_int1;
 
79900
END|
 
79901
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79902
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
79903
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79904
        
 
79905
# check trigger-2 success:      1
 
79906
DROP TRIGGER trg_1;
 
79907
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79908
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79909
f_charbig = 'just inserted'
 
79910
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79911
DELETE FROM t0_aux
 
79912
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79913
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79914
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79915
'just inserted' FROM t0_template
 
79916
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79917
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
79918
BEGIN
 
79919
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79920
f_charbig = 'updated by trigger'
 
79921
      WHERE f_int1 = new.f_int1;
 
79922
END|
 
79923
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79924
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79925
        
 
79926
# check trigger-3 success:      1
 
79927
DROP TRIGGER trg_1;
 
79928
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79929
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79930
f_charbig = 'just inserted'
 
79931
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79932
DELETE FROM t0_aux
 
79933
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79934
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79935
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79936
'just inserted' FROM t0_template
 
79937
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79938
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
79939
BEGIN
 
79940
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79941
f_charbig = 'updated by trigger'
 
79942
      WHERE f_int1 = - old.f_int1;
 
79943
END|
 
79944
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79945
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79946
        
 
79947
# check trigger-4 success:      1
 
79948
DROP TRIGGER trg_1;
 
79949
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79950
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79951
f_charbig = 'just inserted'
 
79952
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79953
DELETE FROM t0_aux
 
79954
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79955
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79956
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79957
'just inserted' FROM t0_template
 
79958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79959
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
79960
BEGIN
 
79961
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79962
f_charbig = 'updated by trigger'
 
79963
      WHERE f_int1 = new.f_int1;
 
79964
END|
 
79965
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79966
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79967
        
 
79968
# check trigger-5 success:      1
 
79969
DROP TRIGGER trg_1;
 
79970
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79971
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79972
f_charbig = 'just inserted'
 
79973
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79974
DELETE FROM t0_aux
 
79975
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79976
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79977
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79978
'just inserted' FROM t0_template
 
79979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79980
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
79981
BEGIN
 
79982
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
79983
f_charbig = 'updated by trigger'
 
79984
      WHERE f_int1 = - old.f_int1;
 
79985
END|
 
79986
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
79987
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
79988
        
 
79989
# check trigger-6 success:      1
 
79990
DROP TRIGGER trg_1;
 
79991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
79992
f_int2 = CAST(f_char1 AS SIGNED INT),
 
79993
f_charbig = 'just inserted'
 
79994
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
79995
DELETE FROM t0_aux
 
79996
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
79997
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
79998
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
79999
'just inserted' FROM t0_template
 
80000
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
80001
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
80002
BEGIN
 
80003
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
80004
f_charbig = 'updated by trigger'
 
80005
      WHERE f_int1 = - old.f_int1;
 
80006
END|
 
80007
DELETE FROM t0_aux
 
80008
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
80009
        
 
80010
# check trigger-7 success:      1
 
80011
DROP TRIGGER trg_1;
 
80012
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
80013
f_int2 = CAST(f_char1 AS SIGNED INT),
 
80014
f_charbig = 'just inserted'
 
80015
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
80016
DELETE FROM t0_aux
 
80017
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
80018
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
80019
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
80020
'just inserted' FROM t0_template
 
80021
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
80022
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
80023
BEGIN
 
80024
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
80025
f_charbig = 'updated by trigger'
 
80026
      WHERE f_int1 = - old.f_int1;
 
80027
END|
 
80028
DELETE FROM t0_aux
 
80029
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
80030
        
 
80031
# check trigger-8 success:      1
 
80032
DROP TRIGGER trg_1;
 
80033
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
80034
f_int2 = CAST(f_char1 AS SIGNED INT),
 
80035
f_charbig = 'just inserted'
 
80036
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
80037
DELETE FROM t0_aux
 
80038
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
80039
DELETE FROM t1
 
80040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
80041
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
80042
BEGIN
 
80043
SET new.f_int1 = old.f_int1 + @max_row,
 
80044
new.f_int2 = old.f_int2 - @max_row,
 
80045
new.f_charbig = '####updated per update trigger####';
 
80046
END|
 
80047
UPDATE t1
 
80048
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
80049
f_charbig = '####updated per update statement itself####';
 
80050
        
 
80051
# check trigger-9 success:      1
 
80052
DROP TRIGGER trg_2;
 
80053
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
80054
f_int2 = CAST(f_char1 AS SIGNED INT),
 
80055
f_charbig = CONCAT('===',f_char1,'===');
 
80056
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
80057
BEGIN
 
80058
SET new.f_int1 = new.f_int1 + @max_row,
 
80059
new.f_int2 = new.f_int2 - @max_row,
 
80060
new.f_charbig = '####updated per update trigger####';
 
80061
END|
 
80062
UPDATE t1
 
80063
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
80064
f_charbig = '####updated per update statement itself####';
 
80065
        
 
80066
# check trigger-10 success:     1
 
80067
DROP TRIGGER trg_2;
 
80068
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
80069
f_int2 = CAST(f_char1 AS SIGNED INT),
 
80070
f_charbig = CONCAT('===',f_char1,'===');
 
80071
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
80072
BEGIN
 
80073
SET new.f_int1 = @my_max1 + @counter,
 
80074
new.f_int2 = @my_min2 - @counter,
 
80075
new.f_charbig = '####updated per insert trigger####';
 
80076
SET @counter = @counter + 1;
 
80077
END|
 
80078
SET @counter = 1;
 
80079
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
80080
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
80081
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
80082
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
80083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
80084
ORDER BY f_int1;
 
80085
DROP TRIGGER trg_3;
 
80086
        
 
80087
# check trigger-11 success:     1
 
80088
DELETE FROM t1
 
80089
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
80090
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
80091
AND f_charbig = '####updated per insert trigger####';
 
80092
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
80093
BEGIN
 
80094
SET new.f_int1 = @my_max1 + @counter,
 
80095
new.f_int2 = @my_min2 - @counter,
 
80096
new.f_charbig = '####updated per insert trigger####';
 
80097
SET @counter = @counter + 1;
 
80098
END|
 
80099
SET @counter = 1;
 
80100
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
80101
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
80102
SELECT CAST(f_int1 AS CHAR),
 
80103
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
80104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
80105
ORDER BY f_int1;
 
80106
DROP TRIGGER trg_3;
 
80107
        
 
80108
# check trigger-12 success:     1
 
80109
DELETE FROM t1
 
80110
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
80111
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
80112
AND f_charbig = '####updated per insert trigger####';
 
80113
ANALYZE  TABLE t1;
 
80114
Table   Op      Msg_type        Msg_text
 
80115
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
80116
CHECK    TABLE t1 EXTENDED;
 
80117
Table   Op      Msg_type        Msg_text
 
80118
test.t1 check   note    The storage engine for the table doesn't support check
 
80119
CHECKSUM TABLE t1 EXTENDED;
 
80120
Table   Checksum
 
80121
test.t1 <some_value>
 
80122
OPTIMIZE TABLE t1;
 
80123
Table   Op      Msg_type        Msg_text
 
80124
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
80125
# check layout success:    1
 
80126
REPAIR   TABLE t1 EXTENDED;
 
80127
Table   Op      Msg_type        Msg_text
 
80128
test.t1 repair  note    The storage engine for the table doesn't support repair
 
80129
# check layout success:    1
 
80130
TRUNCATE t1;
 
80131
        
 
80132
# check TRUNCATE success:       1
 
80133
# check layout success:    1
 
80134
# End usability test (inc/partition_check.inc)
 
80135
DROP TABLE t1;
 
80136
DROP VIEW  IF EXISTS v1;
 
80137
DROP TABLE IF EXISTS t1;
 
80138
DROP TABLE IF EXISTS t0_aux;
 
80139
DROP TABLE IF EXISTS t0_definition;
 
80140
DROP TABLE IF EXISTS t0_template;