~stewart/drizzle/embedded-innodb-create-select-transaction-arrgh

« back to all changes in this revision

Viewing changes to mysql-test/suite/parts/r/partition_alter1_myisam.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 = 'MyISAM';
 
3
 
 
4
#------------------------------------------------------------------------
 
5
#  0. Setting of auxiliary variables + Creation of an auxiliary tables
 
6
#     needed in many testcases
 
7
#------------------------------------------------------------------------
 
8
SELECT @max_row DIV 2 INTO @max_row_div2;
 
9
SELECT @max_row DIV 3 INTO @max_row_div3;
 
10
SELECT @max_row DIV 4 INTO @max_row_div4;
 
11
SET @max_int_4 = 2147483647;
 
12
DROP TABLE IF EXISTS t0_template;
 
13
CREATE TABLE t0_template (
 
14
f_int1 INTEGER,
 
15
f_int2 INTEGER,
 
16
f_char1 CHAR(20),
 
17
f_char2 CHAR(20),
 
18
f_charbig VARCHAR(1000) ,
 
19
PRIMARY KEY(f_int1))
 
20
ENGINE = MEMORY;
 
21
#     Logging of <max_row> INSERTs into t0_template suppressed
 
22
DROP TABLE IF EXISTS t0_definition;
 
23
CREATE TABLE t0_definition (
 
24
state CHAR(3),
 
25
create_command VARBINARY(5000),
 
26
file_list      VARBINARY(10000),
 
27
PRIMARY KEY (state)
 
28
) ENGINE = MEMORY;
 
29
DROP TABLE IF EXISTS t0_aux;
 
30
CREATE TABLE t0_aux ( f_int1 INTEGER,
 
31
f_int2 INTEGER,
 
32
f_char1 CHAR(20),
 
33
f_char2 CHAR(20),
 
34
f_charbig VARCHAR(1000) )
 
35
ENGINE = MEMORY;
 
36
SET AUTOCOMMIT= 1;
 
37
SET @@session.sql_mode= '';
 
38
# End of basic preparations needed for all tests
 
39
#-----------------------------------------------
 
40
 
 
41
#========================================================================
 
42
#  1.    ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX
 
43
#========================================================================
 
44
#------------------------------------------------------------------------
 
45
#  1.1   ADD PRIMARY KEY or UNIQUE INDEX to table with one column (f_int1)
 
46
#        within the partitioning function
 
47
#------------------------------------------------------------------------
 
48
DROP TABLE IF EXISTS t1;
 
49
CREATE TABLE t1 (
 
50
f_int1 INTEGER,
 
51
f_int2 INTEGER,
 
52
f_char1 CHAR(20),
 
53
f_char2 CHAR(20),
 
54
f_charbig VARCHAR(1000)
 
55
 
 
56
)
 
57
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
58
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
60
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
61
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
62
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
63
DROP TABLE t1;
 
64
CREATE TABLE t1 (
 
65
f_int1 INTEGER,
 
66
f_int2 INTEGER,
 
67
f_char1 CHAR(20),
 
68
f_char2 CHAR(20),
 
69
f_charbig VARCHAR(1000)
 
70
 
 
71
)
 
72
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
73
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
74
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
75
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
76
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
77
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
78
DROP TABLE t1;
 
79
CREATE TABLE t1 (
 
80
f_int1 INTEGER,
 
81
f_int2 INTEGER,
 
82
f_char1 CHAR(20),
 
83
f_char2 CHAR(20),
 
84
f_charbig VARCHAR(1000)
 
85
 
 
86
)
 
87
PARTITION BY LIST(MOD(f_int1,4))
 
88
(PARTITION part_3 VALUES IN (-3),
 
89
PARTITION part_2 VALUES IN (-2),
 
90
PARTITION part_1 VALUES IN (-1),
 
91
PARTITION part_N VALUES IN (NULL),
 
92
PARTITION part0 VALUES IN (0),
 
93
PARTITION part1 VALUES IN (1),
 
94
PARTITION part2 VALUES IN (2),
 
95
PARTITION part3 VALUES IN (3));
 
96
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
97
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
98
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
99
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
100
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
101
DROP TABLE t1;
 
102
CREATE TABLE t1 (
 
103
f_int1 INTEGER,
 
104
f_int2 INTEGER,
 
105
f_char1 CHAR(20),
 
106
f_char2 CHAR(20),
 
107
f_charbig VARCHAR(1000)
 
108
 
 
109
)
 
110
PARTITION BY RANGE(f_int1)
 
111
(PARTITION parta VALUES LESS THAN (0),
 
112
PARTITION partb VALUES LESS THAN (5),
 
113
PARTITION partc VALUES LESS THAN (10),
 
114
PARTITION partd VALUES LESS THAN (10 + 5),
 
115
PARTITION parte VALUES LESS THAN (20),
 
116
PARTITION partf VALUES LESS THAN (2147483646));
 
117
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
118
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
119
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
120
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
121
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
122
DROP TABLE t1;
 
123
CREATE TABLE t1 (
 
124
f_int1 INTEGER,
 
125
f_int2 INTEGER,
 
126
f_char1 CHAR(20),
 
127
f_char2 CHAR(20),
 
128
f_charbig VARCHAR(1000)
 
129
 
 
130
)
 
131
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
132
(PARTITION parta VALUES LESS THAN (0),
 
133
PARTITION partb VALUES LESS THAN (5),
 
134
PARTITION partc VALUES LESS THAN (10),
 
135
PARTITION partd VALUES LESS THAN (2147483646));
 
136
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
137
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
138
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
139
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
140
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
141
DROP TABLE t1;
 
142
CREATE TABLE t1 (
 
143
f_int1 INTEGER,
 
144
f_int2 INTEGER,
 
145
f_char1 CHAR(20),
 
146
f_char2 CHAR(20),
 
147
f_charbig VARCHAR(1000)
 
148
 
 
149
)
 
150
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
151
(PARTITION part1 VALUES LESS THAN (0)
 
152
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
153
PARTITION part2 VALUES LESS THAN (5)
 
154
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
155
PARTITION part3 VALUES LESS THAN (10)
 
156
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
157
PARTITION part4 VALUES LESS THAN (2147483646)
 
158
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
159
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
160
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
161
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
162
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
163
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
164
DROP TABLE t1;
 
165
CREATE TABLE t1 (
 
166
f_int1 INTEGER,
 
167
f_int2 INTEGER,
 
168
f_char1 CHAR(20),
 
169
f_char2 CHAR(20),
 
170
f_charbig VARCHAR(1000)
 
171
 
 
172
)
 
173
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
174
(PARTITION part1 VALUES IN (0)
 
175
(SUBPARTITION sp11, SUBPARTITION sp12),
 
176
PARTITION part2 VALUES IN (1)
 
177
(SUBPARTITION sp21, SUBPARTITION sp22),
 
178
PARTITION part3 VALUES IN (2)
 
179
(SUBPARTITION sp31, SUBPARTITION sp32),
 
180
PARTITION part4 VALUES IN (NULL)
 
181
(SUBPARTITION sp41, SUBPARTITION sp42));
 
182
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
183
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
184
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
185
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
186
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
187
DROP TABLE t1;
 
188
CREATE TABLE t1 (
 
189
f_int1 INTEGER,
 
190
f_int2 INTEGER,
 
191
f_char1 CHAR(20),
 
192
f_char2 CHAR(20),
 
193
f_charbig VARCHAR(1000)
 
194
 
 
195
)
 
196
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
197
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
198
(PARTITION part1 VALUES IN (0),
 
199
 PARTITION part2 VALUES IN (1),
 
200
 PARTITION part3 VALUES IN (NULL));
 
201
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
202
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
203
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
204
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
 
205
ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
 
206
DROP TABLE t1;
 
207
#  1.1.4 UNIQUE INDEX consisting of two columns
 
208
DROP TABLE IF EXISTS t1;
 
209
CREATE TABLE t1 (
 
210
f_int1 INTEGER,
 
211
f_int2 INTEGER,
 
212
f_char1 CHAR(20),
 
213
f_char2 CHAR(20),
 
214
f_charbig VARCHAR(1000)
 
215
 
 
216
)
 
217
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
218
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
219
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
220
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
221
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
222
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
223
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
224
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
225
# Start usability test (inc/partition_check.inc)
 
226
create_command
 
227
SHOW CREATE TABLE t1;
 
228
Table   Create Table
 
229
t1      CREATE TABLE `t1` (
 
230
  `f_int1` int(11) DEFAULT NULL,
 
231
  `f_int2` int(11) DEFAULT NULL,
 
232
  `f_char1` char(20) DEFAULT NULL,
 
233
  `f_char2` char(20) DEFAULT NULL,
 
234
  `f_charbig` varchar(1000) DEFAULT NULL,
 
235
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
236
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
237
 
 
238
unified filelist
 
239
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
240
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
241
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
242
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
243
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
244
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
245
 
 
246
# check prerequisites-1 success:    1
 
247
# check COUNT(*) success:    1
 
248
# check MIN/MAX(f_int1) success:    1
 
249
# check MIN/MAX(f_int2) success:    1
 
250
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
251
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
252
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
253
WHERE f_int1 IN (2,3);
 
254
ERROR 23000: Can't write; duplicate key in table 't1'
 
255
# check prerequisites-3 success:    1
 
256
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
257
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
258
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
259
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
260
WHERE f_int1 IN (2,3);
 
261
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
262
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
263
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
264
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
265
WHERE f_int1 IN (2,3);
 
266
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
267
# check read via f_int1 success: 1
 
268
# check read via f_int2 success: 1
 
269
        
 
270
# check multiple-1 success:     1
 
271
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
272
        
 
273
# check multiple-2 success:     1
 
274
INSERT INTO t1 SELECT * FROM t0_template
 
275
WHERE MOD(f_int1,3) = 0;
 
276
        
 
277
# check multiple-3 success:     1
 
278
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
279
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
280
AND @max_row_div2 + @max_row_div4;
 
281
        
 
282
# check multiple-4 success:     1
 
283
DELETE FROM t1
 
284
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
285
AND @max_row_div2 + @max_row_div4 + @max_row;
 
286
        
 
287
# check multiple-5 success:     1
 
288
SELECT COUNT(*) INTO @try_count FROM t0_template
 
289
WHERE MOD(f_int1,3) = 0
 
290
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
291
SELECT COUNT(*) INTO @clash_count
 
292
FROM t1 INNER JOIN t0_template USING(f_int1)
 
293
WHERE MOD(f_int1,3) = 0
 
294
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
295
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
296
INSERT INTO t1
 
297
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
298
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
299
f_charbig = '#SINGLE#';
 
300
        
 
301
# check single-1 success:       1
 
302
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
303
INSERT INTO t1
 
304
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
305
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
306
f_charbig = '#SINGLE#';
 
307
        
 
308
# check single-2 success:       1
 
309
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
310
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
311
UPDATE t1 SET f_int1 = @cur_value2
 
312
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
313
        
 
314
# check single-3 success:       1
 
315
SET @cur_value1= -1;
 
316
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
317
UPDATE t1 SET f_int1 = @cur_value1
 
318
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
319
        
 
320
# check single-4 success:       1
 
321
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
322
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
323
        
 
324
# check single-5 success:       1
 
325
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
326
        
 
327
# check single-6 success:       1
 
328
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
329
        
 
330
# check single-7 success:       1
 
331
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
332
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
333
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
334
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
335
f_charbig = '#NULL#';
 
336
INSERT INTO t1
 
337
SET f_int1 = NULL , f_int2 = -@max_row,
 
338
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
339
f_charbig = '#NULL#';
 
340
# check null success:    1
 
341
        
 
342
# check null-1 success:         1
 
343
UPDATE t1 SET f_int1 = -@max_row
 
344
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
345
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
346
        
 
347
# check null-2 success:         1
 
348
UPDATE t1 SET f_int1 = NULL
 
349
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
350
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
351
        
 
352
# check null-3 success:         1
 
353
DELETE FROM t1
 
354
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
355
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
356
        
 
357
# check null-4 success:         1
 
358
DELETE FROM t1
 
359
WHERE f_int1 = 0 AND f_int2 = 0
 
360
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
361
AND f_charbig = '#NULL#';
 
362
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
363
SELECT f_int1, f_int1, '', '', 'was inserted'
 
364
   FROM t0_template source_tab
 
365
WHERE MOD(f_int1,3) = 0
 
366
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
367
ON DUPLICATE KEY
 
368
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
369
f_int2 = 2 * @max_row + source_tab.f_int1,
 
370
f_charbig = 'was updated';
 
371
        
 
372
# check unique-1-a success:     1
 
373
        
 
374
# check unique-1-b success:     1
 
375
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
376
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
377
f_int2 = CAST(f_char1 AS SIGNED INT),
 
378
f_charbig = CONCAT('===',f_char1,'===')
 
379
WHERE f_charbig = 'was updated';
 
380
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
381
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
382
   FROM t0_template source_tab
 
383
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
384
        
 
385
# check replace success:        1
 
386
DELETE FROM t1
 
387
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
388
DELETE FROM t1
 
389
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
390
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
391
UPDATE t1 SET f_int2 = f_int1,
 
392
f_char1 = CAST(f_int1 AS CHAR),
 
393
f_char2 = CAST(f_int1 AS CHAR),
 
394
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
395
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
396
SET AUTOCOMMIT= 0;
 
397
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
398
SELECT f_int1, f_int1, '', '', 'was inserted'
 
399
FROM t0_template source_tab
 
400
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
401
        
 
402
# check transactions-1 success:         1
 
403
COMMIT WORK;
 
404
        
 
405
# check transactions-2 success:         1
 
406
ROLLBACK WORK;
 
407
        
 
408
# check transactions-3 success:         1
 
409
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
410
COMMIT WORK;
 
411
ROLLBACK WORK;
 
412
        
 
413
# check transactions-4 success:         1
 
414
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
415
SELECT f_int1, f_int1, '', '', 'was inserted'
 
416
FROM t0_template source_tab
 
417
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
418
        
 
419
# check transactions-5 success:         1
 
420
ROLLBACK WORK;
 
421
Warnings:
 
422
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
423
        
 
424
# check transactions-6 success:         1
 
425
# INFO: Storage engine used for t1 seems to be not transactional.
 
426
COMMIT;
 
427
        
 
428
# check transactions-7 success:         1
 
429
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
430
COMMIT WORK;
 
431
SET @@session.sql_mode = 'traditional';
 
432
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
433
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
434
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
435
'', '', 'was inserted' FROM t0_template
 
436
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
437
ERROR 22012: Division by 0
 
438
COMMIT;
 
439
        
 
440
# check transactions-8 success:         1
 
441
# INFO: Storage engine used for t1 seems to be unable to revert
 
442
#       changes made by the failing statement.
 
443
SET @@session.sql_mode = '';
 
444
SET AUTOCOMMIT= 1;
 
445
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
446
COMMIT WORK;
 
447
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
448
        
 
449
# check special-1 success:      1
 
450
UPDATE t1 SET f_charbig = '';
 
451
        
 
452
# check special-2 success:      1
 
453
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
454
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
455
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
457
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
458
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
459
'just inserted' FROM t0_template
 
460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
461
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
462
BEGIN
 
463
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
464
f_charbig = 'updated by trigger'
 
465
      WHERE f_int1 = new.f_int1;
 
466
END|
 
467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
468
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
469
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
470
        
 
471
# check trigger-1 success:      1
 
472
DROP TRIGGER trg_1;
 
473
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
474
f_int2 = CAST(f_char1 AS SIGNED INT),
 
475
f_charbig = 'just inserted'
 
476
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
477
DELETE FROM t0_aux
 
478
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
479
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
480
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
481
'just inserted' FROM t0_template
 
482
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
483
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
484
BEGIN
 
485
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
486
f_charbig = 'updated by trigger'
 
487
      WHERE f_int1 = new.f_int1;
 
488
END|
 
489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
490
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
492
        
 
493
# check trigger-2 success:      1
 
494
DROP TRIGGER trg_1;
 
495
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
496
f_int2 = CAST(f_char1 AS SIGNED INT),
 
497
f_charbig = 'just inserted'
 
498
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
499
DELETE FROM t0_aux
 
500
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
501
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
502
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
503
'just inserted' FROM t0_template
 
504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
505
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
506
BEGIN
 
507
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
508
f_charbig = 'updated by trigger'
 
509
      WHERE f_int1 = new.f_int1;
 
510
END|
 
511
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
512
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
513
        
 
514
# check trigger-3 success:      1
 
515
DROP TRIGGER trg_1;
 
516
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
517
f_int2 = CAST(f_char1 AS SIGNED INT),
 
518
f_charbig = 'just inserted'
 
519
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
520
DELETE FROM t0_aux
 
521
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
522
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
523
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
524
'just inserted' FROM t0_template
 
525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
526
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
527
BEGIN
 
528
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
529
f_charbig = 'updated by trigger'
 
530
      WHERE f_int1 = - old.f_int1;
 
531
END|
 
532
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
533
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
534
        
 
535
# check trigger-4 success:      1
 
536
DROP TRIGGER trg_1;
 
537
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
538
f_int2 = CAST(f_char1 AS SIGNED INT),
 
539
f_charbig = 'just inserted'
 
540
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
541
DELETE FROM t0_aux
 
542
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
543
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
544
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
545
'just inserted' FROM t0_template
 
546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
547
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
548
BEGIN
 
549
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
550
f_charbig = 'updated by trigger'
 
551
      WHERE f_int1 = new.f_int1;
 
552
END|
 
553
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
554
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
555
        
 
556
# check trigger-5 success:      1
 
557
DROP TRIGGER trg_1;
 
558
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
559
f_int2 = CAST(f_char1 AS SIGNED INT),
 
560
f_charbig = 'just inserted'
 
561
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
562
DELETE FROM t0_aux
 
563
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
565
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
566
'just inserted' FROM t0_template
 
567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
568
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
569
BEGIN
 
570
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
571
f_charbig = 'updated by trigger'
 
572
      WHERE f_int1 = - old.f_int1;
 
573
END|
 
574
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
575
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
576
        
 
577
# check trigger-6 success:      1
 
578
DROP TRIGGER trg_1;
 
579
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
580
f_int2 = CAST(f_char1 AS SIGNED INT),
 
581
f_charbig = 'just inserted'
 
582
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
583
DELETE FROM t0_aux
 
584
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
586
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
587
'just inserted' FROM t0_template
 
588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
589
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
590
BEGIN
 
591
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
592
f_charbig = 'updated by trigger'
 
593
      WHERE f_int1 = - old.f_int1;
 
594
END|
 
595
DELETE FROM t0_aux
 
596
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
597
        
 
598
# check trigger-7 success:      1
 
599
DROP TRIGGER trg_1;
 
600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
602
f_charbig = 'just inserted'
 
603
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
604
DELETE FROM t0_aux
 
605
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
608
'just inserted' FROM t0_template
 
609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
610
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
611
BEGIN
 
612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
613
f_charbig = 'updated by trigger'
 
614
      WHERE f_int1 = - old.f_int1;
 
615
END|
 
616
DELETE FROM t0_aux
 
617
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
618
        
 
619
# check trigger-8 success:      1
 
620
DROP TRIGGER trg_1;
 
621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
623
f_charbig = 'just inserted'
 
624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
625
DELETE FROM t0_aux
 
626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
627
DELETE FROM t1
 
628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
629
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
630
BEGIN
 
631
SET new.f_int1 = old.f_int1 + @max_row,
 
632
new.f_int2 = old.f_int2 - @max_row,
 
633
new.f_charbig = '####updated per update trigger####';
 
634
END|
 
635
UPDATE t1
 
636
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
637
f_charbig = '####updated per update statement itself####';
 
638
        
 
639
# check trigger-9 success:      1
 
640
DROP TRIGGER trg_2;
 
641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
643
f_charbig = CONCAT('===',f_char1,'===');
 
644
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
645
BEGIN
 
646
SET new.f_int1 = new.f_int1 + @max_row,
 
647
new.f_int2 = new.f_int2 - @max_row,
 
648
new.f_charbig = '####updated per update trigger####';
 
649
END|
 
650
UPDATE t1
 
651
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
652
f_charbig = '####updated per update statement itself####';
 
653
        
 
654
# check trigger-10 success:     1
 
655
DROP TRIGGER trg_2;
 
656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
658
f_charbig = CONCAT('===',f_char1,'===');
 
659
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
660
BEGIN
 
661
SET new.f_int1 = @my_max1 + @counter,
 
662
new.f_int2 = @my_min2 - @counter,
 
663
new.f_charbig = '####updated per insert trigger####';
 
664
SET @counter = @counter + 1;
 
665
END|
 
666
SET @counter = 1;
 
667
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
668
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
669
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
670
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
672
ORDER BY f_int1;
 
673
DROP TRIGGER trg_3;
 
674
        
 
675
# check trigger-11 success:     1
 
676
DELETE FROM t1
 
677
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
678
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
679
AND f_charbig = '####updated per insert trigger####';
 
680
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
681
BEGIN
 
682
SET new.f_int1 = @my_max1 + @counter,
 
683
new.f_int2 = @my_min2 - @counter,
 
684
new.f_charbig = '####updated per insert trigger####';
 
685
SET @counter = @counter + 1;
 
686
END|
 
687
SET @counter = 1;
 
688
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
689
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
690
SELECT CAST(f_int1 AS CHAR),
 
691
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
692
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
693
ORDER BY f_int1;
 
694
DROP TRIGGER trg_3;
 
695
        
 
696
# check trigger-12 success:     1
 
697
DELETE FROM t1
 
698
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
699
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
700
AND f_charbig = '####updated per insert trigger####';
 
701
ANALYZE  TABLE t1;
 
702
Table   Op      Msg_type        Msg_text
 
703
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
704
CHECK    TABLE t1 EXTENDED;
 
705
Table   Op      Msg_type        Msg_text
 
706
test.t1 check   note    The storage engine for the table doesn't support check
 
707
CHECKSUM TABLE t1 EXTENDED;
 
708
Table   Checksum
 
709
test.t1 <some_value>
 
710
OPTIMIZE TABLE t1;
 
711
Table   Op      Msg_type        Msg_text
 
712
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
713
# check layout success:    1
 
714
REPAIR   TABLE t1 EXTENDED;
 
715
Table   Op      Msg_type        Msg_text
 
716
test.t1 repair  note    The storage engine for the table doesn't support repair
 
717
# check layout success:    1
 
718
TRUNCATE t1;
 
719
        
 
720
# check TRUNCATE success:       1
 
721
# check layout success:    1
 
722
# End usability test (inc/partition_check.inc)
 
723
DROP TABLE t1;
 
724
CREATE TABLE t1 (
 
725
f_int1 INTEGER,
 
726
f_int2 INTEGER,
 
727
f_char1 CHAR(20),
 
728
f_char2 CHAR(20),
 
729
f_charbig VARCHAR(1000)
 
730
 
 
731
)
 
732
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
733
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
734
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
735
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
736
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
737
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
738
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
739
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
740
# Start usability test (inc/partition_check.inc)
 
741
create_command
 
742
SHOW CREATE TABLE t1;
 
743
Table   Create Table
 
744
t1      CREATE TABLE `t1` (
 
745
  `f_int1` int(11) DEFAULT NULL,
 
746
  `f_int2` int(11) DEFAULT NULL,
 
747
  `f_char1` char(20) DEFAULT NULL,
 
748
  `f_char2` char(20) DEFAULT NULL,
 
749
  `f_charbig` varchar(1000) DEFAULT NULL,
 
750
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
751
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
752
 
 
753
unified filelist
 
754
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
755
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
756
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
757
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
758
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
759
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
760
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
761
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
762
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
763
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
764
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
765
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
766
 
 
767
# check prerequisites-1 success:    1
 
768
# check COUNT(*) success:    1
 
769
# check MIN/MAX(f_int1) success:    1
 
770
# check MIN/MAX(f_int2) success:    1
 
771
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
772
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
773
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
774
WHERE f_int1 IN (2,3);
 
775
ERROR 23000: Can't write; duplicate key in table 't1'
 
776
# check prerequisites-3 success:    1
 
777
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
778
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
779
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
780
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
781
WHERE f_int1 IN (2,3);
 
782
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
783
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
784
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
785
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
786
WHERE f_int1 IN (2,3);
 
787
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
788
# check read via f_int1 success: 1
 
789
# check read via f_int2 success: 1
 
790
        
 
791
# check multiple-1 success:     1
 
792
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
793
        
 
794
# check multiple-2 success:     1
 
795
INSERT INTO t1 SELECT * FROM t0_template
 
796
WHERE MOD(f_int1,3) = 0;
 
797
        
 
798
# check multiple-3 success:     1
 
799
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
800
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
801
AND @max_row_div2 + @max_row_div4;
 
802
        
 
803
# check multiple-4 success:     1
 
804
DELETE FROM t1
 
805
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
806
AND @max_row_div2 + @max_row_div4 + @max_row;
 
807
        
 
808
# check multiple-5 success:     1
 
809
SELECT COUNT(*) INTO @try_count FROM t0_template
 
810
WHERE MOD(f_int1,3) = 0
 
811
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
812
SELECT COUNT(*) INTO @clash_count
 
813
FROM t1 INNER JOIN t0_template USING(f_int1)
 
814
WHERE MOD(f_int1,3) = 0
 
815
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
816
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
817
INSERT INTO t1
 
818
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
819
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
820
f_charbig = '#SINGLE#';
 
821
        
 
822
# check single-1 success:       1
 
823
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
824
INSERT INTO t1
 
825
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
826
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
827
f_charbig = '#SINGLE#';
 
828
        
 
829
# check single-2 success:       1
 
830
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
831
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
832
UPDATE t1 SET f_int1 = @cur_value2
 
833
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
834
        
 
835
# check single-3 success:       1
 
836
SET @cur_value1= -1;
 
837
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
838
UPDATE t1 SET f_int1 = @cur_value1
 
839
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
840
        
 
841
# check single-4 success:       1
 
842
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
843
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
844
        
 
845
# check single-5 success:       1
 
846
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
847
        
 
848
# check single-6 success:       1
 
849
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
850
        
 
851
# check single-7 success:       1
 
852
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
853
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
854
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
855
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
856
f_charbig = '#NULL#';
 
857
INSERT INTO t1
 
858
SET f_int1 = NULL , f_int2 = -@max_row,
 
859
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
860
f_charbig = '#NULL#';
 
861
# check null success:    1
 
862
        
 
863
# check null-1 success:         1
 
864
UPDATE t1 SET f_int1 = -@max_row
 
865
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
866
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
867
        
 
868
# check null-2 success:         1
 
869
UPDATE t1 SET f_int1 = NULL
 
870
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
871
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
872
        
 
873
# check null-3 success:         1
 
874
DELETE FROM t1
 
875
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
876
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
877
        
 
878
# check null-4 success:         1
 
879
DELETE FROM t1
 
880
WHERE f_int1 = 0 AND f_int2 = 0
 
881
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
882
AND f_charbig = '#NULL#';
 
883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
884
SELECT f_int1, f_int1, '', '', 'was inserted'
 
885
   FROM t0_template source_tab
 
886
WHERE MOD(f_int1,3) = 0
 
887
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
888
ON DUPLICATE KEY
 
889
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
890
f_int2 = 2 * @max_row + source_tab.f_int1,
 
891
f_charbig = 'was updated';
 
892
        
 
893
# check unique-1-a success:     1
 
894
        
 
895
# check unique-1-b success:     1
 
896
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
899
f_charbig = CONCAT('===',f_char1,'===')
 
900
WHERE f_charbig = 'was updated';
 
901
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
902
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
903
   FROM t0_template source_tab
 
904
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
905
        
 
906
# check replace success:        1
 
907
DELETE FROM t1
 
908
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
909
DELETE FROM t1
 
910
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
911
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
912
UPDATE t1 SET f_int2 = f_int1,
 
913
f_char1 = CAST(f_int1 AS CHAR),
 
914
f_char2 = CAST(f_int1 AS CHAR),
 
915
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
916
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
917
SET AUTOCOMMIT= 0;
 
918
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
919
SELECT f_int1, f_int1, '', '', 'was inserted'
 
920
FROM t0_template source_tab
 
921
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
922
        
 
923
# check transactions-1 success:         1
 
924
COMMIT WORK;
 
925
        
 
926
# check transactions-2 success:         1
 
927
ROLLBACK WORK;
 
928
        
 
929
# check transactions-3 success:         1
 
930
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
931
COMMIT WORK;
 
932
ROLLBACK WORK;
 
933
        
 
934
# check transactions-4 success:         1
 
935
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
936
SELECT f_int1, f_int1, '', '', 'was inserted'
 
937
FROM t0_template source_tab
 
938
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
939
        
 
940
# check transactions-5 success:         1
 
941
ROLLBACK WORK;
 
942
Warnings:
 
943
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
944
        
 
945
# check transactions-6 success:         1
 
946
# INFO: Storage engine used for t1 seems to be not transactional.
 
947
COMMIT;
 
948
        
 
949
# check transactions-7 success:         1
 
950
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
951
COMMIT WORK;
 
952
SET @@session.sql_mode = 'traditional';
 
953
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
955
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
956
'', '', 'was inserted' FROM t0_template
 
957
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
958
ERROR 22012: Division by 0
 
959
COMMIT;
 
960
        
 
961
# check transactions-8 success:         1
 
962
# INFO: Storage engine used for t1 seems to be unable to revert
 
963
#       changes made by the failing statement.
 
964
SET @@session.sql_mode = '';
 
965
SET AUTOCOMMIT= 1;
 
966
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
967
COMMIT WORK;
 
968
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
969
        
 
970
# check special-1 success:      1
 
971
UPDATE t1 SET f_charbig = '';
 
972
        
 
973
# check special-2 success:      1
 
974
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
975
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
976
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
977
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
978
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
979
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
980
'just inserted' FROM t0_template
 
981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
982
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
983
BEGIN
 
984
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
985
f_charbig = 'updated by trigger'
 
986
      WHERE f_int1 = new.f_int1;
 
987
END|
 
988
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
989
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
991
        
 
992
# check trigger-1 success:      1
 
993
DROP TRIGGER trg_1;
 
994
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
995
f_int2 = CAST(f_char1 AS SIGNED INT),
 
996
f_charbig = 'just inserted'
 
997
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
998
DELETE FROM t0_aux
 
999
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1001
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1002
'just inserted' FROM t0_template
 
1003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1004
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1005
BEGIN
 
1006
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1007
f_charbig = 'updated by trigger'
 
1008
      WHERE f_int1 = new.f_int1;
 
1009
END|
 
1010
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1011
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1013
        
 
1014
# check trigger-2 success:      1
 
1015
DROP TRIGGER trg_1;
 
1016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1018
f_charbig = 'just inserted'
 
1019
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1020
DELETE FROM t0_aux
 
1021
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1022
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1023
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1024
'just inserted' FROM t0_template
 
1025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1026
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1027
BEGIN
 
1028
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1029
f_charbig = 'updated by trigger'
 
1030
      WHERE f_int1 = new.f_int1;
 
1031
END|
 
1032
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1033
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1034
        
 
1035
# check trigger-3 success:      1
 
1036
DROP TRIGGER trg_1;
 
1037
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1038
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1039
f_charbig = 'just inserted'
 
1040
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1041
DELETE FROM t0_aux
 
1042
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1043
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1044
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1045
'just inserted' FROM t0_template
 
1046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1047
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1048
BEGIN
 
1049
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1050
f_charbig = 'updated by trigger'
 
1051
      WHERE f_int1 = - old.f_int1;
 
1052
END|
 
1053
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1054
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1055
        
 
1056
# check trigger-4 success:      1
 
1057
DROP TRIGGER trg_1;
 
1058
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1059
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1060
f_charbig = 'just inserted'
 
1061
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1062
DELETE FROM t0_aux
 
1063
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1064
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1065
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1066
'just inserted' FROM t0_template
 
1067
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1068
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1069
BEGIN
 
1070
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1071
f_charbig = 'updated by trigger'
 
1072
      WHERE f_int1 = new.f_int1;
 
1073
END|
 
1074
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1075
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1076
        
 
1077
# check trigger-5 success:      1
 
1078
DROP TRIGGER trg_1;
 
1079
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1080
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1081
f_charbig = 'just inserted'
 
1082
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1083
DELETE FROM t0_aux
 
1084
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1085
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1086
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1087
'just inserted' FROM t0_template
 
1088
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1089
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1090
BEGIN
 
1091
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1092
f_charbig = 'updated by trigger'
 
1093
      WHERE f_int1 = - old.f_int1;
 
1094
END|
 
1095
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1096
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1097
        
 
1098
# check trigger-6 success:      1
 
1099
DROP TRIGGER trg_1;
 
1100
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1101
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1102
f_charbig = 'just inserted'
 
1103
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1104
DELETE FROM t0_aux
 
1105
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1106
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1107
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1108
'just inserted' FROM t0_template
 
1109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1110
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1111
BEGIN
 
1112
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1113
f_charbig = 'updated by trigger'
 
1114
      WHERE f_int1 = - old.f_int1;
 
1115
END|
 
1116
DELETE FROM t0_aux
 
1117
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1118
        
 
1119
# check trigger-7 success:      1
 
1120
DROP TRIGGER trg_1;
 
1121
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1122
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1123
f_charbig = 'just inserted'
 
1124
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1125
DELETE FROM t0_aux
 
1126
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1128
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1129
'just inserted' FROM t0_template
 
1130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1131
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1132
BEGIN
 
1133
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1134
f_charbig = 'updated by trigger'
 
1135
      WHERE f_int1 = - old.f_int1;
 
1136
END|
 
1137
DELETE FROM t0_aux
 
1138
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1139
        
 
1140
# check trigger-8 success:      1
 
1141
DROP TRIGGER trg_1;
 
1142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1144
f_charbig = 'just inserted'
 
1145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1146
DELETE FROM t0_aux
 
1147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1148
DELETE FROM t1
 
1149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1150
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1151
BEGIN
 
1152
SET new.f_int1 = old.f_int1 + @max_row,
 
1153
new.f_int2 = old.f_int2 - @max_row,
 
1154
new.f_charbig = '####updated per update trigger####';
 
1155
END|
 
1156
UPDATE t1
 
1157
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1158
f_charbig = '####updated per update statement itself####';
 
1159
        
 
1160
# check trigger-9 success:      1
 
1161
DROP TRIGGER trg_2;
 
1162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1164
f_charbig = CONCAT('===',f_char1,'===');
 
1165
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1166
BEGIN
 
1167
SET new.f_int1 = new.f_int1 + @max_row,
 
1168
new.f_int2 = new.f_int2 - @max_row,
 
1169
new.f_charbig = '####updated per update trigger####';
 
1170
END|
 
1171
UPDATE t1
 
1172
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1173
f_charbig = '####updated per update statement itself####';
 
1174
        
 
1175
# check trigger-10 success:     1
 
1176
DROP TRIGGER trg_2;
 
1177
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1178
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1179
f_charbig = CONCAT('===',f_char1,'===');
 
1180
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1181
BEGIN
 
1182
SET new.f_int1 = @my_max1 + @counter,
 
1183
new.f_int2 = @my_min2 - @counter,
 
1184
new.f_charbig = '####updated per insert trigger####';
 
1185
SET @counter = @counter + 1;
 
1186
END|
 
1187
SET @counter = 1;
 
1188
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1189
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1190
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1191
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1193
ORDER BY f_int1;
 
1194
DROP TRIGGER trg_3;
 
1195
        
 
1196
# check trigger-11 success:     1
 
1197
DELETE FROM t1
 
1198
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1199
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1200
AND f_charbig = '####updated per insert trigger####';
 
1201
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1202
BEGIN
 
1203
SET new.f_int1 = @my_max1 + @counter,
 
1204
new.f_int2 = @my_min2 - @counter,
 
1205
new.f_charbig = '####updated per insert trigger####';
 
1206
SET @counter = @counter + 1;
 
1207
END|
 
1208
SET @counter = 1;
 
1209
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1210
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1211
SELECT CAST(f_int1 AS CHAR),
 
1212
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1214
ORDER BY f_int1;
 
1215
DROP TRIGGER trg_3;
 
1216
        
 
1217
# check trigger-12 success:     1
 
1218
DELETE FROM t1
 
1219
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1220
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1221
AND f_charbig = '####updated per insert trigger####';
 
1222
ANALYZE  TABLE t1;
 
1223
Table   Op      Msg_type        Msg_text
 
1224
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1225
CHECK    TABLE t1 EXTENDED;
 
1226
Table   Op      Msg_type        Msg_text
 
1227
test.t1 check   note    The storage engine for the table doesn't support check
 
1228
CHECKSUM TABLE t1 EXTENDED;
 
1229
Table   Checksum
 
1230
test.t1 <some_value>
 
1231
OPTIMIZE TABLE t1;
 
1232
Table   Op      Msg_type        Msg_text
 
1233
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1234
# check layout success:    1
 
1235
REPAIR   TABLE t1 EXTENDED;
 
1236
Table   Op      Msg_type        Msg_text
 
1237
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1238
# check layout success:    1
 
1239
TRUNCATE t1;
 
1240
        
 
1241
# check TRUNCATE success:       1
 
1242
# check layout success:    1
 
1243
# End usability test (inc/partition_check.inc)
 
1244
DROP TABLE t1;
 
1245
CREATE TABLE t1 (
 
1246
f_int1 INTEGER,
 
1247
f_int2 INTEGER,
 
1248
f_char1 CHAR(20),
 
1249
f_char2 CHAR(20),
 
1250
f_charbig VARCHAR(1000)
 
1251
 
 
1252
)
 
1253
PARTITION BY LIST(MOD(f_int1,4))
 
1254
(PARTITION part_3 VALUES IN (-3),
 
1255
PARTITION part_2 VALUES IN (-2),
 
1256
PARTITION part_1 VALUES IN (-1),
 
1257
PARTITION part_N VALUES IN (NULL),
 
1258
PARTITION part0 VALUES IN (0),
 
1259
PARTITION part1 VALUES IN (1),
 
1260
PARTITION part2 VALUES IN (2),
 
1261
PARTITION part3 VALUES IN (3));
 
1262
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1263
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1264
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1265
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
1266
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1267
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1268
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1269
# Start usability test (inc/partition_check.inc)
 
1270
create_command
 
1271
SHOW CREATE TABLE t1;
 
1272
Table   Create Table
 
1273
t1      CREATE TABLE `t1` (
 
1274
  `f_int1` int(11) DEFAULT NULL,
 
1275
  `f_int2` int(11) DEFAULT NULL,
 
1276
  `f_char1` char(20) DEFAULT NULL,
 
1277
  `f_char2` char(20) DEFAULT NULL,
 
1278
  `f_charbig` varchar(1000) DEFAULT NULL,
 
1279
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
1280
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
1281
 
 
1282
unified filelist
 
1283
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
1284
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
1285
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
1286
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
1287
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
1288
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
1289
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
1290
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
1291
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
1292
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
1293
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
1294
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
1295
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
1296
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
1297
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
1298
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
1299
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
1300
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
1301
 
 
1302
# check prerequisites-1 success:    1
 
1303
# check COUNT(*) success:    1
 
1304
# check MIN/MAX(f_int1) success:    1
 
1305
# check MIN/MAX(f_int2) success:    1
 
1306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1307
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1308
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1309
WHERE f_int1 IN (2,3);
 
1310
ERROR 23000: Can't write; duplicate key in table 't1'
 
1311
# check prerequisites-3 success:    1
 
1312
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
1313
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1314
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1315
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1316
WHERE f_int1 IN (2,3);
 
1317
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1318
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1319
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1320
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1321
WHERE f_int1 IN (2,3);
 
1322
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1323
# check read via f_int1 success: 1
 
1324
# check read via f_int2 success: 1
 
1325
        
 
1326
# check multiple-1 success:     1
 
1327
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1328
        
 
1329
# check multiple-2 success:     1
 
1330
INSERT INTO t1 SELECT * FROM t0_template
 
1331
WHERE MOD(f_int1,3) = 0;
 
1332
        
 
1333
# check multiple-3 success:     1
 
1334
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1335
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1336
AND @max_row_div2 + @max_row_div4;
 
1337
        
 
1338
# check multiple-4 success:     1
 
1339
DELETE FROM t1
 
1340
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1341
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1342
        
 
1343
# check multiple-5 success:     1
 
1344
SELECT COUNT(*) INTO @try_count FROM t0_template
 
1345
WHERE MOD(f_int1,3) = 0
 
1346
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1347
SELECT COUNT(*) INTO @clash_count
 
1348
FROM t1 INNER JOIN t0_template USING(f_int1)
 
1349
WHERE MOD(f_int1,3) = 0
 
1350
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1351
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1352
INSERT INTO t1
 
1353
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1354
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1355
f_charbig = '#SINGLE#';
 
1356
        
 
1357
# check single-1 success:       1
 
1358
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1359
INSERT INTO t1
 
1360
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1361
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1362
f_charbig = '#SINGLE#';
 
1363
        
 
1364
# check single-2 success:       1
 
1365
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1366
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1367
UPDATE t1 SET f_int1 = @cur_value2
 
1368
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1369
        
 
1370
# check single-3 success:       1
 
1371
SET @cur_value1= -1;
 
1372
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1373
UPDATE t1 SET f_int1 = @cur_value1
 
1374
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1375
        
 
1376
# check single-4 success:       1
 
1377
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1378
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1379
        
 
1380
# check single-5 success:       1
 
1381
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1382
        
 
1383
# check single-6 success:       1
 
1384
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1385
        
 
1386
# check single-7 success:       1
 
1387
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1388
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1389
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1390
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1391
f_charbig = '#NULL#';
 
1392
INSERT INTO t1
 
1393
SET f_int1 = NULL , f_int2 = -@max_row,
 
1394
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1395
f_charbig = '#NULL#';
 
1396
# check null success:    1
 
1397
        
 
1398
# check null-1 success:         1
 
1399
UPDATE t1 SET f_int1 = -@max_row
 
1400
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1401
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1402
        
 
1403
# check null-2 success:         1
 
1404
UPDATE t1 SET f_int1 = NULL
 
1405
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1406
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1407
        
 
1408
# check null-3 success:         1
 
1409
DELETE FROM t1
 
1410
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1411
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1412
        
 
1413
# check null-4 success:         1
 
1414
DELETE FROM t1
 
1415
WHERE f_int1 = 0 AND f_int2 = 0
 
1416
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1417
AND f_charbig = '#NULL#';
 
1418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1419
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1420
   FROM t0_template source_tab
 
1421
WHERE MOD(f_int1,3) = 0
 
1422
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
1423
ON DUPLICATE KEY
 
1424
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
1425
f_int2 = 2 * @max_row + source_tab.f_int1,
 
1426
f_charbig = 'was updated';
 
1427
        
 
1428
# check unique-1-a success:     1
 
1429
        
 
1430
# check unique-1-b success:     1
 
1431
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1434
f_charbig = CONCAT('===',f_char1,'===')
 
1435
WHERE f_charbig = 'was updated';
 
1436
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1437
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
1438
   FROM t0_template source_tab
 
1439
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1440
        
 
1441
# check replace success:        1
 
1442
DELETE FROM t1
 
1443
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
1444
DELETE FROM t1
 
1445
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
1446
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
1447
UPDATE t1 SET f_int2 = f_int1,
 
1448
f_char1 = CAST(f_int1 AS CHAR),
 
1449
f_char2 = CAST(f_int1 AS CHAR),
 
1450
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
1451
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
1452
SET AUTOCOMMIT= 0;
 
1453
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1454
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1455
FROM t0_template source_tab
 
1456
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1457
        
 
1458
# check transactions-1 success:         1
 
1459
COMMIT WORK;
 
1460
        
 
1461
# check transactions-2 success:         1
 
1462
ROLLBACK WORK;
 
1463
        
 
1464
# check transactions-3 success:         1
 
1465
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1466
COMMIT WORK;
 
1467
ROLLBACK WORK;
 
1468
        
 
1469
# check transactions-4 success:         1
 
1470
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1471
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1472
FROM t0_template source_tab
 
1473
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1474
        
 
1475
# check transactions-5 success:         1
 
1476
ROLLBACK WORK;
 
1477
Warnings:
 
1478
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1479
        
 
1480
# check transactions-6 success:         1
 
1481
# INFO: Storage engine used for t1 seems to be not transactional.
 
1482
COMMIT;
 
1483
        
 
1484
# check transactions-7 success:         1
 
1485
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1486
COMMIT WORK;
 
1487
SET @@session.sql_mode = 'traditional';
 
1488
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1489
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1490
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1491
'', '', 'was inserted' FROM t0_template
 
1492
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1493
ERROR 22012: Division by 0
 
1494
COMMIT;
 
1495
        
 
1496
# check transactions-8 success:         1
 
1497
# INFO: Storage engine used for t1 seems to be unable to revert
 
1498
#       changes made by the failing statement.
 
1499
SET @@session.sql_mode = '';
 
1500
SET AUTOCOMMIT= 1;
 
1501
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1502
COMMIT WORK;
 
1503
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1504
        
 
1505
# check special-1 success:      1
 
1506
UPDATE t1 SET f_charbig = '';
 
1507
        
 
1508
# check special-2 success:      1
 
1509
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1510
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1511
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1513
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1514
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1515
'just inserted' FROM t0_template
 
1516
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1517
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1518
BEGIN
 
1519
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1520
f_charbig = 'updated by trigger'
 
1521
      WHERE f_int1 = new.f_int1;
 
1522
END|
 
1523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1524
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1526
        
 
1527
# check trigger-1 success:      1
 
1528
DROP TRIGGER trg_1;
 
1529
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1530
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1531
f_charbig = 'just inserted'
 
1532
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1533
DELETE FROM t0_aux
 
1534
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1535
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1536
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1537
'just inserted' FROM t0_template
 
1538
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1539
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1540
BEGIN
 
1541
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1542
f_charbig = 'updated by trigger'
 
1543
      WHERE f_int1 = new.f_int1;
 
1544
END|
 
1545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1546
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1548
        
 
1549
# check trigger-2 success:      1
 
1550
DROP TRIGGER trg_1;
 
1551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1553
f_charbig = 'just inserted'
 
1554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1555
DELETE FROM t0_aux
 
1556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1559
'just inserted' FROM t0_template
 
1560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1561
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1562
BEGIN
 
1563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1564
f_charbig = 'updated by trigger'
 
1565
      WHERE f_int1 = new.f_int1;
 
1566
END|
 
1567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1569
        
 
1570
# check trigger-3 success:      1
 
1571
DROP TRIGGER trg_1;
 
1572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1574
f_charbig = 'just inserted'
 
1575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1576
DELETE FROM t0_aux
 
1577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1580
'just inserted' FROM t0_template
 
1581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1582
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1583
BEGIN
 
1584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1585
f_charbig = 'updated by trigger'
 
1586
      WHERE f_int1 = - old.f_int1;
 
1587
END|
 
1588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1590
        
 
1591
# check trigger-4 success:      1
 
1592
DROP TRIGGER trg_1;
 
1593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1595
f_charbig = 'just inserted'
 
1596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1597
DELETE FROM t0_aux
 
1598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1601
'just inserted' FROM t0_template
 
1602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1603
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1604
BEGIN
 
1605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1606
f_charbig = 'updated by trigger'
 
1607
      WHERE f_int1 = new.f_int1;
 
1608
END|
 
1609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1611
        
 
1612
# check trigger-5 success:      1
 
1613
DROP TRIGGER trg_1;
 
1614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1616
f_charbig = 'just inserted'
 
1617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1618
DELETE FROM t0_aux
 
1619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1622
'just inserted' FROM t0_template
 
1623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1624
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1625
BEGIN
 
1626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1627
f_charbig = 'updated by trigger'
 
1628
      WHERE f_int1 = - old.f_int1;
 
1629
END|
 
1630
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1632
        
 
1633
# check trigger-6 success:      1
 
1634
DROP TRIGGER trg_1;
 
1635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1637
f_charbig = 'just inserted'
 
1638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1639
DELETE FROM t0_aux
 
1640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1643
'just inserted' FROM t0_template
 
1644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1645
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1646
BEGIN
 
1647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1648
f_charbig = 'updated by trigger'
 
1649
      WHERE f_int1 = - old.f_int1;
 
1650
END|
 
1651
DELETE FROM t0_aux
 
1652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1653
        
 
1654
# check trigger-7 success:      1
 
1655
DROP TRIGGER trg_1;
 
1656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1658
f_charbig = 'just inserted'
 
1659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1660
DELETE FROM t0_aux
 
1661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1664
'just inserted' FROM t0_template
 
1665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1666
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1667
BEGIN
 
1668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1669
f_charbig = 'updated by trigger'
 
1670
      WHERE f_int1 = - old.f_int1;
 
1671
END|
 
1672
DELETE FROM t0_aux
 
1673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1674
        
 
1675
# check trigger-8 success:      1
 
1676
DROP TRIGGER trg_1;
 
1677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1679
f_charbig = 'just inserted'
 
1680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1681
DELETE FROM t0_aux
 
1682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1683
DELETE FROM t1
 
1684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1685
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1686
BEGIN
 
1687
SET new.f_int1 = old.f_int1 + @max_row,
 
1688
new.f_int2 = old.f_int2 - @max_row,
 
1689
new.f_charbig = '####updated per update trigger####';
 
1690
END|
 
1691
UPDATE t1
 
1692
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1693
f_charbig = '####updated per update statement itself####';
 
1694
        
 
1695
# check trigger-9 success:      1
 
1696
DROP TRIGGER trg_2;
 
1697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1699
f_charbig = CONCAT('===',f_char1,'===');
 
1700
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1701
BEGIN
 
1702
SET new.f_int1 = new.f_int1 + @max_row,
 
1703
new.f_int2 = new.f_int2 - @max_row,
 
1704
new.f_charbig = '####updated per update trigger####';
 
1705
END|
 
1706
UPDATE t1
 
1707
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1708
f_charbig = '####updated per update statement itself####';
 
1709
        
 
1710
# check trigger-10 success:     1
 
1711
DROP TRIGGER trg_2;
 
1712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1714
f_charbig = CONCAT('===',f_char1,'===');
 
1715
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1716
BEGIN
 
1717
SET new.f_int1 = @my_max1 + @counter,
 
1718
new.f_int2 = @my_min2 - @counter,
 
1719
new.f_charbig = '####updated per insert trigger####';
 
1720
SET @counter = @counter + 1;
 
1721
END|
 
1722
SET @counter = 1;
 
1723
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1724
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1725
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1726
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1728
ORDER BY f_int1;
 
1729
DROP TRIGGER trg_3;
 
1730
        
 
1731
# check trigger-11 success:     1
 
1732
DELETE FROM t1
 
1733
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1734
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1735
AND f_charbig = '####updated per insert trigger####';
 
1736
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1737
BEGIN
 
1738
SET new.f_int1 = @my_max1 + @counter,
 
1739
new.f_int2 = @my_min2 - @counter,
 
1740
new.f_charbig = '####updated per insert trigger####';
 
1741
SET @counter = @counter + 1;
 
1742
END|
 
1743
SET @counter = 1;
 
1744
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1745
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1746
SELECT CAST(f_int1 AS CHAR),
 
1747
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1749
ORDER BY f_int1;
 
1750
DROP TRIGGER trg_3;
 
1751
        
 
1752
# check trigger-12 success:     1
 
1753
DELETE FROM t1
 
1754
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1755
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1756
AND f_charbig = '####updated per insert trigger####';
 
1757
ANALYZE  TABLE t1;
 
1758
Table   Op      Msg_type        Msg_text
 
1759
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1760
CHECK    TABLE t1 EXTENDED;
 
1761
Table   Op      Msg_type        Msg_text
 
1762
test.t1 check   note    The storage engine for the table doesn't support check
 
1763
CHECKSUM TABLE t1 EXTENDED;
 
1764
Table   Checksum
 
1765
test.t1 <some_value>
 
1766
OPTIMIZE TABLE t1;
 
1767
Table   Op      Msg_type        Msg_text
 
1768
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1769
# check layout success:    1
 
1770
REPAIR   TABLE t1 EXTENDED;
 
1771
Table   Op      Msg_type        Msg_text
 
1772
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1773
# check layout success:    1
 
1774
TRUNCATE t1;
 
1775
        
 
1776
# check TRUNCATE success:       1
 
1777
# check layout success:    1
 
1778
# End usability test (inc/partition_check.inc)
 
1779
DROP TABLE t1;
 
1780
CREATE TABLE t1 (
 
1781
f_int1 INTEGER,
 
1782
f_int2 INTEGER,
 
1783
f_char1 CHAR(20),
 
1784
f_char2 CHAR(20),
 
1785
f_charbig VARCHAR(1000)
 
1786
 
 
1787
)
 
1788
PARTITION BY RANGE(f_int1)
 
1789
(PARTITION parta VALUES LESS THAN (0),
 
1790
PARTITION partb VALUES LESS THAN (5),
 
1791
PARTITION partc VALUES LESS THAN (10),
 
1792
PARTITION partd VALUES LESS THAN (10 + 5),
 
1793
PARTITION parte VALUES LESS THAN (20),
 
1794
PARTITION partf VALUES LESS THAN (2147483646));
 
1795
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1796
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1797
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1798
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
1799
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1800
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1801
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1802
# Start usability test (inc/partition_check.inc)
 
1803
create_command
 
1804
SHOW CREATE TABLE t1;
 
1805
Table   Create Table
 
1806
t1      CREATE TABLE `t1` (
 
1807
  `f_int1` int(11) DEFAULT NULL,
 
1808
  `f_int2` int(11) DEFAULT NULL,
 
1809
  `f_char1` char(20) DEFAULT NULL,
 
1810
  `f_char2` char(20) DEFAULT NULL,
 
1811
  `f_charbig` varchar(1000) DEFAULT NULL,
 
1812
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
1813
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1814
 
 
1815
unified filelist
 
1816
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
1817
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
1818
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
1819
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
1820
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
1821
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
1822
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
1823
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
1824
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
1825
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
1826
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
1827
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
1828
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
1829
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
1830
 
 
1831
# check prerequisites-1 success:    1
 
1832
# check COUNT(*) success:    1
 
1833
# check MIN/MAX(f_int1) success:    1
 
1834
# check MIN/MAX(f_int2) success:    1
 
1835
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1836
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1837
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1838
WHERE f_int1 IN (2,3);
 
1839
ERROR 23000: Can't write; duplicate key in table 't1'
 
1840
# check prerequisites-3 success:    1
 
1841
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
1842
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1843
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1844
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1845
WHERE f_int1 IN (2,3);
 
1846
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1847
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1848
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
1849
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
1850
WHERE f_int1 IN (2,3);
 
1851
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1852
# check read via f_int1 success: 1
 
1853
# check read via f_int2 success: 1
 
1854
        
 
1855
# check multiple-1 success:     1
 
1856
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1857
        
 
1858
# check multiple-2 success:     1
 
1859
INSERT INTO t1 SELECT * FROM t0_template
 
1860
WHERE MOD(f_int1,3) = 0;
 
1861
        
 
1862
# check multiple-3 success:     1
 
1863
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1864
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1865
AND @max_row_div2 + @max_row_div4;
 
1866
        
 
1867
# check multiple-4 success:     1
 
1868
DELETE FROM t1
 
1869
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1870
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1871
        
 
1872
# check multiple-5 success:     1
 
1873
SELECT COUNT(*) INTO @try_count FROM t0_template
 
1874
WHERE MOD(f_int1,3) = 0
 
1875
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1876
SELECT COUNT(*) INTO @clash_count
 
1877
FROM t1 INNER JOIN t0_template USING(f_int1)
 
1878
WHERE MOD(f_int1,3) = 0
 
1879
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1880
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1881
INSERT INTO t1
 
1882
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1883
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1884
f_charbig = '#SINGLE#';
 
1885
        
 
1886
# check single-1 success:       1
 
1887
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1888
INSERT INTO t1
 
1889
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1890
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1891
f_charbig = '#SINGLE#';
 
1892
        
 
1893
# check single-2 success:       1
 
1894
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1895
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1896
UPDATE t1 SET f_int1 = @cur_value2
 
1897
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1898
        
 
1899
# check single-3 success:       1
 
1900
SET @cur_value1= -1;
 
1901
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1902
UPDATE t1 SET f_int1 = @cur_value1
 
1903
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1904
        
 
1905
# check single-4 success:       1
 
1906
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1907
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1908
        
 
1909
# check single-5 success:       1
 
1910
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1911
        
 
1912
# check single-6 success:       1
 
1913
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1914
ERROR HY000: Table has no partition for value 2147483647
 
1915
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1916
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1917
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1918
f_charbig = '#NULL#';
 
1919
INSERT INTO t1
 
1920
SET f_int1 = NULL , f_int2 = -@max_row,
 
1921
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1922
f_charbig = '#NULL#';
 
1923
# check null success:    1
 
1924
        
 
1925
# check null-1 success:         1
 
1926
UPDATE t1 SET f_int1 = -@max_row
 
1927
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1928
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1929
        
 
1930
# check null-2 success:         1
 
1931
UPDATE t1 SET f_int1 = NULL
 
1932
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1933
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1934
        
 
1935
# check null-3 success:         1
 
1936
DELETE FROM t1
 
1937
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1938
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1939
        
 
1940
# check null-4 success:         1
 
1941
DELETE FROM t1
 
1942
WHERE f_int1 = 0 AND f_int2 = 0
 
1943
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1944
AND f_charbig = '#NULL#';
 
1945
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1946
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1947
   FROM t0_template source_tab
 
1948
WHERE MOD(f_int1,3) = 0
 
1949
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
1950
ON DUPLICATE KEY
 
1951
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
1952
f_int2 = 2 * @max_row + source_tab.f_int1,
 
1953
f_charbig = 'was updated';
 
1954
        
 
1955
# check unique-1-a success:     1
 
1956
        
 
1957
# check unique-1-b success:     1
 
1958
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1961
f_charbig = CONCAT('===',f_char1,'===')
 
1962
WHERE f_charbig = 'was updated';
 
1963
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1964
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
1965
   FROM t0_template source_tab
 
1966
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1967
        
 
1968
# check replace success:        1
 
1969
DELETE FROM t1
 
1970
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
1971
DELETE FROM t1
 
1972
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
1973
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
1974
UPDATE t1 SET f_int2 = f_int1,
 
1975
f_char1 = CAST(f_int1 AS CHAR),
 
1976
f_char2 = CAST(f_int1 AS CHAR),
 
1977
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
1978
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
1979
SET AUTOCOMMIT= 0;
 
1980
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1981
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1982
FROM t0_template source_tab
 
1983
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1984
        
 
1985
# check transactions-1 success:         1
 
1986
COMMIT WORK;
 
1987
        
 
1988
# check transactions-2 success:         1
 
1989
ROLLBACK WORK;
 
1990
        
 
1991
# check transactions-3 success:         1
 
1992
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1993
COMMIT WORK;
 
1994
ROLLBACK WORK;
 
1995
        
 
1996
# check transactions-4 success:         1
 
1997
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1998
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1999
FROM t0_template source_tab
 
2000
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2001
        
 
2002
# check transactions-5 success:         1
 
2003
ROLLBACK WORK;
 
2004
Warnings:
 
2005
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2006
        
 
2007
# check transactions-6 success:         1
 
2008
# INFO: Storage engine used for t1 seems to be not transactional.
 
2009
COMMIT;
 
2010
        
 
2011
# check transactions-7 success:         1
 
2012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2013
COMMIT WORK;
 
2014
SET @@session.sql_mode = 'traditional';
 
2015
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2016
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2017
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2018
'', '', 'was inserted' FROM t0_template
 
2019
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2020
ERROR 22012: Division by 0
 
2021
COMMIT;
 
2022
        
 
2023
# check transactions-8 success:         1
 
2024
# INFO: Storage engine used for t1 seems to be unable to revert
 
2025
#       changes made by the failing statement.
 
2026
SET @@session.sql_mode = '';
 
2027
SET AUTOCOMMIT= 1;
 
2028
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2029
COMMIT WORK;
 
2030
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2031
        
 
2032
# check special-1 success:      1
 
2033
UPDATE t1 SET f_charbig = '';
 
2034
        
 
2035
# check special-2 success:      1
 
2036
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2037
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2038
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2040
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2041
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2042
'just inserted' FROM t0_template
 
2043
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2044
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2045
BEGIN
 
2046
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2047
f_charbig = 'updated by trigger'
 
2048
      WHERE f_int1 = new.f_int1;
 
2049
END|
 
2050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2051
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2053
        
 
2054
# check trigger-1 success:      1
 
2055
DROP TRIGGER trg_1;
 
2056
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2057
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2058
f_charbig = 'just inserted'
 
2059
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2060
DELETE FROM t0_aux
 
2061
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2063
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2064
'just inserted' FROM t0_template
 
2065
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2066
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2067
BEGIN
 
2068
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2069
f_charbig = 'updated by trigger'
 
2070
      WHERE f_int1 = new.f_int1;
 
2071
END|
 
2072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2073
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2075
        
 
2076
# check trigger-2 success:      1
 
2077
DROP TRIGGER trg_1;
 
2078
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2079
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2080
f_charbig = 'just inserted'
 
2081
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2082
DELETE FROM t0_aux
 
2083
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2085
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2086
'just inserted' FROM t0_template
 
2087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2088
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2089
BEGIN
 
2090
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2091
f_charbig = 'updated by trigger'
 
2092
      WHERE f_int1 = new.f_int1;
 
2093
END|
 
2094
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2095
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2096
        
 
2097
# check trigger-3 success:      1
 
2098
DROP TRIGGER trg_1;
 
2099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2101
f_charbig = 'just inserted'
 
2102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2103
DELETE FROM t0_aux
 
2104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2107
'just inserted' FROM t0_template
 
2108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2109
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2110
BEGIN
 
2111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2112
f_charbig = 'updated by trigger'
 
2113
      WHERE f_int1 = - old.f_int1;
 
2114
END|
 
2115
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2116
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2117
        
 
2118
# check trigger-4 success:      1
 
2119
DROP TRIGGER trg_1;
 
2120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2122
f_charbig = 'just inserted'
 
2123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2124
DELETE FROM t0_aux
 
2125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2128
'just inserted' FROM t0_template
 
2129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2130
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2131
BEGIN
 
2132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2133
f_charbig = 'updated by trigger'
 
2134
      WHERE f_int1 = new.f_int1;
 
2135
END|
 
2136
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2137
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2138
        
 
2139
# check trigger-5 success:      1
 
2140
DROP TRIGGER trg_1;
 
2141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2143
f_charbig = 'just inserted'
 
2144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2145
DELETE FROM t0_aux
 
2146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2149
'just inserted' FROM t0_template
 
2150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2151
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2152
BEGIN
 
2153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2154
f_charbig = 'updated by trigger'
 
2155
      WHERE f_int1 = - old.f_int1;
 
2156
END|
 
2157
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2159
        
 
2160
# check trigger-6 success:      1
 
2161
DROP TRIGGER trg_1;
 
2162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2164
f_charbig = 'just inserted'
 
2165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2166
DELETE FROM t0_aux
 
2167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2170
'just inserted' FROM t0_template
 
2171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2172
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2173
BEGIN
 
2174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2175
f_charbig = 'updated by trigger'
 
2176
      WHERE f_int1 = - old.f_int1;
 
2177
END|
 
2178
DELETE FROM t0_aux
 
2179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2180
        
 
2181
# check trigger-7 success:      1
 
2182
DROP TRIGGER trg_1;
 
2183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2185
f_charbig = 'just inserted'
 
2186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2187
DELETE FROM t0_aux
 
2188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2191
'just inserted' FROM t0_template
 
2192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2193
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2194
BEGIN
 
2195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2196
f_charbig = 'updated by trigger'
 
2197
      WHERE f_int1 = - old.f_int1;
 
2198
END|
 
2199
DELETE FROM t0_aux
 
2200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2201
        
 
2202
# check trigger-8 success:      1
 
2203
DROP TRIGGER trg_1;
 
2204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2206
f_charbig = 'just inserted'
 
2207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2208
DELETE FROM t0_aux
 
2209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2210
DELETE FROM t1
 
2211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2212
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2213
BEGIN
 
2214
SET new.f_int1 = old.f_int1 + @max_row,
 
2215
new.f_int2 = old.f_int2 - @max_row,
 
2216
new.f_charbig = '####updated per update trigger####';
 
2217
END|
 
2218
UPDATE t1
 
2219
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2220
f_charbig = '####updated per update statement itself####';
 
2221
        
 
2222
# check trigger-9 success:      1
 
2223
DROP TRIGGER trg_2;
 
2224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2226
f_charbig = CONCAT('===',f_char1,'===');
 
2227
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2228
BEGIN
 
2229
SET new.f_int1 = new.f_int1 + @max_row,
 
2230
new.f_int2 = new.f_int2 - @max_row,
 
2231
new.f_charbig = '####updated per update trigger####';
 
2232
END|
 
2233
UPDATE t1
 
2234
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2235
f_charbig = '####updated per update statement itself####';
 
2236
        
 
2237
# check trigger-10 success:     1
 
2238
DROP TRIGGER trg_2;
 
2239
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2240
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2241
f_charbig = CONCAT('===',f_char1,'===');
 
2242
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2243
BEGIN
 
2244
SET new.f_int1 = @my_max1 + @counter,
 
2245
new.f_int2 = @my_min2 - @counter,
 
2246
new.f_charbig = '####updated per insert trigger####';
 
2247
SET @counter = @counter + 1;
 
2248
END|
 
2249
SET @counter = 1;
 
2250
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2251
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2252
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2253
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2255
ORDER BY f_int1;
 
2256
DROP TRIGGER trg_3;
 
2257
        
 
2258
# check trigger-11 success:     1
 
2259
DELETE FROM t1
 
2260
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2261
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2262
AND f_charbig = '####updated per insert trigger####';
 
2263
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2264
BEGIN
 
2265
SET new.f_int1 = @my_max1 + @counter,
 
2266
new.f_int2 = @my_min2 - @counter,
 
2267
new.f_charbig = '####updated per insert trigger####';
 
2268
SET @counter = @counter + 1;
 
2269
END|
 
2270
SET @counter = 1;
 
2271
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2272
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2273
SELECT CAST(f_int1 AS CHAR),
 
2274
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2276
ORDER BY f_int1;
 
2277
DROP TRIGGER trg_3;
 
2278
        
 
2279
# check trigger-12 success:     1
 
2280
DELETE FROM t1
 
2281
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2282
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2283
AND f_charbig = '####updated per insert trigger####';
 
2284
ANALYZE  TABLE t1;
 
2285
Table   Op      Msg_type        Msg_text
 
2286
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2287
CHECK    TABLE t1 EXTENDED;
 
2288
Table   Op      Msg_type        Msg_text
 
2289
test.t1 check   note    The storage engine for the table doesn't support check
 
2290
CHECKSUM TABLE t1 EXTENDED;
 
2291
Table   Checksum
 
2292
test.t1 <some_value>
 
2293
OPTIMIZE TABLE t1;
 
2294
Table   Op      Msg_type        Msg_text
 
2295
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2296
# check layout success:    1
 
2297
REPAIR   TABLE t1 EXTENDED;
 
2298
Table   Op      Msg_type        Msg_text
 
2299
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2300
# check layout success:    1
 
2301
TRUNCATE t1;
 
2302
        
 
2303
# check TRUNCATE success:       1
 
2304
# check layout success:    1
 
2305
# End usability test (inc/partition_check.inc)
 
2306
DROP TABLE t1;
 
2307
CREATE TABLE t1 (
 
2308
f_int1 INTEGER,
 
2309
f_int2 INTEGER,
 
2310
f_char1 CHAR(20),
 
2311
f_char2 CHAR(20),
 
2312
f_charbig VARCHAR(1000)
 
2313
 
 
2314
)
 
2315
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
2316
(PARTITION parta VALUES LESS THAN (0),
 
2317
PARTITION partb VALUES LESS THAN (5),
 
2318
PARTITION partc VALUES LESS THAN (10),
 
2319
PARTITION partd VALUES LESS THAN (2147483646));
 
2320
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2321
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2322
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2323
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
2324
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2325
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2326
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2327
# Start usability test (inc/partition_check.inc)
 
2328
create_command
 
2329
SHOW CREATE TABLE t1;
 
2330
Table   Create Table
 
2331
t1      CREATE TABLE `t1` (
 
2332
  `f_int1` int(11) DEFAULT NULL,
 
2333
  `f_int2` int(11) DEFAULT NULL,
 
2334
  `f_char1` char(20) DEFAULT NULL,
 
2335
  `f_char2` char(20) DEFAULT NULL,
 
2336
  `f_charbig` varchar(1000) DEFAULT NULL,
 
2337
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
2338
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
2339
 
 
2340
unified filelist
 
2341
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
2342
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
2343
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
2344
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
2345
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
2346
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
2347
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
2348
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
2349
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
2350
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
2351
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
2352
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
2353
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
2354
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
2355
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
2356
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
2357
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
2358
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
2359
 
 
2360
# check prerequisites-1 success:    1
 
2361
# check COUNT(*) success:    1
 
2362
# check MIN/MAX(f_int1) success:    1
 
2363
# check MIN/MAX(f_int2) success:    1
 
2364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2366
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2367
WHERE f_int1 IN (2,3);
 
2368
ERROR 23000: Can't write; duplicate key in table 't1'
 
2369
# check prerequisites-3 success:    1
 
2370
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
2371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2372
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2373
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2374
WHERE f_int1 IN (2,3);
 
2375
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2377
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2378
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2379
WHERE f_int1 IN (2,3);
 
2380
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2381
# check read via f_int1 success: 1
 
2382
# check read via f_int2 success: 1
 
2383
        
 
2384
# check multiple-1 success:     1
 
2385
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2386
        
 
2387
# check multiple-2 success:     1
 
2388
INSERT INTO t1 SELECT * FROM t0_template
 
2389
WHERE MOD(f_int1,3) = 0;
 
2390
        
 
2391
# check multiple-3 success:     1
 
2392
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2393
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2394
AND @max_row_div2 + @max_row_div4;
 
2395
        
 
2396
# check multiple-4 success:     1
 
2397
DELETE FROM t1
 
2398
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2399
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2400
        
 
2401
# check multiple-5 success:     1
 
2402
SELECT COUNT(*) INTO @try_count FROM t0_template
 
2403
WHERE MOD(f_int1,3) = 0
 
2404
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2405
SELECT COUNT(*) INTO @clash_count
 
2406
FROM t1 INNER JOIN t0_template USING(f_int1)
 
2407
WHERE MOD(f_int1,3) = 0
 
2408
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2409
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2410
INSERT INTO t1
 
2411
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2412
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2413
f_charbig = '#SINGLE#';
 
2414
        
 
2415
# check single-1 success:       1
 
2416
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2417
INSERT INTO t1
 
2418
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2419
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2420
f_charbig = '#SINGLE#';
 
2421
        
 
2422
# check single-2 success:       1
 
2423
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2424
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2425
UPDATE t1 SET f_int1 = @cur_value2
 
2426
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2427
        
 
2428
# check single-3 success:       1
 
2429
SET @cur_value1= -1;
 
2430
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2431
UPDATE t1 SET f_int1 = @cur_value1
 
2432
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2433
        
 
2434
# check single-4 success:       1
 
2435
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2436
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2437
        
 
2438
# check single-5 success:       1
 
2439
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2440
        
 
2441
# check single-6 success:       1
 
2442
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2443
        
 
2444
# check single-7 success:       1
 
2445
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
2446
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2447
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2448
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2449
f_charbig = '#NULL#';
 
2450
INSERT INTO t1
 
2451
SET f_int1 = NULL , f_int2 = -@max_row,
 
2452
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2453
f_charbig = '#NULL#';
 
2454
# check null success:    1
 
2455
        
 
2456
# check null-1 success:         1
 
2457
UPDATE t1 SET f_int1 = -@max_row
 
2458
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2459
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2460
        
 
2461
# check null-2 success:         1
 
2462
UPDATE t1 SET f_int1 = NULL
 
2463
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2464
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2465
        
 
2466
# check null-3 success:         1
 
2467
DELETE FROM t1
 
2468
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2469
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2470
        
 
2471
# check null-4 success:         1
 
2472
DELETE FROM t1
 
2473
WHERE f_int1 = 0 AND f_int2 = 0
 
2474
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2475
AND f_charbig = '#NULL#';
 
2476
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2477
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2478
   FROM t0_template source_tab
 
2479
WHERE MOD(f_int1,3) = 0
 
2480
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
2481
ON DUPLICATE KEY
 
2482
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
2483
f_int2 = 2 * @max_row + source_tab.f_int1,
 
2484
f_charbig = 'was updated';
 
2485
        
 
2486
# check unique-1-a success:     1
 
2487
        
 
2488
# check unique-1-b success:     1
 
2489
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2490
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2491
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2492
f_charbig = CONCAT('===',f_char1,'===')
 
2493
WHERE f_charbig = 'was updated';
 
2494
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2495
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
2496
   FROM t0_template source_tab
 
2497
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2498
        
 
2499
# check replace success:        1
 
2500
DELETE FROM t1
 
2501
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
2502
DELETE FROM t1
 
2503
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
2504
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
2505
UPDATE t1 SET f_int2 = f_int1,
 
2506
f_char1 = CAST(f_int1 AS CHAR),
 
2507
f_char2 = CAST(f_int1 AS CHAR),
 
2508
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
2509
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
2510
SET AUTOCOMMIT= 0;
 
2511
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2512
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2513
FROM t0_template source_tab
 
2514
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2515
        
 
2516
# check transactions-1 success:         1
 
2517
COMMIT WORK;
 
2518
        
 
2519
# check transactions-2 success:         1
 
2520
ROLLBACK WORK;
 
2521
        
 
2522
# check transactions-3 success:         1
 
2523
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2524
COMMIT WORK;
 
2525
ROLLBACK WORK;
 
2526
        
 
2527
# check transactions-4 success:         1
 
2528
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2529
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2530
FROM t0_template source_tab
 
2531
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2532
        
 
2533
# check transactions-5 success:         1
 
2534
ROLLBACK WORK;
 
2535
Warnings:
 
2536
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2537
        
 
2538
# check transactions-6 success:         1
 
2539
# INFO: Storage engine used for t1 seems to be not transactional.
 
2540
COMMIT;
 
2541
        
 
2542
# check transactions-7 success:         1
 
2543
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2544
COMMIT WORK;
 
2545
SET @@session.sql_mode = 'traditional';
 
2546
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2548
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2549
'', '', 'was inserted' FROM t0_template
 
2550
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2551
ERROR 22012: Division by 0
 
2552
COMMIT;
 
2553
        
 
2554
# check transactions-8 success:         1
 
2555
# INFO: Storage engine used for t1 seems to be unable to revert
 
2556
#       changes made by the failing statement.
 
2557
SET @@session.sql_mode = '';
 
2558
SET AUTOCOMMIT= 1;
 
2559
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2560
COMMIT WORK;
 
2561
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2562
        
 
2563
# check special-1 success:      1
 
2564
UPDATE t1 SET f_charbig = '';
 
2565
        
 
2566
# check special-2 success:      1
 
2567
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2568
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2569
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2573
'just inserted' FROM t0_template
 
2574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2575
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2576
BEGIN
 
2577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2578
f_charbig = 'updated by trigger'
 
2579
      WHERE f_int1 = new.f_int1;
 
2580
END|
 
2581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2582
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2584
        
 
2585
# check trigger-1 success:      1
 
2586
DROP TRIGGER trg_1;
 
2587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2589
f_charbig = 'just inserted'
 
2590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2591
DELETE FROM t0_aux
 
2592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2595
'just inserted' FROM t0_template
 
2596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2597
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2598
BEGIN
 
2599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2600
f_charbig = 'updated by trigger'
 
2601
      WHERE f_int1 = new.f_int1;
 
2602
END|
 
2603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2604
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2606
        
 
2607
# check trigger-2 success:      1
 
2608
DROP TRIGGER trg_1;
 
2609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2611
f_charbig = 'just inserted'
 
2612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2613
DELETE FROM t0_aux
 
2614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2616
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2617
'just inserted' FROM t0_template
 
2618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2619
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2620
BEGIN
 
2621
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2622
f_charbig = 'updated by trigger'
 
2623
      WHERE f_int1 = new.f_int1;
 
2624
END|
 
2625
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2626
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2627
        
 
2628
# check trigger-3 success:      1
 
2629
DROP TRIGGER trg_1;
 
2630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2632
f_charbig = 'just inserted'
 
2633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2634
DELETE FROM t0_aux
 
2635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2638
'just inserted' FROM t0_template
 
2639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2640
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2641
BEGIN
 
2642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2643
f_charbig = 'updated by trigger'
 
2644
      WHERE f_int1 = - old.f_int1;
 
2645
END|
 
2646
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2648
        
 
2649
# check trigger-4 success:      1
 
2650
DROP TRIGGER trg_1;
 
2651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2653
f_charbig = 'just inserted'
 
2654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2655
DELETE FROM t0_aux
 
2656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2659
'just inserted' FROM t0_template
 
2660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2661
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2662
BEGIN
 
2663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2664
f_charbig = 'updated by trigger'
 
2665
      WHERE f_int1 = new.f_int1;
 
2666
END|
 
2667
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2668
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2669
        
 
2670
# check trigger-5 success:      1
 
2671
DROP TRIGGER trg_1;
 
2672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2674
f_charbig = 'just inserted'
 
2675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2676
DELETE FROM t0_aux
 
2677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2680
'just inserted' FROM t0_template
 
2681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2682
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2683
BEGIN
 
2684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2685
f_charbig = 'updated by trigger'
 
2686
      WHERE f_int1 = - old.f_int1;
 
2687
END|
 
2688
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2689
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2690
        
 
2691
# check trigger-6 success:      1
 
2692
DROP TRIGGER trg_1;
 
2693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2695
f_charbig = 'just inserted'
 
2696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2697
DELETE FROM t0_aux
 
2698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2701
'just inserted' FROM t0_template
 
2702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2703
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2704
BEGIN
 
2705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2706
f_charbig = 'updated by trigger'
 
2707
      WHERE f_int1 = - old.f_int1;
 
2708
END|
 
2709
DELETE FROM t0_aux
 
2710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2711
        
 
2712
# check trigger-7 success:      1
 
2713
DROP TRIGGER trg_1;
 
2714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2716
f_charbig = 'just inserted'
 
2717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2718
DELETE FROM t0_aux
 
2719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2722
'just inserted' FROM t0_template
 
2723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2724
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2725
BEGIN
 
2726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2727
f_charbig = 'updated by trigger'
 
2728
      WHERE f_int1 = - old.f_int1;
 
2729
END|
 
2730
DELETE FROM t0_aux
 
2731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2732
        
 
2733
# check trigger-8 success:      1
 
2734
DROP TRIGGER trg_1;
 
2735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2737
f_charbig = 'just inserted'
 
2738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2739
DELETE FROM t0_aux
 
2740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2741
DELETE FROM t1
 
2742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2743
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2744
BEGIN
 
2745
SET new.f_int1 = old.f_int1 + @max_row,
 
2746
new.f_int2 = old.f_int2 - @max_row,
 
2747
new.f_charbig = '####updated per update trigger####';
 
2748
END|
 
2749
UPDATE t1
 
2750
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2751
f_charbig = '####updated per update statement itself####';
 
2752
        
 
2753
# check trigger-9 success:      1
 
2754
DROP TRIGGER trg_2;
 
2755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2757
f_charbig = CONCAT('===',f_char1,'===');
 
2758
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2759
BEGIN
 
2760
SET new.f_int1 = new.f_int1 + @max_row,
 
2761
new.f_int2 = new.f_int2 - @max_row,
 
2762
new.f_charbig = '####updated per update trigger####';
 
2763
END|
 
2764
UPDATE t1
 
2765
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2766
f_charbig = '####updated per update statement itself####';
 
2767
        
 
2768
# check trigger-10 success:     1
 
2769
DROP TRIGGER trg_2;
 
2770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2772
f_charbig = CONCAT('===',f_char1,'===');
 
2773
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2774
BEGIN
 
2775
SET new.f_int1 = @my_max1 + @counter,
 
2776
new.f_int2 = @my_min2 - @counter,
 
2777
new.f_charbig = '####updated per insert trigger####';
 
2778
SET @counter = @counter + 1;
 
2779
END|
 
2780
SET @counter = 1;
 
2781
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2782
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2783
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2784
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2786
ORDER BY f_int1;
 
2787
DROP TRIGGER trg_3;
 
2788
        
 
2789
# check trigger-11 success:     1
 
2790
DELETE FROM t1
 
2791
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2792
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2793
AND f_charbig = '####updated per insert trigger####';
 
2794
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2795
BEGIN
 
2796
SET new.f_int1 = @my_max1 + @counter,
 
2797
new.f_int2 = @my_min2 - @counter,
 
2798
new.f_charbig = '####updated per insert trigger####';
 
2799
SET @counter = @counter + 1;
 
2800
END|
 
2801
SET @counter = 1;
 
2802
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2803
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2804
SELECT CAST(f_int1 AS CHAR),
 
2805
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2807
ORDER BY f_int1;
 
2808
DROP TRIGGER trg_3;
 
2809
        
 
2810
# check trigger-12 success:     1
 
2811
DELETE FROM t1
 
2812
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2813
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2814
AND f_charbig = '####updated per insert trigger####';
 
2815
ANALYZE  TABLE t1;
 
2816
Table   Op      Msg_type        Msg_text
 
2817
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2818
CHECK    TABLE t1 EXTENDED;
 
2819
Table   Op      Msg_type        Msg_text
 
2820
test.t1 check   note    The storage engine for the table doesn't support check
 
2821
CHECKSUM TABLE t1 EXTENDED;
 
2822
Table   Checksum
 
2823
test.t1 <some_value>
 
2824
OPTIMIZE TABLE t1;
 
2825
Table   Op      Msg_type        Msg_text
 
2826
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2827
# check layout success:    1
 
2828
REPAIR   TABLE t1 EXTENDED;
 
2829
Table   Op      Msg_type        Msg_text
 
2830
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2831
# check layout success:    1
 
2832
TRUNCATE t1;
 
2833
        
 
2834
# check TRUNCATE success:       1
 
2835
# check layout success:    1
 
2836
# End usability test (inc/partition_check.inc)
 
2837
DROP TABLE t1;
 
2838
CREATE TABLE t1 (
 
2839
f_int1 INTEGER,
 
2840
f_int2 INTEGER,
 
2841
f_char1 CHAR(20),
 
2842
f_char2 CHAR(20),
 
2843
f_charbig VARCHAR(1000)
 
2844
 
 
2845
)
 
2846
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2847
(PARTITION part1 VALUES LESS THAN (0)
 
2848
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2849
PARTITION part2 VALUES LESS THAN (5)
 
2850
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2851
PARTITION part3 VALUES LESS THAN (10)
 
2852
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2853
PARTITION part4 VALUES LESS THAN (2147483646)
 
2854
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2855
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2856
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2857
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2858
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
2859
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2860
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2861
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2862
# Start usability test (inc/partition_check.inc)
 
2863
create_command
 
2864
SHOW CREATE TABLE t1;
 
2865
Table   Create Table
 
2866
t1      CREATE TABLE `t1` (
 
2867
  `f_int1` int(11) DEFAULT NULL,
 
2868
  `f_int2` int(11) DEFAULT NULL,
 
2869
  `f_char1` char(20) DEFAULT NULL,
 
2870
  `f_char2` char(20) DEFAULT NULL,
 
2871
  `f_charbig` varchar(1000) DEFAULT NULL,
 
2872
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
2873
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
2874
 
 
2875
unified filelist
 
2876
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
2877
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
2878
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
2879
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
2880
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
2881
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
2882
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
2883
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
2884
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
2885
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
2886
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
2887
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
2888
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
2889
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
2890
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
2891
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
2892
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
2893
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
2894
 
 
2895
# check prerequisites-1 success:    1
 
2896
# check COUNT(*) success:    1
 
2897
# check MIN/MAX(f_int1) success:    1
 
2898
# check MIN/MAX(f_int2) success:    1
 
2899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2900
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2901
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2902
WHERE f_int1 IN (2,3);
 
2903
ERROR 23000: Can't write; duplicate key in table 't1'
 
2904
# check prerequisites-3 success:    1
 
2905
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
2906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2907
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2908
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2909
WHERE f_int1 IN (2,3);
 
2910
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2912
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
2913
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
2914
WHERE f_int1 IN (2,3);
 
2915
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2916
# check read via f_int1 success: 1
 
2917
# check read via f_int2 success: 1
 
2918
        
 
2919
# check multiple-1 success:     1
 
2920
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2921
        
 
2922
# check multiple-2 success:     1
 
2923
INSERT INTO t1 SELECT * FROM t0_template
 
2924
WHERE MOD(f_int1,3) = 0;
 
2925
        
 
2926
# check multiple-3 success:     1
 
2927
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2928
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2929
AND @max_row_div2 + @max_row_div4;
 
2930
        
 
2931
# check multiple-4 success:     1
 
2932
DELETE FROM t1
 
2933
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2934
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2935
        
 
2936
# check multiple-5 success:     1
 
2937
SELECT COUNT(*) INTO @try_count FROM t0_template
 
2938
WHERE MOD(f_int1,3) = 0
 
2939
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2940
SELECT COUNT(*) INTO @clash_count
 
2941
FROM t1 INNER JOIN t0_template USING(f_int1)
 
2942
WHERE MOD(f_int1,3) = 0
 
2943
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2944
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2945
INSERT INTO t1
 
2946
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2947
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2948
f_charbig = '#SINGLE#';
 
2949
        
 
2950
# check single-1 success:       1
 
2951
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2952
INSERT INTO t1
 
2953
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2954
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2955
f_charbig = '#SINGLE#';
 
2956
        
 
2957
# check single-2 success:       1
 
2958
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2959
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2960
UPDATE t1 SET f_int1 = @cur_value2
 
2961
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2962
        
 
2963
# check single-3 success:       1
 
2964
SET @cur_value1= -1;
 
2965
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2966
UPDATE t1 SET f_int1 = @cur_value1
 
2967
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2968
        
 
2969
# check single-4 success:       1
 
2970
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2971
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2972
        
 
2973
# check single-5 success:       1
 
2974
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2975
        
 
2976
# check single-6 success:       1
 
2977
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2978
ERROR HY000: Table has no partition for value 2147483647
 
2979
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2980
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2981
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2982
f_charbig = '#NULL#';
 
2983
INSERT INTO t1
 
2984
SET f_int1 = NULL , f_int2 = -@max_row,
 
2985
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2986
f_charbig = '#NULL#';
 
2987
# check null success:    1
 
2988
        
 
2989
# check null-1 success:         1
 
2990
UPDATE t1 SET f_int1 = -@max_row
 
2991
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2993
        
 
2994
# check null-2 success:         1
 
2995
UPDATE t1 SET f_int1 = NULL
 
2996
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2997
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2998
        
 
2999
# check null-3 success:         1
 
3000
DELETE FROM t1
 
3001
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3002
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3003
        
 
3004
# check null-4 success:         1
 
3005
DELETE FROM t1
 
3006
WHERE f_int1 = 0 AND f_int2 = 0
 
3007
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3008
AND f_charbig = '#NULL#';
 
3009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3010
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3011
   FROM t0_template source_tab
 
3012
WHERE MOD(f_int1,3) = 0
 
3013
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
3014
ON DUPLICATE KEY
 
3015
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
3016
f_int2 = 2 * @max_row + source_tab.f_int1,
 
3017
f_charbig = 'was updated';
 
3018
        
 
3019
# check unique-1-a success:     1
 
3020
        
 
3021
# check unique-1-b success:     1
 
3022
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3023
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3024
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3025
f_charbig = CONCAT('===',f_char1,'===')
 
3026
WHERE f_charbig = 'was updated';
 
3027
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3028
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
3029
   FROM t0_template source_tab
 
3030
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3031
        
 
3032
# check replace success:        1
 
3033
DELETE FROM t1
 
3034
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
3035
DELETE FROM t1
 
3036
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
3037
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
3038
UPDATE t1 SET f_int2 = f_int1,
 
3039
f_char1 = CAST(f_int1 AS CHAR),
 
3040
f_char2 = CAST(f_int1 AS CHAR),
 
3041
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
3042
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
3043
SET AUTOCOMMIT= 0;
 
3044
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3045
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3046
FROM t0_template source_tab
 
3047
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3048
        
 
3049
# check transactions-1 success:         1
 
3050
COMMIT WORK;
 
3051
        
 
3052
# check transactions-2 success:         1
 
3053
ROLLBACK WORK;
 
3054
        
 
3055
# check transactions-3 success:         1
 
3056
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3057
COMMIT WORK;
 
3058
ROLLBACK WORK;
 
3059
        
 
3060
# check transactions-4 success:         1
 
3061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3062
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3063
FROM t0_template source_tab
 
3064
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3065
        
 
3066
# check transactions-5 success:         1
 
3067
ROLLBACK WORK;
 
3068
Warnings:
 
3069
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3070
        
 
3071
# check transactions-6 success:         1
 
3072
# INFO: Storage engine used for t1 seems to be not transactional.
 
3073
COMMIT;
 
3074
        
 
3075
# check transactions-7 success:         1
 
3076
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3077
COMMIT WORK;
 
3078
SET @@session.sql_mode = 'traditional';
 
3079
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3080
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3081
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3082
'', '', 'was inserted' FROM t0_template
 
3083
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3084
ERROR 22012: Division by 0
 
3085
COMMIT;
 
3086
        
 
3087
# check transactions-8 success:         1
 
3088
# INFO: Storage engine used for t1 seems to be unable to revert
 
3089
#       changes made by the failing statement.
 
3090
SET @@session.sql_mode = '';
 
3091
SET AUTOCOMMIT= 1;
 
3092
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3093
COMMIT WORK;
 
3094
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3095
        
 
3096
# check special-1 success:      1
 
3097
UPDATE t1 SET f_charbig = '';
 
3098
        
 
3099
# check special-2 success:      1
 
3100
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3101
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3102
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3105
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3106
'just inserted' FROM t0_template
 
3107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3108
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3109
BEGIN
 
3110
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3111
f_charbig = 'updated by trigger'
 
3112
      WHERE f_int1 = new.f_int1;
 
3113
END|
 
3114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3115
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3117
        
 
3118
# check trigger-1 success:      1
 
3119
DROP TRIGGER trg_1;
 
3120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3122
f_charbig = 'just inserted'
 
3123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3124
DELETE FROM t0_aux
 
3125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3128
'just inserted' FROM t0_template
 
3129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3130
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3131
BEGIN
 
3132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3133
f_charbig = 'updated by trigger'
 
3134
      WHERE f_int1 = new.f_int1;
 
3135
END|
 
3136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3137
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3139
        
 
3140
# check trigger-2 success:      1
 
3141
DROP TRIGGER trg_1;
 
3142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3144
f_charbig = 'just inserted'
 
3145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3146
DELETE FROM t0_aux
 
3147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3149
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3150
'just inserted' FROM t0_template
 
3151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3152
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3153
BEGIN
 
3154
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3155
f_charbig = 'updated by trigger'
 
3156
      WHERE f_int1 = new.f_int1;
 
3157
END|
 
3158
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3159
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3160
        
 
3161
# check trigger-3 success:      1
 
3162
DROP TRIGGER trg_1;
 
3163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3165
f_charbig = 'just inserted'
 
3166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3167
DELETE FROM t0_aux
 
3168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3171
'just inserted' FROM t0_template
 
3172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3173
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3174
BEGIN
 
3175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3176
f_charbig = 'updated by trigger'
 
3177
      WHERE f_int1 = - old.f_int1;
 
3178
END|
 
3179
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3180
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3181
        
 
3182
# check trigger-4 success:      1
 
3183
DROP TRIGGER trg_1;
 
3184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3186
f_charbig = 'just inserted'
 
3187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3188
DELETE FROM t0_aux
 
3189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3192
'just inserted' FROM t0_template
 
3193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3194
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3195
BEGIN
 
3196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3197
f_charbig = 'updated by trigger'
 
3198
      WHERE f_int1 = new.f_int1;
 
3199
END|
 
3200
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3202
        
 
3203
# check trigger-5 success:      1
 
3204
DROP TRIGGER trg_1;
 
3205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3207
f_charbig = 'just inserted'
 
3208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3209
DELETE FROM t0_aux
 
3210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3213
'just inserted' FROM t0_template
 
3214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3215
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3216
BEGIN
 
3217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3218
f_charbig = 'updated by trigger'
 
3219
      WHERE f_int1 = - old.f_int1;
 
3220
END|
 
3221
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3223
        
 
3224
# check trigger-6 success:      1
 
3225
DROP TRIGGER trg_1;
 
3226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3228
f_charbig = 'just inserted'
 
3229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3230
DELETE FROM t0_aux
 
3231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3234
'just inserted' FROM t0_template
 
3235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3236
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3237
BEGIN
 
3238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3239
f_charbig = 'updated by trigger'
 
3240
      WHERE f_int1 = - old.f_int1;
 
3241
END|
 
3242
DELETE FROM t0_aux
 
3243
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3244
        
 
3245
# check trigger-7 success:      1
 
3246
DROP TRIGGER trg_1;
 
3247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3249
f_charbig = 'just inserted'
 
3250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3251
DELETE FROM t0_aux
 
3252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3255
'just inserted' FROM t0_template
 
3256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3257
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3258
BEGIN
 
3259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3260
f_charbig = 'updated by trigger'
 
3261
      WHERE f_int1 = - old.f_int1;
 
3262
END|
 
3263
DELETE FROM t0_aux
 
3264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3265
        
 
3266
# check trigger-8 success:      1
 
3267
DROP TRIGGER trg_1;
 
3268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3270
f_charbig = 'just inserted'
 
3271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3272
DELETE FROM t0_aux
 
3273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3274
DELETE FROM t1
 
3275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3276
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3277
BEGIN
 
3278
SET new.f_int1 = old.f_int1 + @max_row,
 
3279
new.f_int2 = old.f_int2 - @max_row,
 
3280
new.f_charbig = '####updated per update trigger####';
 
3281
END|
 
3282
UPDATE t1
 
3283
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3284
f_charbig = '####updated per update statement itself####';
 
3285
        
 
3286
# check trigger-9 success:      1
 
3287
DROP TRIGGER trg_2;
 
3288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3290
f_charbig = CONCAT('===',f_char1,'===');
 
3291
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3292
BEGIN
 
3293
SET new.f_int1 = new.f_int1 + @max_row,
 
3294
new.f_int2 = new.f_int2 - @max_row,
 
3295
new.f_charbig = '####updated per update trigger####';
 
3296
END|
 
3297
UPDATE t1
 
3298
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3299
f_charbig = '####updated per update statement itself####';
 
3300
        
 
3301
# check trigger-10 success:     1
 
3302
DROP TRIGGER trg_2;
 
3303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3305
f_charbig = CONCAT('===',f_char1,'===');
 
3306
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3307
BEGIN
 
3308
SET new.f_int1 = @my_max1 + @counter,
 
3309
new.f_int2 = @my_min2 - @counter,
 
3310
new.f_charbig = '####updated per insert trigger####';
 
3311
SET @counter = @counter + 1;
 
3312
END|
 
3313
SET @counter = 1;
 
3314
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3315
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3316
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3317
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3319
ORDER BY f_int1;
 
3320
DROP TRIGGER trg_3;
 
3321
        
 
3322
# check trigger-11 success:     1
 
3323
DELETE FROM t1
 
3324
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3325
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3326
AND f_charbig = '####updated per insert trigger####';
 
3327
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3328
BEGIN
 
3329
SET new.f_int1 = @my_max1 + @counter,
 
3330
new.f_int2 = @my_min2 - @counter,
 
3331
new.f_charbig = '####updated per insert trigger####';
 
3332
SET @counter = @counter + 1;
 
3333
END|
 
3334
SET @counter = 1;
 
3335
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3336
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3337
SELECT CAST(f_int1 AS CHAR),
 
3338
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3340
ORDER BY f_int1;
 
3341
DROP TRIGGER trg_3;
 
3342
        
 
3343
# check trigger-12 success:     1
 
3344
DELETE FROM t1
 
3345
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3346
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3347
AND f_charbig = '####updated per insert trigger####';
 
3348
ANALYZE  TABLE t1;
 
3349
Table   Op      Msg_type        Msg_text
 
3350
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3351
CHECK    TABLE t1 EXTENDED;
 
3352
Table   Op      Msg_type        Msg_text
 
3353
test.t1 check   note    The storage engine for the table doesn't support check
 
3354
CHECKSUM TABLE t1 EXTENDED;
 
3355
Table   Checksum
 
3356
test.t1 <some_value>
 
3357
OPTIMIZE TABLE t1;
 
3358
Table   Op      Msg_type        Msg_text
 
3359
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3360
# check layout success:    1
 
3361
REPAIR   TABLE t1 EXTENDED;
 
3362
Table   Op      Msg_type        Msg_text
 
3363
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3364
# check layout success:    1
 
3365
TRUNCATE t1;
 
3366
        
 
3367
# check TRUNCATE success:       1
 
3368
# check layout success:    1
 
3369
# End usability test (inc/partition_check.inc)
 
3370
DROP TABLE t1;
 
3371
CREATE TABLE t1 (
 
3372
f_int1 INTEGER,
 
3373
f_int2 INTEGER,
 
3374
f_char1 CHAR(20),
 
3375
f_char2 CHAR(20),
 
3376
f_charbig VARCHAR(1000)
 
3377
 
 
3378
)
 
3379
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
3380
(PARTITION part1 VALUES IN (0)
 
3381
(SUBPARTITION sp11, SUBPARTITION sp12),
 
3382
PARTITION part2 VALUES IN (1)
 
3383
(SUBPARTITION sp21, SUBPARTITION sp22),
 
3384
PARTITION part3 VALUES IN (2)
 
3385
(SUBPARTITION sp31, SUBPARTITION sp32),
 
3386
PARTITION part4 VALUES IN (NULL)
 
3387
(SUBPARTITION sp41, SUBPARTITION sp42));
 
3388
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3389
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3390
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3391
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
3392
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3393
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3394
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3395
# Start usability test (inc/partition_check.inc)
 
3396
create_command
 
3397
SHOW CREATE TABLE t1;
 
3398
Table   Create Table
 
3399
t1      CREATE TABLE `t1` (
 
3400
  `f_int1` int(11) DEFAULT NULL,
 
3401
  `f_int2` int(11) DEFAULT NULL,
 
3402
  `f_char1` char(20) DEFAULT NULL,
 
3403
  `f_char2` char(20) DEFAULT NULL,
 
3404
  `f_charbig` varchar(1000) DEFAULT NULL,
 
3405
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
3406
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
3407
 
 
3408
unified filelist
 
3409
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
3410
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
3411
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
3412
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
3413
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
3414
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
3415
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
3416
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
3417
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
3418
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
3419
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
3420
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
3421
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
3422
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
3423
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
3424
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
3425
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
3426
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
3427
 
 
3428
# check prerequisites-1 success:    1
 
3429
# check COUNT(*) success:    1
 
3430
# check MIN/MAX(f_int1) success:    1
 
3431
# check MIN/MAX(f_int2) success:    1
 
3432
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3433
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3434
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3435
WHERE f_int1 IN (2,3);
 
3436
ERROR 23000: Can't write; duplicate key in table 't1'
 
3437
# check prerequisites-3 success:    1
 
3438
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
3439
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3440
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3441
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3442
WHERE f_int1 IN (2,3);
 
3443
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3444
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3445
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3446
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3447
WHERE f_int1 IN (2,3);
 
3448
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3449
# check read via f_int1 success: 1
 
3450
# check read via f_int2 success: 1
 
3451
        
 
3452
# check multiple-1 success:     1
 
3453
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3454
        
 
3455
# check multiple-2 success:     1
 
3456
INSERT INTO t1 SELECT * FROM t0_template
 
3457
WHERE MOD(f_int1,3) = 0;
 
3458
        
 
3459
# check multiple-3 success:     1
 
3460
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3461
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3462
AND @max_row_div2 + @max_row_div4;
 
3463
        
 
3464
# check multiple-4 success:     1
 
3465
DELETE FROM t1
 
3466
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3467
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3468
        
 
3469
# check multiple-5 success:     1
 
3470
SELECT COUNT(*) INTO @try_count FROM t0_template
 
3471
WHERE MOD(f_int1,3) = 0
 
3472
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3473
SELECT COUNT(*) INTO @clash_count
 
3474
FROM t1 INNER JOIN t0_template USING(f_int1)
 
3475
WHERE MOD(f_int1,3) = 0
 
3476
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3477
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3478
INSERT INTO t1
 
3479
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3480
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3481
f_charbig = '#SINGLE#';
 
3482
        
 
3483
# check single-1 success:       1
 
3484
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3485
INSERT INTO t1
 
3486
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3487
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3488
f_charbig = '#SINGLE#';
 
3489
        
 
3490
# check single-2 success:       1
 
3491
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3492
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3493
UPDATE t1 SET f_int1 = @cur_value2
 
3494
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3495
        
 
3496
# check single-3 success:       1
 
3497
SET @cur_value1= -1;
 
3498
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3499
UPDATE t1 SET f_int1 = @cur_value1
 
3500
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3501
        
 
3502
# check single-4 success:       1
 
3503
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3504
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3505
        
 
3506
# check single-5 success:       1
 
3507
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3508
        
 
3509
# check single-6 success:       1
 
3510
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3511
        
 
3512
# check single-7 success:       1
 
3513
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3514
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3515
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3516
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3517
f_charbig = '#NULL#';
 
3518
INSERT INTO t1
 
3519
SET f_int1 = NULL , f_int2 = -@max_row,
 
3520
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3521
f_charbig = '#NULL#';
 
3522
# check null success:    1
 
3523
        
 
3524
# check null-1 success:         1
 
3525
UPDATE t1 SET f_int1 = -@max_row
 
3526
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3527
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3528
        
 
3529
# check null-2 success:         1
 
3530
UPDATE t1 SET f_int1 = NULL
 
3531
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3532
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3533
        
 
3534
# check null-3 success:         1
 
3535
DELETE FROM t1
 
3536
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3537
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3538
        
 
3539
# check null-4 success:         1
 
3540
DELETE FROM t1
 
3541
WHERE f_int1 = 0 AND f_int2 = 0
 
3542
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3543
AND f_charbig = '#NULL#';
 
3544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3545
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3546
   FROM t0_template source_tab
 
3547
WHERE MOD(f_int1,3) = 0
 
3548
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
3549
ON DUPLICATE KEY
 
3550
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
3551
f_int2 = 2 * @max_row + source_tab.f_int1,
 
3552
f_charbig = 'was updated';
 
3553
        
 
3554
# check unique-1-a success:     1
 
3555
        
 
3556
# check unique-1-b success:     1
 
3557
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3558
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3559
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3560
f_charbig = CONCAT('===',f_char1,'===')
 
3561
WHERE f_charbig = 'was updated';
 
3562
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3563
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
3564
   FROM t0_template source_tab
 
3565
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3566
        
 
3567
# check replace success:        1
 
3568
DELETE FROM t1
 
3569
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
3570
DELETE FROM t1
 
3571
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
3572
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
3573
UPDATE t1 SET f_int2 = f_int1,
 
3574
f_char1 = CAST(f_int1 AS CHAR),
 
3575
f_char2 = CAST(f_int1 AS CHAR),
 
3576
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
3577
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
3578
SET AUTOCOMMIT= 0;
 
3579
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3580
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3581
FROM t0_template source_tab
 
3582
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3583
        
 
3584
# check transactions-1 success:         1
 
3585
COMMIT WORK;
 
3586
        
 
3587
# check transactions-2 success:         1
 
3588
ROLLBACK WORK;
 
3589
        
 
3590
# check transactions-3 success:         1
 
3591
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3592
COMMIT WORK;
 
3593
ROLLBACK WORK;
 
3594
        
 
3595
# check transactions-4 success:         1
 
3596
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3597
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3598
FROM t0_template source_tab
 
3599
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3600
        
 
3601
# check transactions-5 success:         1
 
3602
ROLLBACK WORK;
 
3603
Warnings:
 
3604
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3605
        
 
3606
# check transactions-6 success:         1
 
3607
# INFO: Storage engine used for t1 seems to be not transactional.
 
3608
COMMIT;
 
3609
        
 
3610
# check transactions-7 success:         1
 
3611
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3612
COMMIT WORK;
 
3613
SET @@session.sql_mode = 'traditional';
 
3614
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3615
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3616
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3617
'', '', 'was inserted' FROM t0_template
 
3618
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3619
ERROR 22012: Division by 0
 
3620
COMMIT;
 
3621
        
 
3622
# check transactions-8 success:         1
 
3623
# INFO: Storage engine used for t1 seems to be unable to revert
 
3624
#       changes made by the failing statement.
 
3625
SET @@session.sql_mode = '';
 
3626
SET AUTOCOMMIT= 1;
 
3627
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3628
COMMIT WORK;
 
3629
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3630
        
 
3631
# check special-1 success:      1
 
3632
UPDATE t1 SET f_charbig = '';
 
3633
        
 
3634
# check special-2 success:      1
 
3635
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3636
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3637
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3639
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3640
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3641
'just inserted' FROM t0_template
 
3642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3643
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3644
BEGIN
 
3645
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3646
f_charbig = 'updated by trigger'
 
3647
      WHERE f_int1 = new.f_int1;
 
3648
END|
 
3649
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3650
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3652
        
 
3653
# check trigger-1 success:      1
 
3654
DROP TRIGGER trg_1;
 
3655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3657
f_charbig = 'just inserted'
 
3658
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3659
DELETE FROM t0_aux
 
3660
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3662
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3663
'just inserted' FROM t0_template
 
3664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3665
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3666
BEGIN
 
3667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3668
f_charbig = 'updated by trigger'
 
3669
      WHERE f_int1 = new.f_int1;
 
3670
END|
 
3671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3672
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3674
        
 
3675
# check trigger-2 success:      1
 
3676
DROP TRIGGER trg_1;
 
3677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3679
f_charbig = 'just inserted'
 
3680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3681
DELETE FROM t0_aux
 
3682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3685
'just inserted' FROM t0_template
 
3686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3687
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3688
BEGIN
 
3689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3690
f_charbig = 'updated by trigger'
 
3691
      WHERE f_int1 = new.f_int1;
 
3692
END|
 
3693
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3695
        
 
3696
# check trigger-3 success:      1
 
3697
DROP TRIGGER trg_1;
 
3698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3700
f_charbig = 'just inserted'
 
3701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3702
DELETE FROM t0_aux
 
3703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3706
'just inserted' FROM t0_template
 
3707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3708
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3709
BEGIN
 
3710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3711
f_charbig = 'updated by trigger'
 
3712
      WHERE f_int1 = - old.f_int1;
 
3713
END|
 
3714
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3715
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3716
        
 
3717
# check trigger-4 success:      1
 
3718
DROP TRIGGER trg_1;
 
3719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3721
f_charbig = 'just inserted'
 
3722
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3723
DELETE FROM t0_aux
 
3724
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3725
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3726
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3727
'just inserted' FROM t0_template
 
3728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3729
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3730
BEGIN
 
3731
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3732
f_charbig = 'updated by trigger'
 
3733
      WHERE f_int1 = new.f_int1;
 
3734
END|
 
3735
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3736
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3737
        
 
3738
# check trigger-5 success:      1
 
3739
DROP TRIGGER trg_1;
 
3740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3742
f_charbig = 'just inserted'
 
3743
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3744
DELETE FROM t0_aux
 
3745
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3747
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3748
'just inserted' FROM t0_template
 
3749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3750
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3751
BEGIN
 
3752
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3753
f_charbig = 'updated by trigger'
 
3754
      WHERE f_int1 = - old.f_int1;
 
3755
END|
 
3756
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3757
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3758
        
 
3759
# check trigger-6 success:      1
 
3760
DROP TRIGGER trg_1;
 
3761
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3762
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3763
f_charbig = 'just inserted'
 
3764
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3765
DELETE FROM t0_aux
 
3766
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3767
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3768
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3769
'just inserted' FROM t0_template
 
3770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3771
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3772
BEGIN
 
3773
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3774
f_charbig = 'updated by trigger'
 
3775
      WHERE f_int1 = - old.f_int1;
 
3776
END|
 
3777
DELETE FROM t0_aux
 
3778
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3779
        
 
3780
# check trigger-7 success:      1
 
3781
DROP TRIGGER trg_1;
 
3782
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3783
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3784
f_charbig = 'just inserted'
 
3785
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3786
DELETE FROM t0_aux
 
3787
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3788
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3789
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3790
'just inserted' FROM t0_template
 
3791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3792
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3793
BEGIN
 
3794
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3795
f_charbig = 'updated by trigger'
 
3796
      WHERE f_int1 = - old.f_int1;
 
3797
END|
 
3798
DELETE FROM t0_aux
 
3799
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3800
        
 
3801
# check trigger-8 success:      1
 
3802
DROP TRIGGER trg_1;
 
3803
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3804
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3805
f_charbig = 'just inserted'
 
3806
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3807
DELETE FROM t0_aux
 
3808
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3809
DELETE FROM t1
 
3810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3811
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3812
BEGIN
 
3813
SET new.f_int1 = old.f_int1 + @max_row,
 
3814
new.f_int2 = old.f_int2 - @max_row,
 
3815
new.f_charbig = '####updated per update trigger####';
 
3816
END|
 
3817
UPDATE t1
 
3818
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3819
f_charbig = '####updated per update statement itself####';
 
3820
        
 
3821
# check trigger-9 success:      1
 
3822
DROP TRIGGER trg_2;
 
3823
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3824
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3825
f_charbig = CONCAT('===',f_char1,'===');
 
3826
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3827
BEGIN
 
3828
SET new.f_int1 = new.f_int1 + @max_row,
 
3829
new.f_int2 = new.f_int2 - @max_row,
 
3830
new.f_charbig = '####updated per update trigger####';
 
3831
END|
 
3832
UPDATE t1
 
3833
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3834
f_charbig = '####updated per update statement itself####';
 
3835
        
 
3836
# check trigger-10 success:     1
 
3837
DROP TRIGGER trg_2;
 
3838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3840
f_charbig = CONCAT('===',f_char1,'===');
 
3841
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3842
BEGIN
 
3843
SET new.f_int1 = @my_max1 + @counter,
 
3844
new.f_int2 = @my_min2 - @counter,
 
3845
new.f_charbig = '####updated per insert trigger####';
 
3846
SET @counter = @counter + 1;
 
3847
END|
 
3848
SET @counter = 1;
 
3849
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3850
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3851
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3852
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3854
ORDER BY f_int1;
 
3855
DROP TRIGGER trg_3;
 
3856
        
 
3857
# check trigger-11 success:     1
 
3858
DELETE FROM t1
 
3859
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3860
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3861
AND f_charbig = '####updated per insert trigger####';
 
3862
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3863
BEGIN
 
3864
SET new.f_int1 = @my_max1 + @counter,
 
3865
new.f_int2 = @my_min2 - @counter,
 
3866
new.f_charbig = '####updated per insert trigger####';
 
3867
SET @counter = @counter + 1;
 
3868
END|
 
3869
SET @counter = 1;
 
3870
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3871
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3872
SELECT CAST(f_int1 AS CHAR),
 
3873
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3874
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3875
ORDER BY f_int1;
 
3876
DROP TRIGGER trg_3;
 
3877
        
 
3878
# check trigger-12 success:     1
 
3879
DELETE FROM t1
 
3880
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3881
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3882
AND f_charbig = '####updated per insert trigger####';
 
3883
ANALYZE  TABLE t1;
 
3884
Table   Op      Msg_type        Msg_text
 
3885
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3886
CHECK    TABLE t1 EXTENDED;
 
3887
Table   Op      Msg_type        Msg_text
 
3888
test.t1 check   note    The storage engine for the table doesn't support check
 
3889
CHECKSUM TABLE t1 EXTENDED;
 
3890
Table   Checksum
 
3891
test.t1 <some_value>
 
3892
OPTIMIZE TABLE t1;
 
3893
Table   Op      Msg_type        Msg_text
 
3894
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3895
# check layout success:    1
 
3896
REPAIR   TABLE t1 EXTENDED;
 
3897
Table   Op      Msg_type        Msg_text
 
3898
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3899
# check layout success:    1
 
3900
TRUNCATE t1;
 
3901
        
 
3902
# check TRUNCATE success:       1
 
3903
# check layout success:    1
 
3904
# End usability test (inc/partition_check.inc)
 
3905
DROP TABLE t1;
 
3906
CREATE TABLE t1 (
 
3907
f_int1 INTEGER,
 
3908
f_int2 INTEGER,
 
3909
f_char1 CHAR(20),
 
3910
f_char2 CHAR(20),
 
3911
f_charbig VARCHAR(1000)
 
3912
 
 
3913
)
 
3914
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3915
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3916
(PARTITION part1 VALUES IN (0),
 
3917
 PARTITION part2 VALUES IN (1),
 
3918
 PARTITION part3 VALUES IN (NULL));
 
3919
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3920
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3921
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3922
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
3923
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3924
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3925
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3926
# Start usability test (inc/partition_check.inc)
 
3927
create_command
 
3928
SHOW CREATE TABLE t1;
 
3929
Table   Create Table
 
3930
t1      CREATE TABLE `t1` (
 
3931
  `f_int1` int(11) DEFAULT NULL,
 
3932
  `f_int2` int(11) DEFAULT NULL,
 
3933
  `f_char1` char(20) DEFAULT NULL,
 
3934
  `f_char2` char(20) DEFAULT NULL,
 
3935
  `f_charbig` varchar(1000) DEFAULT NULL,
 
3936
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
3937
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
3938
 
 
3939
unified filelist
 
3940
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
3941
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
3942
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
3943
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
3944
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
3945
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
3946
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
3947
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
3948
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
3949
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
3950
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
3951
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
3952
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
3953
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
3954
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
3955
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
3956
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
3957
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
3958
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
3959
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
3960
 
 
3961
# check prerequisites-1 success:    1
 
3962
# check COUNT(*) success:    1
 
3963
# check MIN/MAX(f_int1) success:    1
 
3964
# check MIN/MAX(f_int2) success:    1
 
3965
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3966
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3967
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3968
WHERE f_int1 IN (2,3);
 
3969
ERROR 23000: Can't write; duplicate key in table 't1'
 
3970
# check prerequisites-3 success:    1
 
3971
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
3972
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3973
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3974
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3975
WHERE f_int1 IN (2,3);
 
3976
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3977
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3978
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
3979
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
3980
WHERE f_int1 IN (2,3);
 
3981
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3982
# check read via f_int1 success: 1
 
3983
# check read via f_int2 success: 1
 
3984
        
 
3985
# check multiple-1 success:     1
 
3986
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3987
        
 
3988
# check multiple-2 success:     1
 
3989
INSERT INTO t1 SELECT * FROM t0_template
 
3990
WHERE MOD(f_int1,3) = 0;
 
3991
        
 
3992
# check multiple-3 success:     1
 
3993
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3994
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3995
AND @max_row_div2 + @max_row_div4;
 
3996
        
 
3997
# check multiple-4 success:     1
 
3998
DELETE FROM t1
 
3999
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4000
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4001
        
 
4002
# check multiple-5 success:     1
 
4003
SELECT COUNT(*) INTO @try_count FROM t0_template
 
4004
WHERE MOD(f_int1,3) = 0
 
4005
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4006
SELECT COUNT(*) INTO @clash_count
 
4007
FROM t1 INNER JOIN t0_template USING(f_int1)
 
4008
WHERE MOD(f_int1,3) = 0
 
4009
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4010
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4011
INSERT INTO t1
 
4012
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4013
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4014
f_charbig = '#SINGLE#';
 
4015
        
 
4016
# check single-1 success:       1
 
4017
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4018
INSERT INTO t1
 
4019
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4020
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4021
f_charbig = '#SINGLE#';
 
4022
        
 
4023
# check single-2 success:       1
 
4024
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4025
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4026
UPDATE t1 SET f_int1 = @cur_value2
 
4027
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4028
        
 
4029
# check single-3 success:       1
 
4030
SET @cur_value1= -1;
 
4031
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4032
UPDATE t1 SET f_int1 = @cur_value1
 
4033
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4034
        
 
4035
# check single-4 success:       1
 
4036
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4037
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4038
        
 
4039
# check single-5 success:       1
 
4040
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4041
        
 
4042
# check single-6 success:       1
 
4043
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4044
        
 
4045
# check single-7 success:       1
 
4046
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4047
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4048
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4049
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4050
f_charbig = '#NULL#';
 
4051
INSERT INTO t1
 
4052
SET f_int1 = NULL , f_int2 = -@max_row,
 
4053
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4054
f_charbig = '#NULL#';
 
4055
# check null success:    1
 
4056
        
 
4057
# check null-1 success:         1
 
4058
UPDATE t1 SET f_int1 = -@max_row
 
4059
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4060
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4061
        
 
4062
# check null-2 success:         1
 
4063
UPDATE t1 SET f_int1 = NULL
 
4064
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4065
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4066
        
 
4067
# check null-3 success:         1
 
4068
DELETE FROM t1
 
4069
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4070
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4071
        
 
4072
# check null-4 success:         1
 
4073
DELETE FROM t1
 
4074
WHERE f_int1 = 0 AND f_int2 = 0
 
4075
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4076
AND f_charbig = '#NULL#';
 
4077
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4078
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4079
   FROM t0_template source_tab
 
4080
WHERE MOD(f_int1,3) = 0
 
4081
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
4082
ON DUPLICATE KEY
 
4083
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
4084
f_int2 = 2 * @max_row + source_tab.f_int1,
 
4085
f_charbig = 'was updated';
 
4086
        
 
4087
# check unique-1-a success:     1
 
4088
        
 
4089
# check unique-1-b success:     1
 
4090
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4091
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4092
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4093
f_charbig = CONCAT('===',f_char1,'===')
 
4094
WHERE f_charbig = 'was updated';
 
4095
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4096
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
4097
   FROM t0_template source_tab
 
4098
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4099
        
 
4100
# check replace success:        1
 
4101
DELETE FROM t1
 
4102
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
4103
DELETE FROM t1
 
4104
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
4105
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
4106
UPDATE t1 SET f_int2 = f_int1,
 
4107
f_char1 = CAST(f_int1 AS CHAR),
 
4108
f_char2 = CAST(f_int1 AS CHAR),
 
4109
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
4110
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
4111
SET AUTOCOMMIT= 0;
 
4112
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4113
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4114
FROM t0_template source_tab
 
4115
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4116
        
 
4117
# check transactions-1 success:         1
 
4118
COMMIT WORK;
 
4119
        
 
4120
# check transactions-2 success:         1
 
4121
ROLLBACK WORK;
 
4122
        
 
4123
# check transactions-3 success:         1
 
4124
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4125
COMMIT WORK;
 
4126
ROLLBACK WORK;
 
4127
        
 
4128
# check transactions-4 success:         1
 
4129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4130
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4131
FROM t0_template source_tab
 
4132
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4133
        
 
4134
# check transactions-5 success:         1
 
4135
ROLLBACK WORK;
 
4136
Warnings:
 
4137
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4138
        
 
4139
# check transactions-6 success:         1
 
4140
# INFO: Storage engine used for t1 seems to be not transactional.
 
4141
COMMIT;
 
4142
        
 
4143
# check transactions-7 success:         1
 
4144
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4145
COMMIT WORK;
 
4146
SET @@session.sql_mode = 'traditional';
 
4147
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4148
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4149
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4150
'', '', 'was inserted' FROM t0_template
 
4151
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4152
ERROR 22012: Division by 0
 
4153
COMMIT;
 
4154
        
 
4155
# check transactions-8 success:         1
 
4156
# INFO: Storage engine used for t1 seems to be unable to revert
 
4157
#       changes made by the failing statement.
 
4158
SET @@session.sql_mode = '';
 
4159
SET AUTOCOMMIT= 1;
 
4160
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4161
COMMIT WORK;
 
4162
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4163
        
 
4164
# check special-1 success:      1
 
4165
UPDATE t1 SET f_charbig = '';
 
4166
        
 
4167
# check special-2 success:      1
 
4168
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4169
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4170
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4172
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4173
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4174
'just inserted' FROM t0_template
 
4175
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4176
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4177
BEGIN
 
4178
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4179
f_charbig = 'updated by trigger'
 
4180
      WHERE f_int1 = new.f_int1;
 
4181
END|
 
4182
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4183
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4185
        
 
4186
# check trigger-1 success:      1
 
4187
DROP TRIGGER trg_1;
 
4188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4190
f_charbig = 'just inserted'
 
4191
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4192
DELETE FROM t0_aux
 
4193
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4194
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4195
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4196
'just inserted' FROM t0_template
 
4197
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4198
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4199
BEGIN
 
4200
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4201
f_charbig = 'updated by trigger'
 
4202
      WHERE f_int1 = new.f_int1;
 
4203
END|
 
4204
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4205
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4207
        
 
4208
# check trigger-2 success:      1
 
4209
DROP TRIGGER trg_1;
 
4210
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4211
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4212
f_charbig = 'just inserted'
 
4213
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4214
DELETE FROM t0_aux
 
4215
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4216
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4217
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4218
'just inserted' FROM t0_template
 
4219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4220
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4221
BEGIN
 
4222
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4223
f_charbig = 'updated by trigger'
 
4224
      WHERE f_int1 = new.f_int1;
 
4225
END|
 
4226
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4227
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4228
        
 
4229
# check trigger-3 success:      1
 
4230
DROP TRIGGER trg_1;
 
4231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4233
f_charbig = 'just inserted'
 
4234
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4235
DELETE FROM t0_aux
 
4236
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4237
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4238
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4239
'just inserted' FROM t0_template
 
4240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4241
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4242
BEGIN
 
4243
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4244
f_charbig = 'updated by trigger'
 
4245
      WHERE f_int1 = - old.f_int1;
 
4246
END|
 
4247
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4248
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4249
        
 
4250
# check trigger-4 success:      1
 
4251
DROP TRIGGER trg_1;
 
4252
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4253
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4254
f_charbig = 'just inserted'
 
4255
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4256
DELETE FROM t0_aux
 
4257
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4258
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4259
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4260
'just inserted' FROM t0_template
 
4261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4262
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4263
BEGIN
 
4264
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4265
f_charbig = 'updated by trigger'
 
4266
      WHERE f_int1 = new.f_int1;
 
4267
END|
 
4268
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4269
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4270
        
 
4271
# check trigger-5 success:      1
 
4272
DROP TRIGGER trg_1;
 
4273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4275
f_charbig = 'just inserted'
 
4276
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4277
DELETE FROM t0_aux
 
4278
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4280
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4281
'just inserted' FROM t0_template
 
4282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4283
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4284
BEGIN
 
4285
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4286
f_charbig = 'updated by trigger'
 
4287
      WHERE f_int1 = - old.f_int1;
 
4288
END|
 
4289
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4290
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4291
        
 
4292
# check trigger-6 success:      1
 
4293
DROP TRIGGER trg_1;
 
4294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4296
f_charbig = 'just inserted'
 
4297
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4298
DELETE FROM t0_aux
 
4299
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4301
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4302
'just inserted' FROM t0_template
 
4303
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4304
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4305
BEGIN
 
4306
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4307
f_charbig = 'updated by trigger'
 
4308
      WHERE f_int1 = - old.f_int1;
 
4309
END|
 
4310
DELETE FROM t0_aux
 
4311
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4312
        
 
4313
# check trigger-7 success:      1
 
4314
DROP TRIGGER trg_1;
 
4315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4317
f_charbig = 'just inserted'
 
4318
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4319
DELETE FROM t0_aux
 
4320
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4323
'just inserted' FROM t0_template
 
4324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4325
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4326
BEGIN
 
4327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4328
f_charbig = 'updated by trigger'
 
4329
      WHERE f_int1 = - old.f_int1;
 
4330
END|
 
4331
DELETE FROM t0_aux
 
4332
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4333
        
 
4334
# check trigger-8 success:      1
 
4335
DROP TRIGGER trg_1;
 
4336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4338
f_charbig = 'just inserted'
 
4339
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4340
DELETE FROM t0_aux
 
4341
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4342
DELETE FROM t1
 
4343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4344
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4345
BEGIN
 
4346
SET new.f_int1 = old.f_int1 + @max_row,
 
4347
new.f_int2 = old.f_int2 - @max_row,
 
4348
new.f_charbig = '####updated per update trigger####';
 
4349
END|
 
4350
UPDATE t1
 
4351
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4352
f_charbig = '####updated per update statement itself####';
 
4353
        
 
4354
# check trigger-9 success:      1
 
4355
DROP TRIGGER trg_2;
 
4356
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4357
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4358
f_charbig = CONCAT('===',f_char1,'===');
 
4359
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4360
BEGIN
 
4361
SET new.f_int1 = new.f_int1 + @max_row,
 
4362
new.f_int2 = new.f_int2 - @max_row,
 
4363
new.f_charbig = '####updated per update trigger####';
 
4364
END|
 
4365
UPDATE t1
 
4366
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4367
f_charbig = '####updated per update statement itself####';
 
4368
        
 
4369
# check trigger-10 success:     1
 
4370
DROP TRIGGER trg_2;
 
4371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4373
f_charbig = CONCAT('===',f_char1,'===');
 
4374
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4375
BEGIN
 
4376
SET new.f_int1 = @my_max1 + @counter,
 
4377
new.f_int2 = @my_min2 - @counter,
 
4378
new.f_charbig = '####updated per insert trigger####';
 
4379
SET @counter = @counter + 1;
 
4380
END|
 
4381
SET @counter = 1;
 
4382
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4383
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4384
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4385
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4386
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4387
ORDER BY f_int1;
 
4388
DROP TRIGGER trg_3;
 
4389
        
 
4390
# check trigger-11 success:     1
 
4391
DELETE FROM t1
 
4392
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4393
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4394
AND f_charbig = '####updated per insert trigger####';
 
4395
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4396
BEGIN
 
4397
SET new.f_int1 = @my_max1 + @counter,
 
4398
new.f_int2 = @my_min2 - @counter,
 
4399
new.f_charbig = '####updated per insert trigger####';
 
4400
SET @counter = @counter + 1;
 
4401
END|
 
4402
SET @counter = 1;
 
4403
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4404
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4405
SELECT CAST(f_int1 AS CHAR),
 
4406
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4407
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4408
ORDER BY f_int1;
 
4409
DROP TRIGGER trg_3;
 
4410
        
 
4411
# check trigger-12 success:     1
 
4412
DELETE FROM t1
 
4413
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4414
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4415
AND f_charbig = '####updated per insert trigger####';
 
4416
ANALYZE  TABLE t1;
 
4417
Table   Op      Msg_type        Msg_text
 
4418
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4419
CHECK    TABLE t1 EXTENDED;
 
4420
Table   Op      Msg_type        Msg_text
 
4421
test.t1 check   note    The storage engine for the table doesn't support check
 
4422
CHECKSUM TABLE t1 EXTENDED;
 
4423
Table   Checksum
 
4424
test.t1 <some_value>
 
4425
OPTIMIZE TABLE t1;
 
4426
Table   Op      Msg_type        Msg_text
 
4427
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4428
# check layout success:    1
 
4429
REPAIR   TABLE t1 EXTENDED;
 
4430
Table   Op      Msg_type        Msg_text
 
4431
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4432
# check layout success:    1
 
4433
TRUNCATE t1;
 
4434
        
 
4435
# check TRUNCATE success:       1
 
4436
# check layout success:    1
 
4437
# End usability test (inc/partition_check.inc)
 
4438
DROP TABLE t1;
 
4439
DROP TABLE IF EXISTS t1;
 
4440
CREATE TABLE t1 (
 
4441
f_int1 INTEGER,
 
4442
f_int2 INTEGER,
 
4443
f_char1 CHAR(20),
 
4444
f_char2 CHAR(20),
 
4445
f_charbig VARCHAR(1000)
 
4446
 
 
4447
)
 
4448
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
4449
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4450
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4451
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4452
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
4453
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4454
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4455
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4456
# Start usability test (inc/partition_check.inc)
 
4457
create_command
 
4458
SHOW CREATE TABLE t1;
 
4459
Table   Create Table
 
4460
t1      CREATE TABLE `t1` (
 
4461
  `f_int1` int(11) DEFAULT NULL,
 
4462
  `f_int2` int(11) DEFAULT NULL,
 
4463
  `f_char1` char(20) DEFAULT NULL,
 
4464
  `f_char2` char(20) DEFAULT NULL,
 
4465
  `f_charbig` varchar(1000) DEFAULT NULL,
 
4466
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
4467
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
4468
 
 
4469
unified filelist
 
4470
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
4471
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
4472
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
4473
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
4474
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
4475
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
4476
 
 
4477
# check prerequisites-1 success:    1
 
4478
# check COUNT(*) success:    1
 
4479
# check MIN/MAX(f_int1) success:    1
 
4480
# check MIN/MAX(f_int2) success:    1
 
4481
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4482
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4483
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4484
WHERE f_int1 IN (2,3);
 
4485
ERROR 23000: Can't write; duplicate key in table 't1'
 
4486
# check prerequisites-3 success:    1
 
4487
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
4488
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4489
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4490
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4491
WHERE f_int1 IN (2,3);
 
4492
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4493
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4494
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
4495
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
4496
WHERE f_int1 IN (2,3);
 
4497
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4498
# check read via f_int1 success: 1
 
4499
# check read via f_int2 success: 1
 
4500
        
 
4501
# check multiple-1 success:     1
 
4502
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4503
        
 
4504
# check multiple-2 success:     1
 
4505
INSERT INTO t1 SELECT * FROM t0_template
 
4506
WHERE MOD(f_int1,3) = 0;
 
4507
        
 
4508
# check multiple-3 success:     1
 
4509
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4510
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4511
AND @max_row_div2 + @max_row_div4;
 
4512
        
 
4513
# check multiple-4 success:     1
 
4514
DELETE FROM t1
 
4515
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4516
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4517
        
 
4518
# check multiple-5 success:     1
 
4519
SELECT COUNT(*) INTO @try_count FROM t0_template
 
4520
WHERE MOD(f_int1,3) = 0
 
4521
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4522
SELECT COUNT(*) INTO @clash_count
 
4523
FROM t1 INNER JOIN t0_template USING(f_int1)
 
4524
WHERE MOD(f_int1,3) = 0
 
4525
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4526
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4527
INSERT INTO t1
 
4528
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4529
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4530
f_charbig = '#SINGLE#';
 
4531
        
 
4532
# check single-1 success:       1
 
4533
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4534
INSERT INTO t1
 
4535
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4536
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4537
f_charbig = '#SINGLE#';
 
4538
        
 
4539
# check single-2 success:       1
 
4540
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4541
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4542
UPDATE t1 SET f_int1 = @cur_value2
 
4543
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4544
        
 
4545
# check single-3 success:       1
 
4546
SET @cur_value1= -1;
 
4547
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4548
UPDATE t1 SET f_int1 = @cur_value1
 
4549
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4550
        
 
4551
# check single-4 success:       1
 
4552
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4553
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4554
        
 
4555
# check single-5 success:       1
 
4556
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4557
        
 
4558
# check single-6 success:       1
 
4559
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4560
        
 
4561
# check single-7 success:       1
 
4562
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4563
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4564
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4565
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4566
f_charbig = '#NULL#';
 
4567
INSERT INTO t1
 
4568
SET f_int1 = NULL , f_int2 = -@max_row,
 
4569
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4570
f_charbig = '#NULL#';
 
4571
# check null success:    1
 
4572
        
 
4573
# check null-1 success:         1
 
4574
UPDATE t1 SET f_int1 = -@max_row
 
4575
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4576
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4577
        
 
4578
# check null-2 success:         1
 
4579
UPDATE t1 SET f_int1 = NULL
 
4580
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4581
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4582
        
 
4583
# check null-3 success:         1
 
4584
DELETE FROM t1
 
4585
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4586
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4587
        
 
4588
# check null-4 success:         1
 
4589
DELETE FROM t1
 
4590
WHERE f_int1 = 0 AND f_int2 = 0
 
4591
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4592
AND f_charbig = '#NULL#';
 
4593
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4594
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4595
   FROM t0_template source_tab
 
4596
WHERE MOD(f_int1,3) = 0
 
4597
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
4598
ON DUPLICATE KEY
 
4599
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
4600
f_int2 = 2 * @max_row + source_tab.f_int1,
 
4601
f_charbig = 'was updated';
 
4602
        
 
4603
# check unique-1-a success:     1
 
4604
        
 
4605
# check unique-1-b success:     1
 
4606
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4609
f_charbig = CONCAT('===',f_char1,'===')
 
4610
WHERE f_charbig = 'was updated';
 
4611
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4612
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
4613
   FROM t0_template source_tab
 
4614
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4615
        
 
4616
# check replace success:        1
 
4617
DELETE FROM t1
 
4618
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
4619
DELETE FROM t1
 
4620
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
4621
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
4622
UPDATE t1 SET f_int2 = f_int1,
 
4623
f_char1 = CAST(f_int1 AS CHAR),
 
4624
f_char2 = CAST(f_int1 AS CHAR),
 
4625
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
4626
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
4627
SET AUTOCOMMIT= 0;
 
4628
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4629
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4630
FROM t0_template source_tab
 
4631
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4632
        
 
4633
# check transactions-1 success:         1
 
4634
COMMIT WORK;
 
4635
        
 
4636
# check transactions-2 success:         1
 
4637
ROLLBACK WORK;
 
4638
        
 
4639
# check transactions-3 success:         1
 
4640
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4641
COMMIT WORK;
 
4642
ROLLBACK WORK;
 
4643
        
 
4644
# check transactions-4 success:         1
 
4645
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4646
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4647
FROM t0_template source_tab
 
4648
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4649
        
 
4650
# check transactions-5 success:         1
 
4651
ROLLBACK WORK;
 
4652
Warnings:
 
4653
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4654
        
 
4655
# check transactions-6 success:         1
 
4656
# INFO: Storage engine used for t1 seems to be not transactional.
 
4657
COMMIT;
 
4658
        
 
4659
# check transactions-7 success:         1
 
4660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4661
COMMIT WORK;
 
4662
SET @@session.sql_mode = 'traditional';
 
4663
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4664
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4665
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4666
'', '', 'was inserted' FROM t0_template
 
4667
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4668
ERROR 22012: Division by 0
 
4669
COMMIT;
 
4670
        
 
4671
# check transactions-8 success:         1
 
4672
# INFO: Storage engine used for t1 seems to be unable to revert
 
4673
#       changes made by the failing statement.
 
4674
SET @@session.sql_mode = '';
 
4675
SET AUTOCOMMIT= 1;
 
4676
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4677
COMMIT WORK;
 
4678
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4679
        
 
4680
# check special-1 success:      1
 
4681
UPDATE t1 SET f_charbig = '';
 
4682
        
 
4683
# check special-2 success:      1
 
4684
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4685
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4686
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4689
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4690
'just inserted' FROM t0_template
 
4691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4692
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4693
BEGIN
 
4694
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4695
f_charbig = 'updated by trigger'
 
4696
      WHERE f_int1 = new.f_int1;
 
4697
END|
 
4698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4699
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4701
        
 
4702
# check trigger-1 success:      1
 
4703
DROP TRIGGER trg_1;
 
4704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4706
f_charbig = 'just inserted'
 
4707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4708
DELETE FROM t0_aux
 
4709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4712
'just inserted' FROM t0_template
 
4713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4714
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4715
BEGIN
 
4716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4717
f_charbig = 'updated by trigger'
 
4718
      WHERE f_int1 = new.f_int1;
 
4719
END|
 
4720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4721
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4723
        
 
4724
# check trigger-2 success:      1
 
4725
DROP TRIGGER trg_1;
 
4726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4728
f_charbig = 'just inserted'
 
4729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4730
DELETE FROM t0_aux
 
4731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4734
'just inserted' FROM t0_template
 
4735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4736
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4737
BEGIN
 
4738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4739
f_charbig = 'updated by trigger'
 
4740
      WHERE f_int1 = new.f_int1;
 
4741
END|
 
4742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4744
        
 
4745
# check trigger-3 success:      1
 
4746
DROP TRIGGER trg_1;
 
4747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4749
f_charbig = 'just inserted'
 
4750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4751
DELETE FROM t0_aux
 
4752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4755
'just inserted' FROM t0_template
 
4756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4757
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4758
BEGIN
 
4759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4760
f_charbig = 'updated by trigger'
 
4761
      WHERE f_int1 = - old.f_int1;
 
4762
END|
 
4763
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4765
        
 
4766
# check trigger-4 success:      1
 
4767
DROP TRIGGER trg_1;
 
4768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4770
f_charbig = 'just inserted'
 
4771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4772
DELETE FROM t0_aux
 
4773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4776
'just inserted' FROM t0_template
 
4777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4778
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4779
BEGIN
 
4780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4781
f_charbig = 'updated by trigger'
 
4782
      WHERE f_int1 = new.f_int1;
 
4783
END|
 
4784
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4786
        
 
4787
# check trigger-5 success:      1
 
4788
DROP TRIGGER trg_1;
 
4789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4791
f_charbig = 'just inserted'
 
4792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4793
DELETE FROM t0_aux
 
4794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4797
'just inserted' FROM t0_template
 
4798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4799
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4800
BEGIN
 
4801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4802
f_charbig = 'updated by trigger'
 
4803
      WHERE f_int1 = - old.f_int1;
 
4804
END|
 
4805
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4807
        
 
4808
# check trigger-6 success:      1
 
4809
DROP TRIGGER trg_1;
 
4810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4812
f_charbig = 'just inserted'
 
4813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4814
DELETE FROM t0_aux
 
4815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4818
'just inserted' FROM t0_template
 
4819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4820
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4821
BEGIN
 
4822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4823
f_charbig = 'updated by trigger'
 
4824
      WHERE f_int1 = - old.f_int1;
 
4825
END|
 
4826
DELETE FROM t0_aux
 
4827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4828
        
 
4829
# check trigger-7 success:      1
 
4830
DROP TRIGGER trg_1;
 
4831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4833
f_charbig = 'just inserted'
 
4834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4835
DELETE FROM t0_aux
 
4836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4839
'just inserted' FROM t0_template
 
4840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4841
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4842
BEGIN
 
4843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4844
f_charbig = 'updated by trigger'
 
4845
      WHERE f_int1 = - old.f_int1;
 
4846
END|
 
4847
DELETE FROM t0_aux
 
4848
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4849
        
 
4850
# check trigger-8 success:      1
 
4851
DROP TRIGGER trg_1;
 
4852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4854
f_charbig = 'just inserted'
 
4855
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4856
DELETE FROM t0_aux
 
4857
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4858
DELETE FROM t1
 
4859
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4860
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4861
BEGIN
 
4862
SET new.f_int1 = old.f_int1 + @max_row,
 
4863
new.f_int2 = old.f_int2 - @max_row,
 
4864
new.f_charbig = '####updated per update trigger####';
 
4865
END|
 
4866
UPDATE t1
 
4867
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4868
f_charbig = '####updated per update statement itself####';
 
4869
        
 
4870
# check trigger-9 success:      1
 
4871
DROP TRIGGER trg_2;
 
4872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4874
f_charbig = CONCAT('===',f_char1,'===');
 
4875
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4876
BEGIN
 
4877
SET new.f_int1 = new.f_int1 + @max_row,
 
4878
new.f_int2 = new.f_int2 - @max_row,
 
4879
new.f_charbig = '####updated per update trigger####';
 
4880
END|
 
4881
UPDATE t1
 
4882
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4883
f_charbig = '####updated per update statement itself####';
 
4884
        
 
4885
# check trigger-10 success:     1
 
4886
DROP TRIGGER trg_2;
 
4887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4889
f_charbig = CONCAT('===',f_char1,'===');
 
4890
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4891
BEGIN
 
4892
SET new.f_int1 = @my_max1 + @counter,
 
4893
new.f_int2 = @my_min2 - @counter,
 
4894
new.f_charbig = '####updated per insert trigger####';
 
4895
SET @counter = @counter + 1;
 
4896
END|
 
4897
SET @counter = 1;
 
4898
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4900
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4901
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4903
ORDER BY f_int1;
 
4904
DROP TRIGGER trg_3;
 
4905
        
 
4906
# check trigger-11 success:     1
 
4907
DELETE FROM t1
 
4908
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4909
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4910
AND f_charbig = '####updated per insert trigger####';
 
4911
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4912
BEGIN
 
4913
SET new.f_int1 = @my_max1 + @counter,
 
4914
new.f_int2 = @my_min2 - @counter,
 
4915
new.f_charbig = '####updated per insert trigger####';
 
4916
SET @counter = @counter + 1;
 
4917
END|
 
4918
SET @counter = 1;
 
4919
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4920
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4921
SELECT CAST(f_int1 AS CHAR),
 
4922
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4924
ORDER BY f_int1;
 
4925
DROP TRIGGER trg_3;
 
4926
        
 
4927
# check trigger-12 success:     1
 
4928
DELETE FROM t1
 
4929
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4930
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4931
AND f_charbig = '####updated per insert trigger####';
 
4932
ANALYZE  TABLE t1;
 
4933
Table   Op      Msg_type        Msg_text
 
4934
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4935
CHECK    TABLE t1 EXTENDED;
 
4936
Table   Op      Msg_type        Msg_text
 
4937
test.t1 check   note    The storage engine for the table doesn't support check
 
4938
CHECKSUM TABLE t1 EXTENDED;
 
4939
Table   Checksum
 
4940
test.t1 <some_value>
 
4941
OPTIMIZE TABLE t1;
 
4942
Table   Op      Msg_type        Msg_text
 
4943
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4944
# check layout success:    1
 
4945
REPAIR   TABLE t1 EXTENDED;
 
4946
Table   Op      Msg_type        Msg_text
 
4947
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4948
# check layout success:    1
 
4949
TRUNCATE t1;
 
4950
        
 
4951
# check TRUNCATE success:       1
 
4952
# check layout success:    1
 
4953
# End usability test (inc/partition_check.inc)
 
4954
DROP TABLE t1;
 
4955
CREATE TABLE t1 (
 
4956
f_int1 INTEGER,
 
4957
f_int2 INTEGER,
 
4958
f_char1 CHAR(20),
 
4959
f_char2 CHAR(20),
 
4960
f_charbig VARCHAR(1000)
 
4961
 
 
4962
)
 
4963
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
4964
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4965
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4966
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4967
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
4968
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4969
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4970
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4971
# Start usability test (inc/partition_check.inc)
 
4972
create_command
 
4973
SHOW CREATE TABLE t1;
 
4974
Table   Create Table
 
4975
t1      CREATE TABLE `t1` (
 
4976
  `f_int1` int(11) DEFAULT NULL,
 
4977
  `f_int2` int(11) DEFAULT NULL,
 
4978
  `f_char1` char(20) DEFAULT NULL,
 
4979
  `f_char2` char(20) DEFAULT NULL,
 
4980
  `f_charbig` varchar(1000) DEFAULT NULL,
 
4981
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
4982
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
4983
 
 
4984
unified filelist
 
4985
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
4986
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
4987
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
4988
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
4989
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
4990
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
4991
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
4992
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
4993
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
4994
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
4995
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
4996
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
4997
 
 
4998
# check prerequisites-1 success:    1
 
4999
# check COUNT(*) success:    1
 
5000
# check MIN/MAX(f_int1) success:    1
 
5001
# check MIN/MAX(f_int2) success:    1
 
5002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5003
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5004
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5005
WHERE f_int1 IN (2,3);
 
5006
ERROR 23000: Can't write; duplicate key in table 't1'
 
5007
# check prerequisites-3 success:    1
 
5008
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
5009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5010
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5011
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5012
WHERE f_int1 IN (2,3);
 
5013
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5014
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5015
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5016
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5017
WHERE f_int1 IN (2,3);
 
5018
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5019
# check read via f_int1 success: 1
 
5020
# check read via f_int2 success: 1
 
5021
        
 
5022
# check multiple-1 success:     1
 
5023
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5024
        
 
5025
# check multiple-2 success:     1
 
5026
INSERT INTO t1 SELECT * FROM t0_template
 
5027
WHERE MOD(f_int1,3) = 0;
 
5028
        
 
5029
# check multiple-3 success:     1
 
5030
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5031
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5032
AND @max_row_div2 + @max_row_div4;
 
5033
        
 
5034
# check multiple-4 success:     1
 
5035
DELETE FROM t1
 
5036
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5037
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5038
        
 
5039
# check multiple-5 success:     1
 
5040
SELECT COUNT(*) INTO @try_count FROM t0_template
 
5041
WHERE MOD(f_int1,3) = 0
 
5042
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5043
SELECT COUNT(*) INTO @clash_count
 
5044
FROM t1 INNER JOIN t0_template USING(f_int1)
 
5045
WHERE MOD(f_int1,3) = 0
 
5046
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5047
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5048
INSERT INTO t1
 
5049
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5050
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5051
f_charbig = '#SINGLE#';
 
5052
        
 
5053
# check single-1 success:       1
 
5054
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5055
INSERT INTO t1
 
5056
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5057
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5058
f_charbig = '#SINGLE#';
 
5059
        
 
5060
# check single-2 success:       1
 
5061
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5062
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5063
UPDATE t1 SET f_int1 = @cur_value2
 
5064
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5065
        
 
5066
# check single-3 success:       1
 
5067
SET @cur_value1= -1;
 
5068
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5069
UPDATE t1 SET f_int1 = @cur_value1
 
5070
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5071
        
 
5072
# check single-4 success:       1
 
5073
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5074
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5075
        
 
5076
# check single-5 success:       1
 
5077
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5078
        
 
5079
# check single-6 success:       1
 
5080
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5081
        
 
5082
# check single-7 success:       1
 
5083
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5084
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5085
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5086
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5087
f_charbig = '#NULL#';
 
5088
INSERT INTO t1
 
5089
SET f_int1 = NULL , f_int2 = -@max_row,
 
5090
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5091
f_charbig = '#NULL#';
 
5092
# check null success:    1
 
5093
        
 
5094
# check null-1 success:         1
 
5095
UPDATE t1 SET f_int1 = -@max_row
 
5096
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5097
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5098
        
 
5099
# check null-2 success:         1
 
5100
UPDATE t1 SET f_int1 = NULL
 
5101
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5102
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5103
        
 
5104
# check null-3 success:         1
 
5105
DELETE FROM t1
 
5106
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5107
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5108
        
 
5109
# check null-4 success:         1
 
5110
DELETE FROM t1
 
5111
WHERE f_int1 = 0 AND f_int2 = 0
 
5112
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5113
AND f_charbig = '#NULL#';
 
5114
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5115
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5116
   FROM t0_template source_tab
 
5117
WHERE MOD(f_int1,3) = 0
 
5118
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
5119
ON DUPLICATE KEY
 
5120
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
5121
f_int2 = 2 * @max_row + source_tab.f_int1,
 
5122
f_charbig = 'was updated';
 
5123
        
 
5124
# check unique-1-a success:     1
 
5125
        
 
5126
# check unique-1-b success:     1
 
5127
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5130
f_charbig = CONCAT('===',f_char1,'===')
 
5131
WHERE f_charbig = 'was updated';
 
5132
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5133
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
5134
   FROM t0_template source_tab
 
5135
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5136
        
 
5137
# check replace success:        1
 
5138
DELETE FROM t1
 
5139
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
5140
DELETE FROM t1
 
5141
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
5142
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
5143
UPDATE t1 SET f_int2 = f_int1,
 
5144
f_char1 = CAST(f_int1 AS CHAR),
 
5145
f_char2 = CAST(f_int1 AS CHAR),
 
5146
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
5147
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
5148
SET AUTOCOMMIT= 0;
 
5149
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5150
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5151
FROM t0_template source_tab
 
5152
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5153
        
 
5154
# check transactions-1 success:         1
 
5155
COMMIT WORK;
 
5156
        
 
5157
# check transactions-2 success:         1
 
5158
ROLLBACK WORK;
 
5159
        
 
5160
# check transactions-3 success:         1
 
5161
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5162
COMMIT WORK;
 
5163
ROLLBACK WORK;
 
5164
        
 
5165
# check transactions-4 success:         1
 
5166
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5167
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5168
FROM t0_template source_tab
 
5169
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5170
        
 
5171
# check transactions-5 success:         1
 
5172
ROLLBACK WORK;
 
5173
Warnings:
 
5174
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5175
        
 
5176
# check transactions-6 success:         1
 
5177
# INFO: Storage engine used for t1 seems to be not transactional.
 
5178
COMMIT;
 
5179
        
 
5180
# check transactions-7 success:         1
 
5181
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5182
COMMIT WORK;
 
5183
SET @@session.sql_mode = 'traditional';
 
5184
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5186
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5187
'', '', 'was inserted' FROM t0_template
 
5188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5189
ERROR 22012: Division by 0
 
5190
COMMIT;
 
5191
        
 
5192
# check transactions-8 success:         1
 
5193
# INFO: Storage engine used for t1 seems to be unable to revert
 
5194
#       changes made by the failing statement.
 
5195
SET @@session.sql_mode = '';
 
5196
SET AUTOCOMMIT= 1;
 
5197
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5198
COMMIT WORK;
 
5199
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5200
        
 
5201
# check special-1 success:      1
 
5202
UPDATE t1 SET f_charbig = '';
 
5203
        
 
5204
# check special-2 success:      1
 
5205
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5206
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5207
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5211
'just inserted' FROM t0_template
 
5212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5213
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5214
BEGIN
 
5215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5216
f_charbig = 'updated by trigger'
 
5217
      WHERE f_int1 = new.f_int1;
 
5218
END|
 
5219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5220
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5222
        
 
5223
# check trigger-1 success:      1
 
5224
DROP TRIGGER trg_1;
 
5225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5227
f_charbig = 'just inserted'
 
5228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5229
DELETE FROM t0_aux
 
5230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5233
'just inserted' FROM t0_template
 
5234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5235
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5236
BEGIN
 
5237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5238
f_charbig = 'updated by trigger'
 
5239
      WHERE f_int1 = new.f_int1;
 
5240
END|
 
5241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5242
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5244
        
 
5245
# check trigger-2 success:      1
 
5246
DROP TRIGGER trg_1;
 
5247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5249
f_charbig = 'just inserted'
 
5250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5251
DELETE FROM t0_aux
 
5252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5255
'just inserted' FROM t0_template
 
5256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5257
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5258
BEGIN
 
5259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5260
f_charbig = 'updated by trigger'
 
5261
      WHERE f_int1 = new.f_int1;
 
5262
END|
 
5263
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5265
        
 
5266
# check trigger-3 success:      1
 
5267
DROP TRIGGER trg_1;
 
5268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5270
f_charbig = 'just inserted'
 
5271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5272
DELETE FROM t0_aux
 
5273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5276
'just inserted' FROM t0_template
 
5277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5278
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5279
BEGIN
 
5280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5281
f_charbig = 'updated by trigger'
 
5282
      WHERE f_int1 = - old.f_int1;
 
5283
END|
 
5284
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5286
        
 
5287
# check trigger-4 success:      1
 
5288
DROP TRIGGER trg_1;
 
5289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5291
f_charbig = 'just inserted'
 
5292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5293
DELETE FROM t0_aux
 
5294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5297
'just inserted' FROM t0_template
 
5298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5299
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5300
BEGIN
 
5301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5302
f_charbig = 'updated by trigger'
 
5303
      WHERE f_int1 = new.f_int1;
 
5304
END|
 
5305
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5307
        
 
5308
# check trigger-5 success:      1
 
5309
DROP TRIGGER trg_1;
 
5310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5312
f_charbig = 'just inserted'
 
5313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5314
DELETE FROM t0_aux
 
5315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5318
'just inserted' FROM t0_template
 
5319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5320
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5321
BEGIN
 
5322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5323
f_charbig = 'updated by trigger'
 
5324
      WHERE f_int1 = - old.f_int1;
 
5325
END|
 
5326
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5327
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5328
        
 
5329
# check trigger-6 success:      1
 
5330
DROP TRIGGER trg_1;
 
5331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5333
f_charbig = 'just inserted'
 
5334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5335
DELETE FROM t0_aux
 
5336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5339
'just inserted' FROM t0_template
 
5340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5341
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5342
BEGIN
 
5343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5344
f_charbig = 'updated by trigger'
 
5345
      WHERE f_int1 = - old.f_int1;
 
5346
END|
 
5347
DELETE FROM t0_aux
 
5348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5349
        
 
5350
# check trigger-7 success:      1
 
5351
DROP TRIGGER trg_1;
 
5352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5354
f_charbig = 'just inserted'
 
5355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5356
DELETE FROM t0_aux
 
5357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5360
'just inserted' FROM t0_template
 
5361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5362
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5363
BEGIN
 
5364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5365
f_charbig = 'updated by trigger'
 
5366
      WHERE f_int1 = - old.f_int1;
 
5367
END|
 
5368
DELETE FROM t0_aux
 
5369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5370
        
 
5371
# check trigger-8 success:      1
 
5372
DROP TRIGGER trg_1;
 
5373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5375
f_charbig = 'just inserted'
 
5376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5377
DELETE FROM t0_aux
 
5378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5379
DELETE FROM t1
 
5380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5381
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5382
BEGIN
 
5383
SET new.f_int1 = old.f_int1 + @max_row,
 
5384
new.f_int2 = old.f_int2 - @max_row,
 
5385
new.f_charbig = '####updated per update trigger####';
 
5386
END|
 
5387
UPDATE t1
 
5388
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5389
f_charbig = '####updated per update statement itself####';
 
5390
        
 
5391
# check trigger-9 success:      1
 
5392
DROP TRIGGER trg_2;
 
5393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5395
f_charbig = CONCAT('===',f_char1,'===');
 
5396
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5397
BEGIN
 
5398
SET new.f_int1 = new.f_int1 + @max_row,
 
5399
new.f_int2 = new.f_int2 - @max_row,
 
5400
new.f_charbig = '####updated per update trigger####';
 
5401
END|
 
5402
UPDATE t1
 
5403
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5404
f_charbig = '####updated per update statement itself####';
 
5405
        
 
5406
# check trigger-10 success:     1
 
5407
DROP TRIGGER trg_2;
 
5408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5410
f_charbig = CONCAT('===',f_char1,'===');
 
5411
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5412
BEGIN
 
5413
SET new.f_int1 = @my_max1 + @counter,
 
5414
new.f_int2 = @my_min2 - @counter,
 
5415
new.f_charbig = '####updated per insert trigger####';
 
5416
SET @counter = @counter + 1;
 
5417
END|
 
5418
SET @counter = 1;
 
5419
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5421
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5422
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5424
ORDER BY f_int1;
 
5425
DROP TRIGGER trg_3;
 
5426
        
 
5427
# check trigger-11 success:     1
 
5428
DELETE FROM t1
 
5429
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5430
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5431
AND f_charbig = '####updated per insert trigger####';
 
5432
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5433
BEGIN
 
5434
SET new.f_int1 = @my_max1 + @counter,
 
5435
new.f_int2 = @my_min2 - @counter,
 
5436
new.f_charbig = '####updated per insert trigger####';
 
5437
SET @counter = @counter + 1;
 
5438
END|
 
5439
SET @counter = 1;
 
5440
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5441
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5442
SELECT CAST(f_int1 AS CHAR),
 
5443
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5445
ORDER BY f_int1;
 
5446
DROP TRIGGER trg_3;
 
5447
        
 
5448
# check trigger-12 success:     1
 
5449
DELETE FROM t1
 
5450
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5451
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5452
AND f_charbig = '####updated per insert trigger####';
 
5453
ANALYZE  TABLE t1;
 
5454
Table   Op      Msg_type        Msg_text
 
5455
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5456
CHECK    TABLE t1 EXTENDED;
 
5457
Table   Op      Msg_type        Msg_text
 
5458
test.t1 check   note    The storage engine for the table doesn't support check
 
5459
CHECKSUM TABLE t1 EXTENDED;
 
5460
Table   Checksum
 
5461
test.t1 <some_value>
 
5462
OPTIMIZE TABLE t1;
 
5463
Table   Op      Msg_type        Msg_text
 
5464
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
5465
# check layout success:    1
 
5466
REPAIR   TABLE t1 EXTENDED;
 
5467
Table   Op      Msg_type        Msg_text
 
5468
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5469
# check layout success:    1
 
5470
TRUNCATE t1;
 
5471
        
 
5472
# check TRUNCATE success:       1
 
5473
# check layout success:    1
 
5474
# End usability test (inc/partition_check.inc)
 
5475
DROP TABLE t1;
 
5476
CREATE TABLE t1 (
 
5477
f_int1 INTEGER,
 
5478
f_int2 INTEGER,
 
5479
f_char1 CHAR(20),
 
5480
f_char2 CHAR(20),
 
5481
f_charbig VARCHAR(1000)
 
5482
 
 
5483
)
 
5484
PARTITION BY LIST(MOD(f_int1,4))
 
5485
(PARTITION part_3 VALUES IN (-3),
 
5486
PARTITION part_2 VALUES IN (-2),
 
5487
PARTITION part_1 VALUES IN (-1),
 
5488
PARTITION part_N VALUES IN (NULL),
 
5489
PARTITION part0 VALUES IN (0),
 
5490
PARTITION part1 VALUES IN (1),
 
5491
PARTITION part2 VALUES IN (2),
 
5492
PARTITION part3 VALUES IN (3));
 
5493
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5494
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5495
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5496
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
5497
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5498
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5499
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5500
# Start usability test (inc/partition_check.inc)
 
5501
create_command
 
5502
SHOW CREATE TABLE t1;
 
5503
Table   Create Table
 
5504
t1      CREATE TABLE `t1` (
 
5505
  `f_int1` int(11) DEFAULT NULL,
 
5506
  `f_int2` int(11) DEFAULT NULL,
 
5507
  `f_char1` char(20) DEFAULT NULL,
 
5508
  `f_char2` char(20) DEFAULT NULL,
 
5509
  `f_charbig` varchar(1000) DEFAULT NULL,
 
5510
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
5511
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
5512
 
 
5513
unified filelist
 
5514
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
5515
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
5516
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
5517
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
5518
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
5519
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
5520
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
5521
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
5522
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
5523
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
5524
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
5525
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
5526
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
5527
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
5528
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
5529
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
5530
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
5531
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
5532
 
 
5533
# check prerequisites-1 success:    1
 
5534
# check COUNT(*) success:    1
 
5535
# check MIN/MAX(f_int1) success:    1
 
5536
# check MIN/MAX(f_int2) success:    1
 
5537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5538
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5539
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5540
WHERE f_int1 IN (2,3);
 
5541
ERROR 23000: Can't write; duplicate key in table 't1'
 
5542
# check prerequisites-3 success:    1
 
5543
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
5544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5545
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5546
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5547
WHERE f_int1 IN (2,3);
 
5548
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5549
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5550
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
5551
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
5552
WHERE f_int1 IN (2,3);
 
5553
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5554
# check read via f_int1 success: 1
 
5555
# check read via f_int2 success: 1
 
5556
        
 
5557
# check multiple-1 success:     1
 
5558
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5559
        
 
5560
# check multiple-2 success:     1
 
5561
INSERT INTO t1 SELECT * FROM t0_template
 
5562
WHERE MOD(f_int1,3) = 0;
 
5563
        
 
5564
# check multiple-3 success:     1
 
5565
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5566
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5567
AND @max_row_div2 + @max_row_div4;
 
5568
        
 
5569
# check multiple-4 success:     1
 
5570
DELETE FROM t1
 
5571
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5572
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5573
        
 
5574
# check multiple-5 success:     1
 
5575
SELECT COUNT(*) INTO @try_count FROM t0_template
 
5576
WHERE MOD(f_int1,3) = 0
 
5577
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5578
SELECT COUNT(*) INTO @clash_count
 
5579
FROM t1 INNER JOIN t0_template USING(f_int1)
 
5580
WHERE MOD(f_int1,3) = 0
 
5581
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5582
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5583
INSERT INTO t1
 
5584
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5585
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5586
f_charbig = '#SINGLE#';
 
5587
        
 
5588
# check single-1 success:       1
 
5589
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5590
INSERT INTO t1
 
5591
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5592
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5593
f_charbig = '#SINGLE#';
 
5594
        
 
5595
# check single-2 success:       1
 
5596
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5597
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5598
UPDATE t1 SET f_int1 = @cur_value2
 
5599
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5600
        
 
5601
# check single-3 success:       1
 
5602
SET @cur_value1= -1;
 
5603
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5604
UPDATE t1 SET f_int1 = @cur_value1
 
5605
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5606
        
 
5607
# check single-4 success:       1
 
5608
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5609
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5610
        
 
5611
# check single-5 success:       1
 
5612
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5613
        
 
5614
# check single-6 success:       1
 
5615
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5616
        
 
5617
# check single-7 success:       1
 
5618
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5619
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5620
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5621
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5622
f_charbig = '#NULL#';
 
5623
INSERT INTO t1
 
5624
SET f_int1 = NULL , f_int2 = -@max_row,
 
5625
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5626
f_charbig = '#NULL#';
 
5627
# check null success:    1
 
5628
        
 
5629
# check null-1 success:         1
 
5630
UPDATE t1 SET f_int1 = -@max_row
 
5631
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5632
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5633
        
 
5634
# check null-2 success:         1
 
5635
UPDATE t1 SET f_int1 = NULL
 
5636
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5637
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5638
        
 
5639
# check null-3 success:         1
 
5640
DELETE FROM t1
 
5641
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5642
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5643
        
 
5644
# check null-4 success:         1
 
5645
DELETE FROM t1
 
5646
WHERE f_int1 = 0 AND f_int2 = 0
 
5647
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5648
AND f_charbig = '#NULL#';
 
5649
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5650
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5651
   FROM t0_template source_tab
 
5652
WHERE MOD(f_int1,3) = 0
 
5653
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
5654
ON DUPLICATE KEY
 
5655
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
5656
f_int2 = 2 * @max_row + source_tab.f_int1,
 
5657
f_charbig = 'was updated';
 
5658
        
 
5659
# check unique-1-a success:     1
 
5660
        
 
5661
# check unique-1-b success:     1
 
5662
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5665
f_charbig = CONCAT('===',f_char1,'===')
 
5666
WHERE f_charbig = 'was updated';
 
5667
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5668
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
5669
   FROM t0_template source_tab
 
5670
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5671
        
 
5672
# check replace success:        1
 
5673
DELETE FROM t1
 
5674
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
5675
DELETE FROM t1
 
5676
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
5677
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
5678
UPDATE t1 SET f_int2 = f_int1,
 
5679
f_char1 = CAST(f_int1 AS CHAR),
 
5680
f_char2 = CAST(f_int1 AS CHAR),
 
5681
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
5682
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
5683
SET AUTOCOMMIT= 0;
 
5684
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5685
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5686
FROM t0_template source_tab
 
5687
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5688
        
 
5689
# check transactions-1 success:         1
 
5690
COMMIT WORK;
 
5691
        
 
5692
# check transactions-2 success:         1
 
5693
ROLLBACK WORK;
 
5694
        
 
5695
# check transactions-3 success:         1
 
5696
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5697
COMMIT WORK;
 
5698
ROLLBACK WORK;
 
5699
        
 
5700
# check transactions-4 success:         1
 
5701
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5702
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5703
FROM t0_template source_tab
 
5704
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5705
        
 
5706
# check transactions-5 success:         1
 
5707
ROLLBACK WORK;
 
5708
Warnings:
 
5709
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5710
        
 
5711
# check transactions-6 success:         1
 
5712
# INFO: Storage engine used for t1 seems to be not transactional.
 
5713
COMMIT;
 
5714
        
 
5715
# check transactions-7 success:         1
 
5716
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5717
COMMIT WORK;
 
5718
SET @@session.sql_mode = 'traditional';
 
5719
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5720
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5721
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5722
'', '', 'was inserted' FROM t0_template
 
5723
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5724
ERROR 22012: Division by 0
 
5725
COMMIT;
 
5726
        
 
5727
# check transactions-8 success:         1
 
5728
# INFO: Storage engine used for t1 seems to be unable to revert
 
5729
#       changes made by the failing statement.
 
5730
SET @@session.sql_mode = '';
 
5731
SET AUTOCOMMIT= 1;
 
5732
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5733
COMMIT WORK;
 
5734
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5735
        
 
5736
# check special-1 success:      1
 
5737
UPDATE t1 SET f_charbig = '';
 
5738
        
 
5739
# check special-2 success:      1
 
5740
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5741
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5742
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5743
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5744
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5745
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5746
'just inserted' FROM t0_template
 
5747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5748
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5749
BEGIN
 
5750
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5751
f_charbig = 'updated by trigger'
 
5752
      WHERE f_int1 = new.f_int1;
 
5753
END|
 
5754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5755
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5757
        
 
5758
# check trigger-1 success:      1
 
5759
DROP TRIGGER trg_1;
 
5760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5762
f_charbig = 'just inserted'
 
5763
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5764
DELETE FROM t0_aux
 
5765
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5766
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5767
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5768
'just inserted' FROM t0_template
 
5769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5770
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5771
BEGIN
 
5772
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5773
f_charbig = 'updated by trigger'
 
5774
      WHERE f_int1 = new.f_int1;
 
5775
END|
 
5776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5777
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5778
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5779
        
 
5780
# check trigger-2 success:      1
 
5781
DROP TRIGGER trg_1;
 
5782
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5783
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5784
f_charbig = 'just inserted'
 
5785
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5786
DELETE FROM t0_aux
 
5787
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5788
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5789
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5790
'just inserted' FROM t0_template
 
5791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5792
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5793
BEGIN
 
5794
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5795
f_charbig = 'updated by trigger'
 
5796
      WHERE f_int1 = new.f_int1;
 
5797
END|
 
5798
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5799
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5800
        
 
5801
# check trigger-3 success:      1
 
5802
DROP TRIGGER trg_1;
 
5803
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5804
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5805
f_charbig = 'just inserted'
 
5806
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5807
DELETE FROM t0_aux
 
5808
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5809
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5810
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5811
'just inserted' FROM t0_template
 
5812
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5813
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5814
BEGIN
 
5815
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5816
f_charbig = 'updated by trigger'
 
5817
      WHERE f_int1 = - old.f_int1;
 
5818
END|
 
5819
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5820
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5821
        
 
5822
# check trigger-4 success:      1
 
5823
DROP TRIGGER trg_1;
 
5824
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5825
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5826
f_charbig = 'just inserted'
 
5827
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5828
DELETE FROM t0_aux
 
5829
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5830
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5831
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5832
'just inserted' FROM t0_template
 
5833
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5834
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5835
BEGIN
 
5836
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5837
f_charbig = 'updated by trigger'
 
5838
      WHERE f_int1 = new.f_int1;
 
5839
END|
 
5840
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5841
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5842
        
 
5843
# check trigger-5 success:      1
 
5844
DROP TRIGGER trg_1;
 
5845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5847
f_charbig = 'just inserted'
 
5848
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5849
DELETE FROM t0_aux
 
5850
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5851
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5852
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5853
'just inserted' FROM t0_template
 
5854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5855
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5856
BEGIN
 
5857
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5858
f_charbig = 'updated by trigger'
 
5859
      WHERE f_int1 = - old.f_int1;
 
5860
END|
 
5861
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5862
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5863
        
 
5864
# check trigger-6 success:      1
 
5865
DROP TRIGGER trg_1;
 
5866
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5867
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5868
f_charbig = 'just inserted'
 
5869
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5870
DELETE FROM t0_aux
 
5871
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5872
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5873
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5874
'just inserted' FROM t0_template
 
5875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5876
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5877
BEGIN
 
5878
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5879
f_charbig = 'updated by trigger'
 
5880
      WHERE f_int1 = - old.f_int1;
 
5881
END|
 
5882
DELETE FROM t0_aux
 
5883
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5884
        
 
5885
# check trigger-7 success:      1
 
5886
DROP TRIGGER trg_1;
 
5887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5889
f_charbig = 'just inserted'
 
5890
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5891
DELETE FROM t0_aux
 
5892
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5893
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5894
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5895
'just inserted' FROM t0_template
 
5896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5897
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5898
BEGIN
 
5899
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5900
f_charbig = 'updated by trigger'
 
5901
      WHERE f_int1 = - old.f_int1;
 
5902
END|
 
5903
DELETE FROM t0_aux
 
5904
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5905
        
 
5906
# check trigger-8 success:      1
 
5907
DROP TRIGGER trg_1;
 
5908
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5909
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5910
f_charbig = 'just inserted'
 
5911
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5912
DELETE FROM t0_aux
 
5913
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5914
DELETE FROM t1
 
5915
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5916
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5917
BEGIN
 
5918
SET new.f_int1 = old.f_int1 + @max_row,
 
5919
new.f_int2 = old.f_int2 - @max_row,
 
5920
new.f_charbig = '####updated per update trigger####';
 
5921
END|
 
5922
UPDATE t1
 
5923
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5924
f_charbig = '####updated per update statement itself####';
 
5925
        
 
5926
# check trigger-9 success:      1
 
5927
DROP TRIGGER trg_2;
 
5928
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5929
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5930
f_charbig = CONCAT('===',f_char1,'===');
 
5931
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5932
BEGIN
 
5933
SET new.f_int1 = new.f_int1 + @max_row,
 
5934
new.f_int2 = new.f_int2 - @max_row,
 
5935
new.f_charbig = '####updated per update trigger####';
 
5936
END|
 
5937
UPDATE t1
 
5938
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5939
f_charbig = '####updated per update statement itself####';
 
5940
        
 
5941
# check trigger-10 success:     1
 
5942
DROP TRIGGER trg_2;
 
5943
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5944
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5945
f_charbig = CONCAT('===',f_char1,'===');
 
5946
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5947
BEGIN
 
5948
SET new.f_int1 = @my_max1 + @counter,
 
5949
new.f_int2 = @my_min2 - @counter,
 
5950
new.f_charbig = '####updated per insert trigger####';
 
5951
SET @counter = @counter + 1;
 
5952
END|
 
5953
SET @counter = 1;
 
5954
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5955
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5956
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5957
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5959
ORDER BY f_int1;
 
5960
DROP TRIGGER trg_3;
 
5961
        
 
5962
# check trigger-11 success:     1
 
5963
DELETE FROM t1
 
5964
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5965
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5966
AND f_charbig = '####updated per insert trigger####';
 
5967
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5968
BEGIN
 
5969
SET new.f_int1 = @my_max1 + @counter,
 
5970
new.f_int2 = @my_min2 - @counter,
 
5971
new.f_charbig = '####updated per insert trigger####';
 
5972
SET @counter = @counter + 1;
 
5973
END|
 
5974
SET @counter = 1;
 
5975
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5976
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5977
SELECT CAST(f_int1 AS CHAR),
 
5978
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5980
ORDER BY f_int1;
 
5981
DROP TRIGGER trg_3;
 
5982
        
 
5983
# check trigger-12 success:     1
 
5984
DELETE FROM t1
 
5985
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5986
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5987
AND f_charbig = '####updated per insert trigger####';
 
5988
ANALYZE  TABLE t1;
 
5989
Table   Op      Msg_type        Msg_text
 
5990
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5991
CHECK    TABLE t1 EXTENDED;
 
5992
Table   Op      Msg_type        Msg_text
 
5993
test.t1 check   note    The storage engine for the table doesn't support check
 
5994
CHECKSUM TABLE t1 EXTENDED;
 
5995
Table   Checksum
 
5996
test.t1 <some_value>
 
5997
OPTIMIZE TABLE t1;
 
5998
Table   Op      Msg_type        Msg_text
 
5999
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
6000
# check layout success:    1
 
6001
REPAIR   TABLE t1 EXTENDED;
 
6002
Table   Op      Msg_type        Msg_text
 
6003
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6004
# check layout success:    1
 
6005
TRUNCATE t1;
 
6006
        
 
6007
# check TRUNCATE success:       1
 
6008
# check layout success:    1
 
6009
# End usability test (inc/partition_check.inc)
 
6010
DROP TABLE t1;
 
6011
CREATE TABLE t1 (
 
6012
f_int1 INTEGER,
 
6013
f_int2 INTEGER,
 
6014
f_char1 CHAR(20),
 
6015
f_char2 CHAR(20),
 
6016
f_charbig VARCHAR(1000)
 
6017
 
 
6018
)
 
6019
PARTITION BY RANGE(f_int1)
 
6020
(PARTITION parta VALUES LESS THAN (0),
 
6021
PARTITION partb VALUES LESS THAN (5),
 
6022
PARTITION partc VALUES LESS THAN (10),
 
6023
PARTITION partd VALUES LESS THAN (10 + 5),
 
6024
PARTITION parte VALUES LESS THAN (20),
 
6025
PARTITION partf VALUES LESS THAN (2147483646));
 
6026
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6027
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6028
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6029
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
6030
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6031
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6032
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6033
# Start usability test (inc/partition_check.inc)
 
6034
create_command
 
6035
SHOW CREATE TABLE t1;
 
6036
Table   Create Table
 
6037
t1      CREATE TABLE `t1` (
 
6038
  `f_int1` int(11) DEFAULT NULL,
 
6039
  `f_int2` int(11) DEFAULT NULL,
 
6040
  `f_char1` char(20) DEFAULT NULL,
 
6041
  `f_char2` char(20) DEFAULT NULL,
 
6042
  `f_charbig` varchar(1000) DEFAULT NULL,
 
6043
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
6044
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
6045
 
 
6046
unified filelist
 
6047
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
6048
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
6049
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
6050
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
6051
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
6052
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
6053
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
6054
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
6055
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
6056
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
6057
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
6058
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
6059
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
6060
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
6061
 
 
6062
# check prerequisites-1 success:    1
 
6063
# check COUNT(*) success:    1
 
6064
# check MIN/MAX(f_int1) success:    1
 
6065
# check MIN/MAX(f_int2) success:    1
 
6066
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6067
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6068
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6069
WHERE f_int1 IN (2,3);
 
6070
ERROR 23000: Can't write; duplicate key in table 't1'
 
6071
# check prerequisites-3 success:    1
 
6072
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
6073
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6074
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6075
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6076
WHERE f_int1 IN (2,3);
 
6077
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6078
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6079
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6080
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6081
WHERE f_int1 IN (2,3);
 
6082
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6083
# check read via f_int1 success: 1
 
6084
# check read via f_int2 success: 1
 
6085
        
 
6086
# check multiple-1 success:     1
 
6087
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6088
        
 
6089
# check multiple-2 success:     1
 
6090
INSERT INTO t1 SELECT * FROM t0_template
 
6091
WHERE MOD(f_int1,3) = 0;
 
6092
        
 
6093
# check multiple-3 success:     1
 
6094
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6095
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6096
AND @max_row_div2 + @max_row_div4;
 
6097
        
 
6098
# check multiple-4 success:     1
 
6099
DELETE FROM t1
 
6100
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6101
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6102
        
 
6103
# check multiple-5 success:     1
 
6104
SELECT COUNT(*) INTO @try_count FROM t0_template
 
6105
WHERE MOD(f_int1,3) = 0
 
6106
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6107
SELECT COUNT(*) INTO @clash_count
 
6108
FROM t1 INNER JOIN t0_template USING(f_int1)
 
6109
WHERE MOD(f_int1,3) = 0
 
6110
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6111
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6112
INSERT INTO t1
 
6113
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6114
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6115
f_charbig = '#SINGLE#';
 
6116
        
 
6117
# check single-1 success:       1
 
6118
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6119
INSERT INTO t1
 
6120
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6121
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6122
f_charbig = '#SINGLE#';
 
6123
        
 
6124
# check single-2 success:       1
 
6125
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6126
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6127
UPDATE t1 SET f_int1 = @cur_value2
 
6128
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6129
        
 
6130
# check single-3 success:       1
 
6131
SET @cur_value1= -1;
 
6132
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6133
UPDATE t1 SET f_int1 = @cur_value1
 
6134
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6135
        
 
6136
# check single-4 success:       1
 
6137
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6138
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6139
        
 
6140
# check single-5 success:       1
 
6141
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6142
        
 
6143
# check single-6 success:       1
 
6144
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6145
ERROR HY000: Table has no partition for value 2147483647
 
6146
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6147
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6148
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6149
f_charbig = '#NULL#';
 
6150
INSERT INTO t1
 
6151
SET f_int1 = NULL , f_int2 = -@max_row,
 
6152
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6153
f_charbig = '#NULL#';
 
6154
# check null success:    1
 
6155
        
 
6156
# check null-1 success:         1
 
6157
UPDATE t1 SET f_int1 = -@max_row
 
6158
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6159
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6160
        
 
6161
# check null-2 success:         1
 
6162
UPDATE t1 SET f_int1 = NULL
 
6163
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6164
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6165
        
 
6166
# check null-3 success:         1
 
6167
DELETE FROM t1
 
6168
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6169
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6170
        
 
6171
# check null-4 success:         1
 
6172
DELETE FROM t1
 
6173
WHERE f_int1 = 0 AND f_int2 = 0
 
6174
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6175
AND f_charbig = '#NULL#';
 
6176
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6177
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6178
   FROM t0_template source_tab
 
6179
WHERE MOD(f_int1,3) = 0
 
6180
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
6181
ON DUPLICATE KEY
 
6182
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
6183
f_int2 = 2 * @max_row + source_tab.f_int1,
 
6184
f_charbig = 'was updated';
 
6185
        
 
6186
# check unique-1-a success:     1
 
6187
        
 
6188
# check unique-1-b success:     1
 
6189
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6192
f_charbig = CONCAT('===',f_char1,'===')
 
6193
WHERE f_charbig = 'was updated';
 
6194
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6195
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
6196
   FROM t0_template source_tab
 
6197
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6198
        
 
6199
# check replace success:        1
 
6200
DELETE FROM t1
 
6201
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
6202
DELETE FROM t1
 
6203
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
6204
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
6205
UPDATE t1 SET f_int2 = f_int1,
 
6206
f_char1 = CAST(f_int1 AS CHAR),
 
6207
f_char2 = CAST(f_int1 AS CHAR),
 
6208
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
6209
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
6210
SET AUTOCOMMIT= 0;
 
6211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6212
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6213
FROM t0_template source_tab
 
6214
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6215
        
 
6216
# check transactions-1 success:         1
 
6217
COMMIT WORK;
 
6218
        
 
6219
# check transactions-2 success:         1
 
6220
ROLLBACK WORK;
 
6221
        
 
6222
# check transactions-3 success:         1
 
6223
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6224
COMMIT WORK;
 
6225
ROLLBACK WORK;
 
6226
        
 
6227
# check transactions-4 success:         1
 
6228
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6229
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6230
FROM t0_template source_tab
 
6231
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6232
        
 
6233
# check transactions-5 success:         1
 
6234
ROLLBACK WORK;
 
6235
Warnings:
 
6236
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6237
        
 
6238
# check transactions-6 success:         1
 
6239
# INFO: Storage engine used for t1 seems to be not transactional.
 
6240
COMMIT;
 
6241
        
 
6242
# check transactions-7 success:         1
 
6243
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6244
COMMIT WORK;
 
6245
SET @@session.sql_mode = 'traditional';
 
6246
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6247
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6248
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6249
'', '', 'was inserted' FROM t0_template
 
6250
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6251
ERROR 22012: Division by 0
 
6252
COMMIT;
 
6253
        
 
6254
# check transactions-8 success:         1
 
6255
# INFO: Storage engine used for t1 seems to be unable to revert
 
6256
#       changes made by the failing statement.
 
6257
SET @@session.sql_mode = '';
 
6258
SET AUTOCOMMIT= 1;
 
6259
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6260
COMMIT WORK;
 
6261
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6262
        
 
6263
# check special-1 success:      1
 
6264
UPDATE t1 SET f_charbig = '';
 
6265
        
 
6266
# check special-2 success:      1
 
6267
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6268
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6269
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6270
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6272
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6273
'just inserted' FROM t0_template
 
6274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6275
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6276
BEGIN
 
6277
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6278
f_charbig = 'updated by trigger'
 
6279
      WHERE f_int1 = new.f_int1;
 
6280
END|
 
6281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6282
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6284
        
 
6285
# check trigger-1 success:      1
 
6286
DROP TRIGGER trg_1;
 
6287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6289
f_charbig = 'just inserted'
 
6290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6291
DELETE FROM t0_aux
 
6292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6295
'just inserted' FROM t0_template
 
6296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6297
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6298
BEGIN
 
6299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6300
f_charbig = 'updated by trigger'
 
6301
      WHERE f_int1 = new.f_int1;
 
6302
END|
 
6303
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6304
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6306
        
 
6307
# check trigger-2 success:      1
 
6308
DROP TRIGGER trg_1;
 
6309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6311
f_charbig = 'just inserted'
 
6312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6313
DELETE FROM t0_aux
 
6314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6315
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6316
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6317
'just inserted' FROM t0_template
 
6318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6319
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6320
BEGIN
 
6321
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6322
f_charbig = 'updated by trigger'
 
6323
      WHERE f_int1 = new.f_int1;
 
6324
END|
 
6325
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6326
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6327
        
 
6328
# check trigger-3 success:      1
 
6329
DROP TRIGGER trg_1;
 
6330
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6331
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6332
f_charbig = 'just inserted'
 
6333
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6334
DELETE FROM t0_aux
 
6335
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6336
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6337
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6338
'just inserted' FROM t0_template
 
6339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6340
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6341
BEGIN
 
6342
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6343
f_charbig = 'updated by trigger'
 
6344
      WHERE f_int1 = - old.f_int1;
 
6345
END|
 
6346
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6347
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6348
        
 
6349
# check trigger-4 success:      1
 
6350
DROP TRIGGER trg_1;
 
6351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6353
f_charbig = 'just inserted'
 
6354
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6355
DELETE FROM t0_aux
 
6356
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6357
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6358
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6359
'just inserted' FROM t0_template
 
6360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6361
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6362
BEGIN
 
6363
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6364
f_charbig = 'updated by trigger'
 
6365
      WHERE f_int1 = new.f_int1;
 
6366
END|
 
6367
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6368
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6369
        
 
6370
# check trigger-5 success:      1
 
6371
DROP TRIGGER trg_1;
 
6372
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6373
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6374
f_charbig = 'just inserted'
 
6375
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6376
DELETE FROM t0_aux
 
6377
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6378
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6379
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6380
'just inserted' FROM t0_template
 
6381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6382
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6383
BEGIN
 
6384
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6385
f_charbig = 'updated by trigger'
 
6386
      WHERE f_int1 = - old.f_int1;
 
6387
END|
 
6388
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6389
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6390
        
 
6391
# check trigger-6 success:      1
 
6392
DROP TRIGGER trg_1;
 
6393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6395
f_charbig = 'just inserted'
 
6396
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6397
DELETE FROM t0_aux
 
6398
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6399
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6400
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6401
'just inserted' FROM t0_template
 
6402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6403
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6404
BEGIN
 
6405
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6406
f_charbig = 'updated by trigger'
 
6407
      WHERE f_int1 = - old.f_int1;
 
6408
END|
 
6409
DELETE FROM t0_aux
 
6410
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6411
        
 
6412
# check trigger-7 success:      1
 
6413
DROP TRIGGER trg_1;
 
6414
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6415
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6416
f_charbig = 'just inserted'
 
6417
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6418
DELETE FROM t0_aux
 
6419
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6420
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6421
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6422
'just inserted' FROM t0_template
 
6423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6424
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6425
BEGIN
 
6426
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6427
f_charbig = 'updated by trigger'
 
6428
      WHERE f_int1 = - old.f_int1;
 
6429
END|
 
6430
DELETE FROM t0_aux
 
6431
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6432
        
 
6433
# check trigger-8 success:      1
 
6434
DROP TRIGGER trg_1;
 
6435
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6436
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6437
f_charbig = 'just inserted'
 
6438
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6439
DELETE FROM t0_aux
 
6440
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6441
DELETE FROM t1
 
6442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6443
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6444
BEGIN
 
6445
SET new.f_int1 = old.f_int1 + @max_row,
 
6446
new.f_int2 = old.f_int2 - @max_row,
 
6447
new.f_charbig = '####updated per update trigger####';
 
6448
END|
 
6449
UPDATE t1
 
6450
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6451
f_charbig = '####updated per update statement itself####';
 
6452
        
 
6453
# check trigger-9 success:      1
 
6454
DROP TRIGGER trg_2;
 
6455
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6456
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6457
f_charbig = CONCAT('===',f_char1,'===');
 
6458
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6459
BEGIN
 
6460
SET new.f_int1 = new.f_int1 + @max_row,
 
6461
new.f_int2 = new.f_int2 - @max_row,
 
6462
new.f_charbig = '####updated per update trigger####';
 
6463
END|
 
6464
UPDATE t1
 
6465
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6466
f_charbig = '####updated per update statement itself####';
 
6467
        
 
6468
# check trigger-10 success:     1
 
6469
DROP TRIGGER trg_2;
 
6470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6472
f_charbig = CONCAT('===',f_char1,'===');
 
6473
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6474
BEGIN
 
6475
SET new.f_int1 = @my_max1 + @counter,
 
6476
new.f_int2 = @my_min2 - @counter,
 
6477
new.f_charbig = '####updated per insert trigger####';
 
6478
SET @counter = @counter + 1;
 
6479
END|
 
6480
SET @counter = 1;
 
6481
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6482
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6483
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6484
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6486
ORDER BY f_int1;
 
6487
DROP TRIGGER trg_3;
 
6488
        
 
6489
# check trigger-11 success:     1
 
6490
DELETE FROM t1
 
6491
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6492
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6493
AND f_charbig = '####updated per insert trigger####';
 
6494
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6495
BEGIN
 
6496
SET new.f_int1 = @my_max1 + @counter,
 
6497
new.f_int2 = @my_min2 - @counter,
 
6498
new.f_charbig = '####updated per insert trigger####';
 
6499
SET @counter = @counter + 1;
 
6500
END|
 
6501
SET @counter = 1;
 
6502
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6503
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6504
SELECT CAST(f_int1 AS CHAR),
 
6505
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6507
ORDER BY f_int1;
 
6508
DROP TRIGGER trg_3;
 
6509
        
 
6510
# check trigger-12 success:     1
 
6511
DELETE FROM t1
 
6512
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6513
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6514
AND f_charbig = '####updated per insert trigger####';
 
6515
ANALYZE  TABLE t1;
 
6516
Table   Op      Msg_type        Msg_text
 
6517
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
6518
CHECK    TABLE t1 EXTENDED;
 
6519
Table   Op      Msg_type        Msg_text
 
6520
test.t1 check   note    The storage engine for the table doesn't support check
 
6521
CHECKSUM TABLE t1 EXTENDED;
 
6522
Table   Checksum
 
6523
test.t1 <some_value>
 
6524
OPTIMIZE TABLE t1;
 
6525
Table   Op      Msg_type        Msg_text
 
6526
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
6527
# check layout success:    1
 
6528
REPAIR   TABLE t1 EXTENDED;
 
6529
Table   Op      Msg_type        Msg_text
 
6530
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6531
# check layout success:    1
 
6532
TRUNCATE t1;
 
6533
        
 
6534
# check TRUNCATE success:       1
 
6535
# check layout success:    1
 
6536
# End usability test (inc/partition_check.inc)
 
6537
DROP TABLE t1;
 
6538
CREATE TABLE t1 (
 
6539
f_int1 INTEGER,
 
6540
f_int2 INTEGER,
 
6541
f_char1 CHAR(20),
 
6542
f_char2 CHAR(20),
 
6543
f_charbig VARCHAR(1000)
 
6544
 
 
6545
)
 
6546
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
6547
(PARTITION parta VALUES LESS THAN (0),
 
6548
PARTITION partb VALUES LESS THAN (5),
 
6549
PARTITION partc VALUES LESS THAN (10),
 
6550
PARTITION partd VALUES LESS THAN (2147483646));
 
6551
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6552
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6553
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6554
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
6555
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6556
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6557
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6558
# Start usability test (inc/partition_check.inc)
 
6559
create_command
 
6560
SHOW CREATE TABLE t1;
 
6561
Table   Create Table
 
6562
t1      CREATE TABLE `t1` (
 
6563
  `f_int1` int(11) DEFAULT NULL,
 
6564
  `f_int2` int(11) DEFAULT NULL,
 
6565
  `f_char1` char(20) DEFAULT NULL,
 
6566
  `f_char2` char(20) DEFAULT NULL,
 
6567
  `f_charbig` varchar(1000) DEFAULT NULL,
 
6568
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
6569
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
6570
 
 
6571
unified filelist
 
6572
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
6573
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
6574
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
6575
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
6576
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
6577
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
6578
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
6579
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
6580
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
6581
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
6582
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
6583
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
6584
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
6585
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
6586
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
6587
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
6588
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
6589
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
6590
 
 
6591
# check prerequisites-1 success:    1
 
6592
# check COUNT(*) success:    1
 
6593
# check MIN/MAX(f_int1) success:    1
 
6594
# check MIN/MAX(f_int2) success:    1
 
6595
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6596
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6597
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6598
WHERE f_int1 IN (2,3);
 
6599
ERROR 23000: Can't write; duplicate key in table 't1'
 
6600
# check prerequisites-3 success:    1
 
6601
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
6602
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6603
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6604
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6605
WHERE f_int1 IN (2,3);
 
6606
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6607
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6608
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
6609
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
6610
WHERE f_int1 IN (2,3);
 
6611
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6612
# check read via f_int1 success: 1
 
6613
# check read via f_int2 success: 1
 
6614
        
 
6615
# check multiple-1 success:     1
 
6616
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6617
        
 
6618
# check multiple-2 success:     1
 
6619
INSERT INTO t1 SELECT * FROM t0_template
 
6620
WHERE MOD(f_int1,3) = 0;
 
6621
        
 
6622
# check multiple-3 success:     1
 
6623
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6624
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6625
AND @max_row_div2 + @max_row_div4;
 
6626
        
 
6627
# check multiple-4 success:     1
 
6628
DELETE FROM t1
 
6629
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6630
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6631
        
 
6632
# check multiple-5 success:     1
 
6633
SELECT COUNT(*) INTO @try_count FROM t0_template
 
6634
WHERE MOD(f_int1,3) = 0
 
6635
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6636
SELECT COUNT(*) INTO @clash_count
 
6637
FROM t1 INNER JOIN t0_template USING(f_int1)
 
6638
WHERE MOD(f_int1,3) = 0
 
6639
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6640
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6641
INSERT INTO t1
 
6642
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6643
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6644
f_charbig = '#SINGLE#';
 
6645
        
 
6646
# check single-1 success:       1
 
6647
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6648
INSERT INTO t1
 
6649
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6650
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6651
f_charbig = '#SINGLE#';
 
6652
        
 
6653
# check single-2 success:       1
 
6654
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6655
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6656
UPDATE t1 SET f_int1 = @cur_value2
 
6657
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6658
        
 
6659
# check single-3 success:       1
 
6660
SET @cur_value1= -1;
 
6661
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6662
UPDATE t1 SET f_int1 = @cur_value1
 
6663
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6664
        
 
6665
# check single-4 success:       1
 
6666
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6667
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6668
        
 
6669
# check single-5 success:       1
 
6670
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6671
        
 
6672
# check single-6 success:       1
 
6673
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6674
        
 
6675
# check single-7 success:       1
 
6676
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6677
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6678
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6679
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6680
f_charbig = '#NULL#';
 
6681
INSERT INTO t1
 
6682
SET f_int1 = NULL , f_int2 = -@max_row,
 
6683
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6684
f_charbig = '#NULL#';
 
6685
# check null success:    1
 
6686
        
 
6687
# check null-1 success:         1
 
6688
UPDATE t1 SET f_int1 = -@max_row
 
6689
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6690
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6691
        
 
6692
# check null-2 success:         1
 
6693
UPDATE t1 SET f_int1 = NULL
 
6694
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6695
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6696
        
 
6697
# check null-3 success:         1
 
6698
DELETE FROM t1
 
6699
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6700
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6701
        
 
6702
# check null-4 success:         1
 
6703
DELETE FROM t1
 
6704
WHERE f_int1 = 0 AND f_int2 = 0
 
6705
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6706
AND f_charbig = '#NULL#';
 
6707
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6708
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6709
   FROM t0_template source_tab
 
6710
WHERE MOD(f_int1,3) = 0
 
6711
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
6712
ON DUPLICATE KEY
 
6713
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
6714
f_int2 = 2 * @max_row + source_tab.f_int1,
 
6715
f_charbig = 'was updated';
 
6716
        
 
6717
# check unique-1-a success:     1
 
6718
        
 
6719
# check unique-1-b success:     1
 
6720
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6723
f_charbig = CONCAT('===',f_char1,'===')
 
6724
WHERE f_charbig = 'was updated';
 
6725
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6726
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
6727
   FROM t0_template source_tab
 
6728
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6729
        
 
6730
# check replace success:        1
 
6731
DELETE FROM t1
 
6732
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
6733
DELETE FROM t1
 
6734
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
6735
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
6736
UPDATE t1 SET f_int2 = f_int1,
 
6737
f_char1 = CAST(f_int1 AS CHAR),
 
6738
f_char2 = CAST(f_int1 AS CHAR),
 
6739
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
6740
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
6741
SET AUTOCOMMIT= 0;
 
6742
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6743
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6744
FROM t0_template source_tab
 
6745
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6746
        
 
6747
# check transactions-1 success:         1
 
6748
COMMIT WORK;
 
6749
        
 
6750
# check transactions-2 success:         1
 
6751
ROLLBACK WORK;
 
6752
        
 
6753
# check transactions-3 success:         1
 
6754
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6755
COMMIT WORK;
 
6756
ROLLBACK WORK;
 
6757
        
 
6758
# check transactions-4 success:         1
 
6759
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6760
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6761
FROM t0_template source_tab
 
6762
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6763
        
 
6764
# check transactions-5 success:         1
 
6765
ROLLBACK WORK;
 
6766
Warnings:
 
6767
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6768
        
 
6769
# check transactions-6 success:         1
 
6770
# INFO: Storage engine used for t1 seems to be not transactional.
 
6771
COMMIT;
 
6772
        
 
6773
# check transactions-7 success:         1
 
6774
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6775
COMMIT WORK;
 
6776
SET @@session.sql_mode = 'traditional';
 
6777
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6778
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6779
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6780
'', '', 'was inserted' FROM t0_template
 
6781
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6782
ERROR 22012: Division by 0
 
6783
COMMIT;
 
6784
        
 
6785
# check transactions-8 success:         1
 
6786
# INFO: Storage engine used for t1 seems to be unable to revert
 
6787
#       changes made by the failing statement.
 
6788
SET @@session.sql_mode = '';
 
6789
SET AUTOCOMMIT= 1;
 
6790
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6791
COMMIT WORK;
 
6792
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6793
        
 
6794
# check special-1 success:      1
 
6795
UPDATE t1 SET f_charbig = '';
 
6796
        
 
6797
# check special-2 success:      1
 
6798
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6799
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6800
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6803
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6804
'just inserted' FROM t0_template
 
6805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6806
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6807
BEGIN
 
6808
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6809
f_charbig = 'updated by trigger'
 
6810
      WHERE f_int1 = new.f_int1;
 
6811
END|
 
6812
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6813
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6815
        
 
6816
# check trigger-1 success:      1
 
6817
DROP TRIGGER trg_1;
 
6818
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6819
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6820
f_charbig = 'just inserted'
 
6821
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6822
DELETE FROM t0_aux
 
6823
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6824
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6825
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6826
'just inserted' FROM t0_template
 
6827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6828
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6829
BEGIN
 
6830
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6831
f_charbig = 'updated by trigger'
 
6832
      WHERE f_int1 = new.f_int1;
 
6833
END|
 
6834
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6835
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6837
        
 
6838
# check trigger-2 success:      1
 
6839
DROP TRIGGER trg_1;
 
6840
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6841
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6842
f_charbig = 'just inserted'
 
6843
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6844
DELETE FROM t0_aux
 
6845
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6846
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6847
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6848
'just inserted' FROM t0_template
 
6849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6850
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6851
BEGIN
 
6852
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6853
f_charbig = 'updated by trigger'
 
6854
      WHERE f_int1 = new.f_int1;
 
6855
END|
 
6856
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6857
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6858
        
 
6859
# check trigger-3 success:      1
 
6860
DROP TRIGGER trg_1;
 
6861
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6862
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6863
f_charbig = 'just inserted'
 
6864
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6865
DELETE FROM t0_aux
 
6866
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6867
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6868
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6869
'just inserted' FROM t0_template
 
6870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6871
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6872
BEGIN
 
6873
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6874
f_charbig = 'updated by trigger'
 
6875
      WHERE f_int1 = - old.f_int1;
 
6876
END|
 
6877
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6878
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6879
        
 
6880
# check trigger-4 success:      1
 
6881
DROP TRIGGER trg_1;
 
6882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6883
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6884
f_charbig = 'just inserted'
 
6885
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6886
DELETE FROM t0_aux
 
6887
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6889
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6890
'just inserted' FROM t0_template
 
6891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6892
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6893
BEGIN
 
6894
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6895
f_charbig = 'updated by trigger'
 
6896
      WHERE f_int1 = new.f_int1;
 
6897
END|
 
6898
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6899
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6900
        
 
6901
# check trigger-5 success:      1
 
6902
DROP TRIGGER trg_1;
 
6903
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6904
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6905
f_charbig = 'just inserted'
 
6906
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6907
DELETE FROM t0_aux
 
6908
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6909
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6910
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6911
'just inserted' FROM t0_template
 
6912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6913
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6914
BEGIN
 
6915
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6916
f_charbig = 'updated by trigger'
 
6917
      WHERE f_int1 = - old.f_int1;
 
6918
END|
 
6919
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6920
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6921
        
 
6922
# check trigger-6 success:      1
 
6923
DROP TRIGGER trg_1;
 
6924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6925
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6926
f_charbig = 'just inserted'
 
6927
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6928
DELETE FROM t0_aux
 
6929
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6932
'just inserted' FROM t0_template
 
6933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6934
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6935
BEGIN
 
6936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6937
f_charbig = 'updated by trigger'
 
6938
      WHERE f_int1 = - old.f_int1;
 
6939
END|
 
6940
DELETE FROM t0_aux
 
6941
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6942
        
 
6943
# check trigger-7 success:      1
 
6944
DROP TRIGGER trg_1;
 
6945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6946
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6947
f_charbig = 'just inserted'
 
6948
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6949
DELETE FROM t0_aux
 
6950
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6953
'just inserted' FROM t0_template
 
6954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6955
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6956
BEGIN
 
6957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6958
f_charbig = 'updated by trigger'
 
6959
      WHERE f_int1 = - old.f_int1;
 
6960
END|
 
6961
DELETE FROM t0_aux
 
6962
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6963
        
 
6964
# check trigger-8 success:      1
 
6965
DROP TRIGGER trg_1;
 
6966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6967
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6968
f_charbig = 'just inserted'
 
6969
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6970
DELETE FROM t0_aux
 
6971
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6972
DELETE FROM t1
 
6973
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6974
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6975
BEGIN
 
6976
SET new.f_int1 = old.f_int1 + @max_row,
 
6977
new.f_int2 = old.f_int2 - @max_row,
 
6978
new.f_charbig = '####updated per update trigger####';
 
6979
END|
 
6980
UPDATE t1
 
6981
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6982
f_charbig = '####updated per update statement itself####';
 
6983
        
 
6984
# check trigger-9 success:      1
 
6985
DROP TRIGGER trg_2;
 
6986
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6987
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6988
f_charbig = CONCAT('===',f_char1,'===');
 
6989
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6990
BEGIN
 
6991
SET new.f_int1 = new.f_int1 + @max_row,
 
6992
new.f_int2 = new.f_int2 - @max_row,
 
6993
new.f_charbig = '####updated per update trigger####';
 
6994
END|
 
6995
UPDATE t1
 
6996
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6997
f_charbig = '####updated per update statement itself####';
 
6998
        
 
6999
# check trigger-10 success:     1
 
7000
DROP TRIGGER trg_2;
 
7001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7003
f_charbig = CONCAT('===',f_char1,'===');
 
7004
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7005
BEGIN
 
7006
SET new.f_int1 = @my_max1 + @counter,
 
7007
new.f_int2 = @my_min2 - @counter,
 
7008
new.f_charbig = '####updated per insert trigger####';
 
7009
SET @counter = @counter + 1;
 
7010
END|
 
7011
SET @counter = 1;
 
7012
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7013
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7014
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7015
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7017
ORDER BY f_int1;
 
7018
DROP TRIGGER trg_3;
 
7019
        
 
7020
# check trigger-11 success:     1
 
7021
DELETE FROM t1
 
7022
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7023
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7024
AND f_charbig = '####updated per insert trigger####';
 
7025
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7026
BEGIN
 
7027
SET new.f_int1 = @my_max1 + @counter,
 
7028
new.f_int2 = @my_min2 - @counter,
 
7029
new.f_charbig = '####updated per insert trigger####';
 
7030
SET @counter = @counter + 1;
 
7031
END|
 
7032
SET @counter = 1;
 
7033
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7034
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7035
SELECT CAST(f_int1 AS CHAR),
 
7036
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7038
ORDER BY f_int1;
 
7039
DROP TRIGGER trg_3;
 
7040
        
 
7041
# check trigger-12 success:     1
 
7042
DELETE FROM t1
 
7043
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7044
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7045
AND f_charbig = '####updated per insert trigger####';
 
7046
ANALYZE  TABLE t1;
 
7047
Table   Op      Msg_type        Msg_text
 
7048
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
7049
CHECK    TABLE t1 EXTENDED;
 
7050
Table   Op      Msg_type        Msg_text
 
7051
test.t1 check   note    The storage engine for the table doesn't support check
 
7052
CHECKSUM TABLE t1 EXTENDED;
 
7053
Table   Checksum
 
7054
test.t1 <some_value>
 
7055
OPTIMIZE TABLE t1;
 
7056
Table   Op      Msg_type        Msg_text
 
7057
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
7058
# check layout success:    1
 
7059
REPAIR   TABLE t1 EXTENDED;
 
7060
Table   Op      Msg_type        Msg_text
 
7061
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7062
# check layout success:    1
 
7063
TRUNCATE t1;
 
7064
        
 
7065
# check TRUNCATE success:       1
 
7066
# check layout success:    1
 
7067
# End usability test (inc/partition_check.inc)
 
7068
DROP TABLE t1;
 
7069
CREATE TABLE t1 (
 
7070
f_int1 INTEGER,
 
7071
f_int2 INTEGER,
 
7072
f_char1 CHAR(20),
 
7073
f_char2 CHAR(20),
 
7074
f_charbig VARCHAR(1000)
 
7075
 
 
7076
)
 
7077
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
7078
(PARTITION part1 VALUES LESS THAN (0)
 
7079
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
7080
PARTITION part2 VALUES LESS THAN (5)
 
7081
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
7082
PARTITION part3 VALUES LESS THAN (10)
 
7083
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
7084
PARTITION part4 VALUES LESS THAN (2147483646)
 
7085
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
7086
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7087
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7088
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7089
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
7090
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7091
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7092
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7093
# Start usability test (inc/partition_check.inc)
 
7094
create_command
 
7095
SHOW CREATE TABLE t1;
 
7096
Table   Create Table
 
7097
t1      CREATE TABLE `t1` (
 
7098
  `f_int1` int(11) DEFAULT NULL,
 
7099
  `f_int2` int(11) DEFAULT NULL,
 
7100
  `f_char1` char(20) DEFAULT NULL,
 
7101
  `f_char2` char(20) DEFAULT NULL,
 
7102
  `f_charbig` varchar(1000) DEFAULT NULL,
 
7103
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
7104
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
7105
 
 
7106
unified filelist
 
7107
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
7108
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
7109
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
7110
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
7111
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
7112
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
7113
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
7114
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
7115
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
7116
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
7117
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
7118
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
7119
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
7120
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
7121
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
7122
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
7123
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
7124
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
7125
 
 
7126
# check prerequisites-1 success:    1
 
7127
# check COUNT(*) success:    1
 
7128
# check MIN/MAX(f_int1) success:    1
 
7129
# check MIN/MAX(f_int2) success:    1
 
7130
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7131
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7132
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7133
WHERE f_int1 IN (2,3);
 
7134
ERROR 23000: Can't write; duplicate key in table 't1'
 
7135
# check prerequisites-3 success:    1
 
7136
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7137
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7138
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7139
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7140
WHERE f_int1 IN (2,3);
 
7141
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7142
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7143
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7144
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7145
WHERE f_int1 IN (2,3);
 
7146
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7147
# check read via f_int1 success: 1
 
7148
# check read via f_int2 success: 1
 
7149
        
 
7150
# check multiple-1 success:     1
 
7151
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7152
        
 
7153
# check multiple-2 success:     1
 
7154
INSERT INTO t1 SELECT * FROM t0_template
 
7155
WHERE MOD(f_int1,3) = 0;
 
7156
        
 
7157
# check multiple-3 success:     1
 
7158
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7159
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7160
AND @max_row_div2 + @max_row_div4;
 
7161
        
 
7162
# check multiple-4 success:     1
 
7163
DELETE FROM t1
 
7164
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7165
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7166
        
 
7167
# check multiple-5 success:     1
 
7168
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7169
WHERE MOD(f_int1,3) = 0
 
7170
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7171
SELECT COUNT(*) INTO @clash_count
 
7172
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7173
WHERE MOD(f_int1,3) = 0
 
7174
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7175
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7176
INSERT INTO t1
 
7177
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7178
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7179
f_charbig = '#SINGLE#';
 
7180
        
 
7181
# check single-1 success:       1
 
7182
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7183
INSERT INTO t1
 
7184
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7185
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7186
f_charbig = '#SINGLE#';
 
7187
        
 
7188
# check single-2 success:       1
 
7189
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7190
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7191
UPDATE t1 SET f_int1 = @cur_value2
 
7192
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7193
        
 
7194
# check single-3 success:       1
 
7195
SET @cur_value1= -1;
 
7196
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7197
UPDATE t1 SET f_int1 = @cur_value1
 
7198
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7199
        
 
7200
# check single-4 success:       1
 
7201
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7202
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7203
        
 
7204
# check single-5 success:       1
 
7205
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7206
        
 
7207
# check single-6 success:       1
 
7208
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7209
ERROR HY000: Table has no partition for value 2147483647
 
7210
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7211
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7212
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7213
f_charbig = '#NULL#';
 
7214
INSERT INTO t1
 
7215
SET f_int1 = NULL , f_int2 = -@max_row,
 
7216
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7217
f_charbig = '#NULL#';
 
7218
# check null success:    1
 
7219
        
 
7220
# check null-1 success:         1
 
7221
UPDATE t1 SET f_int1 = -@max_row
 
7222
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7223
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7224
        
 
7225
# check null-2 success:         1
 
7226
UPDATE t1 SET f_int1 = NULL
 
7227
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7228
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7229
        
 
7230
# check null-3 success:         1
 
7231
DELETE FROM t1
 
7232
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7233
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7234
        
 
7235
# check null-4 success:         1
 
7236
DELETE FROM t1
 
7237
WHERE f_int1 = 0 AND f_int2 = 0
 
7238
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7239
AND f_charbig = '#NULL#';
 
7240
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7241
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7242
   FROM t0_template source_tab
 
7243
WHERE MOD(f_int1,3) = 0
 
7244
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7245
ON DUPLICATE KEY
 
7246
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7247
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7248
f_charbig = 'was updated';
 
7249
        
 
7250
# check unique-1-a success:     1
 
7251
        
 
7252
# check unique-1-b success:     1
 
7253
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7256
f_charbig = CONCAT('===',f_char1,'===')
 
7257
WHERE f_charbig = 'was updated';
 
7258
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7259
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7260
   FROM t0_template source_tab
 
7261
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7262
        
 
7263
# check replace success:        1
 
7264
DELETE FROM t1
 
7265
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7266
DELETE FROM t1
 
7267
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7268
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7269
UPDATE t1 SET f_int2 = f_int1,
 
7270
f_char1 = CAST(f_int1 AS CHAR),
 
7271
f_char2 = CAST(f_int1 AS CHAR),
 
7272
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7273
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7274
SET AUTOCOMMIT= 0;
 
7275
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7276
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7277
FROM t0_template source_tab
 
7278
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7279
        
 
7280
# check transactions-1 success:         1
 
7281
COMMIT WORK;
 
7282
        
 
7283
# check transactions-2 success:         1
 
7284
ROLLBACK WORK;
 
7285
        
 
7286
# check transactions-3 success:         1
 
7287
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7288
COMMIT WORK;
 
7289
ROLLBACK WORK;
 
7290
        
 
7291
# check transactions-4 success:         1
 
7292
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7293
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7294
FROM t0_template source_tab
 
7295
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7296
        
 
7297
# check transactions-5 success:         1
 
7298
ROLLBACK WORK;
 
7299
Warnings:
 
7300
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7301
        
 
7302
# check transactions-6 success:         1
 
7303
# INFO: Storage engine used for t1 seems to be not transactional.
 
7304
COMMIT;
 
7305
        
 
7306
# check transactions-7 success:         1
 
7307
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7308
COMMIT WORK;
 
7309
SET @@session.sql_mode = 'traditional';
 
7310
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7311
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7312
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7313
'', '', 'was inserted' FROM t0_template
 
7314
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7315
ERROR 22012: Division by 0
 
7316
COMMIT;
 
7317
        
 
7318
# check transactions-8 success:         1
 
7319
# INFO: Storage engine used for t1 seems to be unable to revert
 
7320
#       changes made by the failing statement.
 
7321
SET @@session.sql_mode = '';
 
7322
SET AUTOCOMMIT= 1;
 
7323
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7324
COMMIT WORK;
 
7325
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7326
        
 
7327
# check special-1 success:      1
 
7328
UPDATE t1 SET f_charbig = '';
 
7329
        
 
7330
# check special-2 success:      1
 
7331
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7332
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7333
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7335
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7336
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7337
'just inserted' FROM t0_template
 
7338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7339
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7340
BEGIN
 
7341
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7342
f_charbig = 'updated by trigger'
 
7343
      WHERE f_int1 = new.f_int1;
 
7344
END|
 
7345
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7346
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7348
        
 
7349
# check trigger-1 success:      1
 
7350
DROP TRIGGER trg_1;
 
7351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7353
f_charbig = 'just inserted'
 
7354
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7355
DELETE FROM t0_aux
 
7356
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7357
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7358
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7359
'just inserted' FROM t0_template
 
7360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7361
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7362
BEGIN
 
7363
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7364
f_charbig = 'updated by trigger'
 
7365
      WHERE f_int1 = new.f_int1;
 
7366
END|
 
7367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7368
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7370
        
 
7371
# check trigger-2 success:      1
 
7372
DROP TRIGGER trg_1;
 
7373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7375
f_charbig = 'just inserted'
 
7376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7377
DELETE FROM t0_aux
 
7378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7379
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7380
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7381
'just inserted' FROM t0_template
 
7382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7383
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7384
BEGIN
 
7385
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7386
f_charbig = 'updated by trigger'
 
7387
      WHERE f_int1 = new.f_int1;
 
7388
END|
 
7389
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7390
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7391
        
 
7392
# check trigger-3 success:      1
 
7393
DROP TRIGGER trg_1;
 
7394
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7395
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7396
f_charbig = 'just inserted'
 
7397
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7398
DELETE FROM t0_aux
 
7399
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7400
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7401
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7402
'just inserted' FROM t0_template
 
7403
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7404
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7405
BEGIN
 
7406
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7407
f_charbig = 'updated by trigger'
 
7408
      WHERE f_int1 = - old.f_int1;
 
7409
END|
 
7410
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7411
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7412
        
 
7413
# check trigger-4 success:      1
 
7414
DROP TRIGGER trg_1;
 
7415
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7416
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7417
f_charbig = 'just inserted'
 
7418
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7419
DELETE FROM t0_aux
 
7420
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7422
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7423
'just inserted' FROM t0_template
 
7424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7425
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7426
BEGIN
 
7427
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7428
f_charbig = 'updated by trigger'
 
7429
      WHERE f_int1 = new.f_int1;
 
7430
END|
 
7431
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7432
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7433
        
 
7434
# check trigger-5 success:      1
 
7435
DROP TRIGGER trg_1;
 
7436
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7437
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7438
f_charbig = 'just inserted'
 
7439
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7440
DELETE FROM t0_aux
 
7441
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7442
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7443
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7444
'just inserted' FROM t0_template
 
7445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7446
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7447
BEGIN
 
7448
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7449
f_charbig = 'updated by trigger'
 
7450
      WHERE f_int1 = - old.f_int1;
 
7451
END|
 
7452
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7453
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7454
        
 
7455
# check trigger-6 success:      1
 
7456
DROP TRIGGER trg_1;
 
7457
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7458
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7459
f_charbig = 'just inserted'
 
7460
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7461
DELETE FROM t0_aux
 
7462
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7463
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7464
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7465
'just inserted' FROM t0_template
 
7466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7467
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7468
BEGIN
 
7469
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7470
f_charbig = 'updated by trigger'
 
7471
      WHERE f_int1 = - old.f_int1;
 
7472
END|
 
7473
DELETE FROM t0_aux
 
7474
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7475
        
 
7476
# check trigger-7 success:      1
 
7477
DROP TRIGGER trg_1;
 
7478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7480
f_charbig = 'just inserted'
 
7481
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7482
DELETE FROM t0_aux
 
7483
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7486
'just inserted' FROM t0_template
 
7487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7488
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7489
BEGIN
 
7490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7491
f_charbig = 'updated by trigger'
 
7492
      WHERE f_int1 = - old.f_int1;
 
7493
END|
 
7494
DELETE FROM t0_aux
 
7495
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7496
        
 
7497
# check trigger-8 success:      1
 
7498
DROP TRIGGER trg_1;
 
7499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7501
f_charbig = 'just inserted'
 
7502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7503
DELETE FROM t0_aux
 
7504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7505
DELETE FROM t1
 
7506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7507
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7508
BEGIN
 
7509
SET new.f_int1 = old.f_int1 + @max_row,
 
7510
new.f_int2 = old.f_int2 - @max_row,
 
7511
new.f_charbig = '####updated per update trigger####';
 
7512
END|
 
7513
UPDATE t1
 
7514
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7515
f_charbig = '####updated per update statement itself####';
 
7516
        
 
7517
# check trigger-9 success:      1
 
7518
DROP TRIGGER trg_2;
 
7519
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7520
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7521
f_charbig = CONCAT('===',f_char1,'===');
 
7522
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7523
BEGIN
 
7524
SET new.f_int1 = new.f_int1 + @max_row,
 
7525
new.f_int2 = new.f_int2 - @max_row,
 
7526
new.f_charbig = '####updated per update trigger####';
 
7527
END|
 
7528
UPDATE t1
 
7529
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7530
f_charbig = '####updated per update statement itself####';
 
7531
        
 
7532
# check trigger-10 success:     1
 
7533
DROP TRIGGER trg_2;
 
7534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7536
f_charbig = CONCAT('===',f_char1,'===');
 
7537
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7538
BEGIN
 
7539
SET new.f_int1 = @my_max1 + @counter,
 
7540
new.f_int2 = @my_min2 - @counter,
 
7541
new.f_charbig = '####updated per insert trigger####';
 
7542
SET @counter = @counter + 1;
 
7543
END|
 
7544
SET @counter = 1;
 
7545
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7546
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7547
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7548
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7550
ORDER BY f_int1;
 
7551
DROP TRIGGER trg_3;
 
7552
        
 
7553
# check trigger-11 success:     1
 
7554
DELETE FROM t1
 
7555
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7556
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7557
AND f_charbig = '####updated per insert trigger####';
 
7558
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7559
BEGIN
 
7560
SET new.f_int1 = @my_max1 + @counter,
 
7561
new.f_int2 = @my_min2 - @counter,
 
7562
new.f_charbig = '####updated per insert trigger####';
 
7563
SET @counter = @counter + 1;
 
7564
END|
 
7565
SET @counter = 1;
 
7566
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7567
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7568
SELECT CAST(f_int1 AS CHAR),
 
7569
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7571
ORDER BY f_int1;
 
7572
DROP TRIGGER trg_3;
 
7573
        
 
7574
# check trigger-12 success:     1
 
7575
DELETE FROM t1
 
7576
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7577
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7578
AND f_charbig = '####updated per insert trigger####';
 
7579
ANALYZE  TABLE t1;
 
7580
Table   Op      Msg_type        Msg_text
 
7581
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
7582
CHECK    TABLE t1 EXTENDED;
 
7583
Table   Op      Msg_type        Msg_text
 
7584
test.t1 check   note    The storage engine for the table doesn't support check
 
7585
CHECKSUM TABLE t1 EXTENDED;
 
7586
Table   Checksum
 
7587
test.t1 <some_value>
 
7588
OPTIMIZE TABLE t1;
 
7589
Table   Op      Msg_type        Msg_text
 
7590
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
7591
# check layout success:    1
 
7592
REPAIR   TABLE t1 EXTENDED;
 
7593
Table   Op      Msg_type        Msg_text
 
7594
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7595
# check layout success:    1
 
7596
TRUNCATE t1;
 
7597
        
 
7598
# check TRUNCATE success:       1
 
7599
# check layout success:    1
 
7600
# End usability test (inc/partition_check.inc)
 
7601
DROP TABLE t1;
 
7602
CREATE TABLE t1 (
 
7603
f_int1 INTEGER,
 
7604
f_int2 INTEGER,
 
7605
f_char1 CHAR(20),
 
7606
f_char2 CHAR(20),
 
7607
f_charbig VARCHAR(1000)
 
7608
 
 
7609
)
 
7610
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
7611
(PARTITION part1 VALUES IN (0)
 
7612
(SUBPARTITION sp11, SUBPARTITION sp12),
 
7613
PARTITION part2 VALUES IN (1)
 
7614
(SUBPARTITION sp21, SUBPARTITION sp22),
 
7615
PARTITION part3 VALUES IN (2)
 
7616
(SUBPARTITION sp31, SUBPARTITION sp32),
 
7617
PARTITION part4 VALUES IN (NULL)
 
7618
(SUBPARTITION sp41, SUBPARTITION sp42));
 
7619
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7620
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7621
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7622
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
7623
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7624
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7625
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7626
# Start usability test (inc/partition_check.inc)
 
7627
create_command
 
7628
SHOW CREATE TABLE t1;
 
7629
Table   Create Table
 
7630
t1      CREATE TABLE `t1` (
 
7631
  `f_int1` int(11) DEFAULT NULL,
 
7632
  `f_int2` int(11) DEFAULT NULL,
 
7633
  `f_char1` char(20) DEFAULT NULL,
 
7634
  `f_char2` char(20) DEFAULT NULL,
 
7635
  `f_charbig` varchar(1000) DEFAULT NULL,
 
7636
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
7637
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
7638
 
 
7639
unified filelist
 
7640
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
7641
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
7642
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
7643
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
7644
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
7645
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
7646
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
7647
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
7648
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
7649
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
7650
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
7651
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
7652
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
7653
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
7654
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
7655
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
7656
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
7657
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
7658
 
 
7659
# check prerequisites-1 success:    1
 
7660
# check COUNT(*) success:    1
 
7661
# check MIN/MAX(f_int1) success:    1
 
7662
# check MIN/MAX(f_int2) success:    1
 
7663
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7664
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7665
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7666
WHERE f_int1 IN (2,3);
 
7667
ERROR 23000: Can't write; duplicate key in table 't1'
 
7668
# check prerequisites-3 success:    1
 
7669
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7670
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7671
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7672
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7673
WHERE f_int1 IN (2,3);
 
7674
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7675
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7676
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7677
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7678
WHERE f_int1 IN (2,3);
 
7679
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7680
# check read via f_int1 success: 1
 
7681
# check read via f_int2 success: 1
 
7682
        
 
7683
# check multiple-1 success:     1
 
7684
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7685
        
 
7686
# check multiple-2 success:     1
 
7687
INSERT INTO t1 SELECT * FROM t0_template
 
7688
WHERE MOD(f_int1,3) = 0;
 
7689
        
 
7690
# check multiple-3 success:     1
 
7691
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7692
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7693
AND @max_row_div2 + @max_row_div4;
 
7694
        
 
7695
# check multiple-4 success:     1
 
7696
DELETE FROM t1
 
7697
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7698
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7699
        
 
7700
# check multiple-5 success:     1
 
7701
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7702
WHERE MOD(f_int1,3) = 0
 
7703
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7704
SELECT COUNT(*) INTO @clash_count
 
7705
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7706
WHERE MOD(f_int1,3) = 0
 
7707
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7708
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7709
INSERT INTO t1
 
7710
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7711
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7712
f_charbig = '#SINGLE#';
 
7713
        
 
7714
# check single-1 success:       1
 
7715
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7716
INSERT INTO t1
 
7717
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7718
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7719
f_charbig = '#SINGLE#';
 
7720
        
 
7721
# check single-2 success:       1
 
7722
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7723
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7724
UPDATE t1 SET f_int1 = @cur_value2
 
7725
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7726
        
 
7727
# check single-3 success:       1
 
7728
SET @cur_value1= -1;
 
7729
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7730
UPDATE t1 SET f_int1 = @cur_value1
 
7731
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7732
        
 
7733
# check single-4 success:       1
 
7734
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7735
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7736
        
 
7737
# check single-5 success:       1
 
7738
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7739
        
 
7740
# check single-6 success:       1
 
7741
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7742
        
 
7743
# check single-7 success:       1
 
7744
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7745
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7746
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7747
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7748
f_charbig = '#NULL#';
 
7749
INSERT INTO t1
 
7750
SET f_int1 = NULL , f_int2 = -@max_row,
 
7751
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7752
f_charbig = '#NULL#';
 
7753
# check null success:    1
 
7754
        
 
7755
# check null-1 success:         1
 
7756
UPDATE t1 SET f_int1 = -@max_row
 
7757
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7758
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7759
        
 
7760
# check null-2 success:         1
 
7761
UPDATE t1 SET f_int1 = NULL
 
7762
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7763
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7764
        
 
7765
# check null-3 success:         1
 
7766
DELETE FROM t1
 
7767
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7768
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7769
        
 
7770
# check null-4 success:         1
 
7771
DELETE FROM t1
 
7772
WHERE f_int1 = 0 AND f_int2 = 0
 
7773
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7774
AND f_charbig = '#NULL#';
 
7775
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7776
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7777
   FROM t0_template source_tab
 
7778
WHERE MOD(f_int1,3) = 0
 
7779
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7780
ON DUPLICATE KEY
 
7781
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7782
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7783
f_charbig = 'was updated';
 
7784
        
 
7785
# check unique-1-a success:     1
 
7786
        
 
7787
# check unique-1-b success:     1
 
7788
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7791
f_charbig = CONCAT('===',f_char1,'===')
 
7792
WHERE f_charbig = 'was updated';
 
7793
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7794
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7795
   FROM t0_template source_tab
 
7796
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7797
        
 
7798
# check replace success:        1
 
7799
DELETE FROM t1
 
7800
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7801
DELETE FROM t1
 
7802
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7803
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7804
UPDATE t1 SET f_int2 = f_int1,
 
7805
f_char1 = CAST(f_int1 AS CHAR),
 
7806
f_char2 = CAST(f_int1 AS CHAR),
 
7807
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7808
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7809
SET AUTOCOMMIT= 0;
 
7810
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7811
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7812
FROM t0_template source_tab
 
7813
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7814
        
 
7815
# check transactions-1 success:         1
 
7816
COMMIT WORK;
 
7817
        
 
7818
# check transactions-2 success:         1
 
7819
ROLLBACK WORK;
 
7820
        
 
7821
# check transactions-3 success:         1
 
7822
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7823
COMMIT WORK;
 
7824
ROLLBACK WORK;
 
7825
        
 
7826
# check transactions-4 success:         1
 
7827
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7828
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7829
FROM t0_template source_tab
 
7830
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7831
        
 
7832
# check transactions-5 success:         1
 
7833
ROLLBACK WORK;
 
7834
Warnings:
 
7835
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7836
        
 
7837
# check transactions-6 success:         1
 
7838
# INFO: Storage engine used for t1 seems to be not transactional.
 
7839
COMMIT;
 
7840
        
 
7841
# check transactions-7 success:         1
 
7842
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7843
COMMIT WORK;
 
7844
SET @@session.sql_mode = 'traditional';
 
7845
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7846
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7847
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7848
'', '', 'was inserted' FROM t0_template
 
7849
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7850
ERROR 22012: Division by 0
 
7851
COMMIT;
 
7852
        
 
7853
# check transactions-8 success:         1
 
7854
# INFO: Storage engine used for t1 seems to be unable to revert
 
7855
#       changes made by the failing statement.
 
7856
SET @@session.sql_mode = '';
 
7857
SET AUTOCOMMIT= 1;
 
7858
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7859
COMMIT WORK;
 
7860
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7861
        
 
7862
# check special-1 success:      1
 
7863
UPDATE t1 SET f_charbig = '';
 
7864
        
 
7865
# check special-2 success:      1
 
7866
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7867
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7868
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7870
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7871
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7872
'just inserted' FROM t0_template
 
7873
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7874
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7875
BEGIN
 
7876
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7877
f_charbig = 'updated by trigger'
 
7878
      WHERE f_int1 = new.f_int1;
 
7879
END|
 
7880
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7881
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7883
        
 
7884
# check trigger-1 success:      1
 
7885
DROP TRIGGER trg_1;
 
7886
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7887
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7888
f_charbig = 'just inserted'
 
7889
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7890
DELETE FROM t0_aux
 
7891
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7892
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7893
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7894
'just inserted' FROM t0_template
 
7895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7896
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7897
BEGIN
 
7898
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7899
f_charbig = 'updated by trigger'
 
7900
      WHERE f_int1 = new.f_int1;
 
7901
END|
 
7902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7903
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7904
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7905
        
 
7906
# check trigger-2 success:      1
 
7907
DROP TRIGGER trg_1;
 
7908
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7909
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7910
f_charbig = 'just inserted'
 
7911
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7912
DELETE FROM t0_aux
 
7913
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7914
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7915
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7916
'just inserted' FROM t0_template
 
7917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7918
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7919
BEGIN
 
7920
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7921
f_charbig = 'updated by trigger'
 
7922
      WHERE f_int1 = new.f_int1;
 
7923
END|
 
7924
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7925
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7926
        
 
7927
# check trigger-3 success:      1
 
7928
DROP TRIGGER trg_1;
 
7929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7931
f_charbig = 'just inserted'
 
7932
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7933
DELETE FROM t0_aux
 
7934
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7935
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7936
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7937
'just inserted' FROM t0_template
 
7938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7939
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7940
BEGIN
 
7941
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7942
f_charbig = 'updated by trigger'
 
7943
      WHERE f_int1 = - old.f_int1;
 
7944
END|
 
7945
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7946
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7947
        
 
7948
# check trigger-4 success:      1
 
7949
DROP TRIGGER trg_1;
 
7950
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7951
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7952
f_charbig = 'just inserted'
 
7953
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7954
DELETE FROM t0_aux
 
7955
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7956
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7957
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7958
'just inserted' FROM t0_template
 
7959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7960
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7961
BEGIN
 
7962
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7963
f_charbig = 'updated by trigger'
 
7964
      WHERE f_int1 = new.f_int1;
 
7965
END|
 
7966
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7967
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7968
        
 
7969
# check trigger-5 success:      1
 
7970
DROP TRIGGER trg_1;
 
7971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7973
f_charbig = 'just inserted'
 
7974
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7975
DELETE FROM t0_aux
 
7976
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7977
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7978
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7979
'just inserted' FROM t0_template
 
7980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7981
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7982
BEGIN
 
7983
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7984
f_charbig = 'updated by trigger'
 
7985
      WHERE f_int1 = - old.f_int1;
 
7986
END|
 
7987
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7988
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7989
        
 
7990
# check trigger-6 success:      1
 
7991
DROP TRIGGER trg_1;
 
7992
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7993
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7994
f_charbig = 'just inserted'
 
7995
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7996
DELETE FROM t0_aux
 
7997
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7998
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7999
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8000
'just inserted' FROM t0_template
 
8001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8002
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8003
BEGIN
 
8004
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8005
f_charbig = 'updated by trigger'
 
8006
      WHERE f_int1 = - old.f_int1;
 
8007
END|
 
8008
DELETE FROM t0_aux
 
8009
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8010
        
 
8011
# check trigger-7 success:      1
 
8012
DROP TRIGGER trg_1;
 
8013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8015
f_charbig = 'just inserted'
 
8016
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8017
DELETE FROM t0_aux
 
8018
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8021
'just inserted' FROM t0_template
 
8022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8023
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8024
BEGIN
 
8025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8026
f_charbig = 'updated by trigger'
 
8027
      WHERE f_int1 = - old.f_int1;
 
8028
END|
 
8029
DELETE FROM t0_aux
 
8030
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8031
        
 
8032
# check trigger-8 success:      1
 
8033
DROP TRIGGER trg_1;
 
8034
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8035
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8036
f_charbig = 'just inserted'
 
8037
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8038
DELETE FROM t0_aux
 
8039
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8040
DELETE FROM t1
 
8041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8042
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8043
BEGIN
 
8044
SET new.f_int1 = old.f_int1 + @max_row,
 
8045
new.f_int2 = old.f_int2 - @max_row,
 
8046
new.f_charbig = '####updated per update trigger####';
 
8047
END|
 
8048
UPDATE t1
 
8049
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8050
f_charbig = '####updated per update statement itself####';
 
8051
        
 
8052
# check trigger-9 success:      1
 
8053
DROP TRIGGER trg_2;
 
8054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8056
f_charbig = CONCAT('===',f_char1,'===');
 
8057
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8058
BEGIN
 
8059
SET new.f_int1 = new.f_int1 + @max_row,
 
8060
new.f_int2 = new.f_int2 - @max_row,
 
8061
new.f_charbig = '####updated per update trigger####';
 
8062
END|
 
8063
UPDATE t1
 
8064
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8065
f_charbig = '####updated per update statement itself####';
 
8066
        
 
8067
# check trigger-10 success:     1
 
8068
DROP TRIGGER trg_2;
 
8069
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8070
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8071
f_charbig = CONCAT('===',f_char1,'===');
 
8072
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8073
BEGIN
 
8074
SET new.f_int1 = @my_max1 + @counter,
 
8075
new.f_int2 = @my_min2 - @counter,
 
8076
new.f_charbig = '####updated per insert trigger####';
 
8077
SET @counter = @counter + 1;
 
8078
END|
 
8079
SET @counter = 1;
 
8080
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8081
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8082
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8083
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8085
ORDER BY f_int1;
 
8086
DROP TRIGGER trg_3;
 
8087
        
 
8088
# check trigger-11 success:     1
 
8089
DELETE FROM t1
 
8090
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8091
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8092
AND f_charbig = '####updated per insert trigger####';
 
8093
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8094
BEGIN
 
8095
SET new.f_int1 = @my_max1 + @counter,
 
8096
new.f_int2 = @my_min2 - @counter,
 
8097
new.f_charbig = '####updated per insert trigger####';
 
8098
SET @counter = @counter + 1;
 
8099
END|
 
8100
SET @counter = 1;
 
8101
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8102
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8103
SELECT CAST(f_int1 AS CHAR),
 
8104
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8106
ORDER BY f_int1;
 
8107
DROP TRIGGER trg_3;
 
8108
        
 
8109
# check trigger-12 success:     1
 
8110
DELETE FROM t1
 
8111
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8112
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8113
AND f_charbig = '####updated per insert trigger####';
 
8114
ANALYZE  TABLE t1;
 
8115
Table   Op      Msg_type        Msg_text
 
8116
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
8117
CHECK    TABLE t1 EXTENDED;
 
8118
Table   Op      Msg_type        Msg_text
 
8119
test.t1 check   note    The storage engine for the table doesn't support check
 
8120
CHECKSUM TABLE t1 EXTENDED;
 
8121
Table   Checksum
 
8122
test.t1 <some_value>
 
8123
OPTIMIZE TABLE t1;
 
8124
Table   Op      Msg_type        Msg_text
 
8125
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
8126
# check layout success:    1
 
8127
REPAIR   TABLE t1 EXTENDED;
 
8128
Table   Op      Msg_type        Msg_text
 
8129
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8130
# check layout success:    1
 
8131
TRUNCATE t1;
 
8132
        
 
8133
# check TRUNCATE success:       1
 
8134
# check layout success:    1
 
8135
# End usability test (inc/partition_check.inc)
 
8136
DROP TABLE t1;
 
8137
CREATE TABLE t1 (
 
8138
f_int1 INTEGER,
 
8139
f_int2 INTEGER,
 
8140
f_char1 CHAR(20),
 
8141
f_char2 CHAR(20),
 
8142
f_charbig VARCHAR(1000)
 
8143
 
 
8144
)
 
8145
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
8146
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
8147
(PARTITION part1 VALUES IN (0),
 
8148
 PARTITION part2 VALUES IN (1),
 
8149
 PARTITION part3 VALUES IN (NULL));
 
8150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8151
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8152
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8153
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
8154
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8155
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8156
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8157
# Start usability test (inc/partition_check.inc)
 
8158
create_command
 
8159
SHOW CREATE TABLE t1;
 
8160
Table   Create Table
 
8161
t1      CREATE TABLE `t1` (
 
8162
  `f_int1` int(11) DEFAULT NULL,
 
8163
  `f_int2` int(11) DEFAULT NULL,
 
8164
  `f_char1` char(20) DEFAULT NULL,
 
8165
  `f_char2` char(20) DEFAULT NULL,
 
8166
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8167
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
8168
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
8169
 
 
8170
unified filelist
 
8171
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
8172
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
8173
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
8174
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
8175
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
8176
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
8177
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
8178
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
8179
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
8180
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
8181
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
8182
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
8183
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
8184
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
8185
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
8186
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
8187
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
8188
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
8189
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
8190
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
8191
 
 
8192
# check prerequisites-1 success:    1
 
8193
# check COUNT(*) success:    1
 
8194
# check MIN/MAX(f_int1) success:    1
 
8195
# check MIN/MAX(f_int2) success:    1
 
8196
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8197
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8198
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8199
WHERE f_int1 IN (2,3);
 
8200
ERROR 23000: Can't write; duplicate key in table 't1'
 
8201
# check prerequisites-3 success:    1
 
8202
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8203
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8204
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8205
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8206
WHERE f_int1 IN (2,3);
 
8207
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8209
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8210
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8211
WHERE f_int1 IN (2,3);
 
8212
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8213
# check read via f_int1 success: 1
 
8214
# check read via f_int2 success: 1
 
8215
        
 
8216
# check multiple-1 success:     1
 
8217
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8218
        
 
8219
# check multiple-2 success:     1
 
8220
INSERT INTO t1 SELECT * FROM t0_template
 
8221
WHERE MOD(f_int1,3) = 0;
 
8222
        
 
8223
# check multiple-3 success:     1
 
8224
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8225
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8226
AND @max_row_div2 + @max_row_div4;
 
8227
        
 
8228
# check multiple-4 success:     1
 
8229
DELETE FROM t1
 
8230
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8231
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8232
        
 
8233
# check multiple-5 success:     1
 
8234
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8235
WHERE MOD(f_int1,3) = 0
 
8236
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8237
SELECT COUNT(*) INTO @clash_count
 
8238
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8239
WHERE MOD(f_int1,3) = 0
 
8240
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8241
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8242
INSERT INTO t1
 
8243
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8244
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8245
f_charbig = '#SINGLE#';
 
8246
        
 
8247
# check single-1 success:       1
 
8248
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8249
INSERT INTO t1
 
8250
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8251
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8252
f_charbig = '#SINGLE#';
 
8253
        
 
8254
# check single-2 success:       1
 
8255
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8256
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8257
UPDATE t1 SET f_int1 = @cur_value2
 
8258
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8259
        
 
8260
# check single-3 success:       1
 
8261
SET @cur_value1= -1;
 
8262
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8263
UPDATE t1 SET f_int1 = @cur_value1
 
8264
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8265
        
 
8266
# check single-4 success:       1
 
8267
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8268
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8269
        
 
8270
# check single-5 success:       1
 
8271
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8272
        
 
8273
# check single-6 success:       1
 
8274
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8275
        
 
8276
# check single-7 success:       1
 
8277
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8278
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8279
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8280
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8281
f_charbig = '#NULL#';
 
8282
INSERT INTO t1
 
8283
SET f_int1 = NULL , f_int2 = -@max_row,
 
8284
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8285
f_charbig = '#NULL#';
 
8286
# check null success:    1
 
8287
        
 
8288
# check null-1 success:         1
 
8289
UPDATE t1 SET f_int1 = -@max_row
 
8290
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8291
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8292
        
 
8293
# check null-2 success:         1
 
8294
UPDATE t1 SET f_int1 = NULL
 
8295
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8296
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8297
        
 
8298
# check null-3 success:         1
 
8299
DELETE FROM t1
 
8300
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8301
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8302
        
 
8303
# check null-4 success:         1
 
8304
DELETE FROM t1
 
8305
WHERE f_int1 = 0 AND f_int2 = 0
 
8306
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8307
AND f_charbig = '#NULL#';
 
8308
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8309
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8310
   FROM t0_template source_tab
 
8311
WHERE MOD(f_int1,3) = 0
 
8312
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8313
ON DUPLICATE KEY
 
8314
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8315
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8316
f_charbig = 'was updated';
 
8317
        
 
8318
# check unique-1-a success:     1
 
8319
        
 
8320
# check unique-1-b success:     1
 
8321
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8324
f_charbig = CONCAT('===',f_char1,'===')
 
8325
WHERE f_charbig = 'was updated';
 
8326
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8327
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8328
   FROM t0_template source_tab
 
8329
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8330
        
 
8331
# check replace success:        1
 
8332
DELETE FROM t1
 
8333
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8334
DELETE FROM t1
 
8335
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8336
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8337
UPDATE t1 SET f_int2 = f_int1,
 
8338
f_char1 = CAST(f_int1 AS CHAR),
 
8339
f_char2 = CAST(f_int1 AS CHAR),
 
8340
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8341
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8342
SET AUTOCOMMIT= 0;
 
8343
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8344
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8345
FROM t0_template source_tab
 
8346
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8347
        
 
8348
# check transactions-1 success:         1
 
8349
COMMIT WORK;
 
8350
        
 
8351
# check transactions-2 success:         1
 
8352
ROLLBACK WORK;
 
8353
        
 
8354
# check transactions-3 success:         1
 
8355
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8356
COMMIT WORK;
 
8357
ROLLBACK WORK;
 
8358
        
 
8359
# check transactions-4 success:         1
 
8360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8361
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8362
FROM t0_template source_tab
 
8363
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8364
        
 
8365
# check transactions-5 success:         1
 
8366
ROLLBACK WORK;
 
8367
Warnings:
 
8368
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8369
        
 
8370
# check transactions-6 success:         1
 
8371
# INFO: Storage engine used for t1 seems to be not transactional.
 
8372
COMMIT;
 
8373
        
 
8374
# check transactions-7 success:         1
 
8375
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8376
COMMIT WORK;
 
8377
SET @@session.sql_mode = 'traditional';
 
8378
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8379
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8380
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8381
'', '', 'was inserted' FROM t0_template
 
8382
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8383
ERROR 22012: Division by 0
 
8384
COMMIT;
 
8385
        
 
8386
# check transactions-8 success:         1
 
8387
# INFO: Storage engine used for t1 seems to be unable to revert
 
8388
#       changes made by the failing statement.
 
8389
SET @@session.sql_mode = '';
 
8390
SET AUTOCOMMIT= 1;
 
8391
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8392
COMMIT WORK;
 
8393
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8394
        
 
8395
# check special-1 success:      1
 
8396
UPDATE t1 SET f_charbig = '';
 
8397
        
 
8398
# check special-2 success:      1
 
8399
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8400
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8401
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8403
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8404
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8405
'just inserted' FROM t0_template
 
8406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8407
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8408
BEGIN
 
8409
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8410
f_charbig = 'updated by trigger'
 
8411
      WHERE f_int1 = new.f_int1;
 
8412
END|
 
8413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8414
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8416
        
 
8417
# check trigger-1 success:      1
 
8418
DROP TRIGGER trg_1;
 
8419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8421
f_charbig = 'just inserted'
 
8422
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8423
DELETE FROM t0_aux
 
8424
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8425
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8426
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8427
'just inserted' FROM t0_template
 
8428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8429
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8430
BEGIN
 
8431
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8432
f_charbig = 'updated by trigger'
 
8433
      WHERE f_int1 = new.f_int1;
 
8434
END|
 
8435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8436
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8438
        
 
8439
# check trigger-2 success:      1
 
8440
DROP TRIGGER trg_1;
 
8441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8443
f_charbig = 'just inserted'
 
8444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8445
DELETE FROM t0_aux
 
8446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8449
'just inserted' FROM t0_template
 
8450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8451
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8452
BEGIN
 
8453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8454
f_charbig = 'updated by trigger'
 
8455
      WHERE f_int1 = new.f_int1;
 
8456
END|
 
8457
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8459
        
 
8460
# check trigger-3 success:      1
 
8461
DROP TRIGGER trg_1;
 
8462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8464
f_charbig = 'just inserted'
 
8465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8466
DELETE FROM t0_aux
 
8467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8470
'just inserted' FROM t0_template
 
8471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8472
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8473
BEGIN
 
8474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8475
f_charbig = 'updated by trigger'
 
8476
      WHERE f_int1 = - old.f_int1;
 
8477
END|
 
8478
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8480
        
 
8481
# check trigger-4 success:      1
 
8482
DROP TRIGGER trg_1;
 
8483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8485
f_charbig = 'just inserted'
 
8486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8487
DELETE FROM t0_aux
 
8488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8491
'just inserted' FROM t0_template
 
8492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8493
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8494
BEGIN
 
8495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8496
f_charbig = 'updated by trigger'
 
8497
      WHERE f_int1 = new.f_int1;
 
8498
END|
 
8499
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8500
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8501
        
 
8502
# check trigger-5 success:      1
 
8503
DROP TRIGGER trg_1;
 
8504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8506
f_charbig = 'just inserted'
 
8507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8508
DELETE FROM t0_aux
 
8509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8512
'just inserted' FROM t0_template
 
8513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8514
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8515
BEGIN
 
8516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8517
f_charbig = 'updated by trigger'
 
8518
      WHERE f_int1 = - old.f_int1;
 
8519
END|
 
8520
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8521
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8522
        
 
8523
# check trigger-6 success:      1
 
8524
DROP TRIGGER trg_1;
 
8525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8527
f_charbig = 'just inserted'
 
8528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8529
DELETE FROM t0_aux
 
8530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8533
'just inserted' FROM t0_template
 
8534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8535
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8536
BEGIN
 
8537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8538
f_charbig = 'updated by trigger'
 
8539
      WHERE f_int1 = - old.f_int1;
 
8540
END|
 
8541
DELETE FROM t0_aux
 
8542
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8543
        
 
8544
# check trigger-7 success:      1
 
8545
DROP TRIGGER trg_1;
 
8546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8548
f_charbig = 'just inserted'
 
8549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8550
DELETE FROM t0_aux
 
8551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8554
'just inserted' FROM t0_template
 
8555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8556
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8557
BEGIN
 
8558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8559
f_charbig = 'updated by trigger'
 
8560
      WHERE f_int1 = - old.f_int1;
 
8561
END|
 
8562
DELETE FROM t0_aux
 
8563
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8564
        
 
8565
# check trigger-8 success:      1
 
8566
DROP TRIGGER trg_1;
 
8567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8569
f_charbig = 'just inserted'
 
8570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8571
DELETE FROM t0_aux
 
8572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8573
DELETE FROM t1
 
8574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8575
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8576
BEGIN
 
8577
SET new.f_int1 = old.f_int1 + @max_row,
 
8578
new.f_int2 = old.f_int2 - @max_row,
 
8579
new.f_charbig = '####updated per update trigger####';
 
8580
END|
 
8581
UPDATE t1
 
8582
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8583
f_charbig = '####updated per update statement itself####';
 
8584
        
 
8585
# check trigger-9 success:      1
 
8586
DROP TRIGGER trg_2;
 
8587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8589
f_charbig = CONCAT('===',f_char1,'===');
 
8590
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8591
BEGIN
 
8592
SET new.f_int1 = new.f_int1 + @max_row,
 
8593
new.f_int2 = new.f_int2 - @max_row,
 
8594
new.f_charbig = '####updated per update trigger####';
 
8595
END|
 
8596
UPDATE t1
 
8597
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8598
f_charbig = '####updated per update statement itself####';
 
8599
        
 
8600
# check trigger-10 success:     1
 
8601
DROP TRIGGER trg_2;
 
8602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8604
f_charbig = CONCAT('===',f_char1,'===');
 
8605
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8606
BEGIN
 
8607
SET new.f_int1 = @my_max1 + @counter,
 
8608
new.f_int2 = @my_min2 - @counter,
 
8609
new.f_charbig = '####updated per insert trigger####';
 
8610
SET @counter = @counter + 1;
 
8611
END|
 
8612
SET @counter = 1;
 
8613
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8615
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8616
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8618
ORDER BY f_int1;
 
8619
DROP TRIGGER trg_3;
 
8620
        
 
8621
# check trigger-11 success:     1
 
8622
DELETE FROM t1
 
8623
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8624
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8625
AND f_charbig = '####updated per insert trigger####';
 
8626
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8627
BEGIN
 
8628
SET new.f_int1 = @my_max1 + @counter,
 
8629
new.f_int2 = @my_min2 - @counter,
 
8630
new.f_charbig = '####updated per insert trigger####';
 
8631
SET @counter = @counter + 1;
 
8632
END|
 
8633
SET @counter = 1;
 
8634
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8635
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8636
SELECT CAST(f_int1 AS CHAR),
 
8637
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8639
ORDER BY f_int1;
 
8640
DROP TRIGGER trg_3;
 
8641
        
 
8642
# check trigger-12 success:     1
 
8643
DELETE FROM t1
 
8644
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8645
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8646
AND f_charbig = '####updated per insert trigger####';
 
8647
ANALYZE  TABLE t1;
 
8648
Table   Op      Msg_type        Msg_text
 
8649
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
8650
CHECK    TABLE t1 EXTENDED;
 
8651
Table   Op      Msg_type        Msg_text
 
8652
test.t1 check   note    The storage engine for the table doesn't support check
 
8653
CHECKSUM TABLE t1 EXTENDED;
 
8654
Table   Checksum
 
8655
test.t1 <some_value>
 
8656
OPTIMIZE TABLE t1;
 
8657
Table   Op      Msg_type        Msg_text
 
8658
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
8659
# check layout success:    1
 
8660
REPAIR   TABLE t1 EXTENDED;
 
8661
Table   Op      Msg_type        Msg_text
 
8662
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8663
# check layout success:    1
 
8664
TRUNCATE t1;
 
8665
        
 
8666
# check TRUNCATE success:       1
 
8667
# check layout success:    1
 
8668
# End usability test (inc/partition_check.inc)
 
8669
DROP TABLE t1;
 
8670
#------------------------------------------------------------------------
 
8671
#  1.2   ADD PRIMARY KEY or UNIQUE INDEX to table with two columns
 
8672
#        (f_int1 and f_int2) within the partitioning function
 
8673
#------------------------------------------------------------------------
 
8674
#  1.2.2 UNIQUE INDEX consisting of two columns
 
8675
DROP TABLE IF EXISTS t1;
 
8676
CREATE TABLE t1 (
 
8677
f_int1 INTEGER,
 
8678
f_int2 INTEGER,
 
8679
f_char1 CHAR(20),
 
8680
f_char2 CHAR(20),
 
8681
f_charbig VARCHAR(1000)
 
8682
 
 
8683
)
 
8684
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
8685
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8686
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8687
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8688
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
8689
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8690
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8691
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8692
# Start usability test (inc/partition_check.inc)
 
8693
create_command
 
8694
SHOW CREATE TABLE t1;
 
8695
Table   Create Table
 
8696
t1      CREATE TABLE `t1` (
 
8697
  `f_int1` int(11) DEFAULT NULL,
 
8698
  `f_int2` int(11) DEFAULT NULL,
 
8699
  `f_char1` char(20) DEFAULT NULL,
 
8700
  `f_char2` char(20) DEFAULT NULL,
 
8701
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8702
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
8703
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
8704
 
 
8705
unified filelist
 
8706
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
8707
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
8708
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
8709
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
8710
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
8711
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
8712
 
 
8713
# check prerequisites-1 success:    1
 
8714
# check COUNT(*) success:    1
 
8715
# check MIN/MAX(f_int1) success:    1
 
8716
# check MIN/MAX(f_int2) success:    1
 
8717
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8718
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8719
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8720
WHERE f_int1 IN (2,3);
 
8721
ERROR 23000: Can't write; duplicate key in table 't1'
 
8722
# check prerequisites-3 success:    1
 
8723
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8724
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8725
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8726
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8727
WHERE f_int1 IN (2,3);
 
8728
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8729
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8730
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8731
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8732
WHERE f_int1 IN (2,3);
 
8733
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8734
# check read via f_int1 success: 1
 
8735
# check read via f_int2 success: 1
 
8736
        
 
8737
# check multiple-1 success:     1
 
8738
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8739
        
 
8740
# check multiple-2 success:     1
 
8741
INSERT INTO t1 SELECT * FROM t0_template
 
8742
WHERE MOD(f_int1,3) = 0;
 
8743
        
 
8744
# check multiple-3 success:     1
 
8745
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8746
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8747
AND @max_row_div2 + @max_row_div4;
 
8748
        
 
8749
# check multiple-4 success:     1
 
8750
DELETE FROM t1
 
8751
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8752
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8753
        
 
8754
# check multiple-5 success:     1
 
8755
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8756
WHERE MOD(f_int1,3) = 0
 
8757
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8758
SELECT COUNT(*) INTO @clash_count
 
8759
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8760
WHERE MOD(f_int1,3) = 0
 
8761
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8762
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8763
INSERT INTO t1
 
8764
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8765
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8766
f_charbig = '#SINGLE#';
 
8767
        
 
8768
# check single-1 success:       1
 
8769
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8770
INSERT INTO t1
 
8771
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8772
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8773
f_charbig = '#SINGLE#';
 
8774
        
 
8775
# check single-2 success:       1
 
8776
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8777
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8778
UPDATE t1 SET f_int1 = @cur_value2
 
8779
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8780
        
 
8781
# check single-3 success:       1
 
8782
SET @cur_value1= -1;
 
8783
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8784
UPDATE t1 SET f_int1 = @cur_value1
 
8785
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8786
        
 
8787
# check single-4 success:       1
 
8788
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8789
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8790
        
 
8791
# check single-5 success:       1
 
8792
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8793
        
 
8794
# check single-6 success:       1
 
8795
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8796
        
 
8797
# check single-7 success:       1
 
8798
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8799
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8800
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8801
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8802
f_charbig = '#NULL#';
 
8803
INSERT INTO t1
 
8804
SET f_int1 = NULL , f_int2 = -@max_row,
 
8805
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8806
f_charbig = '#NULL#';
 
8807
# check null success:    1
 
8808
        
 
8809
# check null-1 success:         1
 
8810
UPDATE t1 SET f_int1 = -@max_row
 
8811
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8812
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8813
        
 
8814
# check null-2 success:         1
 
8815
UPDATE t1 SET f_int1 = NULL
 
8816
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8817
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8818
        
 
8819
# check null-3 success:         1
 
8820
DELETE FROM t1
 
8821
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8822
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8823
        
 
8824
# check null-4 success:         1
 
8825
DELETE FROM t1
 
8826
WHERE f_int1 = 0 AND f_int2 = 0
 
8827
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8828
AND f_charbig = '#NULL#';
 
8829
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8830
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8831
   FROM t0_template source_tab
 
8832
WHERE MOD(f_int1,3) = 0
 
8833
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8834
ON DUPLICATE KEY
 
8835
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8836
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8837
f_charbig = 'was updated';
 
8838
        
 
8839
# check unique-1-a success:     1
 
8840
        
 
8841
# check unique-1-b success:     1
 
8842
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8843
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8844
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8845
f_charbig = CONCAT('===',f_char1,'===')
 
8846
WHERE f_charbig = 'was updated';
 
8847
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8848
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8849
   FROM t0_template source_tab
 
8850
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8851
        
 
8852
# check replace success:        1
 
8853
DELETE FROM t1
 
8854
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8855
DELETE FROM t1
 
8856
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8857
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8858
UPDATE t1 SET f_int2 = f_int1,
 
8859
f_char1 = CAST(f_int1 AS CHAR),
 
8860
f_char2 = CAST(f_int1 AS CHAR),
 
8861
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8862
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8863
SET AUTOCOMMIT= 0;
 
8864
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8865
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8866
FROM t0_template source_tab
 
8867
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8868
        
 
8869
# check transactions-1 success:         1
 
8870
COMMIT WORK;
 
8871
        
 
8872
# check transactions-2 success:         1
 
8873
ROLLBACK WORK;
 
8874
        
 
8875
# check transactions-3 success:         1
 
8876
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8877
COMMIT WORK;
 
8878
ROLLBACK WORK;
 
8879
        
 
8880
# check transactions-4 success:         1
 
8881
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8882
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8883
FROM t0_template source_tab
 
8884
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8885
        
 
8886
# check transactions-5 success:         1
 
8887
ROLLBACK WORK;
 
8888
Warnings:
 
8889
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8890
        
 
8891
# check transactions-6 success:         1
 
8892
# INFO: Storage engine used for t1 seems to be not transactional.
 
8893
COMMIT;
 
8894
        
 
8895
# check transactions-7 success:         1
 
8896
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8897
COMMIT WORK;
 
8898
SET @@session.sql_mode = 'traditional';
 
8899
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8900
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8901
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8902
'', '', 'was inserted' FROM t0_template
 
8903
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8904
ERROR 22012: Division by 0
 
8905
COMMIT;
 
8906
        
 
8907
# check transactions-8 success:         1
 
8908
# INFO: Storage engine used for t1 seems to be unable to revert
 
8909
#       changes made by the failing statement.
 
8910
SET @@session.sql_mode = '';
 
8911
SET AUTOCOMMIT= 1;
 
8912
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8913
COMMIT WORK;
 
8914
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8915
        
 
8916
# check special-1 success:      1
 
8917
UPDATE t1 SET f_charbig = '';
 
8918
        
 
8919
# check special-2 success:      1
 
8920
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8921
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8922
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8924
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8925
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8926
'just inserted' FROM t0_template
 
8927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8928
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8929
BEGIN
 
8930
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8931
f_charbig = 'updated by trigger'
 
8932
      WHERE f_int1 = new.f_int1;
 
8933
END|
 
8934
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8935
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8936
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8937
        
 
8938
# check trigger-1 success:      1
 
8939
DROP TRIGGER trg_1;
 
8940
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8941
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8942
f_charbig = 'just inserted'
 
8943
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8944
DELETE FROM t0_aux
 
8945
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8946
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8947
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8948
'just inserted' FROM t0_template
 
8949
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8950
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8951
BEGIN
 
8952
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8953
f_charbig = 'updated by trigger'
 
8954
      WHERE f_int1 = new.f_int1;
 
8955
END|
 
8956
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8957
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8959
        
 
8960
# check trigger-2 success:      1
 
8961
DROP TRIGGER trg_1;
 
8962
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8963
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8964
f_charbig = 'just inserted'
 
8965
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8966
DELETE FROM t0_aux
 
8967
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8968
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8969
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8970
'just inserted' FROM t0_template
 
8971
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8972
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8973
BEGIN
 
8974
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8975
f_charbig = 'updated by trigger'
 
8976
      WHERE f_int1 = new.f_int1;
 
8977
END|
 
8978
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8979
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8980
        
 
8981
# check trigger-3 success:      1
 
8982
DROP TRIGGER trg_1;
 
8983
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8984
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8985
f_charbig = 'just inserted'
 
8986
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8987
DELETE FROM t0_aux
 
8988
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8989
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8990
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8991
'just inserted' FROM t0_template
 
8992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8993
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8994
BEGIN
 
8995
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8996
f_charbig = 'updated by trigger'
 
8997
      WHERE f_int1 = - old.f_int1;
 
8998
END|
 
8999
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9000
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9001
        
 
9002
# check trigger-4 success:      1
 
9003
DROP TRIGGER trg_1;
 
9004
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9005
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9006
f_charbig = 'just inserted'
 
9007
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9008
DELETE FROM t0_aux
 
9009
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9010
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9011
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9012
'just inserted' FROM t0_template
 
9013
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9014
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9015
BEGIN
 
9016
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9017
f_charbig = 'updated by trigger'
 
9018
      WHERE f_int1 = new.f_int1;
 
9019
END|
 
9020
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9021
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9022
        
 
9023
# check trigger-5 success:      1
 
9024
DROP TRIGGER trg_1;
 
9025
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9026
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9027
f_charbig = 'just inserted'
 
9028
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9029
DELETE FROM t0_aux
 
9030
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9031
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9032
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9033
'just inserted' FROM t0_template
 
9034
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9035
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9036
BEGIN
 
9037
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9038
f_charbig = 'updated by trigger'
 
9039
      WHERE f_int1 = - old.f_int1;
 
9040
END|
 
9041
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9042
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9043
        
 
9044
# check trigger-6 success:      1
 
9045
DROP TRIGGER trg_1;
 
9046
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9047
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9048
f_charbig = 'just inserted'
 
9049
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9050
DELETE FROM t0_aux
 
9051
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9052
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9053
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9054
'just inserted' FROM t0_template
 
9055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9056
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9057
BEGIN
 
9058
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9059
f_charbig = 'updated by trigger'
 
9060
      WHERE f_int1 = - old.f_int1;
 
9061
END|
 
9062
DELETE FROM t0_aux
 
9063
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9064
        
 
9065
# check trigger-7 success:      1
 
9066
DROP TRIGGER trg_1;
 
9067
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9068
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9069
f_charbig = 'just inserted'
 
9070
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9071
DELETE FROM t0_aux
 
9072
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9073
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9074
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9075
'just inserted' FROM t0_template
 
9076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9077
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9078
BEGIN
 
9079
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9080
f_charbig = 'updated by trigger'
 
9081
      WHERE f_int1 = - old.f_int1;
 
9082
END|
 
9083
DELETE FROM t0_aux
 
9084
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9085
        
 
9086
# check trigger-8 success:      1
 
9087
DROP TRIGGER trg_1;
 
9088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9089
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9090
f_charbig = 'just inserted'
 
9091
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9092
DELETE FROM t0_aux
 
9093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9094
DELETE FROM t1
 
9095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9096
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9097
BEGIN
 
9098
SET new.f_int1 = old.f_int1 + @max_row,
 
9099
new.f_int2 = old.f_int2 - @max_row,
 
9100
new.f_charbig = '####updated per update trigger####';
 
9101
END|
 
9102
UPDATE t1
 
9103
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9104
f_charbig = '####updated per update statement itself####';
 
9105
        
 
9106
# check trigger-9 success:      1
 
9107
DROP TRIGGER trg_2;
 
9108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9110
f_charbig = CONCAT('===',f_char1,'===');
 
9111
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9112
BEGIN
 
9113
SET new.f_int1 = new.f_int1 + @max_row,
 
9114
new.f_int2 = new.f_int2 - @max_row,
 
9115
new.f_charbig = '####updated per update trigger####';
 
9116
END|
 
9117
UPDATE t1
 
9118
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9119
f_charbig = '####updated per update statement itself####';
 
9120
        
 
9121
# check trigger-10 success:     1
 
9122
DROP TRIGGER trg_2;
 
9123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9125
f_charbig = CONCAT('===',f_char1,'===');
 
9126
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9127
BEGIN
 
9128
SET new.f_int1 = @my_max1 + @counter,
 
9129
new.f_int2 = @my_min2 - @counter,
 
9130
new.f_charbig = '####updated per insert trigger####';
 
9131
SET @counter = @counter + 1;
 
9132
END|
 
9133
SET @counter = 1;
 
9134
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9135
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9136
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9137
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9139
ORDER BY f_int1;
 
9140
DROP TRIGGER trg_3;
 
9141
        
 
9142
# check trigger-11 success:     1
 
9143
DELETE FROM t1
 
9144
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9145
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9146
AND f_charbig = '####updated per insert trigger####';
 
9147
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9148
BEGIN
 
9149
SET new.f_int1 = @my_max1 + @counter,
 
9150
new.f_int2 = @my_min2 - @counter,
 
9151
new.f_charbig = '####updated per insert trigger####';
 
9152
SET @counter = @counter + 1;
 
9153
END|
 
9154
SET @counter = 1;
 
9155
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9156
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9157
SELECT CAST(f_int1 AS CHAR),
 
9158
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9160
ORDER BY f_int1;
 
9161
DROP TRIGGER trg_3;
 
9162
        
 
9163
# check trigger-12 success:     1
 
9164
DELETE FROM t1
 
9165
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9166
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9167
AND f_charbig = '####updated per insert trigger####';
 
9168
ANALYZE  TABLE t1;
 
9169
Table   Op      Msg_type        Msg_text
 
9170
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
9171
CHECK    TABLE t1 EXTENDED;
 
9172
Table   Op      Msg_type        Msg_text
 
9173
test.t1 check   note    The storage engine for the table doesn't support check
 
9174
CHECKSUM TABLE t1 EXTENDED;
 
9175
Table   Checksum
 
9176
test.t1 <some_value>
 
9177
OPTIMIZE TABLE t1;
 
9178
Table   Op      Msg_type        Msg_text
 
9179
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
9180
# check layout success:    1
 
9181
REPAIR   TABLE t1 EXTENDED;
 
9182
Table   Op      Msg_type        Msg_text
 
9183
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9184
# check layout success:    1
 
9185
TRUNCATE t1;
 
9186
        
 
9187
# check TRUNCATE success:       1
 
9188
# check layout success:    1
 
9189
# End usability test (inc/partition_check.inc)
 
9190
DROP TABLE t1;
 
9191
CREATE TABLE t1 (
 
9192
f_int1 INTEGER,
 
9193
f_int2 INTEGER,
 
9194
f_char1 CHAR(20),
 
9195
f_char2 CHAR(20),
 
9196
f_charbig VARCHAR(1000)
 
9197
 
 
9198
)
 
9199
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
9200
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9201
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9202
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9203
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
9204
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9205
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9206
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9207
# Start usability test (inc/partition_check.inc)
 
9208
create_command
 
9209
SHOW CREATE TABLE t1;
 
9210
Table   Create Table
 
9211
t1      CREATE TABLE `t1` (
 
9212
  `f_int1` int(11) DEFAULT NULL,
 
9213
  `f_int2` int(11) DEFAULT NULL,
 
9214
  `f_char1` char(20) DEFAULT NULL,
 
9215
  `f_char2` char(20) DEFAULT NULL,
 
9216
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9217
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
9218
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
9219
 
 
9220
unified filelist
 
9221
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
9222
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
9223
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
9224
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
9225
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
9226
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
9227
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
9228
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
9229
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
9230
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
9231
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
9232
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
9233
 
 
9234
# check prerequisites-1 success:    1
 
9235
# check COUNT(*) success:    1
 
9236
# check MIN/MAX(f_int1) success:    1
 
9237
# check MIN/MAX(f_int2) success:    1
 
9238
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9239
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9240
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9241
WHERE f_int1 IN (2,3);
 
9242
ERROR 23000: Can't write; duplicate key in table 't1'
 
9243
# check prerequisites-3 success:    1
 
9244
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9245
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9246
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9247
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9248
WHERE f_int1 IN (2,3);
 
9249
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9250
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9251
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9252
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9253
WHERE f_int1 IN (2,3);
 
9254
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9255
# check read via f_int1 success: 1
 
9256
# check read via f_int2 success: 1
 
9257
        
 
9258
# check multiple-1 success:     1
 
9259
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9260
        
 
9261
# check multiple-2 success:     1
 
9262
INSERT INTO t1 SELECT * FROM t0_template
 
9263
WHERE MOD(f_int1,3) = 0;
 
9264
        
 
9265
# check multiple-3 success:     1
 
9266
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9267
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9268
AND @max_row_div2 + @max_row_div4;
 
9269
        
 
9270
# check multiple-4 success:     1
 
9271
DELETE FROM t1
 
9272
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9273
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9274
        
 
9275
# check multiple-5 success:     1
 
9276
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9277
WHERE MOD(f_int1,3) = 0
 
9278
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9279
SELECT COUNT(*) INTO @clash_count
 
9280
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9281
WHERE MOD(f_int1,3) = 0
 
9282
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9283
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9284
INSERT INTO t1
 
9285
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9286
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9287
f_charbig = '#SINGLE#';
 
9288
        
 
9289
# check single-1 success:       1
 
9290
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9291
INSERT INTO t1
 
9292
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9293
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9294
f_charbig = '#SINGLE#';
 
9295
        
 
9296
# check single-2 success:       1
 
9297
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9298
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9299
UPDATE t1 SET f_int1 = @cur_value2
 
9300
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9301
        
 
9302
# check single-3 success:       1
 
9303
SET @cur_value1= -1;
 
9304
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9305
UPDATE t1 SET f_int1 = @cur_value1
 
9306
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9307
        
 
9308
# check single-4 success:       1
 
9309
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9310
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9311
        
 
9312
# check single-5 success:       1
 
9313
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9314
        
 
9315
# check single-6 success:       1
 
9316
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9317
        
 
9318
# check single-7 success:       1
 
9319
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9320
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9321
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9322
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9323
f_charbig = '#NULL#';
 
9324
INSERT INTO t1
 
9325
SET f_int1 = NULL , f_int2 = -@max_row,
 
9326
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9327
f_charbig = '#NULL#';
 
9328
# check null success:    1
 
9329
        
 
9330
# check null-1 success:         1
 
9331
UPDATE t1 SET f_int1 = -@max_row
 
9332
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9333
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9334
        
 
9335
# check null-2 success:         1
 
9336
UPDATE t1 SET f_int1 = NULL
 
9337
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9338
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9339
        
 
9340
# check null-3 success:         1
 
9341
DELETE FROM t1
 
9342
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9343
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9344
        
 
9345
# check null-4 success:         1
 
9346
DELETE FROM t1
 
9347
WHERE f_int1 = 0 AND f_int2 = 0
 
9348
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9349
AND f_charbig = '#NULL#';
 
9350
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9351
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9352
   FROM t0_template source_tab
 
9353
WHERE MOD(f_int1,3) = 0
 
9354
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
9355
ON DUPLICATE KEY
 
9356
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
9357
f_int2 = 2 * @max_row + source_tab.f_int1,
 
9358
f_charbig = 'was updated';
 
9359
        
 
9360
# check unique-1-a success:     1
 
9361
        
 
9362
# check unique-1-b success:     1
 
9363
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9366
f_charbig = CONCAT('===',f_char1,'===')
 
9367
WHERE f_charbig = 'was updated';
 
9368
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9369
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
9370
   FROM t0_template source_tab
 
9371
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9372
        
 
9373
# check replace success:        1
 
9374
DELETE FROM t1
 
9375
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
9376
DELETE FROM t1
 
9377
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
9378
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
9379
UPDATE t1 SET f_int2 = f_int1,
 
9380
f_char1 = CAST(f_int1 AS CHAR),
 
9381
f_char2 = CAST(f_int1 AS CHAR),
 
9382
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
9383
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
9384
SET AUTOCOMMIT= 0;
 
9385
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9386
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9387
FROM t0_template source_tab
 
9388
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9389
        
 
9390
# check transactions-1 success:         1
 
9391
COMMIT WORK;
 
9392
        
 
9393
# check transactions-2 success:         1
 
9394
ROLLBACK WORK;
 
9395
        
 
9396
# check transactions-3 success:         1
 
9397
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9398
COMMIT WORK;
 
9399
ROLLBACK WORK;
 
9400
        
 
9401
# check transactions-4 success:         1
 
9402
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9403
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9404
FROM t0_template source_tab
 
9405
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9406
        
 
9407
# check transactions-5 success:         1
 
9408
ROLLBACK WORK;
 
9409
Warnings:
 
9410
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
9411
        
 
9412
# check transactions-6 success:         1
 
9413
# INFO: Storage engine used for t1 seems to be not transactional.
 
9414
COMMIT;
 
9415
        
 
9416
# check transactions-7 success:         1
 
9417
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9418
COMMIT WORK;
 
9419
SET @@session.sql_mode = 'traditional';
 
9420
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9421
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9422
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9423
'', '', 'was inserted' FROM t0_template
 
9424
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9425
ERROR 22012: Division by 0
 
9426
COMMIT;
 
9427
        
 
9428
# check transactions-8 success:         1
 
9429
# INFO: Storage engine used for t1 seems to be unable to revert
 
9430
#       changes made by the failing statement.
 
9431
SET @@session.sql_mode = '';
 
9432
SET AUTOCOMMIT= 1;
 
9433
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9434
COMMIT WORK;
 
9435
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9436
        
 
9437
# check special-1 success:      1
 
9438
UPDATE t1 SET f_charbig = '';
 
9439
        
 
9440
# check special-2 success:      1
 
9441
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9442
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9443
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9445
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9446
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9447
'just inserted' FROM t0_template
 
9448
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9449
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9450
BEGIN
 
9451
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9452
f_charbig = 'updated by trigger'
 
9453
      WHERE f_int1 = new.f_int1;
 
9454
END|
 
9455
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9456
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9458
        
 
9459
# check trigger-1 success:      1
 
9460
DROP TRIGGER trg_1;
 
9461
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9462
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9463
f_charbig = 'just inserted'
 
9464
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9465
DELETE FROM t0_aux
 
9466
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9468
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9469
'just inserted' FROM t0_template
 
9470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9471
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9472
BEGIN
 
9473
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9474
f_charbig = 'updated by trigger'
 
9475
      WHERE f_int1 = new.f_int1;
 
9476
END|
 
9477
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9478
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9480
        
 
9481
# check trigger-2 success:      1
 
9482
DROP TRIGGER trg_1;
 
9483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9485
f_charbig = 'just inserted'
 
9486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9487
DELETE FROM t0_aux
 
9488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9491
'just inserted' FROM t0_template
 
9492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9493
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9494
BEGIN
 
9495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9496
f_charbig = 'updated by trigger'
 
9497
      WHERE f_int1 = new.f_int1;
 
9498
END|
 
9499
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9500
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9501
        
 
9502
# check trigger-3 success:      1
 
9503
DROP TRIGGER trg_1;
 
9504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9506
f_charbig = 'just inserted'
 
9507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9508
DELETE FROM t0_aux
 
9509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9512
'just inserted' FROM t0_template
 
9513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9514
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9515
BEGIN
 
9516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9517
f_charbig = 'updated by trigger'
 
9518
      WHERE f_int1 = - old.f_int1;
 
9519
END|
 
9520
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9521
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9522
        
 
9523
# check trigger-4 success:      1
 
9524
DROP TRIGGER trg_1;
 
9525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9527
f_charbig = 'just inserted'
 
9528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9529
DELETE FROM t0_aux
 
9530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9533
'just inserted' FROM t0_template
 
9534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9535
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9536
BEGIN
 
9537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9538
f_charbig = 'updated by trigger'
 
9539
      WHERE f_int1 = new.f_int1;
 
9540
END|
 
9541
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9542
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9543
        
 
9544
# check trigger-5 success:      1
 
9545
DROP TRIGGER trg_1;
 
9546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9548
f_charbig = 'just inserted'
 
9549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9550
DELETE FROM t0_aux
 
9551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9554
'just inserted' FROM t0_template
 
9555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9556
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9557
BEGIN
 
9558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9559
f_charbig = 'updated by trigger'
 
9560
      WHERE f_int1 = - old.f_int1;
 
9561
END|
 
9562
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9563
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9564
        
 
9565
# check trigger-6 success:      1
 
9566
DROP TRIGGER trg_1;
 
9567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9569
f_charbig = 'just inserted'
 
9570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9571
DELETE FROM t0_aux
 
9572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9573
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9574
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9575
'just inserted' FROM t0_template
 
9576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9577
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9578
BEGIN
 
9579
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9580
f_charbig = 'updated by trigger'
 
9581
      WHERE f_int1 = - old.f_int1;
 
9582
END|
 
9583
DELETE FROM t0_aux
 
9584
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9585
        
 
9586
# check trigger-7 success:      1
 
9587
DROP TRIGGER trg_1;
 
9588
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9589
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9590
f_charbig = 'just inserted'
 
9591
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9592
DELETE FROM t0_aux
 
9593
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9594
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9595
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9596
'just inserted' FROM t0_template
 
9597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9598
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9599
BEGIN
 
9600
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9601
f_charbig = 'updated by trigger'
 
9602
      WHERE f_int1 = - old.f_int1;
 
9603
END|
 
9604
DELETE FROM t0_aux
 
9605
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9606
        
 
9607
# check trigger-8 success:      1
 
9608
DROP TRIGGER trg_1;
 
9609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9611
f_charbig = 'just inserted'
 
9612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9613
DELETE FROM t0_aux
 
9614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9615
DELETE FROM t1
 
9616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9617
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9618
BEGIN
 
9619
SET new.f_int1 = old.f_int1 + @max_row,
 
9620
new.f_int2 = old.f_int2 - @max_row,
 
9621
new.f_charbig = '####updated per update trigger####';
 
9622
END|
 
9623
UPDATE t1
 
9624
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9625
f_charbig = '####updated per update statement itself####';
 
9626
        
 
9627
# check trigger-9 success:      1
 
9628
DROP TRIGGER trg_2;
 
9629
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9630
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9631
f_charbig = CONCAT('===',f_char1,'===');
 
9632
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9633
BEGIN
 
9634
SET new.f_int1 = new.f_int1 + @max_row,
 
9635
new.f_int2 = new.f_int2 - @max_row,
 
9636
new.f_charbig = '####updated per update trigger####';
 
9637
END|
 
9638
UPDATE t1
 
9639
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9640
f_charbig = '####updated per update statement itself####';
 
9641
        
 
9642
# check trigger-10 success:     1
 
9643
DROP TRIGGER trg_2;
 
9644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9646
f_charbig = CONCAT('===',f_char1,'===');
 
9647
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9648
BEGIN
 
9649
SET new.f_int1 = @my_max1 + @counter,
 
9650
new.f_int2 = @my_min2 - @counter,
 
9651
new.f_charbig = '####updated per insert trigger####';
 
9652
SET @counter = @counter + 1;
 
9653
END|
 
9654
SET @counter = 1;
 
9655
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9656
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9657
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9658
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9660
ORDER BY f_int1;
 
9661
DROP TRIGGER trg_3;
 
9662
        
 
9663
# check trigger-11 success:     1
 
9664
DELETE FROM t1
 
9665
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9666
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9667
AND f_charbig = '####updated per insert trigger####';
 
9668
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9669
BEGIN
 
9670
SET new.f_int1 = @my_max1 + @counter,
 
9671
new.f_int2 = @my_min2 - @counter,
 
9672
new.f_charbig = '####updated per insert trigger####';
 
9673
SET @counter = @counter + 1;
 
9674
END|
 
9675
SET @counter = 1;
 
9676
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9677
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9678
SELECT CAST(f_int1 AS CHAR),
 
9679
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9681
ORDER BY f_int1;
 
9682
DROP TRIGGER trg_3;
 
9683
        
 
9684
# check trigger-12 success:     1
 
9685
DELETE FROM t1
 
9686
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9687
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9688
AND f_charbig = '####updated per insert trigger####';
 
9689
ANALYZE  TABLE t1;
 
9690
Table   Op      Msg_type        Msg_text
 
9691
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
9692
CHECK    TABLE t1 EXTENDED;
 
9693
Table   Op      Msg_type        Msg_text
 
9694
test.t1 check   note    The storage engine for the table doesn't support check
 
9695
CHECKSUM TABLE t1 EXTENDED;
 
9696
Table   Checksum
 
9697
test.t1 <some_value>
 
9698
OPTIMIZE TABLE t1;
 
9699
Table   Op      Msg_type        Msg_text
 
9700
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
9701
# check layout success:    1
 
9702
REPAIR   TABLE t1 EXTENDED;
 
9703
Table   Op      Msg_type        Msg_text
 
9704
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9705
# check layout success:    1
 
9706
TRUNCATE t1;
 
9707
        
 
9708
# check TRUNCATE success:       1
 
9709
# check layout success:    1
 
9710
# End usability test (inc/partition_check.inc)
 
9711
DROP TABLE t1;
 
9712
CREATE TABLE t1 (
 
9713
f_int1 INTEGER,
 
9714
f_int2 INTEGER,
 
9715
f_char1 CHAR(20),
 
9716
f_char2 CHAR(20),
 
9717
f_charbig VARCHAR(1000)
 
9718
 
 
9719
)
 
9720
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
9721
(PARTITION part_3 VALUES IN (-3),
 
9722
PARTITION part_2 VALUES IN (-2),
 
9723
PARTITION part_1 VALUES IN (-1),
 
9724
PARTITION part_N VALUES IN (NULL),
 
9725
PARTITION part0 VALUES IN (0),
 
9726
PARTITION part1 VALUES IN (1),
 
9727
PARTITION part2 VALUES IN (2),
 
9728
PARTITION part3 VALUES IN (3));
 
9729
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9730
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9731
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9732
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
9733
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9734
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9735
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9736
# Start usability test (inc/partition_check.inc)
 
9737
create_command
 
9738
SHOW CREATE TABLE t1;
 
9739
Table   Create Table
 
9740
t1      CREATE TABLE `t1` (
 
9741
  `f_int1` int(11) DEFAULT NULL,
 
9742
  `f_int2` int(11) DEFAULT NULL,
 
9743
  `f_char1` char(20) DEFAULT NULL,
 
9744
  `f_char2` char(20) DEFAULT NULL,
 
9745
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9746
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
9747
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
9748
 
 
9749
unified filelist
 
9750
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
9751
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
9752
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
9753
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
9754
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
9755
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
9756
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
9757
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
9758
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
9759
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
9760
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
9761
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
9762
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
9763
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
9764
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
9765
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
9766
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
9767
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
9768
 
 
9769
# check prerequisites-1 success:    1
 
9770
# check COUNT(*) success:    1
 
9771
# check MIN/MAX(f_int1) success:    1
 
9772
# check MIN/MAX(f_int2) success:    1
 
9773
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9774
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9775
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9776
WHERE f_int1 IN (2,3);
 
9777
ERROR 23000: Can't write; duplicate key in table 't1'
 
9778
# check prerequisites-3 success:    1
 
9779
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9781
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9782
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9783
WHERE f_int1 IN (2,3);
 
9784
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9785
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9786
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9787
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9788
WHERE f_int1 IN (2,3);
 
9789
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9790
# check read via f_int1 success: 1
 
9791
# check read via f_int2 success: 1
 
9792
        
 
9793
# check multiple-1 success:     1
 
9794
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9795
        
 
9796
# check multiple-2 success:     1
 
9797
INSERT INTO t1 SELECT * FROM t0_template
 
9798
WHERE MOD(f_int1,3) = 0;
 
9799
        
 
9800
# check multiple-3 success:     1
 
9801
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9802
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9803
AND @max_row_div2 + @max_row_div4;
 
9804
        
 
9805
# check multiple-4 success:     1
 
9806
DELETE FROM t1
 
9807
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9808
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9809
        
 
9810
# check multiple-5 success:     1
 
9811
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9812
WHERE MOD(f_int1,3) = 0
 
9813
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9814
SELECT COUNT(*) INTO @clash_count
 
9815
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9816
WHERE MOD(f_int1,3) = 0
 
9817
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9818
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9819
INSERT INTO t1
 
9820
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9821
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9822
f_charbig = '#SINGLE#';
 
9823
        
 
9824
# check single-1 success:       1
 
9825
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9826
INSERT INTO t1
 
9827
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9828
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9829
f_charbig = '#SINGLE#';
 
9830
        
 
9831
# check single-2 success:       1
 
9832
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9833
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9834
UPDATE t1 SET f_int1 = @cur_value2
 
9835
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9836
        
 
9837
# check single-3 success:       1
 
9838
SET @cur_value1= -1;
 
9839
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9840
UPDATE t1 SET f_int1 = @cur_value1
 
9841
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9842
        
 
9843
# check single-4 success:       1
 
9844
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9845
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9846
        
 
9847
# check single-5 success:       1
 
9848
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9849
        
 
9850
# check single-6 success:       1
 
9851
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9852
        
 
9853
# check single-7 success:       1
 
9854
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9855
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9856
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9857
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9858
f_charbig = '#NULL#';
 
9859
INSERT INTO t1
 
9860
SET f_int1 = NULL , f_int2 = -@max_row,
 
9861
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9862
f_charbig = '#NULL#';
 
9863
# check null success:    1
 
9864
        
 
9865
# check null-1 success:         1
 
9866
UPDATE t1 SET f_int1 = -@max_row
 
9867
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9868
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9869
        
 
9870
# check null-2 success:         1
 
9871
UPDATE t1 SET f_int1 = NULL
 
9872
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9873
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9874
        
 
9875
# check null-3 success:         1
 
9876
DELETE FROM t1
 
9877
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9878
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9879
        
 
9880
# check null-4 success:         1
 
9881
DELETE FROM t1
 
9882
WHERE f_int1 = 0 AND f_int2 = 0
 
9883
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9884
AND f_charbig = '#NULL#';
 
9885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9886
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9887
   FROM t0_template source_tab
 
9888
WHERE MOD(f_int1,3) = 0
 
9889
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
9890
ON DUPLICATE KEY
 
9891
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
9892
f_int2 = 2 * @max_row + source_tab.f_int1,
 
9893
f_charbig = 'was updated';
 
9894
        
 
9895
# check unique-1-a success:     1
 
9896
        
 
9897
# check unique-1-b success:     1
 
9898
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9899
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9900
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9901
f_charbig = CONCAT('===',f_char1,'===')
 
9902
WHERE f_charbig = 'was updated';
 
9903
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9904
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
9905
   FROM t0_template source_tab
 
9906
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9907
        
 
9908
# check replace success:        1
 
9909
DELETE FROM t1
 
9910
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
9911
DELETE FROM t1
 
9912
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
9913
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
9914
UPDATE t1 SET f_int2 = f_int1,
 
9915
f_char1 = CAST(f_int1 AS CHAR),
 
9916
f_char2 = CAST(f_int1 AS CHAR),
 
9917
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
9918
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
9919
SET AUTOCOMMIT= 0;
 
9920
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9921
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9922
FROM t0_template source_tab
 
9923
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9924
        
 
9925
# check transactions-1 success:         1
 
9926
COMMIT WORK;
 
9927
        
 
9928
# check transactions-2 success:         1
 
9929
ROLLBACK WORK;
 
9930
        
 
9931
# check transactions-3 success:         1
 
9932
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9933
COMMIT WORK;
 
9934
ROLLBACK WORK;
 
9935
        
 
9936
# check transactions-4 success:         1
 
9937
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9938
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9939
FROM t0_template source_tab
 
9940
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9941
        
 
9942
# check transactions-5 success:         1
 
9943
ROLLBACK WORK;
 
9944
Warnings:
 
9945
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
9946
        
 
9947
# check transactions-6 success:         1
 
9948
# INFO: Storage engine used for t1 seems to be not transactional.
 
9949
COMMIT;
 
9950
        
 
9951
# check transactions-7 success:         1
 
9952
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9953
COMMIT WORK;
 
9954
SET @@session.sql_mode = 'traditional';
 
9955
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9957
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9958
'', '', 'was inserted' FROM t0_template
 
9959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9960
ERROR 22012: Division by 0
 
9961
COMMIT;
 
9962
        
 
9963
# check transactions-8 success:         1
 
9964
# INFO: Storage engine used for t1 seems to be unable to revert
 
9965
#       changes made by the failing statement.
 
9966
SET @@session.sql_mode = '';
 
9967
SET AUTOCOMMIT= 1;
 
9968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9969
COMMIT WORK;
 
9970
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9971
        
 
9972
# check special-1 success:      1
 
9973
UPDATE t1 SET f_charbig = '';
 
9974
        
 
9975
# check special-2 success:      1
 
9976
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9977
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9978
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9980
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9981
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9982
'just inserted' FROM t0_template
 
9983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9984
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9985
BEGIN
 
9986
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9987
f_charbig = 'updated by trigger'
 
9988
      WHERE f_int1 = new.f_int1;
 
9989
END|
 
9990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9991
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9993
        
 
9994
# check trigger-1 success:      1
 
9995
DROP TRIGGER trg_1;
 
9996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9998
f_charbig = 'just inserted'
 
9999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10000
DELETE FROM t0_aux
 
10001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10003
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10004
'just inserted' FROM t0_template
 
10005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10006
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10007
BEGIN
 
10008
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10009
f_charbig = 'updated by trigger'
 
10010
      WHERE f_int1 = new.f_int1;
 
10011
END|
 
10012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10013
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10015
        
 
10016
# check trigger-2 success:      1
 
10017
DROP TRIGGER trg_1;
 
10018
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10019
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10020
f_charbig = 'just inserted'
 
10021
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10022
DELETE FROM t0_aux
 
10023
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10026
'just inserted' FROM t0_template
 
10027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10028
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10029
BEGIN
 
10030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10031
f_charbig = 'updated by trigger'
 
10032
      WHERE f_int1 = new.f_int1;
 
10033
END|
 
10034
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10035
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10036
        
 
10037
# check trigger-3 success:      1
 
10038
DROP TRIGGER trg_1;
 
10039
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10040
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10041
f_charbig = 'just inserted'
 
10042
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10043
DELETE FROM t0_aux
 
10044
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10045
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10046
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10047
'just inserted' FROM t0_template
 
10048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10049
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10050
BEGIN
 
10051
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10052
f_charbig = 'updated by trigger'
 
10053
      WHERE f_int1 = - old.f_int1;
 
10054
END|
 
10055
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10056
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10057
        
 
10058
# check trigger-4 success:      1
 
10059
DROP TRIGGER trg_1;
 
10060
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10061
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10062
f_charbig = 'just inserted'
 
10063
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10064
DELETE FROM t0_aux
 
10065
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10066
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10067
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10068
'just inserted' FROM t0_template
 
10069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10070
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10071
BEGIN
 
10072
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10073
f_charbig = 'updated by trigger'
 
10074
      WHERE f_int1 = new.f_int1;
 
10075
END|
 
10076
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10077
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10078
        
 
10079
# check trigger-5 success:      1
 
10080
DROP TRIGGER trg_1;
 
10081
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10082
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10083
f_charbig = 'just inserted'
 
10084
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10085
DELETE FROM t0_aux
 
10086
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10088
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10089
'just inserted' FROM t0_template
 
10090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10091
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10092
BEGIN
 
10093
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10094
f_charbig = 'updated by trigger'
 
10095
      WHERE f_int1 = - old.f_int1;
 
10096
END|
 
10097
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10098
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10099
        
 
10100
# check trigger-6 success:      1
 
10101
DROP TRIGGER trg_1;
 
10102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10104
f_charbig = 'just inserted'
 
10105
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10106
DELETE FROM t0_aux
 
10107
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10108
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10109
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10110
'just inserted' FROM t0_template
 
10111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10112
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10113
BEGIN
 
10114
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10115
f_charbig = 'updated by trigger'
 
10116
      WHERE f_int1 = - old.f_int1;
 
10117
END|
 
10118
DELETE FROM t0_aux
 
10119
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10120
        
 
10121
# check trigger-7 success:      1
 
10122
DROP TRIGGER trg_1;
 
10123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10125
f_charbig = 'just inserted'
 
10126
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10127
DELETE FROM t0_aux
 
10128
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10131
'just inserted' FROM t0_template
 
10132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10133
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10134
BEGIN
 
10135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10136
f_charbig = 'updated by trigger'
 
10137
      WHERE f_int1 = - old.f_int1;
 
10138
END|
 
10139
DELETE FROM t0_aux
 
10140
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10141
        
 
10142
# check trigger-8 success:      1
 
10143
DROP TRIGGER trg_1;
 
10144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10146
f_charbig = 'just inserted'
 
10147
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10148
DELETE FROM t0_aux
 
10149
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10150
DELETE FROM t1
 
10151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10152
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10153
BEGIN
 
10154
SET new.f_int1 = old.f_int1 + @max_row,
 
10155
new.f_int2 = old.f_int2 - @max_row,
 
10156
new.f_charbig = '####updated per update trigger####';
 
10157
END|
 
10158
UPDATE t1
 
10159
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10160
f_charbig = '####updated per update statement itself####';
 
10161
        
 
10162
# check trigger-9 success:      1
 
10163
DROP TRIGGER trg_2;
 
10164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10166
f_charbig = CONCAT('===',f_char1,'===');
 
10167
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10168
BEGIN
 
10169
SET new.f_int1 = new.f_int1 + @max_row,
 
10170
new.f_int2 = new.f_int2 - @max_row,
 
10171
new.f_charbig = '####updated per update trigger####';
 
10172
END|
 
10173
UPDATE t1
 
10174
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10175
f_charbig = '####updated per update statement itself####';
 
10176
        
 
10177
# check trigger-10 success:     1
 
10178
DROP TRIGGER trg_2;
 
10179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10181
f_charbig = CONCAT('===',f_char1,'===');
 
10182
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10183
BEGIN
 
10184
SET new.f_int1 = @my_max1 + @counter,
 
10185
new.f_int2 = @my_min2 - @counter,
 
10186
new.f_charbig = '####updated per insert trigger####';
 
10187
SET @counter = @counter + 1;
 
10188
END|
 
10189
SET @counter = 1;
 
10190
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10192
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10193
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10195
ORDER BY f_int1;
 
10196
DROP TRIGGER trg_3;
 
10197
        
 
10198
# check trigger-11 success:     1
 
10199
DELETE FROM t1
 
10200
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10201
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10202
AND f_charbig = '####updated per insert trigger####';
 
10203
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10204
BEGIN
 
10205
SET new.f_int1 = @my_max1 + @counter,
 
10206
new.f_int2 = @my_min2 - @counter,
 
10207
new.f_charbig = '####updated per insert trigger####';
 
10208
SET @counter = @counter + 1;
 
10209
END|
 
10210
SET @counter = 1;
 
10211
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10212
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10213
SELECT CAST(f_int1 AS CHAR),
 
10214
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10216
ORDER BY f_int1;
 
10217
DROP TRIGGER trg_3;
 
10218
        
 
10219
# check trigger-12 success:     1
 
10220
DELETE FROM t1
 
10221
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10222
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10223
AND f_charbig = '####updated per insert trigger####';
 
10224
ANALYZE  TABLE t1;
 
10225
Table   Op      Msg_type        Msg_text
 
10226
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
10227
CHECK    TABLE t1 EXTENDED;
 
10228
Table   Op      Msg_type        Msg_text
 
10229
test.t1 check   note    The storage engine for the table doesn't support check
 
10230
CHECKSUM TABLE t1 EXTENDED;
 
10231
Table   Checksum
 
10232
test.t1 <some_value>
 
10233
OPTIMIZE TABLE t1;
 
10234
Table   Op      Msg_type        Msg_text
 
10235
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
10236
# check layout success:    1
 
10237
REPAIR   TABLE t1 EXTENDED;
 
10238
Table   Op      Msg_type        Msg_text
 
10239
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10240
# check layout success:    1
 
10241
TRUNCATE t1;
 
10242
        
 
10243
# check TRUNCATE success:       1
 
10244
# check layout success:    1
 
10245
# End usability test (inc/partition_check.inc)
 
10246
DROP TABLE t1;
 
10247
CREATE TABLE t1 (
 
10248
f_int1 INTEGER,
 
10249
f_int2 INTEGER,
 
10250
f_char1 CHAR(20),
 
10251
f_char2 CHAR(20),
 
10252
f_charbig VARCHAR(1000)
 
10253
 
 
10254
)
 
10255
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
10256
(PARTITION parta VALUES LESS THAN (0),
 
10257
PARTITION partb VALUES LESS THAN (5),
 
10258
PARTITION partc VALUES LESS THAN (10),
 
10259
PARTITION partd VALUES LESS THAN (10 + 5),
 
10260
PARTITION parte VALUES LESS THAN (20),
 
10261
PARTITION partf VALUES LESS THAN (2147483646));
 
10262
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10263
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10264
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10265
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
10266
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10267
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10268
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10269
# Start usability test (inc/partition_check.inc)
 
10270
create_command
 
10271
SHOW CREATE TABLE t1;
 
10272
Table   Create Table
 
10273
t1      CREATE TABLE `t1` (
 
10274
  `f_int1` int(11) DEFAULT NULL,
 
10275
  `f_int2` int(11) DEFAULT NULL,
 
10276
  `f_char1` char(20) DEFAULT NULL,
 
10277
  `f_char2` char(20) DEFAULT NULL,
 
10278
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10279
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
10280
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
10281
 
 
10282
unified filelist
 
10283
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
10284
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
10285
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
10286
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
10287
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
10288
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
10289
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
10290
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
10291
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
10292
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
10293
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
10294
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
10295
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
10296
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
10297
 
 
10298
# check prerequisites-1 success:    1
 
10299
# check COUNT(*) success:    1
 
10300
# check MIN/MAX(f_int1) success:    1
 
10301
# check MIN/MAX(f_int2) success:    1
 
10302
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10303
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10304
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10305
WHERE f_int1 IN (2,3);
 
10306
ERROR 23000: Can't write; duplicate key in table 't1'
 
10307
# check prerequisites-3 success:    1
 
10308
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10309
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10310
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10311
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10312
WHERE f_int1 IN (2,3);
 
10313
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10314
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10315
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10316
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10317
WHERE f_int1 IN (2,3);
 
10318
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10319
# check read via f_int1 success: 1
 
10320
# check read via f_int2 success: 1
 
10321
        
 
10322
# check multiple-1 success:     1
 
10323
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10324
        
 
10325
# check multiple-2 success:     1
 
10326
INSERT INTO t1 SELECT * FROM t0_template
 
10327
WHERE MOD(f_int1,3) = 0;
 
10328
        
 
10329
# check multiple-3 success:     1
 
10330
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10331
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10332
AND @max_row_div2 + @max_row_div4;
 
10333
        
 
10334
# check multiple-4 success:     1
 
10335
DELETE FROM t1
 
10336
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10337
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10338
        
 
10339
# check multiple-5 success:     1
 
10340
SELECT COUNT(*) INTO @try_count FROM t0_template
 
10341
WHERE MOD(f_int1,3) = 0
 
10342
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10343
SELECT COUNT(*) INTO @clash_count
 
10344
FROM t1 INNER JOIN t0_template USING(f_int1)
 
10345
WHERE MOD(f_int1,3) = 0
 
10346
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10347
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10348
INSERT INTO t1
 
10349
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10350
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10351
f_charbig = '#SINGLE#';
 
10352
        
 
10353
# check single-1 success:       1
 
10354
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10355
INSERT INTO t1
 
10356
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10357
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10358
f_charbig = '#SINGLE#';
 
10359
        
 
10360
# check single-2 success:       1
 
10361
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10362
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10363
UPDATE t1 SET f_int1 = @cur_value2
 
10364
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10365
        
 
10366
# check single-3 success:       1
 
10367
SET @cur_value1= -1;
 
10368
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10369
UPDATE t1 SET f_int1 = @cur_value1
 
10370
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10371
        
 
10372
# check single-4 success:       1
 
10373
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10374
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10375
        
 
10376
# check single-5 success:       1
 
10377
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10378
        
 
10379
# check single-6 success:       1
 
10380
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10381
ERROR HY000: Table has no partition for value 2147483647
 
10382
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10383
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10384
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10385
f_charbig = '#NULL#';
 
10386
INSERT INTO t1
 
10387
SET f_int1 = NULL , f_int2 = -@max_row,
 
10388
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10389
f_charbig = '#NULL#';
 
10390
# check null success:    1
 
10391
        
 
10392
# check null-1 success:         1
 
10393
UPDATE t1 SET f_int1 = -@max_row
 
10394
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10395
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10396
        
 
10397
# check null-2 success:         1
 
10398
UPDATE t1 SET f_int1 = NULL
 
10399
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10400
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10401
        
 
10402
# check null-3 success:         1
 
10403
DELETE FROM t1
 
10404
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10405
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10406
        
 
10407
# check null-4 success:         1
 
10408
DELETE FROM t1
 
10409
WHERE f_int1 = 0 AND f_int2 = 0
 
10410
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10411
AND f_charbig = '#NULL#';
 
10412
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10413
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10414
   FROM t0_template source_tab
 
10415
WHERE MOD(f_int1,3) = 0
 
10416
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10417
ON DUPLICATE KEY
 
10418
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10419
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10420
f_charbig = 'was updated';
 
10421
        
 
10422
# check unique-1-a success:     1
 
10423
        
 
10424
# check unique-1-b success:     1
 
10425
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10426
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10427
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10428
f_charbig = CONCAT('===',f_char1,'===')
 
10429
WHERE f_charbig = 'was updated';
 
10430
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10431
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10432
   FROM t0_template source_tab
 
10433
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10434
        
 
10435
# check replace success:        1
 
10436
DELETE FROM t1
 
10437
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10438
DELETE FROM t1
 
10439
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10440
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10441
UPDATE t1 SET f_int2 = f_int1,
 
10442
f_char1 = CAST(f_int1 AS CHAR),
 
10443
f_char2 = CAST(f_int1 AS CHAR),
 
10444
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10445
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10446
SET AUTOCOMMIT= 0;
 
10447
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10448
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10449
FROM t0_template source_tab
 
10450
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10451
        
 
10452
# check transactions-1 success:         1
 
10453
COMMIT WORK;
 
10454
        
 
10455
# check transactions-2 success:         1
 
10456
ROLLBACK WORK;
 
10457
        
 
10458
# check transactions-3 success:         1
 
10459
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10460
COMMIT WORK;
 
10461
ROLLBACK WORK;
 
10462
        
 
10463
# check transactions-4 success:         1
 
10464
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10465
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10466
FROM t0_template source_tab
 
10467
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10468
        
 
10469
# check transactions-5 success:         1
 
10470
ROLLBACK WORK;
 
10471
Warnings:
 
10472
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
10473
        
 
10474
# check transactions-6 success:         1
 
10475
# INFO: Storage engine used for t1 seems to be not transactional.
 
10476
COMMIT;
 
10477
        
 
10478
# check transactions-7 success:         1
 
10479
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10480
COMMIT WORK;
 
10481
SET @@session.sql_mode = 'traditional';
 
10482
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10483
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10484
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10485
'', '', 'was inserted' FROM t0_template
 
10486
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10487
ERROR 22012: Division by 0
 
10488
COMMIT;
 
10489
        
 
10490
# check transactions-8 success:         1
 
10491
# INFO: Storage engine used for t1 seems to be unable to revert
 
10492
#       changes made by the failing statement.
 
10493
SET @@session.sql_mode = '';
 
10494
SET AUTOCOMMIT= 1;
 
10495
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10496
COMMIT WORK;
 
10497
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10498
        
 
10499
# check special-1 success:      1
 
10500
UPDATE t1 SET f_charbig = '';
 
10501
        
 
10502
# check special-2 success:      1
 
10503
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10504
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10505
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10508
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10509
'just inserted' FROM t0_template
 
10510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10511
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10512
BEGIN
 
10513
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10514
f_charbig = 'updated by trigger'
 
10515
      WHERE f_int1 = new.f_int1;
 
10516
END|
 
10517
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10518
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10520
        
 
10521
# check trigger-1 success:      1
 
10522
DROP TRIGGER trg_1;
 
10523
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10524
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10525
f_charbig = 'just inserted'
 
10526
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10527
DELETE FROM t0_aux
 
10528
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10530
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10531
'just inserted' FROM t0_template
 
10532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10533
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10534
BEGIN
 
10535
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10536
f_charbig = 'updated by trigger'
 
10537
      WHERE f_int1 = new.f_int1;
 
10538
END|
 
10539
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10540
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10541
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10542
        
 
10543
# check trigger-2 success:      1
 
10544
DROP TRIGGER trg_1;
 
10545
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10546
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10547
f_charbig = 'just inserted'
 
10548
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10549
DELETE FROM t0_aux
 
10550
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10552
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10553
'just inserted' FROM t0_template
 
10554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10555
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10556
BEGIN
 
10557
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10558
f_charbig = 'updated by trigger'
 
10559
      WHERE f_int1 = new.f_int1;
 
10560
END|
 
10561
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10562
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10563
        
 
10564
# check trigger-3 success:      1
 
10565
DROP TRIGGER trg_1;
 
10566
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10567
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10568
f_charbig = 'just inserted'
 
10569
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10570
DELETE FROM t0_aux
 
10571
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10572
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10573
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10574
'just inserted' FROM t0_template
 
10575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10576
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10577
BEGIN
 
10578
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10579
f_charbig = 'updated by trigger'
 
10580
      WHERE f_int1 = - old.f_int1;
 
10581
END|
 
10582
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10583
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10584
        
 
10585
# check trigger-4 success:      1
 
10586
DROP TRIGGER trg_1;
 
10587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10589
f_charbig = 'just inserted'
 
10590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10591
DELETE FROM t0_aux
 
10592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10595
'just inserted' FROM t0_template
 
10596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10597
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10598
BEGIN
 
10599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10600
f_charbig = 'updated by trigger'
 
10601
      WHERE f_int1 = new.f_int1;
 
10602
END|
 
10603
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10604
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10605
        
 
10606
# check trigger-5 success:      1
 
10607
DROP TRIGGER trg_1;
 
10608
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10609
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10610
f_charbig = 'just inserted'
 
10611
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10612
DELETE FROM t0_aux
 
10613
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10614
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10615
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10616
'just inserted' FROM t0_template
 
10617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10618
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10619
BEGIN
 
10620
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10621
f_charbig = 'updated by trigger'
 
10622
      WHERE f_int1 = - old.f_int1;
 
10623
END|
 
10624
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10625
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10626
        
 
10627
# check trigger-6 success:      1
 
10628
DROP TRIGGER trg_1;
 
10629
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10630
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10631
f_charbig = 'just inserted'
 
10632
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10633
DELETE FROM t0_aux
 
10634
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10635
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10636
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10637
'just inserted' FROM t0_template
 
10638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10639
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10640
BEGIN
 
10641
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10642
f_charbig = 'updated by trigger'
 
10643
      WHERE f_int1 = - old.f_int1;
 
10644
END|
 
10645
DELETE FROM t0_aux
 
10646
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10647
        
 
10648
# check trigger-7 success:      1
 
10649
DROP TRIGGER trg_1;
 
10650
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10651
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10652
f_charbig = 'just inserted'
 
10653
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10654
DELETE FROM t0_aux
 
10655
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10656
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10657
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10658
'just inserted' FROM t0_template
 
10659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10660
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10661
BEGIN
 
10662
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10663
f_charbig = 'updated by trigger'
 
10664
      WHERE f_int1 = - old.f_int1;
 
10665
END|
 
10666
DELETE FROM t0_aux
 
10667
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10668
        
 
10669
# check trigger-8 success:      1
 
10670
DROP TRIGGER trg_1;
 
10671
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10672
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10673
f_charbig = 'just inserted'
 
10674
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10675
DELETE FROM t0_aux
 
10676
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10677
DELETE FROM t1
 
10678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10679
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10680
BEGIN
 
10681
SET new.f_int1 = old.f_int1 + @max_row,
 
10682
new.f_int2 = old.f_int2 - @max_row,
 
10683
new.f_charbig = '####updated per update trigger####';
 
10684
END|
 
10685
UPDATE t1
 
10686
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10687
f_charbig = '####updated per update statement itself####';
 
10688
        
 
10689
# check trigger-9 success:      1
 
10690
DROP TRIGGER trg_2;
 
10691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10693
f_charbig = CONCAT('===',f_char1,'===');
 
10694
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10695
BEGIN
 
10696
SET new.f_int1 = new.f_int1 + @max_row,
 
10697
new.f_int2 = new.f_int2 - @max_row,
 
10698
new.f_charbig = '####updated per update trigger####';
 
10699
END|
 
10700
UPDATE t1
 
10701
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10702
f_charbig = '####updated per update statement itself####';
 
10703
        
 
10704
# check trigger-10 success:     1
 
10705
DROP TRIGGER trg_2;
 
10706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10708
f_charbig = CONCAT('===',f_char1,'===');
 
10709
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10710
BEGIN
 
10711
SET new.f_int1 = @my_max1 + @counter,
 
10712
new.f_int2 = @my_min2 - @counter,
 
10713
new.f_charbig = '####updated per insert trigger####';
 
10714
SET @counter = @counter + 1;
 
10715
END|
 
10716
SET @counter = 1;
 
10717
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10718
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10719
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10720
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10722
ORDER BY f_int1;
 
10723
DROP TRIGGER trg_3;
 
10724
        
 
10725
# check trigger-11 success:     1
 
10726
DELETE FROM t1
 
10727
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10728
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10729
AND f_charbig = '####updated per insert trigger####';
 
10730
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10731
BEGIN
 
10732
SET new.f_int1 = @my_max1 + @counter,
 
10733
new.f_int2 = @my_min2 - @counter,
 
10734
new.f_charbig = '####updated per insert trigger####';
 
10735
SET @counter = @counter + 1;
 
10736
END|
 
10737
SET @counter = 1;
 
10738
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10739
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10740
SELECT CAST(f_int1 AS CHAR),
 
10741
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10743
ORDER BY f_int1;
 
10744
DROP TRIGGER trg_3;
 
10745
        
 
10746
# check trigger-12 success:     1
 
10747
DELETE FROM t1
 
10748
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10749
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10750
AND f_charbig = '####updated per insert trigger####';
 
10751
ANALYZE  TABLE t1;
 
10752
Table   Op      Msg_type        Msg_text
 
10753
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
10754
CHECK    TABLE t1 EXTENDED;
 
10755
Table   Op      Msg_type        Msg_text
 
10756
test.t1 check   note    The storage engine for the table doesn't support check
 
10757
CHECKSUM TABLE t1 EXTENDED;
 
10758
Table   Checksum
 
10759
test.t1 <some_value>
 
10760
OPTIMIZE TABLE t1;
 
10761
Table   Op      Msg_type        Msg_text
 
10762
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
10763
# check layout success:    1
 
10764
REPAIR   TABLE t1 EXTENDED;
 
10765
Table   Op      Msg_type        Msg_text
 
10766
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10767
# check layout success:    1
 
10768
TRUNCATE t1;
 
10769
        
 
10770
# check TRUNCATE success:       1
 
10771
# check layout success:    1
 
10772
# End usability test (inc/partition_check.inc)
 
10773
DROP TABLE t1;
 
10774
CREATE TABLE t1 (
 
10775
f_int1 INTEGER,
 
10776
f_int2 INTEGER,
 
10777
f_char1 CHAR(20),
 
10778
f_char2 CHAR(20),
 
10779
f_charbig VARCHAR(1000)
 
10780
 
 
10781
)
 
10782
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
10783
(PARTITION parta VALUES LESS THAN (0),
 
10784
PARTITION partb VALUES LESS THAN (5),
 
10785
PARTITION partc VALUES LESS THAN (10),
 
10786
PARTITION partd VALUES LESS THAN (2147483646));
 
10787
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10788
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10789
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10790
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
10791
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10792
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10793
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10794
# Start usability test (inc/partition_check.inc)
 
10795
create_command
 
10796
SHOW CREATE TABLE t1;
 
10797
Table   Create Table
 
10798
t1      CREATE TABLE `t1` (
 
10799
  `f_int1` int(11) DEFAULT NULL,
 
10800
  `f_int2` int(11) DEFAULT NULL,
 
10801
  `f_char1` char(20) DEFAULT NULL,
 
10802
  `f_char2` char(20) DEFAULT NULL,
 
10803
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10804
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
10805
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
10806
 
 
10807
unified filelist
 
10808
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
10809
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
10810
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
10811
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
10812
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
10813
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
10814
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
10815
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
10816
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
10817
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
10818
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
10819
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
10820
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
10821
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
10822
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
10823
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
10824
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
10825
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
10826
 
 
10827
# check prerequisites-1 success:    1
 
10828
# check COUNT(*) success:    1
 
10829
# check MIN/MAX(f_int1) success:    1
 
10830
# check MIN/MAX(f_int2) success:    1
 
10831
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10832
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10833
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10834
WHERE f_int1 IN (2,3);
 
10835
ERROR 23000: Can't write; duplicate key in table 't1'
 
10836
# check prerequisites-3 success:    1
 
10837
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10838
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10839
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10840
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10841
WHERE f_int1 IN (2,3);
 
10842
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10843
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10844
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10845
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10846
WHERE f_int1 IN (2,3);
 
10847
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10848
# check read via f_int1 success: 1
 
10849
# check read via f_int2 success: 1
 
10850
        
 
10851
# check multiple-1 success:     1
 
10852
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10853
        
 
10854
# check multiple-2 success:     1
 
10855
INSERT INTO t1 SELECT * FROM t0_template
 
10856
WHERE MOD(f_int1,3) = 0;
 
10857
        
 
10858
# check multiple-3 success:     1
 
10859
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10860
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10861
AND @max_row_div2 + @max_row_div4;
 
10862
        
 
10863
# check multiple-4 success:     1
 
10864
DELETE FROM t1
 
10865
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10866
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10867
        
 
10868
# check multiple-5 success:     1
 
10869
SELECT COUNT(*) INTO @try_count FROM t0_template
 
10870
WHERE MOD(f_int1,3) = 0
 
10871
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10872
SELECT COUNT(*) INTO @clash_count
 
10873
FROM t1 INNER JOIN t0_template USING(f_int1)
 
10874
WHERE MOD(f_int1,3) = 0
 
10875
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10876
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10877
INSERT INTO t1
 
10878
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10879
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10880
f_charbig = '#SINGLE#';
 
10881
        
 
10882
# check single-1 success:       1
 
10883
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10884
INSERT INTO t1
 
10885
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10886
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10887
f_charbig = '#SINGLE#';
 
10888
        
 
10889
# check single-2 success:       1
 
10890
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10891
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10892
UPDATE t1 SET f_int1 = @cur_value2
 
10893
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10894
        
 
10895
# check single-3 success:       1
 
10896
SET @cur_value1= -1;
 
10897
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10898
UPDATE t1 SET f_int1 = @cur_value1
 
10899
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10900
        
 
10901
# check single-4 success:       1
 
10902
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10903
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10904
        
 
10905
# check single-5 success:       1
 
10906
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10907
        
 
10908
# check single-6 success:       1
 
10909
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10910
ERROR HY000: Table has no partition for value 2147483647
 
10911
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10912
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10913
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10914
f_charbig = '#NULL#';
 
10915
INSERT INTO t1
 
10916
SET f_int1 = NULL , f_int2 = -@max_row,
 
10917
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10918
f_charbig = '#NULL#';
 
10919
# check null success:    1
 
10920
        
 
10921
# check null-1 success:         1
 
10922
UPDATE t1 SET f_int1 = -@max_row
 
10923
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10924
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10925
        
 
10926
# check null-2 success:         1
 
10927
UPDATE t1 SET f_int1 = NULL
 
10928
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10929
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10930
        
 
10931
# check null-3 success:         1
 
10932
DELETE FROM t1
 
10933
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10934
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10935
        
 
10936
# check null-4 success:         1
 
10937
DELETE FROM t1
 
10938
WHERE f_int1 = 0 AND f_int2 = 0
 
10939
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10940
AND f_charbig = '#NULL#';
 
10941
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10942
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10943
   FROM t0_template source_tab
 
10944
WHERE MOD(f_int1,3) = 0
 
10945
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10946
ON DUPLICATE KEY
 
10947
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10948
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10949
f_charbig = 'was updated';
 
10950
        
 
10951
# check unique-1-a success:     1
 
10952
        
 
10953
# check unique-1-b success:     1
 
10954
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10955
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10956
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10957
f_charbig = CONCAT('===',f_char1,'===')
 
10958
WHERE f_charbig = 'was updated';
 
10959
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10960
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10961
   FROM t0_template source_tab
 
10962
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10963
        
 
10964
# check replace success:        1
 
10965
DELETE FROM t1
 
10966
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10967
DELETE FROM t1
 
10968
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10969
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10970
UPDATE t1 SET f_int2 = f_int1,
 
10971
f_char1 = CAST(f_int1 AS CHAR),
 
10972
f_char2 = CAST(f_int1 AS CHAR),
 
10973
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10974
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10975
SET AUTOCOMMIT= 0;
 
10976
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10977
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10978
FROM t0_template source_tab
 
10979
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10980
        
 
10981
# check transactions-1 success:         1
 
10982
COMMIT WORK;
 
10983
        
 
10984
# check transactions-2 success:         1
 
10985
ROLLBACK WORK;
 
10986
        
 
10987
# check transactions-3 success:         1
 
10988
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10989
COMMIT WORK;
 
10990
ROLLBACK WORK;
 
10991
        
 
10992
# check transactions-4 success:         1
 
10993
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10994
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10995
FROM t0_template source_tab
 
10996
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10997
        
 
10998
# check transactions-5 success:         1
 
10999
ROLLBACK WORK;
 
11000
Warnings:
 
11001
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11002
        
 
11003
# check transactions-6 success:         1
 
11004
# INFO: Storage engine used for t1 seems to be not transactional.
 
11005
COMMIT;
 
11006
        
 
11007
# check transactions-7 success:         1
 
11008
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11009
COMMIT WORK;
 
11010
SET @@session.sql_mode = 'traditional';
 
11011
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11012
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11013
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11014
'', '', 'was inserted' FROM t0_template
 
11015
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11016
ERROR 22012: Division by 0
 
11017
COMMIT;
 
11018
        
 
11019
# check transactions-8 success:         1
 
11020
# INFO: Storage engine used for t1 seems to be unable to revert
 
11021
#       changes made by the failing statement.
 
11022
SET @@session.sql_mode = '';
 
11023
SET AUTOCOMMIT= 1;
 
11024
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11025
COMMIT WORK;
 
11026
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11027
        
 
11028
# check special-1 success:      1
 
11029
UPDATE t1 SET f_charbig = '';
 
11030
        
 
11031
# check special-2 success:      1
 
11032
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11033
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11034
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11035
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11037
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11038
'just inserted' FROM t0_template
 
11039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11040
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11041
BEGIN
 
11042
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11043
f_charbig = 'updated by trigger'
 
11044
      WHERE f_int1 = new.f_int1;
 
11045
END|
 
11046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11047
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11049
        
 
11050
# check trigger-1 success:      1
 
11051
DROP TRIGGER trg_1;
 
11052
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11053
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11054
f_charbig = 'just inserted'
 
11055
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11056
DELETE FROM t0_aux
 
11057
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11059
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11060
'just inserted' FROM t0_template
 
11061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11062
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11063
BEGIN
 
11064
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11065
f_charbig = 'updated by trigger'
 
11066
      WHERE f_int1 = new.f_int1;
 
11067
END|
 
11068
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11069
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11070
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11071
        
 
11072
# check trigger-2 success:      1
 
11073
DROP TRIGGER trg_1;
 
11074
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11075
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11076
f_charbig = 'just inserted'
 
11077
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11078
DELETE FROM t0_aux
 
11079
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11081
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11082
'just inserted' FROM t0_template
 
11083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11084
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11085
BEGIN
 
11086
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11087
f_charbig = 'updated by trigger'
 
11088
      WHERE f_int1 = new.f_int1;
 
11089
END|
 
11090
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11091
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11092
        
 
11093
# check trigger-3 success:      1
 
11094
DROP TRIGGER trg_1;
 
11095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11097
f_charbig = 'just inserted'
 
11098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11099
DELETE FROM t0_aux
 
11100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11102
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11103
'just inserted' FROM t0_template
 
11104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11105
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11106
BEGIN
 
11107
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11108
f_charbig = 'updated by trigger'
 
11109
      WHERE f_int1 = - old.f_int1;
 
11110
END|
 
11111
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11112
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11113
        
 
11114
# check trigger-4 success:      1
 
11115
DROP TRIGGER trg_1;
 
11116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11118
f_charbig = 'just inserted'
 
11119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11120
DELETE FROM t0_aux
 
11121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11124
'just inserted' FROM t0_template
 
11125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11126
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11127
BEGIN
 
11128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11129
f_charbig = 'updated by trigger'
 
11130
      WHERE f_int1 = new.f_int1;
 
11131
END|
 
11132
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11133
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11134
        
 
11135
# check trigger-5 success:      1
 
11136
DROP TRIGGER trg_1;
 
11137
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11138
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11139
f_charbig = 'just inserted'
 
11140
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11141
DELETE FROM t0_aux
 
11142
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11144
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11145
'just inserted' FROM t0_template
 
11146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11147
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11148
BEGIN
 
11149
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11150
f_charbig = 'updated by trigger'
 
11151
      WHERE f_int1 = - old.f_int1;
 
11152
END|
 
11153
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11154
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11155
        
 
11156
# check trigger-6 success:      1
 
11157
DROP TRIGGER trg_1;
 
11158
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11159
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11160
f_charbig = 'just inserted'
 
11161
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11162
DELETE FROM t0_aux
 
11163
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11164
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11165
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11166
'just inserted' FROM t0_template
 
11167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11168
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11169
BEGIN
 
11170
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11171
f_charbig = 'updated by trigger'
 
11172
      WHERE f_int1 = - old.f_int1;
 
11173
END|
 
11174
DELETE FROM t0_aux
 
11175
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11176
        
 
11177
# check trigger-7 success:      1
 
11178
DROP TRIGGER trg_1;
 
11179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11181
f_charbig = 'just inserted'
 
11182
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11183
DELETE FROM t0_aux
 
11184
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11185
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11186
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11187
'just inserted' FROM t0_template
 
11188
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11189
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11190
BEGIN
 
11191
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11192
f_charbig = 'updated by trigger'
 
11193
      WHERE f_int1 = - old.f_int1;
 
11194
END|
 
11195
DELETE FROM t0_aux
 
11196
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11197
        
 
11198
# check trigger-8 success:      1
 
11199
DROP TRIGGER trg_1;
 
11200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11202
f_charbig = 'just inserted'
 
11203
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11204
DELETE FROM t0_aux
 
11205
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11206
DELETE FROM t1
 
11207
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11208
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11209
BEGIN
 
11210
SET new.f_int1 = old.f_int1 + @max_row,
 
11211
new.f_int2 = old.f_int2 - @max_row,
 
11212
new.f_charbig = '####updated per update trigger####';
 
11213
END|
 
11214
UPDATE t1
 
11215
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11216
f_charbig = '####updated per update statement itself####';
 
11217
        
 
11218
# check trigger-9 success:      1
 
11219
DROP TRIGGER trg_2;
 
11220
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11221
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11222
f_charbig = CONCAT('===',f_char1,'===');
 
11223
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11224
BEGIN
 
11225
SET new.f_int1 = new.f_int1 + @max_row,
 
11226
new.f_int2 = new.f_int2 - @max_row,
 
11227
new.f_charbig = '####updated per update trigger####';
 
11228
END|
 
11229
UPDATE t1
 
11230
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11231
f_charbig = '####updated per update statement itself####';
 
11232
        
 
11233
# check trigger-10 success:     1
 
11234
DROP TRIGGER trg_2;
 
11235
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11236
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11237
f_charbig = CONCAT('===',f_char1,'===');
 
11238
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11239
BEGIN
 
11240
SET new.f_int1 = @my_max1 + @counter,
 
11241
new.f_int2 = @my_min2 - @counter,
 
11242
new.f_charbig = '####updated per insert trigger####';
 
11243
SET @counter = @counter + 1;
 
11244
END|
 
11245
SET @counter = 1;
 
11246
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11247
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11248
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11249
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11251
ORDER BY f_int1;
 
11252
DROP TRIGGER trg_3;
 
11253
        
 
11254
# check trigger-11 success:     1
 
11255
DELETE FROM t1
 
11256
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11257
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11258
AND f_charbig = '####updated per insert trigger####';
 
11259
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11260
BEGIN
 
11261
SET new.f_int1 = @my_max1 + @counter,
 
11262
new.f_int2 = @my_min2 - @counter,
 
11263
new.f_charbig = '####updated per insert trigger####';
 
11264
SET @counter = @counter + 1;
 
11265
END|
 
11266
SET @counter = 1;
 
11267
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11268
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11269
SELECT CAST(f_int1 AS CHAR),
 
11270
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11272
ORDER BY f_int1;
 
11273
DROP TRIGGER trg_3;
 
11274
        
 
11275
# check trigger-12 success:     1
 
11276
DELETE FROM t1
 
11277
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11278
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11279
AND f_charbig = '####updated per insert trigger####';
 
11280
ANALYZE  TABLE t1;
 
11281
Table   Op      Msg_type        Msg_text
 
11282
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
11283
CHECK    TABLE t1 EXTENDED;
 
11284
Table   Op      Msg_type        Msg_text
 
11285
test.t1 check   note    The storage engine for the table doesn't support check
 
11286
CHECKSUM TABLE t1 EXTENDED;
 
11287
Table   Checksum
 
11288
test.t1 <some_value>
 
11289
OPTIMIZE TABLE t1;
 
11290
Table   Op      Msg_type        Msg_text
 
11291
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
11292
# check layout success:    1
 
11293
REPAIR   TABLE t1 EXTENDED;
 
11294
Table   Op      Msg_type        Msg_text
 
11295
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11296
# check layout success:    1
 
11297
TRUNCATE t1;
 
11298
        
 
11299
# check TRUNCATE success:       1
 
11300
# check layout success:    1
 
11301
# End usability test (inc/partition_check.inc)
 
11302
DROP TABLE t1;
 
11303
CREATE TABLE t1 (
 
11304
f_int1 INTEGER,
 
11305
f_int2 INTEGER,
 
11306
f_char1 CHAR(20),
 
11307
f_char2 CHAR(20),
 
11308
f_charbig VARCHAR(1000)
 
11309
 
 
11310
)
 
11311
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
11312
(PARTITION part1 VALUES LESS THAN (0)
 
11313
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
11314
PARTITION part2 VALUES LESS THAN (5)
 
11315
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
11316
PARTITION part3 VALUES LESS THAN (10)
 
11317
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
11318
PARTITION part4 VALUES LESS THAN (2147483646)
 
11319
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
11320
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11321
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11322
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11323
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
11324
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11325
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11326
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11327
# Start usability test (inc/partition_check.inc)
 
11328
create_command
 
11329
SHOW CREATE TABLE t1;
 
11330
Table   Create Table
 
11331
t1      CREATE TABLE `t1` (
 
11332
  `f_int1` int(11) DEFAULT NULL,
 
11333
  `f_int2` int(11) DEFAULT NULL,
 
11334
  `f_char1` char(20) DEFAULT NULL,
 
11335
  `f_char2` char(20) DEFAULT NULL,
 
11336
  `f_charbig` varchar(1000) DEFAULT NULL,
 
11337
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
11338
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
11339
 
 
11340
unified filelist
 
11341
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
11342
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
11343
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
11344
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
11345
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
11346
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
11347
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
11348
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
11349
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
11350
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
11351
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
11352
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
11353
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
11354
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
11355
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
11356
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
11357
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
11358
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
11359
 
 
11360
# check prerequisites-1 success:    1
 
11361
# check COUNT(*) success:    1
 
11362
# check MIN/MAX(f_int1) success:    1
 
11363
# check MIN/MAX(f_int2) success:    1
 
11364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11366
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11367
WHERE f_int1 IN (2,3);
 
11368
ERROR 23000: Can't write; duplicate key in table 't1'
 
11369
# check prerequisites-3 success:    1
 
11370
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
11371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11372
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11373
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11374
WHERE f_int1 IN (2,3);
 
11375
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11377
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11378
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11379
WHERE f_int1 IN (2,3);
 
11380
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11381
# check read via f_int1 success: 1
 
11382
# check read via f_int2 success: 1
 
11383
        
 
11384
# check multiple-1 success:     1
 
11385
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11386
        
 
11387
# check multiple-2 success:     1
 
11388
INSERT INTO t1 SELECT * FROM t0_template
 
11389
WHERE MOD(f_int1,3) = 0;
 
11390
        
 
11391
# check multiple-3 success:     1
 
11392
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11393
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11394
AND @max_row_div2 + @max_row_div4;
 
11395
        
 
11396
# check multiple-4 success:     1
 
11397
DELETE FROM t1
 
11398
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11399
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11400
        
 
11401
# check multiple-5 success:     1
 
11402
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11403
WHERE MOD(f_int1,3) = 0
 
11404
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11405
SELECT COUNT(*) INTO @clash_count
 
11406
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11407
WHERE MOD(f_int1,3) = 0
 
11408
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11409
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11410
INSERT INTO t1
 
11411
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11412
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11413
f_charbig = '#SINGLE#';
 
11414
        
 
11415
# check single-1 success:       1
 
11416
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11417
INSERT INTO t1
 
11418
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11419
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11420
f_charbig = '#SINGLE#';
 
11421
        
 
11422
# check single-2 success:       1
 
11423
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11424
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11425
UPDATE t1 SET f_int1 = @cur_value2
 
11426
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11427
        
 
11428
# check single-3 success:       1
 
11429
SET @cur_value1= -1;
 
11430
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11431
UPDATE t1 SET f_int1 = @cur_value1
 
11432
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11433
        
 
11434
# check single-4 success:       1
 
11435
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11436
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11437
        
 
11438
# check single-5 success:       1
 
11439
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11440
        
 
11441
# check single-6 success:       1
 
11442
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11443
ERROR HY000: Table has no partition for value 2147483647
 
11444
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11445
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11446
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11447
f_charbig = '#NULL#';
 
11448
INSERT INTO t1
 
11449
SET f_int1 = NULL , f_int2 = -@max_row,
 
11450
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11451
f_charbig = '#NULL#';
 
11452
# check null success:    1
 
11453
        
 
11454
# check null-1 success:         1
 
11455
UPDATE t1 SET f_int1 = -@max_row
 
11456
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11457
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11458
        
 
11459
# check null-2 success:         1
 
11460
UPDATE t1 SET f_int1 = NULL
 
11461
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11462
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11463
        
 
11464
# check null-3 success:         1
 
11465
DELETE FROM t1
 
11466
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11467
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11468
        
 
11469
# check null-4 success:         1
 
11470
DELETE FROM t1
 
11471
WHERE f_int1 = 0 AND f_int2 = 0
 
11472
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11473
AND f_charbig = '#NULL#';
 
11474
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11475
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11476
   FROM t0_template source_tab
 
11477
WHERE MOD(f_int1,3) = 0
 
11478
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
11479
ON DUPLICATE KEY
 
11480
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
11481
f_int2 = 2 * @max_row + source_tab.f_int1,
 
11482
f_charbig = 'was updated';
 
11483
        
 
11484
# check unique-1-a success:     1
 
11485
        
 
11486
# check unique-1-b success:     1
 
11487
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11490
f_charbig = CONCAT('===',f_char1,'===')
 
11491
WHERE f_charbig = 'was updated';
 
11492
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11493
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
11494
   FROM t0_template source_tab
 
11495
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11496
        
 
11497
# check replace success:        1
 
11498
DELETE FROM t1
 
11499
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
11500
DELETE FROM t1
 
11501
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
11502
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
11503
UPDATE t1 SET f_int2 = f_int1,
 
11504
f_char1 = CAST(f_int1 AS CHAR),
 
11505
f_char2 = CAST(f_int1 AS CHAR),
 
11506
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
11507
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
11508
SET AUTOCOMMIT= 0;
 
11509
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11510
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11511
FROM t0_template source_tab
 
11512
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11513
        
 
11514
# check transactions-1 success:         1
 
11515
COMMIT WORK;
 
11516
        
 
11517
# check transactions-2 success:         1
 
11518
ROLLBACK WORK;
 
11519
        
 
11520
# check transactions-3 success:         1
 
11521
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11522
COMMIT WORK;
 
11523
ROLLBACK WORK;
 
11524
        
 
11525
# check transactions-4 success:         1
 
11526
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11527
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11528
FROM t0_template source_tab
 
11529
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11530
        
 
11531
# check transactions-5 success:         1
 
11532
ROLLBACK WORK;
 
11533
Warnings:
 
11534
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11535
        
 
11536
# check transactions-6 success:         1
 
11537
# INFO: Storage engine used for t1 seems to be not transactional.
 
11538
COMMIT;
 
11539
        
 
11540
# check transactions-7 success:         1
 
11541
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11542
COMMIT WORK;
 
11543
SET @@session.sql_mode = 'traditional';
 
11544
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11545
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11546
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11547
'', '', 'was inserted' FROM t0_template
 
11548
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11549
ERROR 22012: Division by 0
 
11550
COMMIT;
 
11551
        
 
11552
# check transactions-8 success:         1
 
11553
# INFO: Storage engine used for t1 seems to be unable to revert
 
11554
#       changes made by the failing statement.
 
11555
SET @@session.sql_mode = '';
 
11556
SET AUTOCOMMIT= 1;
 
11557
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11558
COMMIT WORK;
 
11559
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11560
        
 
11561
# check special-1 success:      1
 
11562
UPDATE t1 SET f_charbig = '';
 
11563
        
 
11564
# check special-2 success:      1
 
11565
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11566
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11567
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11570
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11571
'just inserted' FROM t0_template
 
11572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11573
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11574
BEGIN
 
11575
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11576
f_charbig = 'updated by trigger'
 
11577
      WHERE f_int1 = new.f_int1;
 
11578
END|
 
11579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11580
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11582
        
 
11583
# check trigger-1 success:      1
 
11584
DROP TRIGGER trg_1;
 
11585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11587
f_charbig = 'just inserted'
 
11588
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11589
DELETE FROM t0_aux
 
11590
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11592
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11593
'just inserted' FROM t0_template
 
11594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11595
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11596
BEGIN
 
11597
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11598
f_charbig = 'updated by trigger'
 
11599
      WHERE f_int1 = new.f_int1;
 
11600
END|
 
11601
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11602
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11604
        
 
11605
# check trigger-2 success:      1
 
11606
DROP TRIGGER trg_1;
 
11607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11609
f_charbig = 'just inserted'
 
11610
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11611
DELETE FROM t0_aux
 
11612
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11613
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11614
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11615
'just inserted' FROM t0_template
 
11616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11617
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11618
BEGIN
 
11619
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11620
f_charbig = 'updated by trigger'
 
11621
      WHERE f_int1 = new.f_int1;
 
11622
END|
 
11623
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11624
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11625
        
 
11626
# check trigger-3 success:      1
 
11627
DROP TRIGGER trg_1;
 
11628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11630
f_charbig = 'just inserted'
 
11631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11632
DELETE FROM t0_aux
 
11633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11636
'just inserted' FROM t0_template
 
11637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11638
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11639
BEGIN
 
11640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11641
f_charbig = 'updated by trigger'
 
11642
      WHERE f_int1 = - old.f_int1;
 
11643
END|
 
11644
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11646
        
 
11647
# check trigger-4 success:      1
 
11648
DROP TRIGGER trg_1;
 
11649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11651
f_charbig = 'just inserted'
 
11652
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11653
DELETE FROM t0_aux
 
11654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11655
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11656
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11657
'just inserted' FROM t0_template
 
11658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11659
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11660
BEGIN
 
11661
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11662
f_charbig = 'updated by trigger'
 
11663
      WHERE f_int1 = new.f_int1;
 
11664
END|
 
11665
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11666
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11667
        
 
11668
# check trigger-5 success:      1
 
11669
DROP TRIGGER trg_1;
 
11670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11672
f_charbig = 'just inserted'
 
11673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11674
DELETE FROM t0_aux
 
11675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11678
'just inserted' FROM t0_template
 
11679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11680
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11681
BEGIN
 
11682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11683
f_charbig = 'updated by trigger'
 
11684
      WHERE f_int1 = - old.f_int1;
 
11685
END|
 
11686
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11687
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11688
        
 
11689
# check trigger-6 success:      1
 
11690
DROP TRIGGER trg_1;
 
11691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11693
f_charbig = 'just inserted'
 
11694
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11695
DELETE FROM t0_aux
 
11696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11699
'just inserted' FROM t0_template
 
11700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11701
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11702
BEGIN
 
11703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11704
f_charbig = 'updated by trigger'
 
11705
      WHERE f_int1 = - old.f_int1;
 
11706
END|
 
11707
DELETE FROM t0_aux
 
11708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11709
        
 
11710
# check trigger-7 success:      1
 
11711
DROP TRIGGER trg_1;
 
11712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11714
f_charbig = 'just inserted'
 
11715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11716
DELETE FROM t0_aux
 
11717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11720
'just inserted' FROM t0_template
 
11721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11722
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11723
BEGIN
 
11724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11725
f_charbig = 'updated by trigger'
 
11726
      WHERE f_int1 = - old.f_int1;
 
11727
END|
 
11728
DELETE FROM t0_aux
 
11729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11730
        
 
11731
# check trigger-8 success:      1
 
11732
DROP TRIGGER trg_1;
 
11733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11735
f_charbig = 'just inserted'
 
11736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11737
DELETE FROM t0_aux
 
11738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11739
DELETE FROM t1
 
11740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11741
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11742
BEGIN
 
11743
SET new.f_int1 = old.f_int1 + @max_row,
 
11744
new.f_int2 = old.f_int2 - @max_row,
 
11745
new.f_charbig = '####updated per update trigger####';
 
11746
END|
 
11747
UPDATE t1
 
11748
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11749
f_charbig = '####updated per update statement itself####';
 
11750
        
 
11751
# check trigger-9 success:      1
 
11752
DROP TRIGGER trg_2;
 
11753
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11754
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11755
f_charbig = CONCAT('===',f_char1,'===');
 
11756
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11757
BEGIN
 
11758
SET new.f_int1 = new.f_int1 + @max_row,
 
11759
new.f_int2 = new.f_int2 - @max_row,
 
11760
new.f_charbig = '####updated per update trigger####';
 
11761
END|
 
11762
UPDATE t1
 
11763
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11764
f_charbig = '####updated per update statement itself####';
 
11765
        
 
11766
# check trigger-10 success:     1
 
11767
DROP TRIGGER trg_2;
 
11768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11770
f_charbig = CONCAT('===',f_char1,'===');
 
11771
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11772
BEGIN
 
11773
SET new.f_int1 = @my_max1 + @counter,
 
11774
new.f_int2 = @my_min2 - @counter,
 
11775
new.f_charbig = '####updated per insert trigger####';
 
11776
SET @counter = @counter + 1;
 
11777
END|
 
11778
SET @counter = 1;
 
11779
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11781
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11782
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11784
ORDER BY f_int1;
 
11785
DROP TRIGGER trg_3;
 
11786
        
 
11787
# check trigger-11 success:     1
 
11788
DELETE FROM t1
 
11789
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11790
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11791
AND f_charbig = '####updated per insert trigger####';
 
11792
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11793
BEGIN
 
11794
SET new.f_int1 = @my_max1 + @counter,
 
11795
new.f_int2 = @my_min2 - @counter,
 
11796
new.f_charbig = '####updated per insert trigger####';
 
11797
SET @counter = @counter + 1;
 
11798
END|
 
11799
SET @counter = 1;
 
11800
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11801
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11802
SELECT CAST(f_int1 AS CHAR),
 
11803
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11804
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11805
ORDER BY f_int1;
 
11806
DROP TRIGGER trg_3;
 
11807
        
 
11808
# check trigger-12 success:     1
 
11809
DELETE FROM t1
 
11810
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11811
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11812
AND f_charbig = '####updated per insert trigger####';
 
11813
ANALYZE  TABLE t1;
 
11814
Table   Op      Msg_type        Msg_text
 
11815
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
11816
CHECK    TABLE t1 EXTENDED;
 
11817
Table   Op      Msg_type        Msg_text
 
11818
test.t1 check   note    The storage engine for the table doesn't support check
 
11819
CHECKSUM TABLE t1 EXTENDED;
 
11820
Table   Checksum
 
11821
test.t1 <some_value>
 
11822
OPTIMIZE TABLE t1;
 
11823
Table   Op      Msg_type        Msg_text
 
11824
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
11825
# check layout success:    1
 
11826
REPAIR   TABLE t1 EXTENDED;
 
11827
Table   Op      Msg_type        Msg_text
 
11828
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11829
# check layout success:    1
 
11830
TRUNCATE t1;
 
11831
        
 
11832
# check TRUNCATE success:       1
 
11833
# check layout success:    1
 
11834
# End usability test (inc/partition_check.inc)
 
11835
DROP TABLE t1;
 
11836
CREATE TABLE t1 (
 
11837
f_int1 INTEGER,
 
11838
f_int2 INTEGER,
 
11839
f_char1 CHAR(20),
 
11840
f_char2 CHAR(20),
 
11841
f_charbig VARCHAR(1000)
 
11842
 
 
11843
)
 
11844
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
11845
(PARTITION part1 VALUES IN (0)
 
11846
(SUBPARTITION sp11, SUBPARTITION sp12),
 
11847
PARTITION part2 VALUES IN (1)
 
11848
(SUBPARTITION sp21, SUBPARTITION sp22),
 
11849
PARTITION part3 VALUES IN (2)
 
11850
(SUBPARTITION sp31, SUBPARTITION sp32),
 
11851
PARTITION part4 VALUES IN (NULL)
 
11852
(SUBPARTITION sp41, SUBPARTITION sp42));
 
11853
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11854
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11855
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11856
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
11857
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11858
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11859
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11860
# Start usability test (inc/partition_check.inc)
 
11861
create_command
 
11862
SHOW CREATE TABLE t1;
 
11863
Table   Create Table
 
11864
t1      CREATE TABLE `t1` (
 
11865
  `f_int1` int(11) DEFAULT NULL,
 
11866
  `f_int2` int(11) DEFAULT NULL,
 
11867
  `f_char1` char(20) DEFAULT NULL,
 
11868
  `f_char2` char(20) DEFAULT NULL,
 
11869
  `f_charbig` varchar(1000) DEFAULT NULL,
 
11870
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
11871
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
11872
 
 
11873
unified filelist
 
11874
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
11875
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
11876
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
11877
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
11878
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
11879
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
11880
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
11881
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
11882
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
11883
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
11884
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
11885
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
11886
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
11887
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
11888
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
11889
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
11890
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
11891
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
11892
 
 
11893
# check prerequisites-1 success:    1
 
11894
# check COUNT(*) success:    1
 
11895
# check MIN/MAX(f_int1) success:    1
 
11896
# check MIN/MAX(f_int2) success:    1
 
11897
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11898
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11899
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11900
WHERE f_int1 IN (2,3);
 
11901
ERROR 23000: Can't write; duplicate key in table 't1'
 
11902
# check prerequisites-3 success:    1
 
11903
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
11904
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11905
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11906
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11907
WHERE f_int1 IN (2,3);
 
11908
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11910
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11911
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11912
WHERE f_int1 IN (2,3);
 
11913
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11914
# check read via f_int1 success: 1
 
11915
# check read via f_int2 success: 1
 
11916
        
 
11917
# check multiple-1 success:     1
 
11918
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11919
        
 
11920
# check multiple-2 success:     1
 
11921
INSERT INTO t1 SELECT * FROM t0_template
 
11922
WHERE MOD(f_int1,3) = 0;
 
11923
        
 
11924
# check multiple-3 success:     1
 
11925
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11926
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11927
AND @max_row_div2 + @max_row_div4;
 
11928
        
 
11929
# check multiple-4 success:     1
 
11930
DELETE FROM t1
 
11931
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11932
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11933
        
 
11934
# check multiple-5 success:     1
 
11935
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11936
WHERE MOD(f_int1,3) = 0
 
11937
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11938
SELECT COUNT(*) INTO @clash_count
 
11939
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11940
WHERE MOD(f_int1,3) = 0
 
11941
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11942
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11943
INSERT INTO t1
 
11944
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11945
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11946
f_charbig = '#SINGLE#';
 
11947
        
 
11948
# check single-1 success:       1
 
11949
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11950
INSERT INTO t1
 
11951
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11952
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11953
f_charbig = '#SINGLE#';
 
11954
        
 
11955
# check single-2 success:       1
 
11956
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11957
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11958
UPDATE t1 SET f_int1 = @cur_value2
 
11959
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11960
        
 
11961
# check single-3 success:       1
 
11962
SET @cur_value1= -1;
 
11963
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11964
UPDATE t1 SET f_int1 = @cur_value1
 
11965
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11966
        
 
11967
# check single-4 success:       1
 
11968
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11969
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11970
        
 
11971
# check single-5 success:       1
 
11972
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11973
        
 
11974
# check single-6 success:       1
 
11975
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11976
        
 
11977
# check single-7 success:       1
 
11978
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11979
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11980
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11981
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11982
f_charbig = '#NULL#';
 
11983
INSERT INTO t1
 
11984
SET f_int1 = NULL , f_int2 = -@max_row,
 
11985
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11986
f_charbig = '#NULL#';
 
11987
# check null success:    1
 
11988
        
 
11989
# check null-1 success:         1
 
11990
UPDATE t1 SET f_int1 = -@max_row
 
11991
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11993
        
 
11994
# check null-2 success:         1
 
11995
UPDATE t1 SET f_int1 = NULL
 
11996
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11997
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11998
        
 
11999
# check null-3 success:         1
 
12000
DELETE FROM t1
 
12001
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12002
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12003
        
 
12004
# check null-4 success:         1
 
12005
DELETE FROM t1
 
12006
WHERE f_int1 = 0 AND f_int2 = 0
 
12007
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12008
AND f_charbig = '#NULL#';
 
12009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12010
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12011
   FROM t0_template source_tab
 
12012
WHERE MOD(f_int1,3) = 0
 
12013
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12014
ON DUPLICATE KEY
 
12015
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12016
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12017
f_charbig = 'was updated';
 
12018
        
 
12019
# check unique-1-a success:     1
 
12020
        
 
12021
# check unique-1-b success:     1
 
12022
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12023
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12024
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12025
f_charbig = CONCAT('===',f_char1,'===')
 
12026
WHERE f_charbig = 'was updated';
 
12027
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12028
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
12029
   FROM t0_template source_tab
 
12030
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12031
        
 
12032
# check replace success:        1
 
12033
DELETE FROM t1
 
12034
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12035
DELETE FROM t1
 
12036
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12037
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12038
UPDATE t1 SET f_int2 = f_int1,
 
12039
f_char1 = CAST(f_int1 AS CHAR),
 
12040
f_char2 = CAST(f_int1 AS CHAR),
 
12041
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12042
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12043
SET AUTOCOMMIT= 0;
 
12044
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12045
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12046
FROM t0_template source_tab
 
12047
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12048
        
 
12049
# check transactions-1 success:         1
 
12050
COMMIT WORK;
 
12051
        
 
12052
# check transactions-2 success:         1
 
12053
ROLLBACK WORK;
 
12054
        
 
12055
# check transactions-3 success:         1
 
12056
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12057
COMMIT WORK;
 
12058
ROLLBACK WORK;
 
12059
        
 
12060
# check transactions-4 success:         1
 
12061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12062
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12063
FROM t0_template source_tab
 
12064
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12065
        
 
12066
# check transactions-5 success:         1
 
12067
ROLLBACK WORK;
 
12068
Warnings:
 
12069
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12070
        
 
12071
# check transactions-6 success:         1
 
12072
# INFO: Storage engine used for t1 seems to be not transactional.
 
12073
COMMIT;
 
12074
        
 
12075
# check transactions-7 success:         1
 
12076
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12077
COMMIT WORK;
 
12078
SET @@session.sql_mode = 'traditional';
 
12079
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12080
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12081
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12082
'', '', 'was inserted' FROM t0_template
 
12083
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12084
ERROR 22012: Division by 0
 
12085
COMMIT;
 
12086
        
 
12087
# check transactions-8 success:         1
 
12088
# INFO: Storage engine used for t1 seems to be unable to revert
 
12089
#       changes made by the failing statement.
 
12090
SET @@session.sql_mode = '';
 
12091
SET AUTOCOMMIT= 1;
 
12092
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12093
COMMIT WORK;
 
12094
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12095
        
 
12096
# check special-1 success:      1
 
12097
UPDATE t1 SET f_charbig = '';
 
12098
        
 
12099
# check special-2 success:      1
 
12100
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12101
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12102
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12105
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12106
'just inserted' FROM t0_template
 
12107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12108
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12109
BEGIN
 
12110
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12111
f_charbig = 'updated by trigger'
 
12112
      WHERE f_int1 = new.f_int1;
 
12113
END|
 
12114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12115
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12117
        
 
12118
# check trigger-1 success:      1
 
12119
DROP TRIGGER trg_1;
 
12120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12122
f_charbig = 'just inserted'
 
12123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12124
DELETE FROM t0_aux
 
12125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12128
'just inserted' FROM t0_template
 
12129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12130
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12131
BEGIN
 
12132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12133
f_charbig = 'updated by trigger'
 
12134
      WHERE f_int1 = new.f_int1;
 
12135
END|
 
12136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12137
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12139
        
 
12140
# check trigger-2 success:      1
 
12141
DROP TRIGGER trg_1;
 
12142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12144
f_charbig = 'just inserted'
 
12145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12146
DELETE FROM t0_aux
 
12147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12149
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12150
'just inserted' FROM t0_template
 
12151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12152
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12153
BEGIN
 
12154
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12155
f_charbig = 'updated by trigger'
 
12156
      WHERE f_int1 = new.f_int1;
 
12157
END|
 
12158
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12159
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12160
        
 
12161
# check trigger-3 success:      1
 
12162
DROP TRIGGER trg_1;
 
12163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12165
f_charbig = 'just inserted'
 
12166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12167
DELETE FROM t0_aux
 
12168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12171
'just inserted' FROM t0_template
 
12172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12173
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12174
BEGIN
 
12175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12176
f_charbig = 'updated by trigger'
 
12177
      WHERE f_int1 = - old.f_int1;
 
12178
END|
 
12179
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12180
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12181
        
 
12182
# check trigger-4 success:      1
 
12183
DROP TRIGGER trg_1;
 
12184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12186
f_charbig = 'just inserted'
 
12187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12188
DELETE FROM t0_aux
 
12189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12192
'just inserted' FROM t0_template
 
12193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12194
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12195
BEGIN
 
12196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12197
f_charbig = 'updated by trigger'
 
12198
      WHERE f_int1 = new.f_int1;
 
12199
END|
 
12200
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12202
        
 
12203
# check trigger-5 success:      1
 
12204
DROP TRIGGER trg_1;
 
12205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12207
f_charbig = 'just inserted'
 
12208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12209
DELETE FROM t0_aux
 
12210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12213
'just inserted' FROM t0_template
 
12214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12215
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12216
BEGIN
 
12217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12218
f_charbig = 'updated by trigger'
 
12219
      WHERE f_int1 = - old.f_int1;
 
12220
END|
 
12221
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12223
        
 
12224
# check trigger-6 success:      1
 
12225
DROP TRIGGER trg_1;
 
12226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12228
f_charbig = 'just inserted'
 
12229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12230
DELETE FROM t0_aux
 
12231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12234
'just inserted' FROM t0_template
 
12235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12236
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12237
BEGIN
 
12238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12239
f_charbig = 'updated by trigger'
 
12240
      WHERE f_int1 = - old.f_int1;
 
12241
END|
 
12242
DELETE FROM t0_aux
 
12243
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12244
        
 
12245
# check trigger-7 success:      1
 
12246
DROP TRIGGER trg_1;
 
12247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12249
f_charbig = 'just inserted'
 
12250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12251
DELETE FROM t0_aux
 
12252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12255
'just inserted' FROM t0_template
 
12256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12257
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12258
BEGIN
 
12259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12260
f_charbig = 'updated by trigger'
 
12261
      WHERE f_int1 = - old.f_int1;
 
12262
END|
 
12263
DELETE FROM t0_aux
 
12264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12265
        
 
12266
# check trigger-8 success:      1
 
12267
DROP TRIGGER trg_1;
 
12268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12270
f_charbig = 'just inserted'
 
12271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12272
DELETE FROM t0_aux
 
12273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12274
DELETE FROM t1
 
12275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12276
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12277
BEGIN
 
12278
SET new.f_int1 = old.f_int1 + @max_row,
 
12279
new.f_int2 = old.f_int2 - @max_row,
 
12280
new.f_charbig = '####updated per update trigger####';
 
12281
END|
 
12282
UPDATE t1
 
12283
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12284
f_charbig = '####updated per update statement itself####';
 
12285
        
 
12286
# check trigger-9 success:      1
 
12287
DROP TRIGGER trg_2;
 
12288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12290
f_charbig = CONCAT('===',f_char1,'===');
 
12291
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12292
BEGIN
 
12293
SET new.f_int1 = new.f_int1 + @max_row,
 
12294
new.f_int2 = new.f_int2 - @max_row,
 
12295
new.f_charbig = '####updated per update trigger####';
 
12296
END|
 
12297
UPDATE t1
 
12298
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12299
f_charbig = '####updated per update statement itself####';
 
12300
        
 
12301
# check trigger-10 success:     1
 
12302
DROP TRIGGER trg_2;
 
12303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12305
f_charbig = CONCAT('===',f_char1,'===');
 
12306
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12307
BEGIN
 
12308
SET new.f_int1 = @my_max1 + @counter,
 
12309
new.f_int2 = @my_min2 - @counter,
 
12310
new.f_charbig = '####updated per insert trigger####';
 
12311
SET @counter = @counter + 1;
 
12312
END|
 
12313
SET @counter = 1;
 
12314
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12315
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12316
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12317
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12319
ORDER BY f_int1;
 
12320
DROP TRIGGER trg_3;
 
12321
        
 
12322
# check trigger-11 success:     1
 
12323
DELETE FROM t1
 
12324
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12325
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12326
AND f_charbig = '####updated per insert trigger####';
 
12327
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12328
BEGIN
 
12329
SET new.f_int1 = @my_max1 + @counter,
 
12330
new.f_int2 = @my_min2 - @counter,
 
12331
new.f_charbig = '####updated per insert trigger####';
 
12332
SET @counter = @counter + 1;
 
12333
END|
 
12334
SET @counter = 1;
 
12335
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12336
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12337
SELECT CAST(f_int1 AS CHAR),
 
12338
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12340
ORDER BY f_int1;
 
12341
DROP TRIGGER trg_3;
 
12342
        
 
12343
# check trigger-12 success:     1
 
12344
DELETE FROM t1
 
12345
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12346
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12347
AND f_charbig = '####updated per insert trigger####';
 
12348
ANALYZE  TABLE t1;
 
12349
Table   Op      Msg_type        Msg_text
 
12350
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
12351
CHECK    TABLE t1 EXTENDED;
 
12352
Table   Op      Msg_type        Msg_text
 
12353
test.t1 check   note    The storage engine for the table doesn't support check
 
12354
CHECKSUM TABLE t1 EXTENDED;
 
12355
Table   Checksum
 
12356
test.t1 <some_value>
 
12357
OPTIMIZE TABLE t1;
 
12358
Table   Op      Msg_type        Msg_text
 
12359
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
12360
# check layout success:    1
 
12361
REPAIR   TABLE t1 EXTENDED;
 
12362
Table   Op      Msg_type        Msg_text
 
12363
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12364
# check layout success:    1
 
12365
TRUNCATE t1;
 
12366
        
 
12367
# check TRUNCATE success:       1
 
12368
# check layout success:    1
 
12369
# End usability test (inc/partition_check.inc)
 
12370
DROP TABLE t1;
 
12371
CREATE TABLE t1 (
 
12372
f_int1 INTEGER,
 
12373
f_int2 INTEGER,
 
12374
f_char1 CHAR(20),
 
12375
f_char2 CHAR(20),
 
12376
f_charbig VARCHAR(1000)
 
12377
 
 
12378
)
 
12379
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
12380
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
12381
(PARTITION part1 VALUES IN (0),
 
12382
 PARTITION part2 VALUES IN (1),
 
12383
 PARTITION part3 VALUES IN (NULL));
 
12384
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12385
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12386
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12387
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
 
12388
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12389
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12390
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12391
# Start usability test (inc/partition_check.inc)
 
12392
create_command
 
12393
SHOW CREATE TABLE t1;
 
12394
Table   Create Table
 
12395
t1      CREATE TABLE `t1` (
 
12396
  `f_int1` int(11) DEFAULT NULL,
 
12397
  `f_int2` int(11) DEFAULT NULL,
 
12398
  `f_char1` char(20) DEFAULT NULL,
 
12399
  `f_char2` char(20) DEFAULT NULL,
 
12400
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12401
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
12402
) ENGINE=MyISAM 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 = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
12403
 
 
12404
unified filelist
 
12405
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
12406
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
12407
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
12408
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
12409
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
12410
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
12411
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
12412
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
12413
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
12414
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
12415
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
12416
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
12417
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
12418
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
12419
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
12420
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
12421
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
12422
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
12423
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
12424
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
12425
 
 
12426
# check prerequisites-1 success:    1
 
12427
# check COUNT(*) success:    1
 
12428
# check MIN/MAX(f_int1) success:    1
 
12429
# check MIN/MAX(f_int2) success:    1
 
12430
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12431
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12432
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12433
WHERE f_int1 IN (2,3);
 
12434
ERROR 23000: Can't write; duplicate key in table 't1'
 
12435
# check prerequisites-3 success:    1
 
12436
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12437
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12438
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12439
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12440
WHERE f_int1 IN (2,3);
 
12441
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12442
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12443
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12444
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12445
WHERE f_int1 IN (2,3);
 
12446
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12447
# check read via f_int1 success: 1
 
12448
# check read via f_int2 success: 1
 
12449
        
 
12450
# check multiple-1 success:     1
 
12451
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12452
        
 
12453
# check multiple-2 success:     1
 
12454
INSERT INTO t1 SELECT * FROM t0_template
 
12455
WHERE MOD(f_int1,3) = 0;
 
12456
        
 
12457
# check multiple-3 success:     1
 
12458
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12459
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12460
AND @max_row_div2 + @max_row_div4;
 
12461
        
 
12462
# check multiple-4 success:     1
 
12463
DELETE FROM t1
 
12464
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12465
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12466
        
 
12467
# check multiple-5 success:     1
 
12468
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12469
WHERE MOD(f_int1,3) = 0
 
12470
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12471
SELECT COUNT(*) INTO @clash_count
 
12472
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12473
WHERE MOD(f_int1,3) = 0
 
12474
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12475
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12476
INSERT INTO t1
 
12477
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12478
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12479
f_charbig = '#SINGLE#';
 
12480
        
 
12481
# check single-1 success:       1
 
12482
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12483
INSERT INTO t1
 
12484
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12485
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12486
f_charbig = '#SINGLE#';
 
12487
        
 
12488
# check single-2 success:       1
 
12489
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12490
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12491
UPDATE t1 SET f_int1 = @cur_value2
 
12492
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12493
        
 
12494
# check single-3 success:       1
 
12495
SET @cur_value1= -1;
 
12496
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12497
UPDATE t1 SET f_int1 = @cur_value1
 
12498
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12499
        
 
12500
# check single-4 success:       1
 
12501
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12502
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12503
        
 
12504
# check single-5 success:       1
 
12505
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12506
        
 
12507
# check single-6 success:       1
 
12508
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12509
        
 
12510
# check single-7 success:       1
 
12511
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12512
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12513
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12514
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12515
f_charbig = '#NULL#';
 
12516
INSERT INTO t1
 
12517
SET f_int1 = NULL , f_int2 = -@max_row,
 
12518
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12519
f_charbig = '#NULL#';
 
12520
# check null success:    1
 
12521
        
 
12522
# check null-1 success:         1
 
12523
UPDATE t1 SET f_int1 = -@max_row
 
12524
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12525
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12526
        
 
12527
# check null-2 success:         1
 
12528
UPDATE t1 SET f_int1 = NULL
 
12529
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12530
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12531
        
 
12532
# check null-3 success:         1
 
12533
DELETE FROM t1
 
12534
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12535
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12536
        
 
12537
# check null-4 success:         1
 
12538
DELETE FROM t1
 
12539
WHERE f_int1 = 0 AND f_int2 = 0
 
12540
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12541
AND f_charbig = '#NULL#';
 
12542
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12543
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12544
   FROM t0_template source_tab
 
12545
WHERE MOD(f_int1,3) = 0
 
12546
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12547
ON DUPLICATE KEY
 
12548
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12549
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12550
f_charbig = 'was updated';
 
12551
        
 
12552
# check unique-1-a success:     1
 
12553
        
 
12554
# check unique-1-b success:     1
 
12555
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12556
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12557
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12558
f_charbig = CONCAT('===',f_char1,'===')
 
12559
WHERE f_charbig = 'was updated';
 
12560
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12561
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
12562
   FROM t0_template source_tab
 
12563
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12564
        
 
12565
# check replace success:        1
 
12566
DELETE FROM t1
 
12567
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12568
DELETE FROM t1
 
12569
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12570
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12571
UPDATE t1 SET f_int2 = f_int1,
 
12572
f_char1 = CAST(f_int1 AS CHAR),
 
12573
f_char2 = CAST(f_int1 AS CHAR),
 
12574
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12575
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12576
SET AUTOCOMMIT= 0;
 
12577
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12578
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12579
FROM t0_template source_tab
 
12580
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12581
        
 
12582
# check transactions-1 success:         1
 
12583
COMMIT WORK;
 
12584
        
 
12585
# check transactions-2 success:         1
 
12586
ROLLBACK WORK;
 
12587
        
 
12588
# check transactions-3 success:         1
 
12589
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12590
COMMIT WORK;
 
12591
ROLLBACK WORK;
 
12592
        
 
12593
# check transactions-4 success:         1
 
12594
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12595
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12596
FROM t0_template source_tab
 
12597
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12598
        
 
12599
# check transactions-5 success:         1
 
12600
ROLLBACK WORK;
 
12601
Warnings:
 
12602
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12603
        
 
12604
# check transactions-6 success:         1
 
12605
# INFO: Storage engine used for t1 seems to be not transactional.
 
12606
COMMIT;
 
12607
        
 
12608
# check transactions-7 success:         1
 
12609
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12610
COMMIT WORK;
 
12611
SET @@session.sql_mode = 'traditional';
 
12612
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12613
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12614
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12615
'', '', 'was inserted' FROM t0_template
 
12616
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12617
ERROR 22012: Division by 0
 
12618
COMMIT;
 
12619
        
 
12620
# check transactions-8 success:         1
 
12621
# INFO: Storage engine used for t1 seems to be unable to revert
 
12622
#       changes made by the failing statement.
 
12623
SET @@session.sql_mode = '';
 
12624
SET AUTOCOMMIT= 1;
 
12625
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12626
COMMIT WORK;
 
12627
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12628
        
 
12629
# check special-1 success:      1
 
12630
UPDATE t1 SET f_charbig = '';
 
12631
        
 
12632
# check special-2 success:      1
 
12633
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12634
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12635
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12636
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12639
'just inserted' FROM t0_template
 
12640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12641
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12642
BEGIN
 
12643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12644
f_charbig = 'updated by trigger'
 
12645
      WHERE f_int1 = new.f_int1;
 
12646
END|
 
12647
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12648
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12650
        
 
12651
# check trigger-1 success:      1
 
12652
DROP TRIGGER trg_1;
 
12653
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12654
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12655
f_charbig = 'just inserted'
 
12656
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12657
DELETE FROM t0_aux
 
12658
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12659
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12660
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12661
'just inserted' FROM t0_template
 
12662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12663
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12664
BEGIN
 
12665
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12666
f_charbig = 'updated by trigger'
 
12667
      WHERE f_int1 = new.f_int1;
 
12668
END|
 
12669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12670
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12672
        
 
12673
# check trigger-2 success:      1
 
12674
DROP TRIGGER trg_1;
 
12675
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12676
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12677
f_charbig = 'just inserted'
 
12678
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12679
DELETE FROM t0_aux
 
12680
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12681
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12682
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12683
'just inserted' FROM t0_template
 
12684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12685
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12686
BEGIN
 
12687
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12688
f_charbig = 'updated by trigger'
 
12689
      WHERE f_int1 = new.f_int1;
 
12690
END|
 
12691
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12692
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12693
        
 
12694
# check trigger-3 success:      1
 
12695
DROP TRIGGER trg_1;
 
12696
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12697
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12698
f_charbig = 'just inserted'
 
12699
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12700
DELETE FROM t0_aux
 
12701
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12702
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12703
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12704
'just inserted' FROM t0_template
 
12705
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12706
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12707
BEGIN
 
12708
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12709
f_charbig = 'updated by trigger'
 
12710
      WHERE f_int1 = - old.f_int1;
 
12711
END|
 
12712
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12713
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12714
        
 
12715
# check trigger-4 success:      1
 
12716
DROP TRIGGER trg_1;
 
12717
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12718
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12719
f_charbig = 'just inserted'
 
12720
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12721
DELETE FROM t0_aux
 
12722
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12723
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12724
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12725
'just inserted' FROM t0_template
 
12726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12727
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12728
BEGIN
 
12729
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12730
f_charbig = 'updated by trigger'
 
12731
      WHERE f_int1 = new.f_int1;
 
12732
END|
 
12733
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12734
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12735
        
 
12736
# check trigger-5 success:      1
 
12737
DROP TRIGGER trg_1;
 
12738
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12739
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12740
f_charbig = 'just inserted'
 
12741
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12742
DELETE FROM t0_aux
 
12743
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12744
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12745
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12746
'just inserted' FROM t0_template
 
12747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12748
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12749
BEGIN
 
12750
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12751
f_charbig = 'updated by trigger'
 
12752
      WHERE f_int1 = - old.f_int1;
 
12753
END|
 
12754
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12755
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12756
        
 
12757
# check trigger-6 success:      1
 
12758
DROP TRIGGER trg_1;
 
12759
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12760
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12761
f_charbig = 'just inserted'
 
12762
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12763
DELETE FROM t0_aux
 
12764
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12765
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12766
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12767
'just inserted' FROM t0_template
 
12768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12769
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12770
BEGIN
 
12771
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12772
f_charbig = 'updated by trigger'
 
12773
      WHERE f_int1 = - old.f_int1;
 
12774
END|
 
12775
DELETE FROM t0_aux
 
12776
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12777
        
 
12778
# check trigger-7 success:      1
 
12779
DROP TRIGGER trg_1;
 
12780
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12781
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12782
f_charbig = 'just inserted'
 
12783
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12784
DELETE FROM t0_aux
 
12785
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12787
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12788
'just inserted' FROM t0_template
 
12789
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12790
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12791
BEGIN
 
12792
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12793
f_charbig = 'updated by trigger'
 
12794
      WHERE f_int1 = - old.f_int1;
 
12795
END|
 
12796
DELETE FROM t0_aux
 
12797
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12798
        
 
12799
# check trigger-8 success:      1
 
12800
DROP TRIGGER trg_1;
 
12801
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12802
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12803
f_charbig = 'just inserted'
 
12804
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12805
DELETE FROM t0_aux
 
12806
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12807
DELETE FROM t1
 
12808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12809
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12810
BEGIN
 
12811
SET new.f_int1 = old.f_int1 + @max_row,
 
12812
new.f_int2 = old.f_int2 - @max_row,
 
12813
new.f_charbig = '####updated per update trigger####';
 
12814
END|
 
12815
UPDATE t1
 
12816
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12817
f_charbig = '####updated per update statement itself####';
 
12818
        
 
12819
# check trigger-9 success:      1
 
12820
DROP TRIGGER trg_2;
 
12821
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12822
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12823
f_charbig = CONCAT('===',f_char1,'===');
 
12824
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12825
BEGIN
 
12826
SET new.f_int1 = new.f_int1 + @max_row,
 
12827
new.f_int2 = new.f_int2 - @max_row,
 
12828
new.f_charbig = '####updated per update trigger####';
 
12829
END|
 
12830
UPDATE t1
 
12831
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12832
f_charbig = '####updated per update statement itself####';
 
12833
        
 
12834
# check trigger-10 success:     1
 
12835
DROP TRIGGER trg_2;
 
12836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12838
f_charbig = CONCAT('===',f_char1,'===');
 
12839
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12840
BEGIN
 
12841
SET new.f_int1 = @my_max1 + @counter,
 
12842
new.f_int2 = @my_min2 - @counter,
 
12843
new.f_charbig = '####updated per insert trigger####';
 
12844
SET @counter = @counter + 1;
 
12845
END|
 
12846
SET @counter = 1;
 
12847
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12848
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12849
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12850
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12851
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12852
ORDER BY f_int1;
 
12853
DROP TRIGGER trg_3;
 
12854
        
 
12855
# check trigger-11 success:     1
 
12856
DELETE FROM t1
 
12857
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12858
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12859
AND f_charbig = '####updated per insert trigger####';
 
12860
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12861
BEGIN
 
12862
SET new.f_int1 = @my_max1 + @counter,
 
12863
new.f_int2 = @my_min2 - @counter,
 
12864
new.f_charbig = '####updated per insert trigger####';
 
12865
SET @counter = @counter + 1;
 
12866
END|
 
12867
SET @counter = 1;
 
12868
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12869
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12870
SELECT CAST(f_int1 AS CHAR),
 
12871
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12873
ORDER BY f_int1;
 
12874
DROP TRIGGER trg_3;
 
12875
        
 
12876
# check trigger-12 success:     1
 
12877
DELETE FROM t1
 
12878
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12879
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12880
AND f_charbig = '####updated per insert trigger####';
 
12881
ANALYZE  TABLE t1;
 
12882
Table   Op      Msg_type        Msg_text
 
12883
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
12884
CHECK    TABLE t1 EXTENDED;
 
12885
Table   Op      Msg_type        Msg_text
 
12886
test.t1 check   note    The storage engine for the table doesn't support check
 
12887
CHECKSUM TABLE t1 EXTENDED;
 
12888
Table   Checksum
 
12889
test.t1 <some_value>
 
12890
OPTIMIZE TABLE t1;
 
12891
Table   Op      Msg_type        Msg_text
 
12892
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
12893
# check layout success:    1
 
12894
REPAIR   TABLE t1 EXTENDED;
 
12895
Table   Op      Msg_type        Msg_text
 
12896
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12897
# check layout success:    1
 
12898
TRUNCATE t1;
 
12899
        
 
12900
# check TRUNCATE success:       1
 
12901
# check layout success:    1
 
12902
# End usability test (inc/partition_check.inc)
 
12903
DROP TABLE t1;
 
12904
DROP TABLE IF EXISTS t1;
 
12905
CREATE TABLE t1 (
 
12906
f_int1 INTEGER,
 
12907
f_int2 INTEGER,
 
12908
f_char1 CHAR(20),
 
12909
f_char2 CHAR(20),
 
12910
f_charbig VARCHAR(1000)
 
12911
 
 
12912
)
 
12913
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
12914
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12915
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12916
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12917
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
12918
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12919
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12920
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12921
# Start usability test (inc/partition_check.inc)
 
12922
create_command
 
12923
SHOW CREATE TABLE t1;
 
12924
Table   Create Table
 
12925
t1      CREATE TABLE `t1` (
 
12926
  `f_int1` int(11) DEFAULT NULL,
 
12927
  `f_int2` int(11) DEFAULT NULL,
 
12928
  `f_char1` char(20) DEFAULT NULL,
 
12929
  `f_char2` char(20) DEFAULT NULL,
 
12930
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12931
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
12932
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
12933
 
 
12934
unified filelist
 
12935
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
12936
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
12937
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
12938
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
12939
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
12940
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
12941
 
 
12942
# check prerequisites-1 success:    1
 
12943
# check COUNT(*) success:    1
 
12944
# check MIN/MAX(f_int1) success:    1
 
12945
# check MIN/MAX(f_int2) success:    1
 
12946
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12947
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12948
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12949
WHERE f_int1 IN (2,3);
 
12950
ERROR 23000: Can't write; duplicate key in table 't1'
 
12951
# check prerequisites-3 success:    1
 
12952
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12953
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12954
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12955
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12956
WHERE f_int1 IN (2,3);
 
12957
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12958
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12959
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12960
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12961
WHERE f_int1 IN (2,3);
 
12962
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12963
# check read via f_int1 success: 1
 
12964
# check read via f_int2 success: 1
 
12965
        
 
12966
# check multiple-1 success:     1
 
12967
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12968
        
 
12969
# check multiple-2 success:     1
 
12970
INSERT INTO t1 SELECT * FROM t0_template
 
12971
WHERE MOD(f_int1,3) = 0;
 
12972
        
 
12973
# check multiple-3 success:     1
 
12974
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12975
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12976
AND @max_row_div2 + @max_row_div4;
 
12977
        
 
12978
# check multiple-4 success:     1
 
12979
DELETE FROM t1
 
12980
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12981
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12982
        
 
12983
# check multiple-5 success:     1
 
12984
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12985
WHERE MOD(f_int1,3) = 0
 
12986
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12987
SELECT COUNT(*) INTO @clash_count
 
12988
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12989
WHERE MOD(f_int1,3) = 0
 
12990
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12991
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12992
INSERT INTO t1
 
12993
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12994
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12995
f_charbig = '#SINGLE#';
 
12996
        
 
12997
# check single-1 success:       1
 
12998
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12999
INSERT INTO t1
 
13000
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13001
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13002
f_charbig = '#SINGLE#';
 
13003
        
 
13004
# check single-2 success:       1
 
13005
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13006
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13007
UPDATE t1 SET f_int1 = @cur_value2
 
13008
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13009
        
 
13010
# check single-3 success:       1
 
13011
SET @cur_value1= -1;
 
13012
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13013
UPDATE t1 SET f_int1 = @cur_value1
 
13014
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13015
        
 
13016
# check single-4 success:       1
 
13017
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13018
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13019
        
 
13020
# check single-5 success:       1
 
13021
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13022
        
 
13023
# check single-6 success:       1
 
13024
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13025
        
 
13026
# check single-7 success:       1
 
13027
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13028
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13029
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13030
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13031
f_charbig = '#NULL#';
 
13032
INSERT INTO t1
 
13033
SET f_int1 = NULL , f_int2 = -@max_row,
 
13034
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13035
f_charbig = '#NULL#';
 
13036
# check null success:    1
 
13037
        
 
13038
# check null-1 success:         1
 
13039
UPDATE t1 SET f_int1 = -@max_row
 
13040
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13041
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13042
        
 
13043
# check null-2 success:         1
 
13044
UPDATE t1 SET f_int1 = NULL
 
13045
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13046
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13047
        
 
13048
# check null-3 success:         1
 
13049
DELETE FROM t1
 
13050
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13051
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13052
        
 
13053
# check null-4 success:         1
 
13054
DELETE FROM t1
 
13055
WHERE f_int1 = 0 AND f_int2 = 0
 
13056
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13057
AND f_charbig = '#NULL#';
 
13058
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13059
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13060
   FROM t0_template source_tab
 
13061
WHERE MOD(f_int1,3) = 0
 
13062
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
13063
ON DUPLICATE KEY
 
13064
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
13065
f_int2 = 2 * @max_row + source_tab.f_int1,
 
13066
f_charbig = 'was updated';
 
13067
        
 
13068
# check unique-1-a success:     1
 
13069
        
 
13070
# check unique-1-b success:     1
 
13071
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13074
f_charbig = CONCAT('===',f_char1,'===')
 
13075
WHERE f_charbig = 'was updated';
 
13076
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13077
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13078
   FROM t0_template source_tab
 
13079
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13080
        
 
13081
# check replace success:        1
 
13082
DELETE FROM t1
 
13083
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13084
DELETE FROM t1
 
13085
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13086
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13087
UPDATE t1 SET f_int2 = f_int1,
 
13088
f_char1 = CAST(f_int1 AS CHAR),
 
13089
f_char2 = CAST(f_int1 AS CHAR),
 
13090
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13091
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13092
SET AUTOCOMMIT= 0;
 
13093
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13094
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13095
FROM t0_template source_tab
 
13096
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13097
        
 
13098
# check transactions-1 success:         1
 
13099
COMMIT WORK;
 
13100
        
 
13101
# check transactions-2 success:         1
 
13102
ROLLBACK WORK;
 
13103
        
 
13104
# check transactions-3 success:         1
 
13105
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13106
COMMIT WORK;
 
13107
ROLLBACK WORK;
 
13108
        
 
13109
# check transactions-4 success:         1
 
13110
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13111
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13112
FROM t0_template source_tab
 
13113
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13114
        
 
13115
# check transactions-5 success:         1
 
13116
ROLLBACK WORK;
 
13117
Warnings:
 
13118
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13119
        
 
13120
# check transactions-6 success:         1
 
13121
# INFO: Storage engine used for t1 seems to be not transactional.
 
13122
COMMIT;
 
13123
        
 
13124
# check transactions-7 success:         1
 
13125
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13126
COMMIT WORK;
 
13127
SET @@session.sql_mode = 'traditional';
 
13128
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13130
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13131
'', '', 'was inserted' FROM t0_template
 
13132
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13133
ERROR 22012: Division by 0
 
13134
COMMIT;
 
13135
        
 
13136
# check transactions-8 success:         1
 
13137
# INFO: Storage engine used for t1 seems to be unable to revert
 
13138
#       changes made by the failing statement.
 
13139
SET @@session.sql_mode = '';
 
13140
SET AUTOCOMMIT= 1;
 
13141
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13142
COMMIT WORK;
 
13143
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13144
        
 
13145
# check special-1 success:      1
 
13146
UPDATE t1 SET f_charbig = '';
 
13147
        
 
13148
# check special-2 success:      1
 
13149
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13151
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13155
'just inserted' FROM t0_template
 
13156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13157
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13158
BEGIN
 
13159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13160
f_charbig = 'updated by trigger'
 
13161
      WHERE f_int1 = new.f_int1;
 
13162
END|
 
13163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13164
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13166
        
 
13167
# check trigger-1 success:      1
 
13168
DROP TRIGGER trg_1;
 
13169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13171
f_charbig = 'just inserted'
 
13172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13173
DELETE FROM t0_aux
 
13174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13177
'just inserted' FROM t0_template
 
13178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13179
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13180
BEGIN
 
13181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13182
f_charbig = 'updated by trigger'
 
13183
      WHERE f_int1 = new.f_int1;
 
13184
END|
 
13185
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13186
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13188
        
 
13189
# check trigger-2 success:      1
 
13190
DROP TRIGGER trg_1;
 
13191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13193
f_charbig = 'just inserted'
 
13194
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13195
DELETE FROM t0_aux
 
13196
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13199
'just inserted' FROM t0_template
 
13200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13201
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13202
BEGIN
 
13203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13204
f_charbig = 'updated by trigger'
 
13205
      WHERE f_int1 = new.f_int1;
 
13206
END|
 
13207
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13208
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13209
        
 
13210
# check trigger-3 success:      1
 
13211
DROP TRIGGER trg_1;
 
13212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13214
f_charbig = 'just inserted'
 
13215
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13216
DELETE FROM t0_aux
 
13217
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13218
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13219
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13220
'just inserted' FROM t0_template
 
13221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13222
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13223
BEGIN
 
13224
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13225
f_charbig = 'updated by trigger'
 
13226
      WHERE f_int1 = - old.f_int1;
 
13227
END|
 
13228
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13229
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13230
        
 
13231
# check trigger-4 success:      1
 
13232
DROP TRIGGER trg_1;
 
13233
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13234
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13235
f_charbig = 'just inserted'
 
13236
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13237
DELETE FROM t0_aux
 
13238
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13240
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13241
'just inserted' FROM t0_template
 
13242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13243
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13244
BEGIN
 
13245
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13246
f_charbig = 'updated by trigger'
 
13247
      WHERE f_int1 = new.f_int1;
 
13248
END|
 
13249
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13250
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13251
        
 
13252
# check trigger-5 success:      1
 
13253
DROP TRIGGER trg_1;
 
13254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13256
f_charbig = 'just inserted'
 
13257
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13258
DELETE FROM t0_aux
 
13259
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13262
'just inserted' FROM t0_template
 
13263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13264
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13265
BEGIN
 
13266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13267
f_charbig = 'updated by trigger'
 
13268
      WHERE f_int1 = - old.f_int1;
 
13269
END|
 
13270
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13271
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13272
        
 
13273
# check trigger-6 success:      1
 
13274
DROP TRIGGER trg_1;
 
13275
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13276
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13277
f_charbig = 'just inserted'
 
13278
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13279
DELETE FROM t0_aux
 
13280
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13282
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13283
'just inserted' FROM t0_template
 
13284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13285
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13286
BEGIN
 
13287
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13288
f_charbig = 'updated by trigger'
 
13289
      WHERE f_int1 = - old.f_int1;
 
13290
END|
 
13291
DELETE FROM t0_aux
 
13292
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13293
        
 
13294
# check trigger-7 success:      1
 
13295
DROP TRIGGER trg_1;
 
13296
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13297
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13298
f_charbig = 'just inserted'
 
13299
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13300
DELETE FROM t0_aux
 
13301
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13302
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13303
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13304
'just inserted' FROM t0_template
 
13305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13306
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13307
BEGIN
 
13308
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13309
f_charbig = 'updated by trigger'
 
13310
      WHERE f_int1 = - old.f_int1;
 
13311
END|
 
13312
DELETE FROM t0_aux
 
13313
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13314
        
 
13315
# check trigger-8 success:      1
 
13316
DROP TRIGGER trg_1;
 
13317
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13318
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13319
f_charbig = 'just inserted'
 
13320
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13321
DELETE FROM t0_aux
 
13322
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13323
DELETE FROM t1
 
13324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13325
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13326
BEGIN
 
13327
SET new.f_int1 = old.f_int1 + @max_row,
 
13328
new.f_int2 = old.f_int2 - @max_row,
 
13329
new.f_charbig = '####updated per update trigger####';
 
13330
END|
 
13331
UPDATE t1
 
13332
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13333
f_charbig = '####updated per update statement itself####';
 
13334
        
 
13335
# check trigger-9 success:      1
 
13336
DROP TRIGGER trg_2;
 
13337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13339
f_charbig = CONCAT('===',f_char1,'===');
 
13340
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13341
BEGIN
 
13342
SET new.f_int1 = new.f_int1 + @max_row,
 
13343
new.f_int2 = new.f_int2 - @max_row,
 
13344
new.f_charbig = '####updated per update trigger####';
 
13345
END|
 
13346
UPDATE t1
 
13347
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13348
f_charbig = '####updated per update statement itself####';
 
13349
        
 
13350
# check trigger-10 success:     1
 
13351
DROP TRIGGER trg_2;
 
13352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13354
f_charbig = CONCAT('===',f_char1,'===');
 
13355
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13356
BEGIN
 
13357
SET new.f_int1 = @my_max1 + @counter,
 
13358
new.f_int2 = @my_min2 - @counter,
 
13359
new.f_charbig = '####updated per insert trigger####';
 
13360
SET @counter = @counter + 1;
 
13361
END|
 
13362
SET @counter = 1;
 
13363
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13366
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13368
ORDER BY f_int1;
 
13369
DROP TRIGGER trg_3;
 
13370
        
 
13371
# check trigger-11 success:     1
 
13372
DELETE FROM t1
 
13373
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13374
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13375
AND f_charbig = '####updated per insert trigger####';
 
13376
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13377
BEGIN
 
13378
SET new.f_int1 = @my_max1 + @counter,
 
13379
new.f_int2 = @my_min2 - @counter,
 
13380
new.f_charbig = '####updated per insert trigger####';
 
13381
SET @counter = @counter + 1;
 
13382
END|
 
13383
SET @counter = 1;
 
13384
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13385
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13386
SELECT CAST(f_int1 AS CHAR),
 
13387
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13388
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13389
ORDER BY f_int1;
 
13390
DROP TRIGGER trg_3;
 
13391
        
 
13392
# check trigger-12 success:     1
 
13393
DELETE FROM t1
 
13394
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13395
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13396
AND f_charbig = '####updated per insert trigger####';
 
13397
ANALYZE  TABLE t1;
 
13398
Table   Op      Msg_type        Msg_text
 
13399
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
13400
CHECK    TABLE t1 EXTENDED;
 
13401
Table   Op      Msg_type        Msg_text
 
13402
test.t1 check   note    The storage engine for the table doesn't support check
 
13403
CHECKSUM TABLE t1 EXTENDED;
 
13404
Table   Checksum
 
13405
test.t1 <some_value>
 
13406
OPTIMIZE TABLE t1;
 
13407
Table   Op      Msg_type        Msg_text
 
13408
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
13409
# check layout success:    1
 
13410
REPAIR   TABLE t1 EXTENDED;
 
13411
Table   Op      Msg_type        Msg_text
 
13412
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13413
# check layout success:    1
 
13414
TRUNCATE t1;
 
13415
        
 
13416
# check TRUNCATE success:       1
 
13417
# check layout success:    1
 
13418
# End usability test (inc/partition_check.inc)
 
13419
DROP TABLE t1;
 
13420
CREATE TABLE t1 (
 
13421
f_int1 INTEGER,
 
13422
f_int2 INTEGER,
 
13423
f_char1 CHAR(20),
 
13424
f_char2 CHAR(20),
 
13425
f_charbig VARCHAR(1000)
 
13426
 
 
13427
)
 
13428
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
13429
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13430
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13431
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13432
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
13433
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13434
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13435
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13436
# Start usability test (inc/partition_check.inc)
 
13437
create_command
 
13438
SHOW CREATE TABLE t1;
 
13439
Table   Create Table
 
13440
t1      CREATE TABLE `t1` (
 
13441
  `f_int1` int(11) DEFAULT NULL,
 
13442
  `f_int2` int(11) DEFAULT NULL,
 
13443
  `f_char1` char(20) DEFAULT NULL,
 
13444
  `f_char2` char(20) DEFAULT NULL,
 
13445
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13446
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
13447
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
13448
 
 
13449
unified filelist
 
13450
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
13451
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
13452
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
13453
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
13454
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
13455
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
13456
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
13457
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
13458
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
13459
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
13460
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
13461
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
13462
 
 
13463
# check prerequisites-1 success:    1
 
13464
# check COUNT(*) success:    1
 
13465
# check MIN/MAX(f_int1) success:    1
 
13466
# check MIN/MAX(f_int2) success:    1
 
13467
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13468
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13469
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13470
WHERE f_int1 IN (2,3);
 
13471
ERROR 23000: Can't write; duplicate key in table 't1'
 
13472
# check prerequisites-3 success:    1
 
13473
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
13474
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13475
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13476
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13477
WHERE f_int1 IN (2,3);
 
13478
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13479
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13480
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13481
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13482
WHERE f_int1 IN (2,3);
 
13483
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13484
# check read via f_int1 success: 1
 
13485
# check read via f_int2 success: 1
 
13486
        
 
13487
# check multiple-1 success:     1
 
13488
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13489
        
 
13490
# check multiple-2 success:     1
 
13491
INSERT INTO t1 SELECT * FROM t0_template
 
13492
WHERE MOD(f_int1,3) = 0;
 
13493
        
 
13494
# check multiple-3 success:     1
 
13495
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13496
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13497
AND @max_row_div2 + @max_row_div4;
 
13498
        
 
13499
# check multiple-4 success:     1
 
13500
DELETE FROM t1
 
13501
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13502
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13503
        
 
13504
# check multiple-5 success:     1
 
13505
SELECT COUNT(*) INTO @try_count FROM t0_template
 
13506
WHERE MOD(f_int1,3) = 0
 
13507
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13508
SELECT COUNT(*) INTO @clash_count
 
13509
FROM t1 INNER JOIN t0_template USING(f_int1)
 
13510
WHERE MOD(f_int1,3) = 0
 
13511
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13512
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13513
INSERT INTO t1
 
13514
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13515
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13516
f_charbig = '#SINGLE#';
 
13517
        
 
13518
# check single-1 success:       1
 
13519
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13520
INSERT INTO t1
 
13521
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13522
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13523
f_charbig = '#SINGLE#';
 
13524
        
 
13525
# check single-2 success:       1
 
13526
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13527
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13528
UPDATE t1 SET f_int1 = @cur_value2
 
13529
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13530
        
 
13531
# check single-3 success:       1
 
13532
SET @cur_value1= -1;
 
13533
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13534
UPDATE t1 SET f_int1 = @cur_value1
 
13535
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13536
        
 
13537
# check single-4 success:       1
 
13538
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13539
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13540
        
 
13541
# check single-5 success:       1
 
13542
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13543
        
 
13544
# check single-6 success:       1
 
13545
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13546
        
 
13547
# check single-7 success:       1
 
13548
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13549
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13550
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13551
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13552
f_charbig = '#NULL#';
 
13553
INSERT INTO t1
 
13554
SET f_int1 = NULL , f_int2 = -@max_row,
 
13555
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13556
f_charbig = '#NULL#';
 
13557
# check null success:    1
 
13558
        
 
13559
# check null-1 success:         1
 
13560
UPDATE t1 SET f_int1 = -@max_row
 
13561
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13562
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13563
        
 
13564
# check null-2 success:         1
 
13565
UPDATE t1 SET f_int1 = NULL
 
13566
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13567
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13568
        
 
13569
# check null-3 success:         1
 
13570
DELETE FROM t1
 
13571
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13572
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13573
        
 
13574
# check null-4 success:         1
 
13575
DELETE FROM t1
 
13576
WHERE f_int1 = 0 AND f_int2 = 0
 
13577
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13578
AND f_charbig = '#NULL#';
 
13579
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13580
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13581
   FROM t0_template source_tab
 
13582
WHERE MOD(f_int1,3) = 0
 
13583
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
13584
ON DUPLICATE KEY
 
13585
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
13586
f_int2 = 2 * @max_row + source_tab.f_int1,
 
13587
f_charbig = 'was updated';
 
13588
        
 
13589
# check unique-1-a success:     1
 
13590
        
 
13591
# check unique-1-b success:     1
 
13592
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13595
f_charbig = CONCAT('===',f_char1,'===')
 
13596
WHERE f_charbig = 'was updated';
 
13597
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13598
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13599
   FROM t0_template source_tab
 
13600
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13601
        
 
13602
# check replace success:        1
 
13603
DELETE FROM t1
 
13604
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13605
DELETE FROM t1
 
13606
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13607
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13608
UPDATE t1 SET f_int2 = f_int1,
 
13609
f_char1 = CAST(f_int1 AS CHAR),
 
13610
f_char2 = CAST(f_int1 AS CHAR),
 
13611
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13612
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13613
SET AUTOCOMMIT= 0;
 
13614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13615
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13616
FROM t0_template source_tab
 
13617
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13618
        
 
13619
# check transactions-1 success:         1
 
13620
COMMIT WORK;
 
13621
        
 
13622
# check transactions-2 success:         1
 
13623
ROLLBACK WORK;
 
13624
        
 
13625
# check transactions-3 success:         1
 
13626
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13627
COMMIT WORK;
 
13628
ROLLBACK WORK;
 
13629
        
 
13630
# check transactions-4 success:         1
 
13631
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13632
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13633
FROM t0_template source_tab
 
13634
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13635
        
 
13636
# check transactions-5 success:         1
 
13637
ROLLBACK WORK;
 
13638
Warnings:
 
13639
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13640
        
 
13641
# check transactions-6 success:         1
 
13642
# INFO: Storage engine used for t1 seems to be not transactional.
 
13643
COMMIT;
 
13644
        
 
13645
# check transactions-7 success:         1
 
13646
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13647
COMMIT WORK;
 
13648
SET @@session.sql_mode = 'traditional';
 
13649
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13650
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13651
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13652
'', '', 'was inserted' FROM t0_template
 
13653
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13654
ERROR 22012: Division by 0
 
13655
COMMIT;
 
13656
        
 
13657
# check transactions-8 success:         1
 
13658
# INFO: Storage engine used for t1 seems to be unable to revert
 
13659
#       changes made by the failing statement.
 
13660
SET @@session.sql_mode = '';
 
13661
SET AUTOCOMMIT= 1;
 
13662
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13663
COMMIT WORK;
 
13664
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13665
        
 
13666
# check special-1 success:      1
 
13667
UPDATE t1 SET f_charbig = '';
 
13668
        
 
13669
# check special-2 success:      1
 
13670
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13671
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13672
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13674
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13675
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13676
'just inserted' FROM t0_template
 
13677
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13678
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13679
BEGIN
 
13680
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13681
f_charbig = 'updated by trigger'
 
13682
      WHERE f_int1 = new.f_int1;
 
13683
END|
 
13684
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13685
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13687
        
 
13688
# check trigger-1 success:      1
 
13689
DROP TRIGGER trg_1;
 
13690
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13691
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13692
f_charbig = 'just inserted'
 
13693
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13694
DELETE FROM t0_aux
 
13695
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13697
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13698
'just inserted' FROM t0_template
 
13699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13700
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13701
BEGIN
 
13702
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13703
f_charbig = 'updated by trigger'
 
13704
      WHERE f_int1 = new.f_int1;
 
13705
END|
 
13706
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13707
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13709
        
 
13710
# check trigger-2 success:      1
 
13711
DROP TRIGGER trg_1;
 
13712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13714
f_charbig = 'just inserted'
 
13715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13716
DELETE FROM t0_aux
 
13717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13720
'just inserted' FROM t0_template
 
13721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13722
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13723
BEGIN
 
13724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13725
f_charbig = 'updated by trigger'
 
13726
      WHERE f_int1 = new.f_int1;
 
13727
END|
 
13728
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13730
        
 
13731
# check trigger-3 success:      1
 
13732
DROP TRIGGER trg_1;
 
13733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13735
f_charbig = 'just inserted'
 
13736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13737
DELETE FROM t0_aux
 
13738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13741
'just inserted' FROM t0_template
 
13742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13743
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13744
BEGIN
 
13745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13746
f_charbig = 'updated by trigger'
 
13747
      WHERE f_int1 = - old.f_int1;
 
13748
END|
 
13749
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13750
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13751
        
 
13752
# check trigger-4 success:      1
 
13753
DROP TRIGGER trg_1;
 
13754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13756
f_charbig = 'just inserted'
 
13757
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13758
DELETE FROM t0_aux
 
13759
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13760
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13761
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13762
'just inserted' FROM t0_template
 
13763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13764
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13765
BEGIN
 
13766
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13767
f_charbig = 'updated by trigger'
 
13768
      WHERE f_int1 = new.f_int1;
 
13769
END|
 
13770
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13771
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13772
        
 
13773
# check trigger-5 success:      1
 
13774
DROP TRIGGER trg_1;
 
13775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13777
f_charbig = 'just inserted'
 
13778
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13779
DELETE FROM t0_aux
 
13780
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13781
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13782
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13783
'just inserted' FROM t0_template
 
13784
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13785
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13786
BEGIN
 
13787
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13788
f_charbig = 'updated by trigger'
 
13789
      WHERE f_int1 = - old.f_int1;
 
13790
END|
 
13791
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13792
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13793
        
 
13794
# check trigger-6 success:      1
 
13795
DROP TRIGGER trg_1;
 
13796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13798
f_charbig = 'just inserted'
 
13799
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13800
DELETE FROM t0_aux
 
13801
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13803
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13804
'just inserted' FROM t0_template
 
13805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13806
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13807
BEGIN
 
13808
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13809
f_charbig = 'updated by trigger'
 
13810
      WHERE f_int1 = - old.f_int1;
 
13811
END|
 
13812
DELETE FROM t0_aux
 
13813
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13814
        
 
13815
# check trigger-7 success:      1
 
13816
DROP TRIGGER trg_1;
 
13817
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13818
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13819
f_charbig = 'just inserted'
 
13820
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13821
DELETE FROM t0_aux
 
13822
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13824
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13825
'just inserted' FROM t0_template
 
13826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13827
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13828
BEGIN
 
13829
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13830
f_charbig = 'updated by trigger'
 
13831
      WHERE f_int1 = - old.f_int1;
 
13832
END|
 
13833
DELETE FROM t0_aux
 
13834
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13835
        
 
13836
# check trigger-8 success:      1
 
13837
DROP TRIGGER trg_1;
 
13838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13840
f_charbig = 'just inserted'
 
13841
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13842
DELETE FROM t0_aux
 
13843
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13844
DELETE FROM t1
 
13845
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13846
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13847
BEGIN
 
13848
SET new.f_int1 = old.f_int1 + @max_row,
 
13849
new.f_int2 = old.f_int2 - @max_row,
 
13850
new.f_charbig = '####updated per update trigger####';
 
13851
END|
 
13852
UPDATE t1
 
13853
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13854
f_charbig = '####updated per update statement itself####';
 
13855
        
 
13856
# check trigger-9 success:      1
 
13857
DROP TRIGGER trg_2;
 
13858
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13859
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13860
f_charbig = CONCAT('===',f_char1,'===');
 
13861
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13862
BEGIN
 
13863
SET new.f_int1 = new.f_int1 + @max_row,
 
13864
new.f_int2 = new.f_int2 - @max_row,
 
13865
new.f_charbig = '####updated per update trigger####';
 
13866
END|
 
13867
UPDATE t1
 
13868
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13869
f_charbig = '####updated per update statement itself####';
 
13870
        
 
13871
# check trigger-10 success:     1
 
13872
DROP TRIGGER trg_2;
 
13873
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13874
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13875
f_charbig = CONCAT('===',f_char1,'===');
 
13876
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13877
BEGIN
 
13878
SET new.f_int1 = @my_max1 + @counter,
 
13879
new.f_int2 = @my_min2 - @counter,
 
13880
new.f_charbig = '####updated per insert trigger####';
 
13881
SET @counter = @counter + 1;
 
13882
END|
 
13883
SET @counter = 1;
 
13884
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13886
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13887
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13888
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13889
ORDER BY f_int1;
 
13890
DROP TRIGGER trg_3;
 
13891
        
 
13892
# check trigger-11 success:     1
 
13893
DELETE FROM t1
 
13894
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13895
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13896
AND f_charbig = '####updated per insert trigger####';
 
13897
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13898
BEGIN
 
13899
SET new.f_int1 = @my_max1 + @counter,
 
13900
new.f_int2 = @my_min2 - @counter,
 
13901
new.f_charbig = '####updated per insert trigger####';
 
13902
SET @counter = @counter + 1;
 
13903
END|
 
13904
SET @counter = 1;
 
13905
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13906
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13907
SELECT CAST(f_int1 AS CHAR),
 
13908
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13910
ORDER BY f_int1;
 
13911
DROP TRIGGER trg_3;
 
13912
        
 
13913
# check trigger-12 success:     1
 
13914
DELETE FROM t1
 
13915
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13916
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13917
AND f_charbig = '####updated per insert trigger####';
 
13918
ANALYZE  TABLE t1;
 
13919
Table   Op      Msg_type        Msg_text
 
13920
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
13921
CHECK    TABLE t1 EXTENDED;
 
13922
Table   Op      Msg_type        Msg_text
 
13923
test.t1 check   note    The storage engine for the table doesn't support check
 
13924
CHECKSUM TABLE t1 EXTENDED;
 
13925
Table   Checksum
 
13926
test.t1 <some_value>
 
13927
OPTIMIZE TABLE t1;
 
13928
Table   Op      Msg_type        Msg_text
 
13929
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
13930
# check layout success:    1
 
13931
REPAIR   TABLE t1 EXTENDED;
 
13932
Table   Op      Msg_type        Msg_text
 
13933
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13934
# check layout success:    1
 
13935
TRUNCATE t1;
 
13936
        
 
13937
# check TRUNCATE success:       1
 
13938
# check layout success:    1
 
13939
# End usability test (inc/partition_check.inc)
 
13940
DROP TABLE t1;
 
13941
CREATE TABLE t1 (
 
13942
f_int1 INTEGER,
 
13943
f_int2 INTEGER,
 
13944
f_char1 CHAR(20),
 
13945
f_char2 CHAR(20),
 
13946
f_charbig VARCHAR(1000)
 
13947
 
 
13948
)
 
13949
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
13950
(PARTITION part_3 VALUES IN (-3),
 
13951
PARTITION part_2 VALUES IN (-2),
 
13952
PARTITION part_1 VALUES IN (-1),
 
13953
PARTITION part_N VALUES IN (NULL),
 
13954
PARTITION part0 VALUES IN (0),
 
13955
PARTITION part1 VALUES IN (1),
 
13956
PARTITION part2 VALUES IN (2),
 
13957
PARTITION part3 VALUES IN (3));
 
13958
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13959
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13960
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13961
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
13962
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13963
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13964
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13965
# Start usability test (inc/partition_check.inc)
 
13966
create_command
 
13967
SHOW CREATE TABLE t1;
 
13968
Table   Create Table
 
13969
t1      CREATE TABLE `t1` (
 
13970
  `f_int1` int(11) DEFAULT NULL,
 
13971
  `f_int2` int(11) DEFAULT NULL,
 
13972
  `f_char1` char(20) DEFAULT NULL,
 
13973
  `f_char2` char(20) DEFAULT NULL,
 
13974
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13975
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
13976
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
13977
 
 
13978
unified filelist
 
13979
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
13980
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
13981
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
13982
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
13983
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
13984
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
13985
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
13986
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
13987
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
13988
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
13989
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
13990
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
13991
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
13992
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
13993
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
13994
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
13995
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
13996
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
13997
 
 
13998
# check prerequisites-1 success:    1
 
13999
# check COUNT(*) success:    1
 
14000
# check MIN/MAX(f_int1) success:    1
 
14001
# check MIN/MAX(f_int2) success:    1
 
14002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14003
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14004
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14005
WHERE f_int1 IN (2,3);
 
14006
ERROR 23000: Can't write; duplicate key in table 't1'
 
14007
# check prerequisites-3 success:    1
 
14008
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14010
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14011
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14012
WHERE f_int1 IN (2,3);
 
14013
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14014
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14015
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14016
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14017
WHERE f_int1 IN (2,3);
 
14018
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14019
# check read via f_int1 success: 1
 
14020
# check read via f_int2 success: 1
 
14021
        
 
14022
# check multiple-1 success:     1
 
14023
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14024
        
 
14025
# check multiple-2 success:     1
 
14026
INSERT INTO t1 SELECT * FROM t0_template
 
14027
WHERE MOD(f_int1,3) = 0;
 
14028
        
 
14029
# check multiple-3 success:     1
 
14030
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14031
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14032
AND @max_row_div2 + @max_row_div4;
 
14033
        
 
14034
# check multiple-4 success:     1
 
14035
DELETE FROM t1
 
14036
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14037
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14038
        
 
14039
# check multiple-5 success:     1
 
14040
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14041
WHERE MOD(f_int1,3) = 0
 
14042
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14043
SELECT COUNT(*) INTO @clash_count
 
14044
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14045
WHERE MOD(f_int1,3) = 0
 
14046
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14047
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14048
INSERT INTO t1
 
14049
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14050
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14051
f_charbig = '#SINGLE#';
 
14052
        
 
14053
# check single-1 success:       1
 
14054
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14055
INSERT INTO t1
 
14056
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14057
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14058
f_charbig = '#SINGLE#';
 
14059
        
 
14060
# check single-2 success:       1
 
14061
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14062
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14063
UPDATE t1 SET f_int1 = @cur_value2
 
14064
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14065
        
 
14066
# check single-3 success:       1
 
14067
SET @cur_value1= -1;
 
14068
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14069
UPDATE t1 SET f_int1 = @cur_value1
 
14070
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14071
        
 
14072
# check single-4 success:       1
 
14073
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14074
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14075
        
 
14076
# check single-5 success:       1
 
14077
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14078
        
 
14079
# check single-6 success:       1
 
14080
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14081
        
 
14082
# check single-7 success:       1
 
14083
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14084
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14085
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14086
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14087
f_charbig = '#NULL#';
 
14088
INSERT INTO t1
 
14089
SET f_int1 = NULL , f_int2 = -@max_row,
 
14090
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14091
f_charbig = '#NULL#';
 
14092
# check null success:    1
 
14093
        
 
14094
# check null-1 success:         1
 
14095
UPDATE t1 SET f_int1 = -@max_row
 
14096
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14097
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14098
        
 
14099
# check null-2 success:         1
 
14100
UPDATE t1 SET f_int1 = NULL
 
14101
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14102
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14103
        
 
14104
# check null-3 success:         1
 
14105
DELETE FROM t1
 
14106
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14107
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14108
        
 
14109
# check null-4 success:         1
 
14110
DELETE FROM t1
 
14111
WHERE f_int1 = 0 AND f_int2 = 0
 
14112
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14113
AND f_charbig = '#NULL#';
 
14114
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14115
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14116
   FROM t0_template source_tab
 
14117
WHERE MOD(f_int1,3) = 0
 
14118
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14119
ON DUPLICATE KEY
 
14120
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14121
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14122
f_charbig = 'was updated';
 
14123
        
 
14124
# check unique-1-a success:     1
 
14125
        
 
14126
# check unique-1-b success:     1
 
14127
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14130
f_charbig = CONCAT('===',f_char1,'===')
 
14131
WHERE f_charbig = 'was updated';
 
14132
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14133
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14134
   FROM t0_template source_tab
 
14135
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14136
        
 
14137
# check replace success:        1
 
14138
DELETE FROM t1
 
14139
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14140
DELETE FROM t1
 
14141
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14142
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14143
UPDATE t1 SET f_int2 = f_int1,
 
14144
f_char1 = CAST(f_int1 AS CHAR),
 
14145
f_char2 = CAST(f_int1 AS CHAR),
 
14146
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14147
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14148
SET AUTOCOMMIT= 0;
 
14149
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14150
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14151
FROM t0_template source_tab
 
14152
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14153
        
 
14154
# check transactions-1 success:         1
 
14155
COMMIT WORK;
 
14156
        
 
14157
# check transactions-2 success:         1
 
14158
ROLLBACK WORK;
 
14159
        
 
14160
# check transactions-3 success:         1
 
14161
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14162
COMMIT WORK;
 
14163
ROLLBACK WORK;
 
14164
        
 
14165
# check transactions-4 success:         1
 
14166
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14167
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14168
FROM t0_template source_tab
 
14169
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14170
        
 
14171
# check transactions-5 success:         1
 
14172
ROLLBACK WORK;
 
14173
Warnings:
 
14174
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14175
        
 
14176
# check transactions-6 success:         1
 
14177
# INFO: Storage engine used for t1 seems to be not transactional.
 
14178
COMMIT;
 
14179
        
 
14180
# check transactions-7 success:         1
 
14181
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14182
COMMIT WORK;
 
14183
SET @@session.sql_mode = 'traditional';
 
14184
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14186
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14187
'', '', 'was inserted' FROM t0_template
 
14188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14189
ERROR 22012: Division by 0
 
14190
COMMIT;
 
14191
        
 
14192
# check transactions-8 success:         1
 
14193
# INFO: Storage engine used for t1 seems to be unable to revert
 
14194
#       changes made by the failing statement.
 
14195
SET @@session.sql_mode = '';
 
14196
SET AUTOCOMMIT= 1;
 
14197
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14198
COMMIT WORK;
 
14199
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14200
        
 
14201
# check special-1 success:      1
 
14202
UPDATE t1 SET f_charbig = '';
 
14203
        
 
14204
# check special-2 success:      1
 
14205
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14206
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14207
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14211
'just inserted' FROM t0_template
 
14212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14213
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14214
BEGIN
 
14215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14216
f_charbig = 'updated by trigger'
 
14217
      WHERE f_int1 = new.f_int1;
 
14218
END|
 
14219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14220
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14222
        
 
14223
# check trigger-1 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 AFTER INSERT 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 = new.f_int1;
 
14240
END|
 
14241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14242
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14244
        
 
14245
# check trigger-2 success:      1
 
14246
DROP TRIGGER trg_1;
 
14247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14249
f_charbig = 'just inserted'
 
14250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14251
DELETE FROM t0_aux
 
14252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14255
'just inserted' FROM t0_template
 
14256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14257
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14258
BEGIN
 
14259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14260
f_charbig = 'updated by trigger'
 
14261
      WHERE f_int1 = new.f_int1;
 
14262
END|
 
14263
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14265
        
 
14266
# check trigger-3 success:      1
 
14267
DROP TRIGGER trg_1;
 
14268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14270
f_charbig = 'just inserted'
 
14271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14272
DELETE FROM t0_aux
 
14273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14276
'just inserted' FROM t0_template
 
14277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14278
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14279
BEGIN
 
14280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14281
f_charbig = 'updated by trigger'
 
14282
      WHERE f_int1 = - old.f_int1;
 
14283
END|
 
14284
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14286
        
 
14287
# check trigger-4 success:      1
 
14288
DROP TRIGGER trg_1;
 
14289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14291
f_charbig = 'just inserted'
 
14292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14293
DELETE FROM t0_aux
 
14294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14297
'just inserted' FROM t0_template
 
14298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14299
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14300
BEGIN
 
14301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14302
f_charbig = 'updated by trigger'
 
14303
      WHERE f_int1 = new.f_int1;
 
14304
END|
 
14305
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14307
        
 
14308
# check trigger-5 success:      1
 
14309
DROP TRIGGER trg_1;
 
14310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14312
f_charbig = 'just inserted'
 
14313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14314
DELETE FROM t0_aux
 
14315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14318
'just inserted' FROM t0_template
 
14319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14320
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14321
BEGIN
 
14322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14323
f_charbig = 'updated by trigger'
 
14324
      WHERE f_int1 = - old.f_int1;
 
14325
END|
 
14326
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14327
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14328
        
 
14329
# check trigger-6 success:      1
 
14330
DROP TRIGGER trg_1;
 
14331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14333
f_charbig = 'just inserted'
 
14334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14335
DELETE FROM t0_aux
 
14336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14339
'just inserted' FROM t0_template
 
14340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14341
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14342
BEGIN
 
14343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14344
f_charbig = 'updated by trigger'
 
14345
      WHERE f_int1 = - old.f_int1;
 
14346
END|
 
14347
DELETE FROM t0_aux
 
14348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14349
        
 
14350
# check trigger-7 success:      1
 
14351
DROP TRIGGER trg_1;
 
14352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14354
f_charbig = 'just inserted'
 
14355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14356
DELETE FROM t0_aux
 
14357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14360
'just inserted' FROM t0_template
 
14361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14362
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14363
BEGIN
 
14364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14365
f_charbig = 'updated by trigger'
 
14366
      WHERE f_int1 = - old.f_int1;
 
14367
END|
 
14368
DELETE FROM t0_aux
 
14369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14370
        
 
14371
# check trigger-8 success:      1
 
14372
DROP TRIGGER trg_1;
 
14373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14375
f_charbig = 'just inserted'
 
14376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14377
DELETE FROM t0_aux
 
14378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14379
DELETE FROM t1
 
14380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14381
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14382
BEGIN
 
14383
SET new.f_int1 = old.f_int1 + @max_row,
 
14384
new.f_int2 = old.f_int2 - @max_row,
 
14385
new.f_charbig = '####updated per update trigger####';
 
14386
END|
 
14387
UPDATE t1
 
14388
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14389
f_charbig = '####updated per update statement itself####';
 
14390
        
 
14391
# check trigger-9 success:      1
 
14392
DROP TRIGGER trg_2;
 
14393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14395
f_charbig = CONCAT('===',f_char1,'===');
 
14396
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14397
BEGIN
 
14398
SET new.f_int1 = new.f_int1 + @max_row,
 
14399
new.f_int2 = new.f_int2 - @max_row,
 
14400
new.f_charbig = '####updated per update trigger####';
 
14401
END|
 
14402
UPDATE t1
 
14403
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14404
f_charbig = '####updated per update statement itself####';
 
14405
        
 
14406
# check trigger-10 success:     1
 
14407
DROP TRIGGER trg_2;
 
14408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14410
f_charbig = CONCAT('===',f_char1,'===');
 
14411
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14412
BEGIN
 
14413
SET new.f_int1 = @my_max1 + @counter,
 
14414
new.f_int2 = @my_min2 - @counter,
 
14415
new.f_charbig = '####updated per insert trigger####';
 
14416
SET @counter = @counter + 1;
 
14417
END|
 
14418
SET @counter = 1;
 
14419
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14421
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14422
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14424
ORDER BY f_int1;
 
14425
DROP TRIGGER trg_3;
 
14426
        
 
14427
# check trigger-11 success:     1
 
14428
DELETE FROM t1
 
14429
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14430
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14431
AND f_charbig = '####updated per insert trigger####';
 
14432
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14433
BEGIN
 
14434
SET new.f_int1 = @my_max1 + @counter,
 
14435
new.f_int2 = @my_min2 - @counter,
 
14436
new.f_charbig = '####updated per insert trigger####';
 
14437
SET @counter = @counter + 1;
 
14438
END|
 
14439
SET @counter = 1;
 
14440
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14441
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14442
SELECT CAST(f_int1 AS CHAR),
 
14443
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14445
ORDER BY f_int1;
 
14446
DROP TRIGGER trg_3;
 
14447
        
 
14448
# check trigger-12 success:     1
 
14449
DELETE FROM t1
 
14450
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14451
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14452
AND f_charbig = '####updated per insert trigger####';
 
14453
ANALYZE  TABLE t1;
 
14454
Table   Op      Msg_type        Msg_text
 
14455
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
14456
CHECK    TABLE t1 EXTENDED;
 
14457
Table   Op      Msg_type        Msg_text
 
14458
test.t1 check   note    The storage engine for the table doesn't support check
 
14459
CHECKSUM TABLE t1 EXTENDED;
 
14460
Table   Checksum
 
14461
test.t1 <some_value>
 
14462
OPTIMIZE TABLE t1;
 
14463
Table   Op      Msg_type        Msg_text
 
14464
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
14465
# check layout success:    1
 
14466
REPAIR   TABLE t1 EXTENDED;
 
14467
Table   Op      Msg_type        Msg_text
 
14468
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14469
# check layout success:    1
 
14470
TRUNCATE t1;
 
14471
        
 
14472
# check TRUNCATE success:       1
 
14473
# check layout success:    1
 
14474
# End usability test (inc/partition_check.inc)
 
14475
DROP TABLE t1;
 
14476
CREATE TABLE t1 (
 
14477
f_int1 INTEGER,
 
14478
f_int2 INTEGER,
 
14479
f_char1 CHAR(20),
 
14480
f_char2 CHAR(20),
 
14481
f_charbig VARCHAR(1000)
 
14482
 
 
14483
)
 
14484
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
14485
(PARTITION parta VALUES LESS THAN (0),
 
14486
PARTITION partb VALUES LESS THAN (5),
 
14487
PARTITION partc VALUES LESS THAN (10),
 
14488
PARTITION partd VALUES LESS THAN (10 + 5),
 
14489
PARTITION parte VALUES LESS THAN (20),
 
14490
PARTITION partf VALUES LESS THAN (2147483646));
 
14491
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14492
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14493
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14494
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
14495
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14496
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14497
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14498
# Start usability test (inc/partition_check.inc)
 
14499
create_command
 
14500
SHOW CREATE TABLE t1;
 
14501
Table   Create Table
 
14502
t1      CREATE TABLE `t1` (
 
14503
  `f_int1` int(11) DEFAULT NULL,
 
14504
  `f_int2` int(11) DEFAULT NULL,
 
14505
  `f_char1` char(20) DEFAULT NULL,
 
14506
  `f_char2` char(20) DEFAULT NULL,
 
14507
  `f_charbig` varchar(1000) DEFAULT NULL,
 
14508
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
14509
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
14510
 
 
14511
unified filelist
 
14512
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
14513
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
14514
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
14515
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
14516
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
14517
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
14518
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
14519
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
14520
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
14521
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
14522
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
14523
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
14524
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
14525
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
14526
 
 
14527
# check prerequisites-1 success:    1
 
14528
# check COUNT(*) success:    1
 
14529
# check MIN/MAX(f_int1) success:    1
 
14530
# check MIN/MAX(f_int2) success:    1
 
14531
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14532
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14533
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14534
WHERE f_int1 IN (2,3);
 
14535
ERROR 23000: Can't write; duplicate key in table 't1'
 
14536
# check prerequisites-3 success:    1
 
14537
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14538
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14539
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14540
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14541
WHERE f_int1 IN (2,3);
 
14542
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14543
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14544
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14545
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14546
WHERE f_int1 IN (2,3);
 
14547
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14548
# check read via f_int1 success: 1
 
14549
# check read via f_int2 success: 1
 
14550
        
 
14551
# check multiple-1 success:     1
 
14552
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14553
        
 
14554
# check multiple-2 success:     1
 
14555
INSERT INTO t1 SELECT * FROM t0_template
 
14556
WHERE MOD(f_int1,3) = 0;
 
14557
        
 
14558
# check multiple-3 success:     1
 
14559
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14560
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14561
AND @max_row_div2 + @max_row_div4;
 
14562
        
 
14563
# check multiple-4 success:     1
 
14564
DELETE FROM t1
 
14565
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14566
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14567
        
 
14568
# check multiple-5 success:     1
 
14569
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14570
WHERE MOD(f_int1,3) = 0
 
14571
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14572
SELECT COUNT(*) INTO @clash_count
 
14573
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14574
WHERE MOD(f_int1,3) = 0
 
14575
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14576
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14577
INSERT INTO t1
 
14578
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14579
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14580
f_charbig = '#SINGLE#';
 
14581
        
 
14582
# check single-1 success:       1
 
14583
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14584
INSERT INTO t1
 
14585
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14586
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14587
f_charbig = '#SINGLE#';
 
14588
        
 
14589
# check single-2 success:       1
 
14590
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14591
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14592
UPDATE t1 SET f_int1 = @cur_value2
 
14593
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14594
        
 
14595
# check single-3 success:       1
 
14596
SET @cur_value1= -1;
 
14597
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14598
UPDATE t1 SET f_int1 = @cur_value1
 
14599
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14600
        
 
14601
# check single-4 success:       1
 
14602
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14603
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14604
        
 
14605
# check single-5 success:       1
 
14606
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14607
        
 
14608
# check single-6 success:       1
 
14609
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14610
ERROR HY000: Table has no partition for value 2147483647
 
14611
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14612
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14613
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14614
f_charbig = '#NULL#';
 
14615
INSERT INTO t1
 
14616
SET f_int1 = NULL , f_int2 = -@max_row,
 
14617
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14618
f_charbig = '#NULL#';
 
14619
# check null success:    1
 
14620
        
 
14621
# check null-1 success:         1
 
14622
UPDATE t1 SET f_int1 = -@max_row
 
14623
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14624
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14625
        
 
14626
# check null-2 success:         1
 
14627
UPDATE t1 SET f_int1 = NULL
 
14628
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14629
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14630
        
 
14631
# check null-3 success:         1
 
14632
DELETE FROM t1
 
14633
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14634
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14635
        
 
14636
# check null-4 success:         1
 
14637
DELETE FROM t1
 
14638
WHERE f_int1 = 0 AND f_int2 = 0
 
14639
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14640
AND f_charbig = '#NULL#';
 
14641
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14642
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14643
   FROM t0_template source_tab
 
14644
WHERE MOD(f_int1,3) = 0
 
14645
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14646
ON DUPLICATE KEY
 
14647
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14648
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14649
f_charbig = 'was updated';
 
14650
        
 
14651
# check unique-1-a success:     1
 
14652
        
 
14653
# check unique-1-b success:     1
 
14654
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14657
f_charbig = CONCAT('===',f_char1,'===')
 
14658
WHERE f_charbig = 'was updated';
 
14659
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14660
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14661
   FROM t0_template source_tab
 
14662
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14663
        
 
14664
# check replace success:        1
 
14665
DELETE FROM t1
 
14666
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14667
DELETE FROM t1
 
14668
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14669
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14670
UPDATE t1 SET f_int2 = f_int1,
 
14671
f_char1 = CAST(f_int1 AS CHAR),
 
14672
f_char2 = CAST(f_int1 AS CHAR),
 
14673
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14674
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14675
SET AUTOCOMMIT= 0;
 
14676
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14677
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14678
FROM t0_template source_tab
 
14679
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14680
        
 
14681
# check transactions-1 success:         1
 
14682
COMMIT WORK;
 
14683
        
 
14684
# check transactions-2 success:         1
 
14685
ROLLBACK WORK;
 
14686
        
 
14687
# check transactions-3 success:         1
 
14688
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14689
COMMIT WORK;
 
14690
ROLLBACK WORK;
 
14691
        
 
14692
# check transactions-4 success:         1
 
14693
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14694
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14695
FROM t0_template source_tab
 
14696
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14697
        
 
14698
# check transactions-5 success:         1
 
14699
ROLLBACK WORK;
 
14700
Warnings:
 
14701
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14702
        
 
14703
# check transactions-6 success:         1
 
14704
# INFO: Storage engine used for t1 seems to be not transactional.
 
14705
COMMIT;
 
14706
        
 
14707
# check transactions-7 success:         1
 
14708
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14709
COMMIT WORK;
 
14710
SET @@session.sql_mode = 'traditional';
 
14711
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14712
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14713
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14714
'', '', 'was inserted' FROM t0_template
 
14715
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14716
ERROR 22012: Division by 0
 
14717
COMMIT;
 
14718
        
 
14719
# check transactions-8 success:         1
 
14720
# INFO: Storage engine used for t1 seems to be unable to revert
 
14721
#       changes made by the failing statement.
 
14722
SET @@session.sql_mode = '';
 
14723
SET AUTOCOMMIT= 1;
 
14724
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14725
COMMIT WORK;
 
14726
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14727
        
 
14728
# check special-1 success:      1
 
14729
UPDATE t1 SET f_charbig = '';
 
14730
        
 
14731
# check special-2 success:      1
 
14732
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14733
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14734
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14736
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14737
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14738
'just inserted' FROM t0_template
 
14739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14740
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14741
BEGIN
 
14742
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14743
f_charbig = 'updated by trigger'
 
14744
      WHERE f_int1 = new.f_int1;
 
14745
END|
 
14746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14747
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14749
        
 
14750
# check trigger-1 success:      1
 
14751
DROP TRIGGER trg_1;
 
14752
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14753
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14754
f_charbig = 'just inserted'
 
14755
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14756
DELETE FROM t0_aux
 
14757
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14758
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14759
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14760
'just inserted' FROM t0_template
 
14761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14762
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14763
BEGIN
 
14764
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14765
f_charbig = 'updated by trigger'
 
14766
      WHERE f_int1 = new.f_int1;
 
14767
END|
 
14768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14769
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14771
        
 
14772
# check trigger-2 success:      1
 
14773
DROP TRIGGER trg_1;
 
14774
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14775
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14776
f_charbig = 'just inserted'
 
14777
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14778
DELETE FROM t0_aux
 
14779
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14780
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14781
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14782
'just inserted' FROM t0_template
 
14783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14784
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14785
BEGIN
 
14786
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14787
f_charbig = 'updated by trigger'
 
14788
      WHERE f_int1 = new.f_int1;
 
14789
END|
 
14790
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14791
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14792
        
 
14793
# check trigger-3 success:      1
 
14794
DROP TRIGGER trg_1;
 
14795
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14796
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14797
f_charbig = 'just inserted'
 
14798
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14799
DELETE FROM t0_aux
 
14800
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14801
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14802
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14803
'just inserted' FROM t0_template
 
14804
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14805
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14806
BEGIN
 
14807
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14808
f_charbig = 'updated by trigger'
 
14809
      WHERE f_int1 = - old.f_int1;
 
14810
END|
 
14811
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14812
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14813
        
 
14814
# check trigger-4 success:      1
 
14815
DROP TRIGGER trg_1;
 
14816
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14817
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14818
f_charbig = 'just inserted'
 
14819
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14820
DELETE FROM t0_aux
 
14821
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14822
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14823
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14824
'just inserted' FROM t0_template
 
14825
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14826
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14827
BEGIN
 
14828
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14829
f_charbig = 'updated by trigger'
 
14830
      WHERE f_int1 = new.f_int1;
 
14831
END|
 
14832
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14833
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14834
        
 
14835
# check trigger-5 success:      1
 
14836
DROP TRIGGER trg_1;
 
14837
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14838
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14839
f_charbig = 'just inserted'
 
14840
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14841
DELETE FROM t0_aux
 
14842
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14843
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14844
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14845
'just inserted' FROM t0_template
 
14846
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14847
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14848
BEGIN
 
14849
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14850
f_charbig = 'updated by trigger'
 
14851
      WHERE f_int1 = - old.f_int1;
 
14852
END|
 
14853
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14854
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14855
        
 
14856
# check trigger-6 success:      1
 
14857
DROP TRIGGER trg_1;
 
14858
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14859
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14860
f_charbig = 'just inserted'
 
14861
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14862
DELETE FROM t0_aux
 
14863
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14864
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14865
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14866
'just inserted' FROM t0_template
 
14867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14868
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14869
BEGIN
 
14870
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14871
f_charbig = 'updated by trigger'
 
14872
      WHERE f_int1 = - old.f_int1;
 
14873
END|
 
14874
DELETE FROM t0_aux
 
14875
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14876
        
 
14877
# check trigger-7 success:      1
 
14878
DROP TRIGGER trg_1;
 
14879
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14880
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14881
f_charbig = 'just inserted'
 
14882
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14883
DELETE FROM t0_aux
 
14884
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14885
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14886
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14887
'just inserted' FROM t0_template
 
14888
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14889
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14890
BEGIN
 
14891
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14892
f_charbig = 'updated by trigger'
 
14893
      WHERE f_int1 = - old.f_int1;
 
14894
END|
 
14895
DELETE FROM t0_aux
 
14896
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14897
        
 
14898
# check trigger-8 success:      1
 
14899
DROP TRIGGER trg_1;
 
14900
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14901
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14902
f_charbig = 'just inserted'
 
14903
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14904
DELETE FROM t0_aux
 
14905
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14906
DELETE FROM t1
 
14907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14908
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14909
BEGIN
 
14910
SET new.f_int1 = old.f_int1 + @max_row,
 
14911
new.f_int2 = old.f_int2 - @max_row,
 
14912
new.f_charbig = '####updated per update trigger####';
 
14913
END|
 
14914
UPDATE t1
 
14915
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14916
f_charbig = '####updated per update statement itself####';
 
14917
        
 
14918
# check trigger-9 success:      1
 
14919
DROP TRIGGER trg_2;
 
14920
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14921
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14922
f_charbig = CONCAT('===',f_char1,'===');
 
14923
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14924
BEGIN
 
14925
SET new.f_int1 = new.f_int1 + @max_row,
 
14926
new.f_int2 = new.f_int2 - @max_row,
 
14927
new.f_charbig = '####updated per update trigger####';
 
14928
END|
 
14929
UPDATE t1
 
14930
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14931
f_charbig = '####updated per update statement itself####';
 
14932
        
 
14933
# check trigger-10 success:     1
 
14934
DROP TRIGGER trg_2;
 
14935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14937
f_charbig = CONCAT('===',f_char1,'===');
 
14938
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14939
BEGIN
 
14940
SET new.f_int1 = @my_max1 + @counter,
 
14941
new.f_int2 = @my_min2 - @counter,
 
14942
new.f_charbig = '####updated per insert trigger####';
 
14943
SET @counter = @counter + 1;
 
14944
END|
 
14945
SET @counter = 1;
 
14946
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14947
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14948
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14949
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14950
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14951
ORDER BY f_int1;
 
14952
DROP TRIGGER trg_3;
 
14953
        
 
14954
# check trigger-11 success:     1
 
14955
DELETE FROM t1
 
14956
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14957
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14958
AND f_charbig = '####updated per insert trigger####';
 
14959
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14960
BEGIN
 
14961
SET new.f_int1 = @my_max1 + @counter,
 
14962
new.f_int2 = @my_min2 - @counter,
 
14963
new.f_charbig = '####updated per insert trigger####';
 
14964
SET @counter = @counter + 1;
 
14965
END|
 
14966
SET @counter = 1;
 
14967
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14968
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14969
SELECT CAST(f_int1 AS CHAR),
 
14970
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14971
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14972
ORDER BY f_int1;
 
14973
DROP TRIGGER trg_3;
 
14974
        
 
14975
# check trigger-12 success:     1
 
14976
DELETE FROM t1
 
14977
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14978
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14979
AND f_charbig = '####updated per insert trigger####';
 
14980
ANALYZE  TABLE t1;
 
14981
Table   Op      Msg_type        Msg_text
 
14982
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
14983
CHECK    TABLE t1 EXTENDED;
 
14984
Table   Op      Msg_type        Msg_text
 
14985
test.t1 check   note    The storage engine for the table doesn't support check
 
14986
CHECKSUM TABLE t1 EXTENDED;
 
14987
Table   Checksum
 
14988
test.t1 <some_value>
 
14989
OPTIMIZE TABLE t1;
 
14990
Table   Op      Msg_type        Msg_text
 
14991
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
14992
# check layout success:    1
 
14993
REPAIR   TABLE t1 EXTENDED;
 
14994
Table   Op      Msg_type        Msg_text
 
14995
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14996
# check layout success:    1
 
14997
TRUNCATE t1;
 
14998
        
 
14999
# check TRUNCATE success:       1
 
15000
# check layout success:    1
 
15001
# End usability test (inc/partition_check.inc)
 
15002
DROP TABLE t1;
 
15003
CREATE TABLE t1 (
 
15004
f_int1 INTEGER,
 
15005
f_int2 INTEGER,
 
15006
f_char1 CHAR(20),
 
15007
f_char2 CHAR(20),
 
15008
f_charbig VARCHAR(1000)
 
15009
 
 
15010
)
 
15011
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
15012
(PARTITION parta VALUES LESS THAN (0),
 
15013
PARTITION partb VALUES LESS THAN (5),
 
15014
PARTITION partc VALUES LESS THAN (10),
 
15015
PARTITION partd VALUES LESS THAN (2147483646));
 
15016
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15017
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15018
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15019
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
15020
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15021
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15022
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15023
# Start usability test (inc/partition_check.inc)
 
15024
create_command
 
15025
SHOW CREATE TABLE t1;
 
15026
Table   Create Table
 
15027
t1      CREATE TABLE `t1` (
 
15028
  `f_int1` int(11) DEFAULT NULL,
 
15029
  `f_int2` int(11) DEFAULT NULL,
 
15030
  `f_char1` char(20) DEFAULT NULL,
 
15031
  `f_char2` char(20) DEFAULT NULL,
 
15032
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15033
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
15034
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
15035
 
 
15036
unified filelist
 
15037
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
15038
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
15039
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
15040
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
15041
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
15042
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
15043
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
15044
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
15045
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
15046
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
15047
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
15048
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
15049
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
15050
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
15051
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
15052
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
15053
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
15054
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
15055
 
 
15056
# check prerequisites-1 success:    1
 
15057
# check COUNT(*) success:    1
 
15058
# check MIN/MAX(f_int1) success:    1
 
15059
# check MIN/MAX(f_int2) success:    1
 
15060
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15061
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15062
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15063
WHERE f_int1 IN (2,3);
 
15064
ERROR 23000: Can't write; duplicate key in table 't1'
 
15065
# check prerequisites-3 success:    1
 
15066
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15067
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15068
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15069
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15070
WHERE f_int1 IN (2,3);
 
15071
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15072
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15073
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15074
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15075
WHERE f_int1 IN (2,3);
 
15076
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15077
# check read via f_int1 success: 1
 
15078
# check read via f_int2 success: 1
 
15079
        
 
15080
# check multiple-1 success:     1
 
15081
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15082
        
 
15083
# check multiple-2 success:     1
 
15084
INSERT INTO t1 SELECT * FROM t0_template
 
15085
WHERE MOD(f_int1,3) = 0;
 
15086
        
 
15087
# check multiple-3 success:     1
 
15088
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15089
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15090
AND @max_row_div2 + @max_row_div4;
 
15091
        
 
15092
# check multiple-4 success:     1
 
15093
DELETE FROM t1
 
15094
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15095
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15096
        
 
15097
# check multiple-5 success:     1
 
15098
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15099
WHERE MOD(f_int1,3) = 0
 
15100
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15101
SELECT COUNT(*) INTO @clash_count
 
15102
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15103
WHERE MOD(f_int1,3) = 0
 
15104
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15105
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15106
INSERT INTO t1
 
15107
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15108
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15109
f_charbig = '#SINGLE#';
 
15110
        
 
15111
# check single-1 success:       1
 
15112
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15113
INSERT INTO t1
 
15114
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15115
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15116
f_charbig = '#SINGLE#';
 
15117
        
 
15118
# check single-2 success:       1
 
15119
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15120
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15121
UPDATE t1 SET f_int1 = @cur_value2
 
15122
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15123
        
 
15124
# check single-3 success:       1
 
15125
SET @cur_value1= -1;
 
15126
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15127
UPDATE t1 SET f_int1 = @cur_value1
 
15128
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15129
        
 
15130
# check single-4 success:       1
 
15131
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15132
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15133
        
 
15134
# check single-5 success:       1
 
15135
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15136
        
 
15137
# check single-6 success:       1
 
15138
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15139
ERROR HY000: Table has no partition for value 2147483647
 
15140
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15141
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15142
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15143
f_charbig = '#NULL#';
 
15144
INSERT INTO t1
 
15145
SET f_int1 = NULL , f_int2 = -@max_row,
 
15146
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15147
f_charbig = '#NULL#';
 
15148
# check null success:    1
 
15149
        
 
15150
# check null-1 success:         1
 
15151
UPDATE t1 SET f_int1 = -@max_row
 
15152
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15153
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15154
        
 
15155
# check null-2 success:         1
 
15156
UPDATE t1 SET f_int1 = NULL
 
15157
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15158
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15159
        
 
15160
# check null-3 success:         1
 
15161
DELETE FROM t1
 
15162
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15163
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15164
        
 
15165
# check null-4 success:         1
 
15166
DELETE FROM t1
 
15167
WHERE f_int1 = 0 AND f_int2 = 0
 
15168
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15169
AND f_charbig = '#NULL#';
 
15170
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15171
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15172
   FROM t0_template source_tab
 
15173
WHERE MOD(f_int1,3) = 0
 
15174
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15175
ON DUPLICATE KEY
 
15176
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15177
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15178
f_charbig = 'was updated';
 
15179
        
 
15180
# check unique-1-a success:     1
 
15181
        
 
15182
# check unique-1-b success:     1
 
15183
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15186
f_charbig = CONCAT('===',f_char1,'===')
 
15187
WHERE f_charbig = 'was updated';
 
15188
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15189
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15190
   FROM t0_template source_tab
 
15191
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15192
        
 
15193
# check replace success:        1
 
15194
DELETE FROM t1
 
15195
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15196
DELETE FROM t1
 
15197
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15198
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15199
UPDATE t1 SET f_int2 = f_int1,
 
15200
f_char1 = CAST(f_int1 AS CHAR),
 
15201
f_char2 = CAST(f_int1 AS CHAR),
 
15202
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15203
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15204
SET AUTOCOMMIT= 0;
 
15205
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15206
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15207
FROM t0_template source_tab
 
15208
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15209
        
 
15210
# check transactions-1 success:         1
 
15211
COMMIT WORK;
 
15212
        
 
15213
# check transactions-2 success:         1
 
15214
ROLLBACK WORK;
 
15215
        
 
15216
# check transactions-3 success:         1
 
15217
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15218
COMMIT WORK;
 
15219
ROLLBACK WORK;
 
15220
        
 
15221
# check transactions-4 success:         1
 
15222
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15223
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15224
FROM t0_template source_tab
 
15225
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15226
        
 
15227
# check transactions-5 success:         1
 
15228
ROLLBACK WORK;
 
15229
Warnings:
 
15230
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
15231
        
 
15232
# check transactions-6 success:         1
 
15233
# INFO: Storage engine used for t1 seems to be not transactional.
 
15234
COMMIT;
 
15235
        
 
15236
# check transactions-7 success:         1
 
15237
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15238
COMMIT WORK;
 
15239
SET @@session.sql_mode = 'traditional';
 
15240
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15241
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15242
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15243
'', '', 'was inserted' FROM t0_template
 
15244
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15245
ERROR 22012: Division by 0
 
15246
COMMIT;
 
15247
        
 
15248
# check transactions-8 success:         1
 
15249
# INFO: Storage engine used for t1 seems to be unable to revert
 
15250
#       changes made by the failing statement.
 
15251
SET @@session.sql_mode = '';
 
15252
SET AUTOCOMMIT= 1;
 
15253
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15254
COMMIT WORK;
 
15255
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15256
        
 
15257
# check special-1 success:      1
 
15258
UPDATE t1 SET f_charbig = '';
 
15259
        
 
15260
# check special-2 success:      1
 
15261
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15262
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15263
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15264
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15267
'just inserted' FROM t0_template
 
15268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15269
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15270
BEGIN
 
15271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15272
f_charbig = 'updated by trigger'
 
15273
      WHERE f_int1 = new.f_int1;
 
15274
END|
 
15275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15276
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15278
        
 
15279
# check trigger-1 success:      1
 
15280
DROP TRIGGER trg_1;
 
15281
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15282
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15283
f_charbig = 'just inserted'
 
15284
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15285
DELETE FROM t0_aux
 
15286
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15287
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15288
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15289
'just inserted' FROM t0_template
 
15290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15291
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15292
BEGIN
 
15293
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15294
f_charbig = 'updated by trigger'
 
15295
      WHERE f_int1 = new.f_int1;
 
15296
END|
 
15297
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15298
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15300
        
 
15301
# check trigger-2 success:      1
 
15302
DROP TRIGGER trg_1;
 
15303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15305
f_charbig = 'just inserted'
 
15306
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15307
DELETE FROM t0_aux
 
15308
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15309
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15310
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15311
'just inserted' FROM t0_template
 
15312
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15313
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15314
BEGIN
 
15315
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15316
f_charbig = 'updated by trigger'
 
15317
      WHERE f_int1 = new.f_int1;
 
15318
END|
 
15319
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15320
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15321
        
 
15322
# check trigger-3 success:      1
 
15323
DROP TRIGGER trg_1;
 
15324
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15325
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15326
f_charbig = 'just inserted'
 
15327
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15328
DELETE FROM t0_aux
 
15329
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15331
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15332
'just inserted' FROM t0_template
 
15333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15334
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15335
BEGIN
 
15336
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15337
f_charbig = 'updated by trigger'
 
15338
      WHERE f_int1 = - old.f_int1;
 
15339
END|
 
15340
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15341
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15342
        
 
15343
# check trigger-4 success:      1
 
15344
DROP TRIGGER trg_1;
 
15345
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15346
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15347
f_charbig = 'just inserted'
 
15348
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15349
DELETE FROM t0_aux
 
15350
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15351
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15352
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15353
'just inserted' FROM t0_template
 
15354
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15355
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15356
BEGIN
 
15357
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15358
f_charbig = 'updated by trigger'
 
15359
      WHERE f_int1 = new.f_int1;
 
15360
END|
 
15361
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15362
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15363
        
 
15364
# check trigger-5 success:      1
 
15365
DROP TRIGGER trg_1;
 
15366
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15367
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15368
f_charbig = 'just inserted'
 
15369
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15370
DELETE FROM t0_aux
 
15371
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15372
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15373
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15374
'just inserted' FROM t0_template
 
15375
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15376
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15377
BEGIN
 
15378
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15379
f_charbig = 'updated by trigger'
 
15380
      WHERE f_int1 = - old.f_int1;
 
15381
END|
 
15382
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15383
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15384
        
 
15385
# check trigger-6 success:      1
 
15386
DROP TRIGGER trg_1;
 
15387
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15388
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15389
f_charbig = 'just inserted'
 
15390
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15391
DELETE FROM t0_aux
 
15392
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15393
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15394
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15395
'just inserted' FROM t0_template
 
15396
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15397
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15398
BEGIN
 
15399
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15400
f_charbig = 'updated by trigger'
 
15401
      WHERE f_int1 = - old.f_int1;
 
15402
END|
 
15403
DELETE FROM t0_aux
 
15404
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15405
        
 
15406
# check trigger-7 success:      1
 
15407
DROP TRIGGER trg_1;
 
15408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15410
f_charbig = 'just inserted'
 
15411
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15412
DELETE FROM t0_aux
 
15413
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15414
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15415
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15416
'just inserted' FROM t0_template
 
15417
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15418
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15419
BEGIN
 
15420
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15421
f_charbig = 'updated by trigger'
 
15422
      WHERE f_int1 = - old.f_int1;
 
15423
END|
 
15424
DELETE FROM t0_aux
 
15425
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15426
        
 
15427
# check trigger-8 success:      1
 
15428
DROP TRIGGER trg_1;
 
15429
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15430
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15431
f_charbig = 'just inserted'
 
15432
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15433
DELETE FROM t0_aux
 
15434
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15435
DELETE FROM t1
 
15436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15437
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15438
BEGIN
 
15439
SET new.f_int1 = old.f_int1 + @max_row,
 
15440
new.f_int2 = old.f_int2 - @max_row,
 
15441
new.f_charbig = '####updated per update trigger####';
 
15442
END|
 
15443
UPDATE t1
 
15444
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15445
f_charbig = '####updated per update statement itself####';
 
15446
        
 
15447
# check trigger-9 success:      1
 
15448
DROP TRIGGER trg_2;
 
15449
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15450
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15451
f_charbig = CONCAT('===',f_char1,'===');
 
15452
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15453
BEGIN
 
15454
SET new.f_int1 = new.f_int1 + @max_row,
 
15455
new.f_int2 = new.f_int2 - @max_row,
 
15456
new.f_charbig = '####updated per update trigger####';
 
15457
END|
 
15458
UPDATE t1
 
15459
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15460
f_charbig = '####updated per update statement itself####';
 
15461
        
 
15462
# check trigger-10 success:     1
 
15463
DROP TRIGGER trg_2;
 
15464
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15465
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15466
f_charbig = CONCAT('===',f_char1,'===');
 
15467
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15468
BEGIN
 
15469
SET new.f_int1 = @my_max1 + @counter,
 
15470
new.f_int2 = @my_min2 - @counter,
 
15471
new.f_charbig = '####updated per insert trigger####';
 
15472
SET @counter = @counter + 1;
 
15473
END|
 
15474
SET @counter = 1;
 
15475
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15476
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15477
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15478
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15480
ORDER BY f_int1;
 
15481
DROP TRIGGER trg_3;
 
15482
        
 
15483
# check trigger-11 success:     1
 
15484
DELETE FROM t1
 
15485
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15486
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15487
AND f_charbig = '####updated per insert trigger####';
 
15488
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15489
BEGIN
 
15490
SET new.f_int1 = @my_max1 + @counter,
 
15491
new.f_int2 = @my_min2 - @counter,
 
15492
new.f_charbig = '####updated per insert trigger####';
 
15493
SET @counter = @counter + 1;
 
15494
END|
 
15495
SET @counter = 1;
 
15496
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15497
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15498
SELECT CAST(f_int1 AS CHAR),
 
15499
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15501
ORDER BY f_int1;
 
15502
DROP TRIGGER trg_3;
 
15503
        
 
15504
# check trigger-12 success:     1
 
15505
DELETE FROM t1
 
15506
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15507
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15508
AND f_charbig = '####updated per insert trigger####';
 
15509
ANALYZE  TABLE t1;
 
15510
Table   Op      Msg_type        Msg_text
 
15511
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
15512
CHECK    TABLE t1 EXTENDED;
 
15513
Table   Op      Msg_type        Msg_text
 
15514
test.t1 check   note    The storage engine for the table doesn't support check
 
15515
CHECKSUM TABLE t1 EXTENDED;
 
15516
Table   Checksum
 
15517
test.t1 <some_value>
 
15518
OPTIMIZE TABLE t1;
 
15519
Table   Op      Msg_type        Msg_text
 
15520
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
15521
# check layout success:    1
 
15522
REPAIR   TABLE t1 EXTENDED;
 
15523
Table   Op      Msg_type        Msg_text
 
15524
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15525
# check layout success:    1
 
15526
TRUNCATE t1;
 
15527
        
 
15528
# check TRUNCATE success:       1
 
15529
# check layout success:    1
 
15530
# End usability test (inc/partition_check.inc)
 
15531
DROP TABLE t1;
 
15532
CREATE TABLE t1 (
 
15533
f_int1 INTEGER,
 
15534
f_int2 INTEGER,
 
15535
f_char1 CHAR(20),
 
15536
f_char2 CHAR(20),
 
15537
f_charbig VARCHAR(1000)
 
15538
 
 
15539
)
 
15540
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
15541
(PARTITION part1 VALUES LESS THAN (0)
 
15542
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15543
PARTITION part2 VALUES LESS THAN (5)
 
15544
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15545
PARTITION part3 VALUES LESS THAN (10)
 
15546
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15547
PARTITION part4 VALUES LESS THAN (2147483646)
 
15548
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15549
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15550
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15551
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15552
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
15553
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15554
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15555
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15556
# Start usability test (inc/partition_check.inc)
 
15557
create_command
 
15558
SHOW CREATE TABLE t1;
 
15559
Table   Create Table
 
15560
t1      CREATE TABLE `t1` (
 
15561
  `f_int1` int(11) DEFAULT NULL,
 
15562
  `f_int2` int(11) DEFAULT NULL,
 
15563
  `f_char1` char(20) DEFAULT NULL,
 
15564
  `f_char2` char(20) DEFAULT NULL,
 
15565
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15566
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
15567
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
15568
 
 
15569
unified filelist
 
15570
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
15571
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
15572
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
15573
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
15574
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
15575
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
15576
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
15577
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
15578
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
15579
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
15580
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
15581
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
15582
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
15583
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
15584
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
15585
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
15586
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
15587
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
15588
 
 
15589
# check prerequisites-1 success:    1
 
15590
# check COUNT(*) success:    1
 
15591
# check MIN/MAX(f_int1) success:    1
 
15592
# check MIN/MAX(f_int2) success:    1
 
15593
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15594
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15595
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15596
WHERE f_int1 IN (2,3);
 
15597
ERROR 23000: Can't write; duplicate key in table 't1'
 
15598
# check prerequisites-3 success:    1
 
15599
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15600
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15601
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15602
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15603
WHERE f_int1 IN (2,3);
 
15604
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15605
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15606
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15607
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15608
WHERE f_int1 IN (2,3);
 
15609
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15610
# check read via f_int1 success: 1
 
15611
# check read via f_int2 success: 1
 
15612
        
 
15613
# check multiple-1 success:     1
 
15614
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15615
        
 
15616
# check multiple-2 success:     1
 
15617
INSERT INTO t1 SELECT * FROM t0_template
 
15618
WHERE MOD(f_int1,3) = 0;
 
15619
        
 
15620
# check multiple-3 success:     1
 
15621
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15622
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15623
AND @max_row_div2 + @max_row_div4;
 
15624
        
 
15625
# check multiple-4 success:     1
 
15626
DELETE FROM t1
 
15627
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15628
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15629
        
 
15630
# check multiple-5 success:     1
 
15631
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15632
WHERE MOD(f_int1,3) = 0
 
15633
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15634
SELECT COUNT(*) INTO @clash_count
 
15635
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15636
WHERE MOD(f_int1,3) = 0
 
15637
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15638
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15639
INSERT INTO t1
 
15640
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15641
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15642
f_charbig = '#SINGLE#';
 
15643
        
 
15644
# check single-1 success:       1
 
15645
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15646
INSERT INTO t1
 
15647
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15648
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15649
f_charbig = '#SINGLE#';
 
15650
        
 
15651
# check single-2 success:       1
 
15652
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15653
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15654
UPDATE t1 SET f_int1 = @cur_value2
 
15655
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15656
        
 
15657
# check single-3 success:       1
 
15658
SET @cur_value1= -1;
 
15659
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15660
UPDATE t1 SET f_int1 = @cur_value1
 
15661
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15662
        
 
15663
# check single-4 success:       1
 
15664
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15665
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15666
        
 
15667
# check single-5 success:       1
 
15668
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15669
        
 
15670
# check single-6 success:       1
 
15671
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15672
ERROR HY000: Table has no partition for value 2147483647
 
15673
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15674
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15675
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15676
f_charbig = '#NULL#';
 
15677
INSERT INTO t1
 
15678
SET f_int1 = NULL , f_int2 = -@max_row,
 
15679
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15680
f_charbig = '#NULL#';
 
15681
# check null success:    1
 
15682
        
 
15683
# check null-1 success:         1
 
15684
UPDATE t1 SET f_int1 = -@max_row
 
15685
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15686
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15687
        
 
15688
# check null-2 success:         1
 
15689
UPDATE t1 SET f_int1 = NULL
 
15690
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15691
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15692
        
 
15693
# check null-3 success:         1
 
15694
DELETE FROM t1
 
15695
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15696
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15697
        
 
15698
# check null-4 success:         1
 
15699
DELETE FROM t1
 
15700
WHERE f_int1 = 0 AND f_int2 = 0
 
15701
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15702
AND f_charbig = '#NULL#';
 
15703
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15704
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15705
   FROM t0_template source_tab
 
15706
WHERE MOD(f_int1,3) = 0
 
15707
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15708
ON DUPLICATE KEY
 
15709
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15710
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15711
f_charbig = 'was updated';
 
15712
        
 
15713
# check unique-1-a success:     1
 
15714
        
 
15715
# check unique-1-b success:     1
 
15716
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15717
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15718
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15719
f_charbig = CONCAT('===',f_char1,'===')
 
15720
WHERE f_charbig = 'was updated';
 
15721
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15722
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15723
   FROM t0_template source_tab
 
15724
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15725
        
 
15726
# check replace success:        1
 
15727
DELETE FROM t1
 
15728
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15729
DELETE FROM t1
 
15730
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15731
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15732
UPDATE t1 SET f_int2 = f_int1,
 
15733
f_char1 = CAST(f_int1 AS CHAR),
 
15734
f_char2 = CAST(f_int1 AS CHAR),
 
15735
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15736
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15737
SET AUTOCOMMIT= 0;
 
15738
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15739
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15740
FROM t0_template source_tab
 
15741
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15742
        
 
15743
# check transactions-1 success:         1
 
15744
COMMIT WORK;
 
15745
        
 
15746
# check transactions-2 success:         1
 
15747
ROLLBACK WORK;
 
15748
        
 
15749
# check transactions-3 success:         1
 
15750
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15751
COMMIT WORK;
 
15752
ROLLBACK WORK;
 
15753
        
 
15754
# check transactions-4 success:         1
 
15755
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15756
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15757
FROM t0_template source_tab
 
15758
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15759
        
 
15760
# check transactions-5 success:         1
 
15761
ROLLBACK WORK;
 
15762
Warnings:
 
15763
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
15764
        
 
15765
# check transactions-6 success:         1
 
15766
# INFO: Storage engine used for t1 seems to be not transactional.
 
15767
COMMIT;
 
15768
        
 
15769
# check transactions-7 success:         1
 
15770
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15771
COMMIT WORK;
 
15772
SET @@session.sql_mode = 'traditional';
 
15773
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15774
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15775
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15776
'', '', 'was inserted' FROM t0_template
 
15777
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15778
ERROR 22012: Division by 0
 
15779
COMMIT;
 
15780
        
 
15781
# check transactions-8 success:         1
 
15782
# INFO: Storage engine used for t1 seems to be unable to revert
 
15783
#       changes made by the failing statement.
 
15784
SET @@session.sql_mode = '';
 
15785
SET AUTOCOMMIT= 1;
 
15786
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15787
COMMIT WORK;
 
15788
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15789
        
 
15790
# check special-1 success:      1
 
15791
UPDATE t1 SET f_charbig = '';
 
15792
        
 
15793
# check special-2 success:      1
 
15794
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15795
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15796
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15798
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15799
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15800
'just inserted' FROM t0_template
 
15801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15802
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15803
BEGIN
 
15804
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15805
f_charbig = 'updated by trigger'
 
15806
      WHERE f_int1 = new.f_int1;
 
15807
END|
 
15808
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15809
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15811
        
 
15812
# check trigger-1 success:      1
 
15813
DROP TRIGGER trg_1;
 
15814
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15815
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15816
f_charbig = 'just inserted'
 
15817
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15818
DELETE FROM t0_aux
 
15819
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15820
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15821
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15822
'just inserted' FROM t0_template
 
15823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15824
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15825
BEGIN
 
15826
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15827
f_charbig = 'updated by trigger'
 
15828
      WHERE f_int1 = new.f_int1;
 
15829
END|
 
15830
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15831
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15833
        
 
15834
# check trigger-2 success:      1
 
15835
DROP TRIGGER trg_1;
 
15836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15838
f_charbig = 'just inserted'
 
15839
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15840
DELETE FROM t0_aux
 
15841
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15842
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15843
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15844
'just inserted' FROM t0_template
 
15845
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15846
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15847
BEGIN
 
15848
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15849
f_charbig = 'updated by trigger'
 
15850
      WHERE f_int1 = new.f_int1;
 
15851
END|
 
15852
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15853
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15854
        
 
15855
# check trigger-3 success:      1
 
15856
DROP TRIGGER trg_1;
 
15857
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15858
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15859
f_charbig = 'just inserted'
 
15860
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15861
DELETE FROM t0_aux
 
15862
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15863
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15864
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15865
'just inserted' FROM t0_template
 
15866
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15867
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15868
BEGIN
 
15869
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15870
f_charbig = 'updated by trigger'
 
15871
      WHERE f_int1 = - old.f_int1;
 
15872
END|
 
15873
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15874
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15875
        
 
15876
# check trigger-4 success:      1
 
15877
DROP TRIGGER trg_1;
 
15878
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15879
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15880
f_charbig = 'just inserted'
 
15881
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15882
DELETE FROM t0_aux
 
15883
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15884
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15885
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15886
'just inserted' FROM t0_template
 
15887
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15888
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15889
BEGIN
 
15890
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15891
f_charbig = 'updated by trigger'
 
15892
      WHERE f_int1 = new.f_int1;
 
15893
END|
 
15894
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15895
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15896
        
 
15897
# check trigger-5 success:      1
 
15898
DROP TRIGGER trg_1;
 
15899
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15900
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15901
f_charbig = 'just inserted'
 
15902
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15903
DELETE FROM t0_aux
 
15904
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15905
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15906
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15907
'just inserted' FROM t0_template
 
15908
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15909
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15910
BEGIN
 
15911
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15912
f_charbig = 'updated by trigger'
 
15913
      WHERE f_int1 = - old.f_int1;
 
15914
END|
 
15915
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15916
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15917
        
 
15918
# check trigger-6 success:      1
 
15919
DROP TRIGGER trg_1;
 
15920
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15921
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15922
f_charbig = 'just inserted'
 
15923
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15924
DELETE FROM t0_aux
 
15925
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15926
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15927
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15928
'just inserted' FROM t0_template
 
15929
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15930
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15931
BEGIN
 
15932
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15933
f_charbig = 'updated by trigger'
 
15934
      WHERE f_int1 = - old.f_int1;
 
15935
END|
 
15936
DELETE FROM t0_aux
 
15937
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15938
        
 
15939
# check trigger-7 success:      1
 
15940
DROP TRIGGER trg_1;
 
15941
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15942
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15943
f_charbig = 'just inserted'
 
15944
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15945
DELETE FROM t0_aux
 
15946
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15947
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15948
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15949
'just inserted' FROM t0_template
 
15950
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15951
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15952
BEGIN
 
15953
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15954
f_charbig = 'updated by trigger'
 
15955
      WHERE f_int1 = - old.f_int1;
 
15956
END|
 
15957
DELETE FROM t0_aux
 
15958
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15959
        
 
15960
# check trigger-8 success:      1
 
15961
DROP TRIGGER trg_1;
 
15962
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15963
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15964
f_charbig = 'just inserted'
 
15965
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15966
DELETE FROM t0_aux
 
15967
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15968
DELETE FROM t1
 
15969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15970
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15971
BEGIN
 
15972
SET new.f_int1 = old.f_int1 + @max_row,
 
15973
new.f_int2 = old.f_int2 - @max_row,
 
15974
new.f_charbig = '####updated per update trigger####';
 
15975
END|
 
15976
UPDATE t1
 
15977
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15978
f_charbig = '####updated per update statement itself####';
 
15979
        
 
15980
# check trigger-9 success:      1
 
15981
DROP TRIGGER trg_2;
 
15982
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15983
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15984
f_charbig = CONCAT('===',f_char1,'===');
 
15985
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15986
BEGIN
 
15987
SET new.f_int1 = new.f_int1 + @max_row,
 
15988
new.f_int2 = new.f_int2 - @max_row,
 
15989
new.f_charbig = '####updated per update trigger####';
 
15990
END|
 
15991
UPDATE t1
 
15992
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15993
f_charbig = '####updated per update statement itself####';
 
15994
        
 
15995
# check trigger-10 success:     1
 
15996
DROP TRIGGER trg_2;
 
15997
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15998
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15999
f_charbig = CONCAT('===',f_char1,'===');
 
16000
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16001
BEGIN
 
16002
SET new.f_int1 = @my_max1 + @counter,
 
16003
new.f_int2 = @my_min2 - @counter,
 
16004
new.f_charbig = '####updated per insert trigger####';
 
16005
SET @counter = @counter + 1;
 
16006
END|
 
16007
SET @counter = 1;
 
16008
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16010
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16011
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16013
ORDER BY f_int1;
 
16014
DROP TRIGGER trg_3;
 
16015
        
 
16016
# check trigger-11 success:     1
 
16017
DELETE FROM t1
 
16018
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16019
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16020
AND f_charbig = '####updated per insert trigger####';
 
16021
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16022
BEGIN
 
16023
SET new.f_int1 = @my_max1 + @counter,
 
16024
new.f_int2 = @my_min2 - @counter,
 
16025
new.f_charbig = '####updated per insert trigger####';
 
16026
SET @counter = @counter + 1;
 
16027
END|
 
16028
SET @counter = 1;
 
16029
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16030
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16031
SELECT CAST(f_int1 AS CHAR),
 
16032
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16033
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16034
ORDER BY f_int1;
 
16035
DROP TRIGGER trg_3;
 
16036
        
 
16037
# check trigger-12 success:     1
 
16038
DELETE FROM t1
 
16039
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16040
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16041
AND f_charbig = '####updated per insert trigger####';
 
16042
ANALYZE  TABLE t1;
 
16043
Table   Op      Msg_type        Msg_text
 
16044
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
16045
CHECK    TABLE t1 EXTENDED;
 
16046
Table   Op      Msg_type        Msg_text
 
16047
test.t1 check   note    The storage engine for the table doesn't support check
 
16048
CHECKSUM TABLE t1 EXTENDED;
 
16049
Table   Checksum
 
16050
test.t1 <some_value>
 
16051
OPTIMIZE TABLE t1;
 
16052
Table   Op      Msg_type        Msg_text
 
16053
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
16054
# check layout success:    1
 
16055
REPAIR   TABLE t1 EXTENDED;
 
16056
Table   Op      Msg_type        Msg_text
 
16057
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16058
# check layout success:    1
 
16059
TRUNCATE t1;
 
16060
        
 
16061
# check TRUNCATE success:       1
 
16062
# check layout success:    1
 
16063
# End usability test (inc/partition_check.inc)
 
16064
DROP TABLE t1;
 
16065
CREATE TABLE t1 (
 
16066
f_int1 INTEGER,
 
16067
f_int2 INTEGER,
 
16068
f_char1 CHAR(20),
 
16069
f_char2 CHAR(20),
 
16070
f_charbig VARCHAR(1000)
 
16071
 
 
16072
)
 
16073
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
16074
(PARTITION part1 VALUES IN (0)
 
16075
(SUBPARTITION sp11, SUBPARTITION sp12),
 
16076
PARTITION part2 VALUES IN (1)
 
16077
(SUBPARTITION sp21, SUBPARTITION sp22),
 
16078
PARTITION part3 VALUES IN (2)
 
16079
(SUBPARTITION sp31, SUBPARTITION sp32),
 
16080
PARTITION part4 VALUES IN (NULL)
 
16081
(SUBPARTITION sp41, SUBPARTITION sp42));
 
16082
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16083
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16084
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16085
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
16086
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16087
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16088
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16089
# Start usability test (inc/partition_check.inc)
 
16090
create_command
 
16091
SHOW CREATE TABLE t1;
 
16092
Table   Create Table
 
16093
t1      CREATE TABLE `t1` (
 
16094
  `f_int1` int(11) DEFAULT NULL,
 
16095
  `f_int2` int(11) DEFAULT NULL,
 
16096
  `f_char1` char(20) DEFAULT NULL,
 
16097
  `f_char2` char(20) DEFAULT NULL,
 
16098
  `f_charbig` varchar(1000) DEFAULT NULL,
 
16099
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
16100
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
16101
 
 
16102
unified filelist
 
16103
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
16104
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
16105
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
16106
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
16107
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
16108
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
16109
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
16110
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
16111
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
16112
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
16113
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
16114
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
16115
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
16116
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
16117
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
16118
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
16119
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
16120
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
16121
 
 
16122
# check prerequisites-1 success:    1
 
16123
# check COUNT(*) success:    1
 
16124
# check MIN/MAX(f_int1) success:    1
 
16125
# check MIN/MAX(f_int2) success:    1
 
16126
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16127
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16128
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16129
WHERE f_int1 IN (2,3);
 
16130
ERROR 23000: Can't write; duplicate key in table 't1'
 
16131
# check prerequisites-3 success:    1
 
16132
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
16133
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16134
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16135
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16136
WHERE f_int1 IN (2,3);
 
16137
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16138
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16139
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16140
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16141
WHERE f_int1 IN (2,3);
 
16142
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16143
# check read via f_int1 success: 1
 
16144
# check read via f_int2 success: 1
 
16145
        
 
16146
# check multiple-1 success:     1
 
16147
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16148
        
 
16149
# check multiple-2 success:     1
 
16150
INSERT INTO t1 SELECT * FROM t0_template
 
16151
WHERE MOD(f_int1,3) = 0;
 
16152
        
 
16153
# check multiple-3 success:     1
 
16154
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16155
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16156
AND @max_row_div2 + @max_row_div4;
 
16157
        
 
16158
# check multiple-4 success:     1
 
16159
DELETE FROM t1
 
16160
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16161
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16162
        
 
16163
# check multiple-5 success:     1
 
16164
SELECT COUNT(*) INTO @try_count FROM t0_template
 
16165
WHERE MOD(f_int1,3) = 0
 
16166
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16167
SELECT COUNT(*) INTO @clash_count
 
16168
FROM t1 INNER JOIN t0_template USING(f_int1)
 
16169
WHERE MOD(f_int1,3) = 0
 
16170
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16171
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16172
INSERT INTO t1
 
16173
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16174
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16175
f_charbig = '#SINGLE#';
 
16176
        
 
16177
# check single-1 success:       1
 
16178
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16179
INSERT INTO t1
 
16180
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16181
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16182
f_charbig = '#SINGLE#';
 
16183
        
 
16184
# check single-2 success:       1
 
16185
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16186
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16187
UPDATE t1 SET f_int1 = @cur_value2
 
16188
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16189
        
 
16190
# check single-3 success:       1
 
16191
SET @cur_value1= -1;
 
16192
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16193
UPDATE t1 SET f_int1 = @cur_value1
 
16194
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16195
        
 
16196
# check single-4 success:       1
 
16197
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16198
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16199
        
 
16200
# check single-5 success:       1
 
16201
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16202
        
 
16203
# check single-6 success:       1
 
16204
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16205
        
 
16206
# check single-7 success:       1
 
16207
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16208
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16209
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16210
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16211
f_charbig = '#NULL#';
 
16212
INSERT INTO t1
 
16213
SET f_int1 = NULL , f_int2 = -@max_row,
 
16214
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16215
f_charbig = '#NULL#';
 
16216
# check null success:    1
 
16217
        
 
16218
# check null-1 success:         1
 
16219
UPDATE t1 SET f_int1 = -@max_row
 
16220
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16221
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16222
        
 
16223
# check null-2 success:         1
 
16224
UPDATE t1 SET f_int1 = NULL
 
16225
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16226
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16227
        
 
16228
# check null-3 success:         1
 
16229
DELETE FROM t1
 
16230
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16231
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16232
        
 
16233
# check null-4 success:         1
 
16234
DELETE FROM t1
 
16235
WHERE f_int1 = 0 AND f_int2 = 0
 
16236
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16237
AND f_charbig = '#NULL#';
 
16238
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16239
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16240
   FROM t0_template source_tab
 
16241
WHERE MOD(f_int1,3) = 0
 
16242
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
16243
ON DUPLICATE KEY
 
16244
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
16245
f_int2 = 2 * @max_row + source_tab.f_int1,
 
16246
f_charbig = 'was updated';
 
16247
        
 
16248
# check unique-1-a success:     1
 
16249
        
 
16250
# check unique-1-b success:     1
 
16251
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16252
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16253
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16254
f_charbig = CONCAT('===',f_char1,'===')
 
16255
WHERE f_charbig = 'was updated';
 
16256
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16257
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
16258
   FROM t0_template source_tab
 
16259
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16260
        
 
16261
# check replace success:        1
 
16262
DELETE FROM t1
 
16263
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
16264
DELETE FROM t1
 
16265
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
16266
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
16267
UPDATE t1 SET f_int2 = f_int1,
 
16268
f_char1 = CAST(f_int1 AS CHAR),
 
16269
f_char2 = CAST(f_int1 AS CHAR),
 
16270
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
16271
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
16272
SET AUTOCOMMIT= 0;
 
16273
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16274
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16275
FROM t0_template source_tab
 
16276
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16277
        
 
16278
# check transactions-1 success:         1
 
16279
COMMIT WORK;
 
16280
        
 
16281
# check transactions-2 success:         1
 
16282
ROLLBACK WORK;
 
16283
        
 
16284
# check transactions-3 success:         1
 
16285
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16286
COMMIT WORK;
 
16287
ROLLBACK WORK;
 
16288
        
 
16289
# check transactions-4 success:         1
 
16290
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16291
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16292
FROM t0_template source_tab
 
16293
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16294
        
 
16295
# check transactions-5 success:         1
 
16296
ROLLBACK WORK;
 
16297
Warnings:
 
16298
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
16299
        
 
16300
# check transactions-6 success:         1
 
16301
# INFO: Storage engine used for t1 seems to be not transactional.
 
16302
COMMIT;
 
16303
        
 
16304
# check transactions-7 success:         1
 
16305
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16306
COMMIT WORK;
 
16307
SET @@session.sql_mode = 'traditional';
 
16308
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16309
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16310
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16311
'', '', 'was inserted' FROM t0_template
 
16312
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16313
ERROR 22012: Division by 0
 
16314
COMMIT;
 
16315
        
 
16316
# check transactions-8 success:         1
 
16317
# INFO: Storage engine used for t1 seems to be unable to revert
 
16318
#       changes made by the failing statement.
 
16319
SET @@session.sql_mode = '';
 
16320
SET AUTOCOMMIT= 1;
 
16321
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16322
COMMIT WORK;
 
16323
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16324
        
 
16325
# check special-1 success:      1
 
16326
UPDATE t1 SET f_charbig = '';
 
16327
        
 
16328
# check special-2 success:      1
 
16329
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16330
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16331
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16332
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16333
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16334
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16335
'just inserted' FROM t0_template
 
16336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16337
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16338
BEGIN
 
16339
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16340
f_charbig = 'updated by trigger'
 
16341
      WHERE f_int1 = new.f_int1;
 
16342
END|
 
16343
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16344
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16346
        
 
16347
# check trigger-1 success:      1
 
16348
DROP TRIGGER trg_1;
 
16349
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16350
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16351
f_charbig = 'just inserted'
 
16352
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16353
DELETE FROM t0_aux
 
16354
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16355
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16356
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16357
'just inserted' FROM t0_template
 
16358
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16359
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16360
BEGIN
 
16361
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16362
f_charbig = 'updated by trigger'
 
16363
      WHERE f_int1 = new.f_int1;
 
16364
END|
 
16365
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16366
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16368
        
 
16369
# check trigger-2 success:      1
 
16370
DROP TRIGGER trg_1;
 
16371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16373
f_charbig = 'just inserted'
 
16374
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16375
DELETE FROM t0_aux
 
16376
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16377
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16378
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16379
'just inserted' FROM t0_template
 
16380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16381
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16382
BEGIN
 
16383
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16384
f_charbig = 'updated by trigger'
 
16385
      WHERE f_int1 = new.f_int1;
 
16386
END|
 
16387
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16388
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16389
        
 
16390
# check trigger-3 success:      1
 
16391
DROP TRIGGER trg_1;
 
16392
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16393
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16394
f_charbig = 'just inserted'
 
16395
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16396
DELETE FROM t0_aux
 
16397
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16399
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16400
'just inserted' FROM t0_template
 
16401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16402
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16403
BEGIN
 
16404
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16405
f_charbig = 'updated by trigger'
 
16406
      WHERE f_int1 = - old.f_int1;
 
16407
END|
 
16408
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16409
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16410
        
 
16411
# check trigger-4 success:      1
 
16412
DROP TRIGGER trg_1;
 
16413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16415
f_charbig = 'just inserted'
 
16416
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16417
DELETE FROM t0_aux
 
16418
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16419
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16420
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16421
'just inserted' FROM t0_template
 
16422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16423
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16424
BEGIN
 
16425
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16426
f_charbig = 'updated by trigger'
 
16427
      WHERE f_int1 = new.f_int1;
 
16428
END|
 
16429
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16430
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16431
        
 
16432
# check trigger-5 success:      1
 
16433
DROP TRIGGER trg_1;
 
16434
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16435
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16436
f_charbig = 'just inserted'
 
16437
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16438
DELETE FROM t0_aux
 
16439
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16442
'just inserted' FROM t0_template
 
16443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16444
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16445
BEGIN
 
16446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16447
f_charbig = 'updated by trigger'
 
16448
      WHERE f_int1 = - old.f_int1;
 
16449
END|
 
16450
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16451
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16452
        
 
16453
# check trigger-6 success:      1
 
16454
DROP TRIGGER trg_1;
 
16455
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16456
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16457
f_charbig = 'just inserted'
 
16458
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16459
DELETE FROM t0_aux
 
16460
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16463
'just inserted' FROM t0_template
 
16464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16465
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16466
BEGIN
 
16467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16468
f_charbig = 'updated by trigger'
 
16469
      WHERE f_int1 = - old.f_int1;
 
16470
END|
 
16471
DELETE FROM t0_aux
 
16472
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16473
        
 
16474
# check trigger-7 success:      1
 
16475
DROP TRIGGER trg_1;
 
16476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16478
f_charbig = 'just inserted'
 
16479
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16480
DELETE FROM t0_aux
 
16481
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16483
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16484
'just inserted' FROM t0_template
 
16485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16486
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16487
BEGIN
 
16488
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16489
f_charbig = 'updated by trigger'
 
16490
      WHERE f_int1 = - old.f_int1;
 
16491
END|
 
16492
DELETE FROM t0_aux
 
16493
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16494
        
 
16495
# check trigger-8 success:      1
 
16496
DROP TRIGGER trg_1;
 
16497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16499
f_charbig = 'just inserted'
 
16500
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16501
DELETE FROM t0_aux
 
16502
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16503
DELETE FROM t1
 
16504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16505
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16506
BEGIN
 
16507
SET new.f_int1 = old.f_int1 + @max_row,
 
16508
new.f_int2 = old.f_int2 - @max_row,
 
16509
new.f_charbig = '####updated per update trigger####';
 
16510
END|
 
16511
UPDATE t1
 
16512
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16513
f_charbig = '####updated per update statement itself####';
 
16514
        
 
16515
# check trigger-9 success:      1
 
16516
DROP TRIGGER trg_2;
 
16517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16519
f_charbig = CONCAT('===',f_char1,'===');
 
16520
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16521
BEGIN
 
16522
SET new.f_int1 = new.f_int1 + @max_row,
 
16523
new.f_int2 = new.f_int2 - @max_row,
 
16524
new.f_charbig = '####updated per update trigger####';
 
16525
END|
 
16526
UPDATE t1
 
16527
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16528
f_charbig = '####updated per update statement itself####';
 
16529
        
 
16530
# check trigger-10 success:     1
 
16531
DROP TRIGGER trg_2;
 
16532
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16533
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16534
f_charbig = CONCAT('===',f_char1,'===');
 
16535
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16536
BEGIN
 
16537
SET new.f_int1 = @my_max1 + @counter,
 
16538
new.f_int2 = @my_min2 - @counter,
 
16539
new.f_charbig = '####updated per insert trigger####';
 
16540
SET @counter = @counter + 1;
 
16541
END|
 
16542
SET @counter = 1;
 
16543
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16545
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16546
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16548
ORDER BY f_int1;
 
16549
DROP TRIGGER trg_3;
 
16550
        
 
16551
# check trigger-11 success:     1
 
16552
DELETE FROM t1
 
16553
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16554
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16555
AND f_charbig = '####updated per insert trigger####';
 
16556
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16557
BEGIN
 
16558
SET new.f_int1 = @my_max1 + @counter,
 
16559
new.f_int2 = @my_min2 - @counter,
 
16560
new.f_charbig = '####updated per insert trigger####';
 
16561
SET @counter = @counter + 1;
 
16562
END|
 
16563
SET @counter = 1;
 
16564
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16565
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16566
SELECT CAST(f_int1 AS CHAR),
 
16567
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16569
ORDER BY f_int1;
 
16570
DROP TRIGGER trg_3;
 
16571
        
 
16572
# check trigger-12 success:     1
 
16573
DELETE FROM t1
 
16574
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16575
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16576
AND f_charbig = '####updated per insert trigger####';
 
16577
ANALYZE  TABLE t1;
 
16578
Table   Op      Msg_type        Msg_text
 
16579
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
16580
CHECK    TABLE t1 EXTENDED;
 
16581
Table   Op      Msg_type        Msg_text
 
16582
test.t1 check   note    The storage engine for the table doesn't support check
 
16583
CHECKSUM TABLE t1 EXTENDED;
 
16584
Table   Checksum
 
16585
test.t1 <some_value>
 
16586
OPTIMIZE TABLE t1;
 
16587
Table   Op      Msg_type        Msg_text
 
16588
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
16589
# check layout success:    1
 
16590
REPAIR   TABLE t1 EXTENDED;
 
16591
Table   Op      Msg_type        Msg_text
 
16592
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16593
# check layout success:    1
 
16594
TRUNCATE t1;
 
16595
        
 
16596
# check TRUNCATE success:       1
 
16597
# check layout success:    1
 
16598
# End usability test (inc/partition_check.inc)
 
16599
DROP TABLE t1;
 
16600
CREATE TABLE t1 (
 
16601
f_int1 INTEGER,
 
16602
f_int2 INTEGER,
 
16603
f_char1 CHAR(20),
 
16604
f_char2 CHAR(20),
 
16605
f_charbig VARCHAR(1000)
 
16606
 
 
16607
)
 
16608
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
16609
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
16610
(PARTITION part1 VALUES IN (0),
 
16611
 PARTITION part2 VALUES IN (1),
 
16612
 PARTITION part3 VALUES IN (NULL));
 
16613
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16614
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16615
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16616
ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
 
16617
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16618
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16619
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16620
# Start usability test (inc/partition_check.inc)
 
16621
create_command
 
16622
SHOW CREATE TABLE t1;
 
16623
Table   Create Table
 
16624
t1      CREATE TABLE `t1` (
 
16625
  `f_int1` int(11) DEFAULT NULL,
 
16626
  `f_int2` int(11) DEFAULT NULL,
 
16627
  `f_char1` char(20) DEFAULT NULL,
 
16628
  `f_char2` char(20) DEFAULT NULL,
 
16629
  `f_charbig` varchar(1000) DEFAULT NULL,
 
16630
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
16631
) ENGINE=MyISAM 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 = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
16632
 
 
16633
unified filelist
 
16634
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
16635
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
16636
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
16637
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
16638
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
16639
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
16640
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
16641
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
16642
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
16643
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
16644
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
16645
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
16646
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
16647
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
16648
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
16649
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
16650
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
16651
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
16652
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
16653
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
16654
 
 
16655
# check prerequisites-1 success:    1
 
16656
# check COUNT(*) success:    1
 
16657
# check MIN/MAX(f_int1) success:    1
 
16658
# check MIN/MAX(f_int2) success:    1
 
16659
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16660
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16661
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16662
WHERE f_int1 IN (2,3);
 
16663
ERROR 23000: Can't write; duplicate key in table 't1'
 
16664
# check prerequisites-3 success:    1
 
16665
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
16666
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16667
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16668
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16669
WHERE f_int1 IN (2,3);
 
16670
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16671
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16672
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16673
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16674
WHERE f_int1 IN (2,3);
 
16675
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16676
# check read via f_int1 success: 1
 
16677
# check read via f_int2 success: 1
 
16678
        
 
16679
# check multiple-1 success:     1
 
16680
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16681
        
 
16682
# check multiple-2 success:     1
 
16683
INSERT INTO t1 SELECT * FROM t0_template
 
16684
WHERE MOD(f_int1,3) = 0;
 
16685
        
 
16686
# check multiple-3 success:     1
 
16687
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16688
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16689
AND @max_row_div2 + @max_row_div4;
 
16690
        
 
16691
# check multiple-4 success:     1
 
16692
DELETE FROM t1
 
16693
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16694
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16695
        
 
16696
# check multiple-5 success:     1
 
16697
SELECT COUNT(*) INTO @try_count FROM t0_template
 
16698
WHERE MOD(f_int1,3) = 0
 
16699
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16700
SELECT COUNT(*) INTO @clash_count
 
16701
FROM t1 INNER JOIN t0_template USING(f_int1)
 
16702
WHERE MOD(f_int1,3) = 0
 
16703
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16704
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16705
INSERT INTO t1
 
16706
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16707
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16708
f_charbig = '#SINGLE#';
 
16709
        
 
16710
# check single-1 success:       1
 
16711
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16712
INSERT INTO t1
 
16713
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16714
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16715
f_charbig = '#SINGLE#';
 
16716
        
 
16717
# check single-2 success:       1
 
16718
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16719
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16720
UPDATE t1 SET f_int1 = @cur_value2
 
16721
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16722
        
 
16723
# check single-3 success:       1
 
16724
SET @cur_value1= -1;
 
16725
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16726
UPDATE t1 SET f_int1 = @cur_value1
 
16727
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16728
        
 
16729
# check single-4 success:       1
 
16730
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16731
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16732
        
 
16733
# check single-5 success:       1
 
16734
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16735
        
 
16736
# check single-6 success:       1
 
16737
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16738
        
 
16739
# check single-7 success:       1
 
16740
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16741
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16742
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16743
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16744
f_charbig = '#NULL#';
 
16745
INSERT INTO t1
 
16746
SET f_int1 = NULL , f_int2 = -@max_row,
 
16747
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16748
f_charbig = '#NULL#';
 
16749
# check null success:    1
 
16750
        
 
16751
# check null-1 success:         1
 
16752
UPDATE t1 SET f_int1 = -@max_row
 
16753
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16754
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16755
        
 
16756
# check null-2 success:         1
 
16757
UPDATE t1 SET f_int1 = NULL
 
16758
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16759
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16760
        
 
16761
# check null-3 success:         1
 
16762
DELETE FROM t1
 
16763
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16764
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16765
        
 
16766
# check null-4 success:         1
 
16767
DELETE FROM t1
 
16768
WHERE f_int1 = 0 AND f_int2 = 0
 
16769
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16770
AND f_charbig = '#NULL#';
 
16771
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16772
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16773
   FROM t0_template source_tab
 
16774
WHERE MOD(f_int1,3) = 0
 
16775
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
16776
ON DUPLICATE KEY
 
16777
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
16778
f_int2 = 2 * @max_row + source_tab.f_int1,
 
16779
f_charbig = 'was updated';
 
16780
        
 
16781
# check unique-1-a success:     1
 
16782
        
 
16783
# check unique-1-b success:     1
 
16784
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16785
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16786
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16787
f_charbig = CONCAT('===',f_char1,'===')
 
16788
WHERE f_charbig = 'was updated';
 
16789
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16790
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
16791
   FROM t0_template source_tab
 
16792
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16793
        
 
16794
# check replace success:        1
 
16795
DELETE FROM t1
 
16796
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
16797
DELETE FROM t1
 
16798
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
16799
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
16800
UPDATE t1 SET f_int2 = f_int1,
 
16801
f_char1 = CAST(f_int1 AS CHAR),
 
16802
f_char2 = CAST(f_int1 AS CHAR),
 
16803
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
16804
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
16805
SET AUTOCOMMIT= 0;
 
16806
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16807
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16808
FROM t0_template source_tab
 
16809
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16810
        
 
16811
# check transactions-1 success:         1
 
16812
COMMIT WORK;
 
16813
        
 
16814
# check transactions-2 success:         1
 
16815
ROLLBACK WORK;
 
16816
        
 
16817
# check transactions-3 success:         1
 
16818
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16819
COMMIT WORK;
 
16820
ROLLBACK WORK;
 
16821
        
 
16822
# check transactions-4 success:         1
 
16823
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16824
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16825
FROM t0_template source_tab
 
16826
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16827
        
 
16828
# check transactions-5 success:         1
 
16829
ROLLBACK WORK;
 
16830
Warnings:
 
16831
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
16832
        
 
16833
# check transactions-6 success:         1
 
16834
# INFO: Storage engine used for t1 seems to be not transactional.
 
16835
COMMIT;
 
16836
        
 
16837
# check transactions-7 success:         1
 
16838
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16839
COMMIT WORK;
 
16840
SET @@session.sql_mode = 'traditional';
 
16841
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16842
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16843
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16844
'', '', 'was inserted' FROM t0_template
 
16845
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16846
ERROR 22012: Division by 0
 
16847
COMMIT;
 
16848
        
 
16849
# check transactions-8 success:         1
 
16850
# INFO: Storage engine used for t1 seems to be unable to revert
 
16851
#       changes made by the failing statement.
 
16852
SET @@session.sql_mode = '';
 
16853
SET AUTOCOMMIT= 1;
 
16854
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16855
COMMIT WORK;
 
16856
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16857
        
 
16858
# check special-1 success:      1
 
16859
UPDATE t1 SET f_charbig = '';
 
16860
        
 
16861
# check special-2 success:      1
 
16862
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16863
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16864
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16866
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16867
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16868
'just inserted' FROM t0_template
 
16869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16870
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16871
BEGIN
 
16872
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16873
f_charbig = 'updated by trigger'
 
16874
      WHERE f_int1 = new.f_int1;
 
16875
END|
 
16876
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16877
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16879
        
 
16880
# check trigger-1 success:      1
 
16881
DROP TRIGGER trg_1;
 
16882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16883
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16884
f_charbig = 'just inserted'
 
16885
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16886
DELETE FROM t0_aux
 
16887
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16889
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16890
'just inserted' FROM t0_template
 
16891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16892
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16893
BEGIN
 
16894
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16895
f_charbig = 'updated by trigger'
 
16896
      WHERE f_int1 = new.f_int1;
 
16897
END|
 
16898
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16899
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16901
        
 
16902
# check trigger-2 success:      1
 
16903
DROP TRIGGER trg_1;
 
16904
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16905
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16906
f_charbig = 'just inserted'
 
16907
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16908
DELETE FROM t0_aux
 
16909
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16911
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16912
'just inserted' FROM t0_template
 
16913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16914
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16915
BEGIN
 
16916
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16917
f_charbig = 'updated by trigger'
 
16918
      WHERE f_int1 = new.f_int1;
 
16919
END|
 
16920
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16921
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16922
        
 
16923
# check trigger-3 success:      1
 
16924
DROP TRIGGER trg_1;
 
16925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16927
f_charbig = 'just inserted'
 
16928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16929
DELETE FROM t0_aux
 
16930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16933
'just inserted' FROM t0_template
 
16934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16935
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16936
BEGIN
 
16937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16938
f_charbig = 'updated by trigger'
 
16939
      WHERE f_int1 = - old.f_int1;
 
16940
END|
 
16941
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16942
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16943
        
 
16944
# check trigger-4 success:      1
 
16945
DROP TRIGGER trg_1;
 
16946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16948
f_charbig = 'just inserted'
 
16949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16950
DELETE FROM t0_aux
 
16951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16954
'just inserted' FROM t0_template
 
16955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16956
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16957
BEGIN
 
16958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16959
f_charbig = 'updated by trigger'
 
16960
      WHERE f_int1 = new.f_int1;
 
16961
END|
 
16962
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16963
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16964
        
 
16965
# check trigger-5 success:      1
 
16966
DROP TRIGGER trg_1;
 
16967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16969
f_charbig = 'just inserted'
 
16970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16971
DELETE FROM t0_aux
 
16972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16974
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16975
'just inserted' FROM t0_template
 
16976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16977
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16978
BEGIN
 
16979
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16980
f_charbig = 'updated by trigger'
 
16981
      WHERE f_int1 = - old.f_int1;
 
16982
END|
 
16983
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16984
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16985
        
 
16986
# check trigger-6 success:      1
 
16987
DROP TRIGGER trg_1;
 
16988
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16989
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16990
f_charbig = 'just inserted'
 
16991
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16992
DELETE FROM t0_aux
 
16993
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16995
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16996
'just inserted' FROM t0_template
 
16997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16998
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16999
BEGIN
 
17000
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17001
f_charbig = 'updated by trigger'
 
17002
      WHERE f_int1 = - old.f_int1;
 
17003
END|
 
17004
DELETE FROM t0_aux
 
17005
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17006
        
 
17007
# check trigger-7 success:      1
 
17008
DROP TRIGGER trg_1;
 
17009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17011
f_charbig = 'just inserted'
 
17012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17013
DELETE FROM t0_aux
 
17014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17017
'just inserted' FROM t0_template
 
17018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17019
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17020
BEGIN
 
17021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17022
f_charbig = 'updated by trigger'
 
17023
      WHERE f_int1 = - old.f_int1;
 
17024
END|
 
17025
DELETE FROM t0_aux
 
17026
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17027
        
 
17028
# check trigger-8 success:      1
 
17029
DROP TRIGGER trg_1;
 
17030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17032
f_charbig = 'just inserted'
 
17033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17034
DELETE FROM t0_aux
 
17035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17036
DELETE FROM t1
 
17037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17038
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17039
BEGIN
 
17040
SET new.f_int1 = old.f_int1 + @max_row,
 
17041
new.f_int2 = old.f_int2 - @max_row,
 
17042
new.f_charbig = '####updated per update trigger####';
 
17043
END|
 
17044
UPDATE t1
 
17045
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17046
f_charbig = '####updated per update statement itself####';
 
17047
        
 
17048
# check trigger-9 success:      1
 
17049
DROP TRIGGER trg_2;
 
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
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17054
BEGIN
 
17055
SET new.f_int1 = new.f_int1 + @max_row,
 
17056
new.f_int2 = new.f_int2 - @max_row,
 
17057
new.f_charbig = '####updated per update trigger####';
 
17058
END|
 
17059
UPDATE t1
 
17060
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17061
f_charbig = '####updated per update statement itself####';
 
17062
        
 
17063
# check trigger-10 success:     1
 
17064
DROP TRIGGER trg_2;
 
17065
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17066
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17067
f_charbig = CONCAT('===',f_char1,'===');
 
17068
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17069
BEGIN
 
17070
SET new.f_int1 = @my_max1 + @counter,
 
17071
new.f_int2 = @my_min2 - @counter,
 
17072
new.f_charbig = '####updated per insert trigger####';
 
17073
SET @counter = @counter + 1;
 
17074
END|
 
17075
SET @counter = 1;
 
17076
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17077
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17078
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17079
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17081
ORDER BY f_int1;
 
17082
DROP TRIGGER trg_3;
 
17083
        
 
17084
# check trigger-11 success:     1
 
17085
DELETE FROM t1
 
17086
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17087
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17088
AND f_charbig = '####updated per insert trigger####';
 
17089
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17090
BEGIN
 
17091
SET new.f_int1 = @my_max1 + @counter,
 
17092
new.f_int2 = @my_min2 - @counter,
 
17093
new.f_charbig = '####updated per insert trigger####';
 
17094
SET @counter = @counter + 1;
 
17095
END|
 
17096
SET @counter = 1;
 
17097
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17098
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17099
SELECT CAST(f_int1 AS CHAR),
 
17100
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17102
ORDER BY f_int1;
 
17103
DROP TRIGGER trg_3;
 
17104
        
 
17105
# check trigger-12 success:     1
 
17106
DELETE FROM t1
 
17107
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17108
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17109
AND f_charbig = '####updated per insert trigger####';
 
17110
ANALYZE  TABLE t1;
 
17111
Table   Op      Msg_type        Msg_text
 
17112
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
17113
CHECK    TABLE t1 EXTENDED;
 
17114
Table   Op      Msg_type        Msg_text
 
17115
test.t1 check   note    The storage engine for the table doesn't support check
 
17116
CHECKSUM TABLE t1 EXTENDED;
 
17117
Table   Checksum
 
17118
test.t1 <some_value>
 
17119
OPTIMIZE TABLE t1;
 
17120
Table   Op      Msg_type        Msg_text
 
17121
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
17122
# check layout success:    1
 
17123
REPAIR   TABLE t1 EXTENDED;
 
17124
Table   Op      Msg_type        Msg_text
 
17125
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17126
# check layout success:    1
 
17127
TRUNCATE t1;
 
17128
        
 
17129
# check TRUNCATE success:       1
 
17130
# check layout success:    1
 
17131
# End usability test (inc/partition_check.inc)
 
17132
DROP TABLE t1;
 
17133
 
 
17134
#========================================================================
 
17135
#  2     DROP PRIMARY KEY or UNIQUE INDEX
 
17136
#========================================================================
 
17137
#------------------------------------------------------------------------
 
17138
#  2.1   Partitioning function contains one column(f_int1)
 
17139
#------------------------------------------------------------------------
 
17140
DROP TABLE IF EXISTS t1;
 
17141
CREATE TABLE t1 (
 
17142
f_int1 INTEGER,
 
17143
f_int2 INTEGER,
 
17144
f_char1 CHAR(20),
 
17145
f_char2 CHAR(20),
 
17146
f_charbig VARCHAR(1000)
 
17147
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
17148
)
 
17149
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
17150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17151
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17152
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17153
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
17154
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17155
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17156
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17157
# Start usability test (inc/partition_check.inc)
 
17158
create_command
 
17159
SHOW CREATE TABLE t1;
 
17160
Table   Create Table
 
17161
t1      CREATE TABLE `t1` (
 
17162
  `f_int1` int(11) DEFAULT NULL,
 
17163
  `f_int2` int(11) DEFAULT NULL,
 
17164
  `f_char1` char(20) DEFAULT NULL,
 
17165
  `f_char2` char(20) DEFAULT NULL,
 
17166
  `f_charbig` varchar(1000) DEFAULT NULL
 
17167
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
17168
 
 
17169
unified filelist
 
17170
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
17171
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
17172
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
17173
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
17174
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
17175
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
17176
 
 
17177
# check prerequisites-1 success:    1
 
17178
# check COUNT(*) success:    1
 
17179
# check MIN/MAX(f_int1) success:    1
 
17180
# check MIN/MAX(f_int2) success:    1
 
17181
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17182
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17183
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17184
WHERE f_int1 IN (2,3);
 
17185
# check prerequisites-3 success:    1
 
17186
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17187
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17188
# check read via f_int1 success: 1
 
17189
# check read via f_int2 success: 1
 
17190
        
 
17191
# check multiple-1 success:     1
 
17192
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17193
        
 
17194
# check multiple-2 success:     1
 
17195
INSERT INTO t1 SELECT * FROM t0_template
 
17196
WHERE MOD(f_int1,3) = 0;
 
17197
        
 
17198
# check multiple-3 success:     1
 
17199
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17200
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17201
AND @max_row_div2 + @max_row_div4;
 
17202
        
 
17203
# check multiple-4 success:     1
 
17204
DELETE FROM t1
 
17205
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17206
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17207
        
 
17208
# check multiple-5 success:     1
 
17209
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17210
INSERT INTO t1
 
17211
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17212
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17213
f_charbig = '#SINGLE#';
 
17214
        
 
17215
# check single-1 success:       1
 
17216
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17217
INSERT INTO t1
 
17218
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17219
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17220
f_charbig = '#SINGLE#';
 
17221
        
 
17222
# check single-2 success:       1
 
17223
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17224
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17225
UPDATE t1 SET f_int1 = @cur_value2
 
17226
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17227
        
 
17228
# check single-3 success:       1
 
17229
SET @cur_value1= -1;
 
17230
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17231
UPDATE t1 SET f_int1 = @cur_value1
 
17232
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17233
        
 
17234
# check single-4 success:       1
 
17235
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17236
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17237
        
 
17238
# check single-5 success:       1
 
17239
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17240
        
 
17241
# check single-6 success:       1
 
17242
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17243
        
 
17244
# check single-7 success:       1
 
17245
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17246
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17247
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17248
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17249
f_charbig = '#NULL#';
 
17250
INSERT INTO t1
 
17251
SET f_int1 = NULL , f_int2 = -@max_row,
 
17252
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17253
f_charbig = '#NULL#';
 
17254
# check null success:    1
 
17255
        
 
17256
# check null-1 success:         1
 
17257
UPDATE t1 SET f_int1 = -@max_row
 
17258
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17259
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17260
        
 
17261
# check null-2 success:         1
 
17262
UPDATE t1 SET f_int1 = NULL
 
17263
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17264
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17265
        
 
17266
# check null-3 success:         1
 
17267
DELETE FROM t1
 
17268
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17269
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17270
        
 
17271
# check null-4 success:         1
 
17272
DELETE FROM t1
 
17273
WHERE f_int1 = 0 AND f_int2 = 0
 
17274
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17275
AND f_charbig = '#NULL#';
 
17276
SET AUTOCOMMIT= 0;
 
17277
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17278
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17279
FROM t0_template source_tab
 
17280
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17281
        
 
17282
# check transactions-1 success:         1
 
17283
COMMIT WORK;
 
17284
        
 
17285
# check transactions-2 success:         1
 
17286
ROLLBACK WORK;
 
17287
        
 
17288
# check transactions-3 success:         1
 
17289
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17290
COMMIT WORK;
 
17291
ROLLBACK WORK;
 
17292
        
 
17293
# check transactions-4 success:         1
 
17294
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17295
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17296
FROM t0_template source_tab
 
17297
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17298
        
 
17299
# check transactions-5 success:         1
 
17300
ROLLBACK WORK;
 
17301
Warnings:
 
17302
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
17303
        
 
17304
# check transactions-6 success:         1
 
17305
# INFO: Storage engine used for t1 seems to be not transactional.
 
17306
COMMIT;
 
17307
        
 
17308
# check transactions-7 success:         1
 
17309
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17310
COMMIT WORK;
 
17311
SET @@session.sql_mode = 'traditional';
 
17312
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17313
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17314
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17315
'', '', 'was inserted' FROM t0_template
 
17316
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17317
ERROR 22012: Division by 0
 
17318
COMMIT;
 
17319
        
 
17320
# check transactions-8 success:         1
 
17321
# INFO: Storage engine used for t1 seems to be unable to revert
 
17322
#       changes made by the failing statement.
 
17323
SET @@session.sql_mode = '';
 
17324
SET AUTOCOMMIT= 1;
 
17325
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17326
COMMIT WORK;
 
17327
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17328
        
 
17329
# check special-1 success:      1
 
17330
UPDATE t1 SET f_charbig = '';
 
17331
        
 
17332
# check special-2 success:      1
 
17333
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17334
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17335
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17339
'just inserted' FROM t0_template
 
17340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17341
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17342
BEGIN
 
17343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17344
f_charbig = 'updated by trigger'
 
17345
      WHERE f_int1 = new.f_int1;
 
17346
END|
 
17347
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17348
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17350
        
 
17351
# check trigger-1 success:      1
 
17352
DROP TRIGGER trg_1;
 
17353
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17354
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17355
f_charbig = 'just inserted'
 
17356
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17357
DELETE FROM t0_aux
 
17358
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17359
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17360
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17361
'just inserted' FROM t0_template
 
17362
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17363
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17364
BEGIN
 
17365
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17366
f_charbig = 'updated by trigger'
 
17367
      WHERE f_int1 = new.f_int1;
 
17368
END|
 
17369
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17370
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17371
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17372
        
 
17373
# check trigger-2 success:      1
 
17374
DROP TRIGGER trg_1;
 
17375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17376
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17377
f_charbig = 'just inserted'
 
17378
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17379
DELETE FROM t0_aux
 
17380
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17381
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17382
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17383
'just inserted' FROM t0_template
 
17384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17385
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17386
BEGIN
 
17387
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17388
f_charbig = 'updated by trigger'
 
17389
      WHERE f_int1 = new.f_int1;
 
17390
END|
 
17391
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17392
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17393
        
 
17394
# check trigger-3 success:      1
 
17395
DROP TRIGGER trg_1;
 
17396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17398
f_charbig = 'just inserted'
 
17399
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17400
DELETE FROM t0_aux
 
17401
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17403
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17404
'just inserted' FROM t0_template
 
17405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17406
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17407
BEGIN
 
17408
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17409
f_charbig = 'updated by trigger'
 
17410
      WHERE f_int1 = - old.f_int1;
 
17411
END|
 
17412
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17413
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17414
        
 
17415
# check trigger-4 success:      1
 
17416
DROP TRIGGER trg_1;
 
17417
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17418
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17419
f_charbig = 'just inserted'
 
17420
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17421
DELETE FROM t0_aux
 
17422
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17423
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17424
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17425
'just inserted' FROM t0_template
 
17426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17427
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17428
BEGIN
 
17429
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17430
f_charbig = 'updated by trigger'
 
17431
      WHERE f_int1 = new.f_int1;
 
17432
END|
 
17433
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17434
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17435
        
 
17436
# check trigger-5 success:      1
 
17437
DROP TRIGGER trg_1;
 
17438
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17439
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17440
f_charbig = 'just inserted'
 
17441
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17442
DELETE FROM t0_aux
 
17443
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17444
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17445
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17446
'just inserted' FROM t0_template
 
17447
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17448
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17449
BEGIN
 
17450
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17451
f_charbig = 'updated by trigger'
 
17452
      WHERE f_int1 = - old.f_int1;
 
17453
END|
 
17454
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17455
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17456
        
 
17457
# check trigger-6 success:      1
 
17458
DROP TRIGGER trg_1;
 
17459
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17460
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17461
f_charbig = 'just inserted'
 
17462
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17463
DELETE FROM t0_aux
 
17464
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17465
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17466
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17467
'just inserted' FROM t0_template
 
17468
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17469
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17470
BEGIN
 
17471
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17472
f_charbig = 'updated by trigger'
 
17473
      WHERE f_int1 = - old.f_int1;
 
17474
END|
 
17475
DELETE FROM t0_aux
 
17476
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17477
        
 
17478
# check trigger-7 success:      1
 
17479
DROP TRIGGER trg_1;
 
17480
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17481
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17482
f_charbig = 'just inserted'
 
17483
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17484
DELETE FROM t0_aux
 
17485
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17486
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17487
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17488
'just inserted' FROM t0_template
 
17489
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17490
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17491
BEGIN
 
17492
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17493
f_charbig = 'updated by trigger'
 
17494
      WHERE f_int1 = - old.f_int1;
 
17495
END|
 
17496
DELETE FROM t0_aux
 
17497
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17498
        
 
17499
# check trigger-8 success:      1
 
17500
DROP TRIGGER trg_1;
 
17501
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17502
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17503
f_charbig = 'just inserted'
 
17504
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17505
DELETE FROM t0_aux
 
17506
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17507
DELETE FROM t1
 
17508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17509
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17510
BEGIN
 
17511
SET new.f_int1 = old.f_int1 + @max_row,
 
17512
new.f_int2 = old.f_int2 - @max_row,
 
17513
new.f_charbig = '####updated per update trigger####';
 
17514
END|
 
17515
UPDATE t1
 
17516
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17517
f_charbig = '####updated per update statement itself####';
 
17518
        
 
17519
# check trigger-9 success:      1
 
17520
DROP TRIGGER trg_2;
 
17521
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17522
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17523
f_charbig = CONCAT('===',f_char1,'===');
 
17524
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17525
BEGIN
 
17526
SET new.f_int1 = new.f_int1 + @max_row,
 
17527
new.f_int2 = new.f_int2 - @max_row,
 
17528
new.f_charbig = '####updated per update trigger####';
 
17529
END|
 
17530
UPDATE t1
 
17531
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17532
f_charbig = '####updated per update statement itself####';
 
17533
        
 
17534
# check trigger-10 success:     1
 
17535
DROP TRIGGER trg_2;
 
17536
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17537
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17538
f_charbig = CONCAT('===',f_char1,'===');
 
17539
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17540
BEGIN
 
17541
SET new.f_int1 = @my_max1 + @counter,
 
17542
new.f_int2 = @my_min2 - @counter,
 
17543
new.f_charbig = '####updated per insert trigger####';
 
17544
SET @counter = @counter + 1;
 
17545
END|
 
17546
SET @counter = 1;
 
17547
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17548
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17549
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17550
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17551
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17552
ORDER BY f_int1;
 
17553
DROP TRIGGER trg_3;
 
17554
        
 
17555
# check trigger-11 success:     1
 
17556
DELETE FROM t1
 
17557
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17558
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17559
AND f_charbig = '####updated per insert trigger####';
 
17560
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17561
BEGIN
 
17562
SET new.f_int1 = @my_max1 + @counter,
 
17563
new.f_int2 = @my_min2 - @counter,
 
17564
new.f_charbig = '####updated per insert trigger####';
 
17565
SET @counter = @counter + 1;
 
17566
END|
 
17567
SET @counter = 1;
 
17568
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17569
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17570
SELECT CAST(f_int1 AS CHAR),
 
17571
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17573
ORDER BY f_int1;
 
17574
DROP TRIGGER trg_3;
 
17575
        
 
17576
# check trigger-12 success:     1
 
17577
DELETE FROM t1
 
17578
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17579
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17580
AND f_charbig = '####updated per insert trigger####';
 
17581
ANALYZE  TABLE t1;
 
17582
Table   Op      Msg_type        Msg_text
 
17583
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
17584
CHECK    TABLE t1 EXTENDED;
 
17585
Table   Op      Msg_type        Msg_text
 
17586
test.t1 check   note    The storage engine for the table doesn't support check
 
17587
CHECKSUM TABLE t1 EXTENDED;
 
17588
Table   Checksum
 
17589
test.t1 <some_value>
 
17590
OPTIMIZE TABLE t1;
 
17591
Table   Op      Msg_type        Msg_text
 
17592
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
17593
# check layout success:    1
 
17594
REPAIR   TABLE t1 EXTENDED;
 
17595
Table   Op      Msg_type        Msg_text
 
17596
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17597
# check layout success:    1
 
17598
TRUNCATE t1;
 
17599
        
 
17600
# check TRUNCATE success:       1
 
17601
# check layout success:    1
 
17602
# End usability test (inc/partition_check.inc)
 
17603
DROP TABLE t1;
 
17604
CREATE TABLE t1 (
 
17605
f_int1 INTEGER,
 
17606
f_int2 INTEGER,
 
17607
f_char1 CHAR(20),
 
17608
f_char2 CHAR(20),
 
17609
f_charbig VARCHAR(1000)
 
17610
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
17611
)
 
17612
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
17613
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17614
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17615
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17616
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
17617
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17618
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17619
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17620
# Start usability test (inc/partition_check.inc)
 
17621
create_command
 
17622
SHOW CREATE TABLE t1;
 
17623
Table   Create Table
 
17624
t1      CREATE TABLE `t1` (
 
17625
  `f_int1` int(11) DEFAULT NULL,
 
17626
  `f_int2` int(11) DEFAULT NULL,
 
17627
  `f_char1` char(20) DEFAULT NULL,
 
17628
  `f_char2` char(20) DEFAULT NULL,
 
17629
  `f_charbig` varchar(1000) DEFAULT NULL
 
17630
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
17631
 
 
17632
unified filelist
 
17633
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
17634
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
17635
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
17636
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
17637
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
17638
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
17639
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
17640
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
17641
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
17642
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
17643
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
17644
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
17645
 
 
17646
# check prerequisites-1 success:    1
 
17647
# check COUNT(*) success:    1
 
17648
# check MIN/MAX(f_int1) success:    1
 
17649
# check MIN/MAX(f_int2) success:    1
 
17650
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17651
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17652
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17653
WHERE f_int1 IN (2,3);
 
17654
# check prerequisites-3 success:    1
 
17655
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17656
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17657
# check read via f_int1 success: 1
 
17658
# check read via f_int2 success: 1
 
17659
        
 
17660
# check multiple-1 success:     1
 
17661
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17662
        
 
17663
# check multiple-2 success:     1
 
17664
INSERT INTO t1 SELECT * FROM t0_template
 
17665
WHERE MOD(f_int1,3) = 0;
 
17666
        
 
17667
# check multiple-3 success:     1
 
17668
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17669
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17670
AND @max_row_div2 + @max_row_div4;
 
17671
        
 
17672
# check multiple-4 success:     1
 
17673
DELETE FROM t1
 
17674
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17675
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17676
        
 
17677
# check multiple-5 success:     1
 
17678
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17679
INSERT INTO t1
 
17680
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17681
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17682
f_charbig = '#SINGLE#';
 
17683
        
 
17684
# check single-1 success:       1
 
17685
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17686
INSERT INTO t1
 
17687
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17688
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17689
f_charbig = '#SINGLE#';
 
17690
        
 
17691
# check single-2 success:       1
 
17692
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17693
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17694
UPDATE t1 SET f_int1 = @cur_value2
 
17695
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17696
        
 
17697
# check single-3 success:       1
 
17698
SET @cur_value1= -1;
 
17699
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17700
UPDATE t1 SET f_int1 = @cur_value1
 
17701
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17702
        
 
17703
# check single-4 success:       1
 
17704
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17705
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17706
        
 
17707
# check single-5 success:       1
 
17708
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17709
        
 
17710
# check single-6 success:       1
 
17711
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17712
        
 
17713
# check single-7 success:       1
 
17714
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17715
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17716
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17717
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17718
f_charbig = '#NULL#';
 
17719
INSERT INTO t1
 
17720
SET f_int1 = NULL , f_int2 = -@max_row,
 
17721
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17722
f_charbig = '#NULL#';
 
17723
# check null success:    1
 
17724
        
 
17725
# check null-1 success:         1
 
17726
UPDATE t1 SET f_int1 = -@max_row
 
17727
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17728
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17729
        
 
17730
# check null-2 success:         1
 
17731
UPDATE t1 SET f_int1 = NULL
 
17732
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17733
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17734
        
 
17735
# check null-3 success:         1
 
17736
DELETE FROM t1
 
17737
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17738
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17739
        
 
17740
# check null-4 success:         1
 
17741
DELETE FROM t1
 
17742
WHERE f_int1 = 0 AND f_int2 = 0
 
17743
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17744
AND f_charbig = '#NULL#';
 
17745
SET AUTOCOMMIT= 0;
 
17746
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17747
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17748
FROM t0_template source_tab
 
17749
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17750
        
 
17751
# check transactions-1 success:         1
 
17752
COMMIT WORK;
 
17753
        
 
17754
# check transactions-2 success:         1
 
17755
ROLLBACK WORK;
 
17756
        
 
17757
# check transactions-3 success:         1
 
17758
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17759
COMMIT WORK;
 
17760
ROLLBACK WORK;
 
17761
        
 
17762
# check transactions-4 success:         1
 
17763
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17764
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17765
FROM t0_template source_tab
 
17766
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17767
        
 
17768
# check transactions-5 success:         1
 
17769
ROLLBACK WORK;
 
17770
Warnings:
 
17771
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
17772
        
 
17773
# check transactions-6 success:         1
 
17774
# INFO: Storage engine used for t1 seems to be not transactional.
 
17775
COMMIT;
 
17776
        
 
17777
# check transactions-7 success:         1
 
17778
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17779
COMMIT WORK;
 
17780
SET @@session.sql_mode = 'traditional';
 
17781
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17782
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17783
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17784
'', '', 'was inserted' FROM t0_template
 
17785
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17786
ERROR 22012: Division by 0
 
17787
COMMIT;
 
17788
        
 
17789
# check transactions-8 success:         1
 
17790
# INFO: Storage engine used for t1 seems to be unable to revert
 
17791
#       changes made by the failing statement.
 
17792
SET @@session.sql_mode = '';
 
17793
SET AUTOCOMMIT= 1;
 
17794
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17795
COMMIT WORK;
 
17796
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17797
        
 
17798
# check special-1 success:      1
 
17799
UPDATE t1 SET f_charbig = '';
 
17800
        
 
17801
# check special-2 success:      1
 
17802
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17803
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17804
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17806
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17807
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17808
'just inserted' FROM t0_template
 
17809
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17810
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17811
BEGIN
 
17812
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17813
f_charbig = 'updated by trigger'
 
17814
      WHERE f_int1 = new.f_int1;
 
17815
END|
 
17816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17817
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17818
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17819
        
 
17820
# check trigger-1 success:      1
 
17821
DROP TRIGGER trg_1;
 
17822
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17823
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17824
f_charbig = 'just inserted'
 
17825
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17826
DELETE FROM t0_aux
 
17827
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17828
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17829
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17830
'just inserted' FROM t0_template
 
17831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17832
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17833
BEGIN
 
17834
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17835
f_charbig = 'updated by trigger'
 
17836
      WHERE f_int1 = new.f_int1;
 
17837
END|
 
17838
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17839
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17841
        
 
17842
# check trigger-2 success:      1
 
17843
DROP TRIGGER trg_1;
 
17844
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17845
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17846
f_charbig = 'just inserted'
 
17847
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17848
DELETE FROM t0_aux
 
17849
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17850
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17851
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17852
'just inserted' FROM t0_template
 
17853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17854
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17855
BEGIN
 
17856
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17857
f_charbig = 'updated by trigger'
 
17858
      WHERE f_int1 = new.f_int1;
 
17859
END|
 
17860
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17861
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17862
        
 
17863
# check trigger-3 success:      1
 
17864
DROP TRIGGER trg_1;
 
17865
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17866
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17867
f_charbig = 'just inserted'
 
17868
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17869
DELETE FROM t0_aux
 
17870
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17871
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17872
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17873
'just inserted' FROM t0_template
 
17874
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17875
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17876
BEGIN
 
17877
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17878
f_charbig = 'updated by trigger'
 
17879
      WHERE f_int1 = - old.f_int1;
 
17880
END|
 
17881
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17882
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17883
        
 
17884
# check trigger-4 success:      1
 
17885
DROP TRIGGER trg_1;
 
17886
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17887
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17888
f_charbig = 'just inserted'
 
17889
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17890
DELETE FROM t0_aux
 
17891
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17892
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17893
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17894
'just inserted' FROM t0_template
 
17895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17896
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17897
BEGIN
 
17898
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17899
f_charbig = 'updated by trigger'
 
17900
      WHERE f_int1 = new.f_int1;
 
17901
END|
 
17902
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17903
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17904
        
 
17905
# check trigger-5 success:      1
 
17906
DROP TRIGGER trg_1;
 
17907
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17908
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17909
f_charbig = 'just inserted'
 
17910
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17911
DELETE FROM t0_aux
 
17912
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17913
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17914
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17915
'just inserted' FROM t0_template
 
17916
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17917
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17918
BEGIN
 
17919
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17920
f_charbig = 'updated by trigger'
 
17921
      WHERE f_int1 = - old.f_int1;
 
17922
END|
 
17923
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17924
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17925
        
 
17926
# check trigger-6 success:      1
 
17927
DROP TRIGGER trg_1;
 
17928
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17929
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17930
f_charbig = 'just inserted'
 
17931
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17932
DELETE FROM t0_aux
 
17933
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17934
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17935
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17936
'just inserted' FROM t0_template
 
17937
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17938
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17939
BEGIN
 
17940
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17941
f_charbig = 'updated by trigger'
 
17942
      WHERE f_int1 = - old.f_int1;
 
17943
END|
 
17944
DELETE FROM t0_aux
 
17945
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17946
        
 
17947
# check trigger-7 success:      1
 
17948
DROP TRIGGER trg_1;
 
17949
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17950
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17951
f_charbig = 'just inserted'
 
17952
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17953
DELETE FROM t0_aux
 
17954
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17955
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17956
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17957
'just inserted' FROM t0_template
 
17958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17959
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17960
BEGIN
 
17961
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17962
f_charbig = 'updated by trigger'
 
17963
      WHERE f_int1 = - old.f_int1;
 
17964
END|
 
17965
DELETE FROM t0_aux
 
17966
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17967
        
 
17968
# check trigger-8 success:      1
 
17969
DROP TRIGGER trg_1;
 
17970
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17971
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17972
f_charbig = 'just inserted'
 
17973
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17974
DELETE FROM t0_aux
 
17975
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17976
DELETE FROM t1
 
17977
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17978
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17979
BEGIN
 
17980
SET new.f_int1 = old.f_int1 + @max_row,
 
17981
new.f_int2 = old.f_int2 - @max_row,
 
17982
new.f_charbig = '####updated per update trigger####';
 
17983
END|
 
17984
UPDATE t1
 
17985
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17986
f_charbig = '####updated per update statement itself####';
 
17987
        
 
17988
# check trigger-9 success:      1
 
17989
DROP TRIGGER trg_2;
 
17990
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17991
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17992
f_charbig = CONCAT('===',f_char1,'===');
 
17993
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17994
BEGIN
 
17995
SET new.f_int1 = new.f_int1 + @max_row,
 
17996
new.f_int2 = new.f_int2 - @max_row,
 
17997
new.f_charbig = '####updated per update trigger####';
 
17998
END|
 
17999
UPDATE t1
 
18000
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18001
f_charbig = '####updated per update statement itself####';
 
18002
        
 
18003
# check trigger-10 success:     1
 
18004
DROP TRIGGER trg_2;
 
18005
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18006
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18007
f_charbig = CONCAT('===',f_char1,'===');
 
18008
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18009
BEGIN
 
18010
SET new.f_int1 = @my_max1 + @counter,
 
18011
new.f_int2 = @my_min2 - @counter,
 
18012
new.f_charbig = '####updated per insert trigger####';
 
18013
SET @counter = @counter + 1;
 
18014
END|
 
18015
SET @counter = 1;
 
18016
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18017
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18018
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18019
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18020
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18021
ORDER BY f_int1;
 
18022
DROP TRIGGER trg_3;
 
18023
        
 
18024
# check trigger-11 success:     1
 
18025
DELETE FROM t1
 
18026
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18027
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18028
AND f_charbig = '####updated per insert trigger####';
 
18029
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18030
BEGIN
 
18031
SET new.f_int1 = @my_max1 + @counter,
 
18032
new.f_int2 = @my_min2 - @counter,
 
18033
new.f_charbig = '####updated per insert trigger####';
 
18034
SET @counter = @counter + 1;
 
18035
END|
 
18036
SET @counter = 1;
 
18037
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18038
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18039
SELECT CAST(f_int1 AS CHAR),
 
18040
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18042
ORDER BY f_int1;
 
18043
DROP TRIGGER trg_3;
 
18044
        
 
18045
# check trigger-12 success:     1
 
18046
DELETE FROM t1
 
18047
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18048
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18049
AND f_charbig = '####updated per insert trigger####';
 
18050
ANALYZE  TABLE t1;
 
18051
Table   Op      Msg_type        Msg_text
 
18052
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
18053
CHECK    TABLE t1 EXTENDED;
 
18054
Table   Op      Msg_type        Msg_text
 
18055
test.t1 check   note    The storage engine for the table doesn't support check
 
18056
CHECKSUM TABLE t1 EXTENDED;
 
18057
Table   Checksum
 
18058
test.t1 <some_value>
 
18059
OPTIMIZE TABLE t1;
 
18060
Table   Op      Msg_type        Msg_text
 
18061
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
18062
# check layout success:    1
 
18063
REPAIR   TABLE t1 EXTENDED;
 
18064
Table   Op      Msg_type        Msg_text
 
18065
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18066
# check layout success:    1
 
18067
TRUNCATE t1;
 
18068
        
 
18069
# check TRUNCATE success:       1
 
18070
# check layout success:    1
 
18071
# End usability test (inc/partition_check.inc)
 
18072
DROP TABLE t1;
 
18073
CREATE TABLE t1 (
 
18074
f_int1 INTEGER,
 
18075
f_int2 INTEGER,
 
18076
f_char1 CHAR(20),
 
18077
f_char2 CHAR(20),
 
18078
f_charbig VARCHAR(1000)
 
18079
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
18080
)
 
18081
PARTITION BY LIST(MOD(f_int1,4))
 
18082
(PARTITION part_3 VALUES IN (-3),
 
18083
PARTITION part_2 VALUES IN (-2),
 
18084
PARTITION part_1 VALUES IN (-1),
 
18085
PARTITION part_N VALUES IN (NULL),
 
18086
PARTITION part0 VALUES IN (0),
 
18087
PARTITION part1 VALUES IN (1),
 
18088
PARTITION part2 VALUES IN (2),
 
18089
PARTITION part3 VALUES IN (3));
 
18090
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18091
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18092
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18093
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
18094
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18095
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18096
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18097
# Start usability test (inc/partition_check.inc)
 
18098
create_command
 
18099
SHOW CREATE TABLE t1;
 
18100
Table   Create Table
 
18101
t1      CREATE TABLE `t1` (
 
18102
  `f_int1` int(11) DEFAULT NULL,
 
18103
  `f_int2` int(11) DEFAULT NULL,
 
18104
  `f_char1` char(20) DEFAULT NULL,
 
18105
  `f_char2` char(20) DEFAULT NULL,
 
18106
  `f_charbig` varchar(1000) DEFAULT NULL
 
18107
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
18108
 
 
18109
unified filelist
 
18110
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
18111
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
18112
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
18113
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
18114
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
18115
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
18116
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
18117
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
18118
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
18119
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
18120
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
18121
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
18122
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
18123
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
18124
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
18125
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
18126
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
18127
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
18128
 
 
18129
# check prerequisites-1 success:    1
 
18130
# check COUNT(*) success:    1
 
18131
# check MIN/MAX(f_int1) success:    1
 
18132
# check MIN/MAX(f_int2) success:    1
 
18133
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18134
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18135
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18136
WHERE f_int1 IN (2,3);
 
18137
# check prerequisites-3 success:    1
 
18138
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18139
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18140
# check read via f_int1 success: 1
 
18141
# check read via f_int2 success: 1
 
18142
        
 
18143
# check multiple-1 success:     1
 
18144
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18145
        
 
18146
# check multiple-2 success:     1
 
18147
INSERT INTO t1 SELECT * FROM t0_template
 
18148
WHERE MOD(f_int1,3) = 0;
 
18149
        
 
18150
# check multiple-3 success:     1
 
18151
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18152
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18153
AND @max_row_div2 + @max_row_div4;
 
18154
        
 
18155
# check multiple-4 success:     1
 
18156
DELETE FROM t1
 
18157
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18158
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18159
        
 
18160
# check multiple-5 success:     1
 
18161
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18162
INSERT INTO t1
 
18163
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18164
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18165
f_charbig = '#SINGLE#';
 
18166
        
 
18167
# check single-1 success:       1
 
18168
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18169
INSERT INTO t1
 
18170
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18171
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18172
f_charbig = '#SINGLE#';
 
18173
        
 
18174
# check single-2 success:       1
 
18175
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18176
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18177
UPDATE t1 SET f_int1 = @cur_value2
 
18178
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18179
        
 
18180
# check single-3 success:       1
 
18181
SET @cur_value1= -1;
 
18182
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18183
UPDATE t1 SET f_int1 = @cur_value1
 
18184
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18185
        
 
18186
# check single-4 success:       1
 
18187
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18188
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18189
        
 
18190
# check single-5 success:       1
 
18191
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18192
        
 
18193
# check single-6 success:       1
 
18194
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18195
        
 
18196
# check single-7 success:       1
 
18197
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
18198
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18199
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18200
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18201
f_charbig = '#NULL#';
 
18202
INSERT INTO t1
 
18203
SET f_int1 = NULL , f_int2 = -@max_row,
 
18204
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18205
f_charbig = '#NULL#';
 
18206
# check null success:    1
 
18207
        
 
18208
# check null-1 success:         1
 
18209
UPDATE t1 SET f_int1 = -@max_row
 
18210
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18211
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18212
        
 
18213
# check null-2 success:         1
 
18214
UPDATE t1 SET f_int1 = NULL
 
18215
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18216
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18217
        
 
18218
# check null-3 success:         1
 
18219
DELETE FROM t1
 
18220
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18221
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18222
        
 
18223
# check null-4 success:         1
 
18224
DELETE FROM t1
 
18225
WHERE f_int1 = 0 AND f_int2 = 0
 
18226
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18227
AND f_charbig = '#NULL#';
 
18228
SET AUTOCOMMIT= 0;
 
18229
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18230
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18231
FROM t0_template source_tab
 
18232
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18233
        
 
18234
# check transactions-1 success:         1
 
18235
COMMIT WORK;
 
18236
        
 
18237
# check transactions-2 success:         1
 
18238
ROLLBACK WORK;
 
18239
        
 
18240
# check transactions-3 success:         1
 
18241
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18242
COMMIT WORK;
 
18243
ROLLBACK WORK;
 
18244
        
 
18245
# check transactions-4 success:         1
 
18246
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18247
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18248
FROM t0_template source_tab
 
18249
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18250
        
 
18251
# check transactions-5 success:         1
 
18252
ROLLBACK WORK;
 
18253
Warnings:
 
18254
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
18255
        
 
18256
# check transactions-6 success:         1
 
18257
# INFO: Storage engine used for t1 seems to be not transactional.
 
18258
COMMIT;
 
18259
        
 
18260
# check transactions-7 success:         1
 
18261
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18262
COMMIT WORK;
 
18263
SET @@session.sql_mode = 'traditional';
 
18264
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18265
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18266
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18267
'', '', 'was inserted' FROM t0_template
 
18268
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18269
ERROR 22012: Division by 0
 
18270
COMMIT;
 
18271
        
 
18272
# check transactions-8 success:         1
 
18273
# INFO: Storage engine used for t1 seems to be unable to revert
 
18274
#       changes made by the failing statement.
 
18275
SET @@session.sql_mode = '';
 
18276
SET AUTOCOMMIT= 1;
 
18277
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18278
COMMIT WORK;
 
18279
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18280
        
 
18281
# check special-1 success:      1
 
18282
UPDATE t1 SET f_charbig = '';
 
18283
        
 
18284
# check special-2 success:      1
 
18285
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18286
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18287
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18288
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18289
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18290
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18291
'just inserted' FROM t0_template
 
18292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18293
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18294
BEGIN
 
18295
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18296
f_charbig = 'updated by trigger'
 
18297
      WHERE f_int1 = new.f_int1;
 
18298
END|
 
18299
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18300
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18301
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18302
        
 
18303
# check trigger-1 success:      1
 
18304
DROP TRIGGER trg_1;
 
18305
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18306
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18307
f_charbig = 'just inserted'
 
18308
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18309
DELETE FROM t0_aux
 
18310
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18311
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18312
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18313
'just inserted' FROM t0_template
 
18314
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18315
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18316
BEGIN
 
18317
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18318
f_charbig = 'updated by trigger'
 
18319
      WHERE f_int1 = new.f_int1;
 
18320
END|
 
18321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18322
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18323
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18324
        
 
18325
# check trigger-2 success:      1
 
18326
DROP TRIGGER trg_1;
 
18327
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18328
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18329
f_charbig = 'just inserted'
 
18330
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18331
DELETE FROM t0_aux
 
18332
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18333
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18334
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18335
'just inserted' FROM t0_template
 
18336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18337
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18338
BEGIN
 
18339
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18340
f_charbig = 'updated by trigger'
 
18341
      WHERE f_int1 = new.f_int1;
 
18342
END|
 
18343
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18344
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18345
        
 
18346
# check trigger-3 success:      1
 
18347
DROP TRIGGER trg_1;
 
18348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18350
f_charbig = 'just inserted'
 
18351
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18352
DELETE FROM t0_aux
 
18353
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18355
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18356
'just inserted' FROM t0_template
 
18357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18358
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18359
BEGIN
 
18360
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18361
f_charbig = 'updated by trigger'
 
18362
      WHERE f_int1 = - old.f_int1;
 
18363
END|
 
18364
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18365
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18366
        
 
18367
# check trigger-4 success:      1
 
18368
DROP TRIGGER trg_1;
 
18369
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18370
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18371
f_charbig = 'just inserted'
 
18372
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18373
DELETE FROM t0_aux
 
18374
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18377
'just inserted' FROM t0_template
 
18378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18379
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18380
BEGIN
 
18381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18382
f_charbig = 'updated by trigger'
 
18383
      WHERE f_int1 = new.f_int1;
 
18384
END|
 
18385
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18386
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18387
        
 
18388
# check trigger-5 success:      1
 
18389
DROP TRIGGER trg_1;
 
18390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18391
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18392
f_charbig = 'just inserted'
 
18393
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18394
DELETE FROM t0_aux
 
18395
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18397
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18398
'just inserted' FROM t0_template
 
18399
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18400
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18401
BEGIN
 
18402
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18403
f_charbig = 'updated by trigger'
 
18404
      WHERE f_int1 = - old.f_int1;
 
18405
END|
 
18406
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18407
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18408
        
 
18409
# check trigger-6 success:      1
 
18410
DROP TRIGGER trg_1;
 
18411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18413
f_charbig = 'just inserted'
 
18414
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18415
DELETE FROM t0_aux
 
18416
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18417
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18418
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18419
'just inserted' FROM t0_template
 
18420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18421
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18422
BEGIN
 
18423
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18424
f_charbig = 'updated by trigger'
 
18425
      WHERE f_int1 = - old.f_int1;
 
18426
END|
 
18427
DELETE FROM t0_aux
 
18428
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18429
        
 
18430
# check trigger-7 success:      1
 
18431
DROP TRIGGER trg_1;
 
18432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18434
f_charbig = 'just inserted'
 
18435
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18436
DELETE FROM t0_aux
 
18437
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18438
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18439
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18440
'just inserted' FROM t0_template
 
18441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18442
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18443
BEGIN
 
18444
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18445
f_charbig = 'updated by trigger'
 
18446
      WHERE f_int1 = - old.f_int1;
 
18447
END|
 
18448
DELETE FROM t0_aux
 
18449
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18450
        
 
18451
# check trigger-8 success:      1
 
18452
DROP TRIGGER trg_1;
 
18453
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18454
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18455
f_charbig = 'just inserted'
 
18456
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18457
DELETE FROM t0_aux
 
18458
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18459
DELETE FROM t1
 
18460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18461
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18462
BEGIN
 
18463
SET new.f_int1 = old.f_int1 + @max_row,
 
18464
new.f_int2 = old.f_int2 - @max_row,
 
18465
new.f_charbig = '####updated per update trigger####';
 
18466
END|
 
18467
UPDATE t1
 
18468
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18469
f_charbig = '####updated per update statement itself####';
 
18470
        
 
18471
# check trigger-9 success:      1
 
18472
DROP TRIGGER trg_2;
 
18473
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18474
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18475
f_charbig = CONCAT('===',f_char1,'===');
 
18476
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18477
BEGIN
 
18478
SET new.f_int1 = new.f_int1 + @max_row,
 
18479
new.f_int2 = new.f_int2 - @max_row,
 
18480
new.f_charbig = '####updated per update trigger####';
 
18481
END|
 
18482
UPDATE t1
 
18483
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18484
f_charbig = '####updated per update statement itself####';
 
18485
        
 
18486
# check trigger-10 success:     1
 
18487
DROP TRIGGER trg_2;
 
18488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18490
f_charbig = CONCAT('===',f_char1,'===');
 
18491
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18492
BEGIN
 
18493
SET new.f_int1 = @my_max1 + @counter,
 
18494
new.f_int2 = @my_min2 - @counter,
 
18495
new.f_charbig = '####updated per insert trigger####';
 
18496
SET @counter = @counter + 1;
 
18497
END|
 
18498
SET @counter = 1;
 
18499
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18500
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18501
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18502
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18503
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18504
ORDER BY f_int1;
 
18505
DROP TRIGGER trg_3;
 
18506
        
 
18507
# check trigger-11 success:     1
 
18508
DELETE FROM t1
 
18509
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18510
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18511
AND f_charbig = '####updated per insert trigger####';
 
18512
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18513
BEGIN
 
18514
SET new.f_int1 = @my_max1 + @counter,
 
18515
new.f_int2 = @my_min2 - @counter,
 
18516
new.f_charbig = '####updated per insert trigger####';
 
18517
SET @counter = @counter + 1;
 
18518
END|
 
18519
SET @counter = 1;
 
18520
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18521
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18522
SELECT CAST(f_int1 AS CHAR),
 
18523
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18524
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18525
ORDER BY f_int1;
 
18526
DROP TRIGGER trg_3;
 
18527
        
 
18528
# check trigger-12 success:     1
 
18529
DELETE FROM t1
 
18530
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18531
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18532
AND f_charbig = '####updated per insert trigger####';
 
18533
ANALYZE  TABLE t1;
 
18534
Table   Op      Msg_type        Msg_text
 
18535
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
18536
CHECK    TABLE t1 EXTENDED;
 
18537
Table   Op      Msg_type        Msg_text
 
18538
test.t1 check   note    The storage engine for the table doesn't support check
 
18539
CHECKSUM TABLE t1 EXTENDED;
 
18540
Table   Checksum
 
18541
test.t1 <some_value>
 
18542
OPTIMIZE TABLE t1;
 
18543
Table   Op      Msg_type        Msg_text
 
18544
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
18545
# check layout success:    1
 
18546
REPAIR   TABLE t1 EXTENDED;
 
18547
Table   Op      Msg_type        Msg_text
 
18548
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18549
# check layout success:    1
 
18550
TRUNCATE t1;
 
18551
        
 
18552
# check TRUNCATE success:       1
 
18553
# check layout success:    1
 
18554
# End usability test (inc/partition_check.inc)
 
18555
DROP TABLE t1;
 
18556
CREATE TABLE t1 (
 
18557
f_int1 INTEGER,
 
18558
f_int2 INTEGER,
 
18559
f_char1 CHAR(20),
 
18560
f_char2 CHAR(20),
 
18561
f_charbig VARCHAR(1000)
 
18562
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
18563
)
 
18564
PARTITION BY RANGE(f_int1)
 
18565
(PARTITION parta VALUES LESS THAN (0),
 
18566
PARTITION partb VALUES LESS THAN (5),
 
18567
PARTITION partc VALUES LESS THAN (10),
 
18568
PARTITION partd VALUES LESS THAN (10 + 5),
 
18569
PARTITION parte VALUES LESS THAN (20),
 
18570
PARTITION partf VALUES LESS THAN (2147483646));
 
18571
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18572
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18573
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18574
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
18575
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18576
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18577
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18578
# Start usability test (inc/partition_check.inc)
 
18579
create_command
 
18580
SHOW CREATE TABLE t1;
 
18581
Table   Create Table
 
18582
t1      CREATE TABLE `t1` (
 
18583
  `f_int1` int(11) DEFAULT NULL,
 
18584
  `f_int2` int(11) DEFAULT NULL,
 
18585
  `f_char1` char(20) DEFAULT NULL,
 
18586
  `f_char2` char(20) DEFAULT NULL,
 
18587
  `f_charbig` varchar(1000) DEFAULT NULL
 
18588
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
18589
 
 
18590
unified filelist
 
18591
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
18592
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
18593
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
18594
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
18595
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
18596
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
18597
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
18598
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
18599
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
18600
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
18601
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
18602
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
18603
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
18604
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
18605
 
 
18606
# check prerequisites-1 success:    1
 
18607
# check COUNT(*) success:    1
 
18608
# check MIN/MAX(f_int1) success:    1
 
18609
# check MIN/MAX(f_int2) success:    1
 
18610
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18611
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18612
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18613
WHERE f_int1 IN (2,3);
 
18614
# check prerequisites-3 success:    1
 
18615
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18616
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18617
# check read via f_int1 success: 1
 
18618
# check read via f_int2 success: 1
 
18619
        
 
18620
# check multiple-1 success:     1
 
18621
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18622
        
 
18623
# check multiple-2 success:     1
 
18624
INSERT INTO t1 SELECT * FROM t0_template
 
18625
WHERE MOD(f_int1,3) = 0;
 
18626
        
 
18627
# check multiple-3 success:     1
 
18628
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18629
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18630
AND @max_row_div2 + @max_row_div4;
 
18631
        
 
18632
# check multiple-4 success:     1
 
18633
DELETE FROM t1
 
18634
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18635
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18636
        
 
18637
# check multiple-5 success:     1
 
18638
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18639
INSERT INTO t1
 
18640
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18641
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18642
f_charbig = '#SINGLE#';
 
18643
        
 
18644
# check single-1 success:       1
 
18645
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18646
INSERT INTO t1
 
18647
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18648
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18649
f_charbig = '#SINGLE#';
 
18650
        
 
18651
# check single-2 success:       1
 
18652
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18653
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18654
UPDATE t1 SET f_int1 = @cur_value2
 
18655
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18656
        
 
18657
# check single-3 success:       1
 
18658
SET @cur_value1= -1;
 
18659
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18660
UPDATE t1 SET f_int1 = @cur_value1
 
18661
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18662
        
 
18663
# check single-4 success:       1
 
18664
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18665
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18666
        
 
18667
# check single-5 success:       1
 
18668
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18669
        
 
18670
# check single-6 success:       1
 
18671
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18672
ERROR HY000: Table has no partition for value 2147483647
 
18673
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18674
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18675
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18676
f_charbig = '#NULL#';
 
18677
INSERT INTO t1
 
18678
SET f_int1 = NULL , f_int2 = -@max_row,
 
18679
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18680
f_charbig = '#NULL#';
 
18681
# check null success:    1
 
18682
        
 
18683
# check null-1 success:         1
 
18684
UPDATE t1 SET f_int1 = -@max_row
 
18685
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18686
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18687
        
 
18688
# check null-2 success:         1
 
18689
UPDATE t1 SET f_int1 = NULL
 
18690
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18691
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18692
        
 
18693
# check null-3 success:         1
 
18694
DELETE FROM t1
 
18695
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18696
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18697
        
 
18698
# check null-4 success:         1
 
18699
DELETE FROM t1
 
18700
WHERE f_int1 = 0 AND f_int2 = 0
 
18701
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18702
AND f_charbig = '#NULL#';
 
18703
SET AUTOCOMMIT= 0;
 
18704
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18705
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18706
FROM t0_template source_tab
 
18707
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18708
        
 
18709
# check transactions-1 success:         1
 
18710
COMMIT WORK;
 
18711
        
 
18712
# check transactions-2 success:         1
 
18713
ROLLBACK WORK;
 
18714
        
 
18715
# check transactions-3 success:         1
 
18716
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18717
COMMIT WORK;
 
18718
ROLLBACK WORK;
 
18719
        
 
18720
# check transactions-4 success:         1
 
18721
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18722
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18723
FROM t0_template source_tab
 
18724
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18725
        
 
18726
# check transactions-5 success:         1
 
18727
ROLLBACK WORK;
 
18728
Warnings:
 
18729
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
18730
        
 
18731
# check transactions-6 success:         1
 
18732
# INFO: Storage engine used for t1 seems to be not transactional.
 
18733
COMMIT;
 
18734
        
 
18735
# check transactions-7 success:         1
 
18736
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18737
COMMIT WORK;
 
18738
SET @@session.sql_mode = 'traditional';
 
18739
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18740
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18741
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18742
'', '', 'was inserted' FROM t0_template
 
18743
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18744
ERROR 22012: Division by 0
 
18745
COMMIT;
 
18746
        
 
18747
# check transactions-8 success:         1
 
18748
# INFO: Storage engine used for t1 seems to be unable to revert
 
18749
#       changes made by the failing statement.
 
18750
SET @@session.sql_mode = '';
 
18751
SET AUTOCOMMIT= 1;
 
18752
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18753
COMMIT WORK;
 
18754
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18755
        
 
18756
# check special-1 success:      1
 
18757
UPDATE t1 SET f_charbig = '';
 
18758
        
 
18759
# check special-2 success:      1
 
18760
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18761
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18762
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18764
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18765
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18766
'just inserted' FROM t0_template
 
18767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18768
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18769
BEGIN
 
18770
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18771
f_charbig = 'updated by trigger'
 
18772
      WHERE f_int1 = new.f_int1;
 
18773
END|
 
18774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18775
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18777
        
 
18778
# check trigger-1 success:      1
 
18779
DROP TRIGGER trg_1;
 
18780
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18781
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18782
f_charbig = 'just inserted'
 
18783
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18784
DELETE FROM t0_aux
 
18785
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18787
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18788
'just inserted' FROM t0_template
 
18789
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18790
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18791
BEGIN
 
18792
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18793
f_charbig = 'updated by trigger'
 
18794
      WHERE f_int1 = new.f_int1;
 
18795
END|
 
18796
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18797
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18799
        
 
18800
# check trigger-2 success:      1
 
18801
DROP TRIGGER trg_1;
 
18802
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18803
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18804
f_charbig = 'just inserted'
 
18805
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18806
DELETE FROM t0_aux
 
18807
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18808
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18809
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18810
'just inserted' FROM t0_template
 
18811
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18812
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18813
BEGIN
 
18814
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18815
f_charbig = 'updated by trigger'
 
18816
      WHERE f_int1 = new.f_int1;
 
18817
END|
 
18818
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18819
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18820
        
 
18821
# check trigger-3 success:      1
 
18822
DROP TRIGGER trg_1;
 
18823
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18824
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18825
f_charbig = 'just inserted'
 
18826
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18827
DELETE FROM t0_aux
 
18828
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18829
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18830
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18831
'just inserted' FROM t0_template
 
18832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18833
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18834
BEGIN
 
18835
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18836
f_charbig = 'updated by trigger'
 
18837
      WHERE f_int1 = - old.f_int1;
 
18838
END|
 
18839
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18840
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18841
        
 
18842
# check trigger-4 success:      1
 
18843
DROP TRIGGER trg_1;
 
18844
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18845
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18846
f_charbig = 'just inserted'
 
18847
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18848
DELETE FROM t0_aux
 
18849
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18850
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18851
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18852
'just inserted' FROM t0_template
 
18853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18854
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18855
BEGIN
 
18856
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18857
f_charbig = 'updated by trigger'
 
18858
      WHERE f_int1 = new.f_int1;
 
18859
END|
 
18860
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18861
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18862
        
 
18863
# check trigger-5 success:      1
 
18864
DROP TRIGGER trg_1;
 
18865
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18866
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18867
f_charbig = 'just inserted'
 
18868
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18869
DELETE FROM t0_aux
 
18870
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18871
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18872
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18873
'just inserted' FROM t0_template
 
18874
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18875
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18876
BEGIN
 
18877
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18878
f_charbig = 'updated by trigger'
 
18879
      WHERE f_int1 = - old.f_int1;
 
18880
END|
 
18881
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18882
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18883
        
 
18884
# check trigger-6 success:      1
 
18885
DROP TRIGGER trg_1;
 
18886
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18887
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18888
f_charbig = 'just inserted'
 
18889
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18890
DELETE FROM t0_aux
 
18891
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18892
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18893
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18894
'just inserted' FROM t0_template
 
18895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18896
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18897
BEGIN
 
18898
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18899
f_charbig = 'updated by trigger'
 
18900
      WHERE f_int1 = - old.f_int1;
 
18901
END|
 
18902
DELETE FROM t0_aux
 
18903
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18904
        
 
18905
# check trigger-7 success:      1
 
18906
DROP TRIGGER trg_1;
 
18907
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18908
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18909
f_charbig = 'just inserted'
 
18910
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18911
DELETE FROM t0_aux
 
18912
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18913
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18914
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18915
'just inserted' FROM t0_template
 
18916
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18917
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18918
BEGIN
 
18919
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18920
f_charbig = 'updated by trigger'
 
18921
      WHERE f_int1 = - old.f_int1;
 
18922
END|
 
18923
DELETE FROM t0_aux
 
18924
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18925
        
 
18926
# check trigger-8 success:      1
 
18927
DROP TRIGGER trg_1;
 
18928
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18929
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18930
f_charbig = 'just inserted'
 
18931
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18932
DELETE FROM t0_aux
 
18933
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18934
DELETE FROM t1
 
18935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18936
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18937
BEGIN
 
18938
SET new.f_int1 = old.f_int1 + @max_row,
 
18939
new.f_int2 = old.f_int2 - @max_row,
 
18940
new.f_charbig = '####updated per update trigger####';
 
18941
END|
 
18942
UPDATE t1
 
18943
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18944
f_charbig = '####updated per update statement itself####';
 
18945
        
 
18946
# check trigger-9 success:      1
 
18947
DROP TRIGGER trg_2;
 
18948
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18949
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18950
f_charbig = CONCAT('===',f_char1,'===');
 
18951
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18952
BEGIN
 
18953
SET new.f_int1 = new.f_int1 + @max_row,
 
18954
new.f_int2 = new.f_int2 - @max_row,
 
18955
new.f_charbig = '####updated per update trigger####';
 
18956
END|
 
18957
UPDATE t1
 
18958
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18959
f_charbig = '####updated per update statement itself####';
 
18960
        
 
18961
# check trigger-10 success:     1
 
18962
DROP TRIGGER trg_2;
 
18963
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18964
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18965
f_charbig = CONCAT('===',f_char1,'===');
 
18966
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18967
BEGIN
 
18968
SET new.f_int1 = @my_max1 + @counter,
 
18969
new.f_int2 = @my_min2 - @counter,
 
18970
new.f_charbig = '####updated per insert trigger####';
 
18971
SET @counter = @counter + 1;
 
18972
END|
 
18973
SET @counter = 1;
 
18974
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18975
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18976
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18977
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18979
ORDER BY f_int1;
 
18980
DROP TRIGGER trg_3;
 
18981
        
 
18982
# check trigger-11 success:     1
 
18983
DELETE FROM t1
 
18984
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18985
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18986
AND f_charbig = '####updated per insert trigger####';
 
18987
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18988
BEGIN
 
18989
SET new.f_int1 = @my_max1 + @counter,
 
18990
new.f_int2 = @my_min2 - @counter,
 
18991
new.f_charbig = '####updated per insert trigger####';
 
18992
SET @counter = @counter + 1;
 
18993
END|
 
18994
SET @counter = 1;
 
18995
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18996
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18997
SELECT CAST(f_int1 AS CHAR),
 
18998
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18999
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19000
ORDER BY f_int1;
 
19001
DROP TRIGGER trg_3;
 
19002
        
 
19003
# check trigger-12 success:     1
 
19004
DELETE FROM t1
 
19005
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19006
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19007
AND f_charbig = '####updated per insert trigger####';
 
19008
ANALYZE  TABLE t1;
 
19009
Table   Op      Msg_type        Msg_text
 
19010
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
19011
CHECK    TABLE t1 EXTENDED;
 
19012
Table   Op      Msg_type        Msg_text
 
19013
test.t1 check   note    The storage engine for the table doesn't support check
 
19014
CHECKSUM TABLE t1 EXTENDED;
 
19015
Table   Checksum
 
19016
test.t1 <some_value>
 
19017
OPTIMIZE TABLE t1;
 
19018
Table   Op      Msg_type        Msg_text
 
19019
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
19020
# check layout success:    1
 
19021
REPAIR   TABLE t1 EXTENDED;
 
19022
Table   Op      Msg_type        Msg_text
 
19023
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19024
# check layout success:    1
 
19025
TRUNCATE t1;
 
19026
        
 
19027
# check TRUNCATE success:       1
 
19028
# check layout success:    1
 
19029
# End usability test (inc/partition_check.inc)
 
19030
DROP TABLE t1;
 
19031
CREATE TABLE t1 (
 
19032
f_int1 INTEGER,
 
19033
f_int2 INTEGER,
 
19034
f_char1 CHAR(20),
 
19035
f_char2 CHAR(20),
 
19036
f_charbig VARCHAR(1000)
 
19037
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
19038
)
 
19039
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
19040
(PARTITION parta VALUES LESS THAN (0),
 
19041
PARTITION partb VALUES LESS THAN (5),
 
19042
PARTITION partc VALUES LESS THAN (10),
 
19043
PARTITION partd VALUES LESS THAN (2147483646));
 
19044
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19045
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19046
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19047
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
19048
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19049
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19050
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19051
# Start usability test (inc/partition_check.inc)
 
19052
create_command
 
19053
SHOW CREATE TABLE t1;
 
19054
Table   Create Table
 
19055
t1      CREATE TABLE `t1` (
 
19056
  `f_int1` int(11) DEFAULT NULL,
 
19057
  `f_int2` int(11) DEFAULT NULL,
 
19058
  `f_char1` char(20) DEFAULT NULL,
 
19059
  `f_char2` char(20) DEFAULT NULL,
 
19060
  `f_charbig` varchar(1000) DEFAULT NULL
 
19061
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
19062
 
 
19063
unified filelist
 
19064
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
19065
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
19066
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
19067
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
19068
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
19069
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
19070
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
19071
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
19072
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
19073
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
19074
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
19075
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
19076
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
19077
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
19078
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
19079
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
19080
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
19081
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
19082
 
 
19083
# check prerequisites-1 success:    1
 
19084
# check COUNT(*) success:    1
 
19085
# check MIN/MAX(f_int1) success:    1
 
19086
# check MIN/MAX(f_int2) success:    1
 
19087
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19088
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19089
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19090
WHERE f_int1 IN (2,3);
 
19091
# check prerequisites-3 success:    1
 
19092
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19093
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19094
# check read via f_int1 success: 1
 
19095
# check read via f_int2 success: 1
 
19096
        
 
19097
# check multiple-1 success:     1
 
19098
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19099
        
 
19100
# check multiple-2 success:     1
 
19101
INSERT INTO t1 SELECT * FROM t0_template
 
19102
WHERE MOD(f_int1,3) = 0;
 
19103
        
 
19104
# check multiple-3 success:     1
 
19105
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19106
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19107
AND @max_row_div2 + @max_row_div4;
 
19108
        
 
19109
# check multiple-4 success:     1
 
19110
DELETE FROM t1
 
19111
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19112
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19113
        
 
19114
# check multiple-5 success:     1
 
19115
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19116
INSERT INTO t1
 
19117
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19118
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19119
f_charbig = '#SINGLE#';
 
19120
        
 
19121
# check single-1 success:       1
 
19122
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19123
INSERT INTO t1
 
19124
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19125
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19126
f_charbig = '#SINGLE#';
 
19127
        
 
19128
# check single-2 success:       1
 
19129
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19130
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19131
UPDATE t1 SET f_int1 = @cur_value2
 
19132
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19133
        
 
19134
# check single-3 success:       1
 
19135
SET @cur_value1= -1;
 
19136
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19137
UPDATE t1 SET f_int1 = @cur_value1
 
19138
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19139
        
 
19140
# check single-4 success:       1
 
19141
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19142
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19143
        
 
19144
# check single-5 success:       1
 
19145
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19146
        
 
19147
# check single-6 success:       1
 
19148
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19149
        
 
19150
# check single-7 success:       1
 
19151
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19152
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19153
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19154
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19155
f_charbig = '#NULL#';
 
19156
INSERT INTO t1
 
19157
SET f_int1 = NULL , f_int2 = -@max_row,
 
19158
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19159
f_charbig = '#NULL#';
 
19160
# check null success:    1
 
19161
        
 
19162
# check null-1 success:         1
 
19163
UPDATE t1 SET f_int1 = -@max_row
 
19164
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19165
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19166
        
 
19167
# check null-2 success:         1
 
19168
UPDATE t1 SET f_int1 = NULL
 
19169
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19170
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19171
        
 
19172
# check null-3 success:         1
 
19173
DELETE FROM t1
 
19174
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19175
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19176
        
 
19177
# check null-4 success:         1
 
19178
DELETE FROM t1
 
19179
WHERE f_int1 = 0 AND f_int2 = 0
 
19180
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19181
AND f_charbig = '#NULL#';
 
19182
SET AUTOCOMMIT= 0;
 
19183
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19184
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19185
FROM t0_template source_tab
 
19186
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19187
        
 
19188
# check transactions-1 success:         1
 
19189
COMMIT WORK;
 
19190
        
 
19191
# check transactions-2 success:         1
 
19192
ROLLBACK WORK;
 
19193
        
 
19194
# check transactions-3 success:         1
 
19195
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19196
COMMIT WORK;
 
19197
ROLLBACK WORK;
 
19198
        
 
19199
# check transactions-4 success:         1
 
19200
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19201
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19202
FROM t0_template source_tab
 
19203
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19204
        
 
19205
# check transactions-5 success:         1
 
19206
ROLLBACK WORK;
 
19207
Warnings:
 
19208
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
19209
        
 
19210
# check transactions-6 success:         1
 
19211
# INFO: Storage engine used for t1 seems to be not transactional.
 
19212
COMMIT;
 
19213
        
 
19214
# check transactions-7 success:         1
 
19215
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19216
COMMIT WORK;
 
19217
SET @@session.sql_mode = 'traditional';
 
19218
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19219
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19220
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19221
'', '', 'was inserted' FROM t0_template
 
19222
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19223
ERROR 22012: Division by 0
 
19224
COMMIT;
 
19225
        
 
19226
# check transactions-8 success:         1
 
19227
# INFO: Storage engine used for t1 seems to be unable to revert
 
19228
#       changes made by the failing statement.
 
19229
SET @@session.sql_mode = '';
 
19230
SET AUTOCOMMIT= 1;
 
19231
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19232
COMMIT WORK;
 
19233
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19234
        
 
19235
# check special-1 success:      1
 
19236
UPDATE t1 SET f_charbig = '';
 
19237
        
 
19238
# check special-2 success:      1
 
19239
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19240
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19241
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19243
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19244
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19245
'just inserted' FROM t0_template
 
19246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19247
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19248
BEGIN
 
19249
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19250
f_charbig = 'updated by trigger'
 
19251
      WHERE f_int1 = new.f_int1;
 
19252
END|
 
19253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19254
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19256
        
 
19257
# check trigger-1 success:      1
 
19258
DROP TRIGGER trg_1;
 
19259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19261
f_charbig = 'just inserted'
 
19262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19263
DELETE FROM t0_aux
 
19264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19267
'just inserted' FROM t0_template
 
19268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19269
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19270
BEGIN
 
19271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19272
f_charbig = 'updated by trigger'
 
19273
      WHERE f_int1 = new.f_int1;
 
19274
END|
 
19275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19276
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19278
        
 
19279
# check trigger-2 success:      1
 
19280
DROP TRIGGER trg_1;
 
19281
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19282
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19283
f_charbig = 'just inserted'
 
19284
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19285
DELETE FROM t0_aux
 
19286
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19287
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19288
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19289
'just inserted' FROM t0_template
 
19290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19291
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19292
BEGIN
 
19293
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19294
f_charbig = 'updated by trigger'
 
19295
      WHERE f_int1 = new.f_int1;
 
19296
END|
 
19297
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19298
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19299
        
 
19300
# check trigger-3 success:      1
 
19301
DROP TRIGGER trg_1;
 
19302
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19303
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19304
f_charbig = 'just inserted'
 
19305
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19306
DELETE FROM t0_aux
 
19307
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19308
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19309
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19310
'just inserted' FROM t0_template
 
19311
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19312
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19313
BEGIN
 
19314
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19315
f_charbig = 'updated by trigger'
 
19316
      WHERE f_int1 = - old.f_int1;
 
19317
END|
 
19318
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19319
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19320
        
 
19321
# check trigger-4 success:      1
 
19322
DROP TRIGGER trg_1;
 
19323
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19324
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19325
f_charbig = 'just inserted'
 
19326
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19327
DELETE FROM t0_aux
 
19328
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19329
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19330
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19331
'just inserted' FROM t0_template
 
19332
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19333
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19334
BEGIN
 
19335
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19336
f_charbig = 'updated by trigger'
 
19337
      WHERE f_int1 = new.f_int1;
 
19338
END|
 
19339
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19340
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19341
        
 
19342
# check trigger-5 success:      1
 
19343
DROP TRIGGER trg_1;
 
19344
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19345
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19346
f_charbig = 'just inserted'
 
19347
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19348
DELETE FROM t0_aux
 
19349
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19350
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19351
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19352
'just inserted' FROM t0_template
 
19353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19354
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19355
BEGIN
 
19356
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19357
f_charbig = 'updated by trigger'
 
19358
      WHERE f_int1 = - old.f_int1;
 
19359
END|
 
19360
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19361
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19362
        
 
19363
# check trigger-6 success:      1
 
19364
DROP TRIGGER trg_1;
 
19365
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19366
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19367
f_charbig = 'just inserted'
 
19368
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19369
DELETE FROM t0_aux
 
19370
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19371
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19372
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19373
'just inserted' FROM t0_template
 
19374
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19375
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19376
BEGIN
 
19377
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19378
f_charbig = 'updated by trigger'
 
19379
      WHERE f_int1 = - old.f_int1;
 
19380
END|
 
19381
DELETE FROM t0_aux
 
19382
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19383
        
 
19384
# check trigger-7 success:      1
 
19385
DROP TRIGGER trg_1;
 
19386
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19387
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19388
f_charbig = 'just inserted'
 
19389
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19390
DELETE FROM t0_aux
 
19391
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19392
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19393
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19394
'just inserted' FROM t0_template
 
19395
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19396
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19397
BEGIN
 
19398
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19399
f_charbig = 'updated by trigger'
 
19400
      WHERE f_int1 = - old.f_int1;
 
19401
END|
 
19402
DELETE FROM t0_aux
 
19403
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19404
        
 
19405
# check trigger-8 success:      1
 
19406
DROP TRIGGER trg_1;
 
19407
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19408
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19409
f_charbig = 'just inserted'
 
19410
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19411
DELETE FROM t0_aux
 
19412
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19413
DELETE FROM t1
 
19414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19415
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19416
BEGIN
 
19417
SET new.f_int1 = old.f_int1 + @max_row,
 
19418
new.f_int2 = old.f_int2 - @max_row,
 
19419
new.f_charbig = '####updated per update trigger####';
 
19420
END|
 
19421
UPDATE t1
 
19422
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19423
f_charbig = '####updated per update statement itself####';
 
19424
        
 
19425
# check trigger-9 success:      1
 
19426
DROP TRIGGER trg_2;
 
19427
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19428
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19429
f_charbig = CONCAT('===',f_char1,'===');
 
19430
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19431
BEGIN
 
19432
SET new.f_int1 = new.f_int1 + @max_row,
 
19433
new.f_int2 = new.f_int2 - @max_row,
 
19434
new.f_charbig = '####updated per update trigger####';
 
19435
END|
 
19436
UPDATE t1
 
19437
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19438
f_charbig = '####updated per update statement itself####';
 
19439
        
 
19440
# check trigger-10 success:     1
 
19441
DROP TRIGGER trg_2;
 
19442
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19443
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19444
f_charbig = CONCAT('===',f_char1,'===');
 
19445
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19446
BEGIN
 
19447
SET new.f_int1 = @my_max1 + @counter,
 
19448
new.f_int2 = @my_min2 - @counter,
 
19449
new.f_charbig = '####updated per insert trigger####';
 
19450
SET @counter = @counter + 1;
 
19451
END|
 
19452
SET @counter = 1;
 
19453
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19455
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19456
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19458
ORDER BY f_int1;
 
19459
DROP TRIGGER trg_3;
 
19460
        
 
19461
# check trigger-11 success:     1
 
19462
DELETE FROM t1
 
19463
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19464
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19465
AND f_charbig = '####updated per insert trigger####';
 
19466
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19467
BEGIN
 
19468
SET new.f_int1 = @my_max1 + @counter,
 
19469
new.f_int2 = @my_min2 - @counter,
 
19470
new.f_charbig = '####updated per insert trigger####';
 
19471
SET @counter = @counter + 1;
 
19472
END|
 
19473
SET @counter = 1;
 
19474
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19475
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19476
SELECT CAST(f_int1 AS CHAR),
 
19477
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19478
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19479
ORDER BY f_int1;
 
19480
DROP TRIGGER trg_3;
 
19481
        
 
19482
# check trigger-12 success:     1
 
19483
DELETE FROM t1
 
19484
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19485
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19486
AND f_charbig = '####updated per insert trigger####';
 
19487
ANALYZE  TABLE t1;
 
19488
Table   Op      Msg_type        Msg_text
 
19489
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
19490
CHECK    TABLE t1 EXTENDED;
 
19491
Table   Op      Msg_type        Msg_text
 
19492
test.t1 check   note    The storage engine for the table doesn't support check
 
19493
CHECKSUM TABLE t1 EXTENDED;
 
19494
Table   Checksum
 
19495
test.t1 <some_value>
 
19496
OPTIMIZE TABLE t1;
 
19497
Table   Op      Msg_type        Msg_text
 
19498
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
19499
# check layout success:    1
 
19500
REPAIR   TABLE t1 EXTENDED;
 
19501
Table   Op      Msg_type        Msg_text
 
19502
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19503
# check layout success:    1
 
19504
TRUNCATE t1;
 
19505
        
 
19506
# check TRUNCATE success:       1
 
19507
# check layout success:    1
 
19508
# End usability test (inc/partition_check.inc)
 
19509
DROP TABLE t1;
 
19510
CREATE TABLE t1 (
 
19511
f_int1 INTEGER,
 
19512
f_int2 INTEGER,
 
19513
f_char1 CHAR(20),
 
19514
f_char2 CHAR(20),
 
19515
f_charbig VARCHAR(1000)
 
19516
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
19517
)
 
19518
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
19519
(PARTITION part1 VALUES LESS THAN (0)
 
19520
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
19521
PARTITION part2 VALUES LESS THAN (5)
 
19522
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
19523
PARTITION part3 VALUES LESS THAN (10)
 
19524
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
19525
PARTITION part4 VALUES LESS THAN (2147483646)
 
19526
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
19527
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19528
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19529
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19530
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
19531
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19532
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19533
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19534
# Start usability test (inc/partition_check.inc)
 
19535
create_command
 
19536
SHOW CREATE TABLE t1;
 
19537
Table   Create Table
 
19538
t1      CREATE TABLE `t1` (
 
19539
  `f_int1` int(11) DEFAULT NULL,
 
19540
  `f_int2` int(11) DEFAULT NULL,
 
19541
  `f_char1` char(20) DEFAULT NULL,
 
19542
  `f_char2` char(20) DEFAULT NULL,
 
19543
  `f_charbig` varchar(1000) DEFAULT NULL
 
19544
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
19545
 
 
19546
unified filelist
 
19547
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
19548
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
19549
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
19550
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
19551
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
19552
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
19553
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
19554
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
19555
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
19556
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
19557
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
19558
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
19559
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
19560
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
19561
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
19562
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
19563
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
19564
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
19565
 
 
19566
# check prerequisites-1 success:    1
 
19567
# check COUNT(*) success:    1
 
19568
# check MIN/MAX(f_int1) success:    1
 
19569
# check MIN/MAX(f_int2) success:    1
 
19570
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19571
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19572
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19573
WHERE f_int1 IN (2,3);
 
19574
# check prerequisites-3 success:    1
 
19575
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19576
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19577
# check read via f_int1 success: 1
 
19578
# check read via f_int2 success: 1
 
19579
        
 
19580
# check multiple-1 success:     1
 
19581
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19582
        
 
19583
# check multiple-2 success:     1
 
19584
INSERT INTO t1 SELECT * FROM t0_template
 
19585
WHERE MOD(f_int1,3) = 0;
 
19586
        
 
19587
# check multiple-3 success:     1
 
19588
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19589
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19590
AND @max_row_div2 + @max_row_div4;
 
19591
        
 
19592
# check multiple-4 success:     1
 
19593
DELETE FROM t1
 
19594
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19595
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19596
        
 
19597
# check multiple-5 success:     1
 
19598
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19599
INSERT INTO t1
 
19600
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19601
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19602
f_charbig = '#SINGLE#';
 
19603
        
 
19604
# check single-1 success:       1
 
19605
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19606
INSERT INTO t1
 
19607
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19608
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19609
f_charbig = '#SINGLE#';
 
19610
        
 
19611
# check single-2 success:       1
 
19612
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19613
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19614
UPDATE t1 SET f_int1 = @cur_value2
 
19615
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19616
        
 
19617
# check single-3 success:       1
 
19618
SET @cur_value1= -1;
 
19619
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19620
UPDATE t1 SET f_int1 = @cur_value1
 
19621
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19622
        
 
19623
# check single-4 success:       1
 
19624
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19625
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19626
        
 
19627
# check single-5 success:       1
 
19628
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19629
        
 
19630
# check single-6 success:       1
 
19631
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19632
ERROR HY000: Table has no partition for value 2147483647
 
19633
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19634
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19635
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19636
f_charbig = '#NULL#';
 
19637
INSERT INTO t1
 
19638
SET f_int1 = NULL , f_int2 = -@max_row,
 
19639
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19640
f_charbig = '#NULL#';
 
19641
# check null success:    1
 
19642
        
 
19643
# check null-1 success:         1
 
19644
UPDATE t1 SET f_int1 = -@max_row
 
19645
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19646
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19647
        
 
19648
# check null-2 success:         1
 
19649
UPDATE t1 SET f_int1 = NULL
 
19650
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19651
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19652
        
 
19653
# check null-3 success:         1
 
19654
DELETE FROM t1
 
19655
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19656
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19657
        
 
19658
# check null-4 success:         1
 
19659
DELETE FROM t1
 
19660
WHERE f_int1 = 0 AND f_int2 = 0
 
19661
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19662
AND f_charbig = '#NULL#';
 
19663
SET AUTOCOMMIT= 0;
 
19664
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19665
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19666
FROM t0_template source_tab
 
19667
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19668
        
 
19669
# check transactions-1 success:         1
 
19670
COMMIT WORK;
 
19671
        
 
19672
# check transactions-2 success:         1
 
19673
ROLLBACK WORK;
 
19674
        
 
19675
# check transactions-3 success:         1
 
19676
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19677
COMMIT WORK;
 
19678
ROLLBACK WORK;
 
19679
        
 
19680
# check transactions-4 success:         1
 
19681
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19682
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19683
FROM t0_template source_tab
 
19684
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19685
        
 
19686
# check transactions-5 success:         1
 
19687
ROLLBACK WORK;
 
19688
Warnings:
 
19689
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
19690
        
 
19691
# check transactions-6 success:         1
 
19692
# INFO: Storage engine used for t1 seems to be not transactional.
 
19693
COMMIT;
 
19694
        
 
19695
# check transactions-7 success:         1
 
19696
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19697
COMMIT WORK;
 
19698
SET @@session.sql_mode = 'traditional';
 
19699
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19700
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19701
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19702
'', '', 'was inserted' FROM t0_template
 
19703
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19704
ERROR 22012: Division by 0
 
19705
COMMIT;
 
19706
        
 
19707
# check transactions-8 success:         1
 
19708
# INFO: Storage engine used for t1 seems to be unable to revert
 
19709
#       changes made by the failing statement.
 
19710
SET @@session.sql_mode = '';
 
19711
SET AUTOCOMMIT= 1;
 
19712
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19713
COMMIT WORK;
 
19714
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19715
        
 
19716
# check special-1 success:      1
 
19717
UPDATE t1 SET f_charbig = '';
 
19718
        
 
19719
# check special-2 success:      1
 
19720
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19721
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19722
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19724
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19725
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19726
'just inserted' FROM t0_template
 
19727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19728
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19729
BEGIN
 
19730
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19731
f_charbig = 'updated by trigger'
 
19732
      WHERE f_int1 = new.f_int1;
 
19733
END|
 
19734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19735
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19737
        
 
19738
# check trigger-1 success:      1
 
19739
DROP TRIGGER trg_1;
 
19740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19742
f_charbig = 'just inserted'
 
19743
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19744
DELETE FROM t0_aux
 
19745
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19747
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19748
'just inserted' FROM t0_template
 
19749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19750
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19751
BEGIN
 
19752
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19753
f_charbig = 'updated by trigger'
 
19754
      WHERE f_int1 = new.f_int1;
 
19755
END|
 
19756
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19757
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19759
        
 
19760
# check trigger-2 success:      1
 
19761
DROP TRIGGER trg_1;
 
19762
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19763
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19764
f_charbig = 'just inserted'
 
19765
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19766
DELETE FROM t0_aux
 
19767
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19770
'just inserted' FROM t0_template
 
19771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19772
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19773
BEGIN
 
19774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19775
f_charbig = 'updated by trigger'
 
19776
      WHERE f_int1 = new.f_int1;
 
19777
END|
 
19778
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19779
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19780
        
 
19781
# check trigger-3 success:      1
 
19782
DROP TRIGGER trg_1;
 
19783
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19784
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19785
f_charbig = 'just inserted'
 
19786
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19787
DELETE FROM t0_aux
 
19788
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19789
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19790
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19791
'just inserted' FROM t0_template
 
19792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19793
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19794
BEGIN
 
19795
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19796
f_charbig = 'updated by trigger'
 
19797
      WHERE f_int1 = - old.f_int1;
 
19798
END|
 
19799
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19800
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19801
        
 
19802
# check trigger-4 success:      1
 
19803
DROP TRIGGER trg_1;
 
19804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19806
f_charbig = 'just inserted'
 
19807
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19808
DELETE FROM t0_aux
 
19809
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19810
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19811
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19812
'just inserted' FROM t0_template
 
19813
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19814
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19815
BEGIN
 
19816
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19817
f_charbig = 'updated by trigger'
 
19818
      WHERE f_int1 = new.f_int1;
 
19819
END|
 
19820
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19821
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19822
        
 
19823
# check trigger-5 success:      1
 
19824
DROP TRIGGER trg_1;
 
19825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19827
f_charbig = 'just inserted'
 
19828
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19829
DELETE FROM t0_aux
 
19830
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19831
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19832
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19833
'just inserted' FROM t0_template
 
19834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19835
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19836
BEGIN
 
19837
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19838
f_charbig = 'updated by trigger'
 
19839
      WHERE f_int1 = - old.f_int1;
 
19840
END|
 
19841
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19842
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19843
        
 
19844
# check trigger-6 success:      1
 
19845
DROP TRIGGER trg_1;
 
19846
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19847
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19848
f_charbig = 'just inserted'
 
19849
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19850
DELETE FROM t0_aux
 
19851
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19852
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19853
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19854
'just inserted' FROM t0_template
 
19855
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19856
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19857
BEGIN
 
19858
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19859
f_charbig = 'updated by trigger'
 
19860
      WHERE f_int1 = - old.f_int1;
 
19861
END|
 
19862
DELETE FROM t0_aux
 
19863
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19864
        
 
19865
# check trigger-7 success:      1
 
19866
DROP TRIGGER trg_1;
 
19867
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19868
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19869
f_charbig = 'just inserted'
 
19870
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19871
DELETE FROM t0_aux
 
19872
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19874
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19875
'just inserted' FROM t0_template
 
19876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19877
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19878
BEGIN
 
19879
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19880
f_charbig = 'updated by trigger'
 
19881
      WHERE f_int1 = - old.f_int1;
 
19882
END|
 
19883
DELETE FROM t0_aux
 
19884
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19885
        
 
19886
# check trigger-8 success:      1
 
19887
DROP TRIGGER trg_1;
 
19888
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19889
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19890
f_charbig = 'just inserted'
 
19891
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19892
DELETE FROM t0_aux
 
19893
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19894
DELETE FROM t1
 
19895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19896
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19897
BEGIN
 
19898
SET new.f_int1 = old.f_int1 + @max_row,
 
19899
new.f_int2 = old.f_int2 - @max_row,
 
19900
new.f_charbig = '####updated per update trigger####';
 
19901
END|
 
19902
UPDATE t1
 
19903
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19904
f_charbig = '####updated per update statement itself####';
 
19905
        
 
19906
# check trigger-9 success:      1
 
19907
DROP TRIGGER trg_2;
 
19908
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19909
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19910
f_charbig = CONCAT('===',f_char1,'===');
 
19911
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19912
BEGIN
 
19913
SET new.f_int1 = new.f_int1 + @max_row,
 
19914
new.f_int2 = new.f_int2 - @max_row,
 
19915
new.f_charbig = '####updated per update trigger####';
 
19916
END|
 
19917
UPDATE t1
 
19918
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19919
f_charbig = '####updated per update statement itself####';
 
19920
        
 
19921
# check trigger-10 success:     1
 
19922
DROP TRIGGER trg_2;
 
19923
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19924
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19925
f_charbig = CONCAT('===',f_char1,'===');
 
19926
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19927
BEGIN
 
19928
SET new.f_int1 = @my_max1 + @counter,
 
19929
new.f_int2 = @my_min2 - @counter,
 
19930
new.f_charbig = '####updated per insert trigger####';
 
19931
SET @counter = @counter + 1;
 
19932
END|
 
19933
SET @counter = 1;
 
19934
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19935
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19936
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19937
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19939
ORDER BY f_int1;
 
19940
DROP TRIGGER trg_3;
 
19941
        
 
19942
# check trigger-11 success:     1
 
19943
DELETE FROM t1
 
19944
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19945
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19946
AND f_charbig = '####updated per insert trigger####';
 
19947
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19948
BEGIN
 
19949
SET new.f_int1 = @my_max1 + @counter,
 
19950
new.f_int2 = @my_min2 - @counter,
 
19951
new.f_charbig = '####updated per insert trigger####';
 
19952
SET @counter = @counter + 1;
 
19953
END|
 
19954
SET @counter = 1;
 
19955
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19956
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19957
SELECT CAST(f_int1 AS CHAR),
 
19958
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19960
ORDER BY f_int1;
 
19961
DROP TRIGGER trg_3;
 
19962
        
 
19963
# check trigger-12 success:     1
 
19964
DELETE FROM t1
 
19965
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19966
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19967
AND f_charbig = '####updated per insert trigger####';
 
19968
ANALYZE  TABLE t1;
 
19969
Table   Op      Msg_type        Msg_text
 
19970
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
19971
CHECK    TABLE t1 EXTENDED;
 
19972
Table   Op      Msg_type        Msg_text
 
19973
test.t1 check   note    The storage engine for the table doesn't support check
 
19974
CHECKSUM TABLE t1 EXTENDED;
 
19975
Table   Checksum
 
19976
test.t1 <some_value>
 
19977
OPTIMIZE TABLE t1;
 
19978
Table   Op      Msg_type        Msg_text
 
19979
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
19980
# check layout success:    1
 
19981
REPAIR   TABLE t1 EXTENDED;
 
19982
Table   Op      Msg_type        Msg_text
 
19983
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19984
# check layout success:    1
 
19985
TRUNCATE t1;
 
19986
        
 
19987
# check TRUNCATE success:       1
 
19988
# check layout success:    1
 
19989
# End usability test (inc/partition_check.inc)
 
19990
DROP TABLE t1;
 
19991
CREATE TABLE t1 (
 
19992
f_int1 INTEGER,
 
19993
f_int2 INTEGER,
 
19994
f_char1 CHAR(20),
 
19995
f_char2 CHAR(20),
 
19996
f_charbig VARCHAR(1000)
 
19997
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
19998
)
 
19999
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
20000
(PARTITION part1 VALUES IN (0)
 
20001
(SUBPARTITION sp11, SUBPARTITION sp12),
 
20002
PARTITION part2 VALUES IN (1)
 
20003
(SUBPARTITION sp21, SUBPARTITION sp22),
 
20004
PARTITION part3 VALUES IN (2)
 
20005
(SUBPARTITION sp31, SUBPARTITION sp32),
 
20006
PARTITION part4 VALUES IN (NULL)
 
20007
(SUBPARTITION sp41, SUBPARTITION sp42));
 
20008
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20009
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20010
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20011
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
20012
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20013
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20014
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20015
# Start usability test (inc/partition_check.inc)
 
20016
create_command
 
20017
SHOW CREATE TABLE t1;
 
20018
Table   Create Table
 
20019
t1      CREATE TABLE `t1` (
 
20020
  `f_int1` int(11) DEFAULT NULL,
 
20021
  `f_int2` int(11) DEFAULT NULL,
 
20022
  `f_char1` char(20) DEFAULT NULL,
 
20023
  `f_char2` char(20) DEFAULT NULL,
 
20024
  `f_charbig` varchar(1000) DEFAULT NULL
 
20025
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
20026
 
 
20027
unified filelist
 
20028
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
20029
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
20030
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
20031
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
20032
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
20033
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
20034
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
20035
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
20036
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
20037
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
20038
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
20039
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
20040
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
20041
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
20042
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
20043
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
20044
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
20045
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
20046
 
 
20047
# check prerequisites-1 success:    1
 
20048
# check COUNT(*) success:    1
 
20049
# check MIN/MAX(f_int1) success:    1
 
20050
# check MIN/MAX(f_int2) success:    1
 
20051
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20052
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20053
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20054
WHERE f_int1 IN (2,3);
 
20055
# check prerequisites-3 success:    1
 
20056
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20057
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20058
# check read via f_int1 success: 1
 
20059
# check read via f_int2 success: 1
 
20060
        
 
20061
# check multiple-1 success:     1
 
20062
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20063
        
 
20064
# check multiple-2 success:     1
 
20065
INSERT INTO t1 SELECT * FROM t0_template
 
20066
WHERE MOD(f_int1,3) = 0;
 
20067
        
 
20068
# check multiple-3 success:     1
 
20069
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20070
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20071
AND @max_row_div2 + @max_row_div4;
 
20072
        
 
20073
# check multiple-4 success:     1
 
20074
DELETE FROM t1
 
20075
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20076
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20077
        
 
20078
# check multiple-5 success:     1
 
20079
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20080
INSERT INTO t1
 
20081
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20082
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20083
f_charbig = '#SINGLE#';
 
20084
        
 
20085
# check single-1 success:       1
 
20086
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20087
INSERT INTO t1
 
20088
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20089
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20090
f_charbig = '#SINGLE#';
 
20091
        
 
20092
# check single-2 success:       1
 
20093
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20094
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20095
UPDATE t1 SET f_int1 = @cur_value2
 
20096
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20097
        
 
20098
# check single-3 success:       1
 
20099
SET @cur_value1= -1;
 
20100
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20101
UPDATE t1 SET f_int1 = @cur_value1
 
20102
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20103
        
 
20104
# check single-4 success:       1
 
20105
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20106
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20107
        
 
20108
# check single-5 success:       1
 
20109
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20110
        
 
20111
# check single-6 success:       1
 
20112
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20113
        
 
20114
# check single-7 success:       1
 
20115
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20116
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20117
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20118
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20119
f_charbig = '#NULL#';
 
20120
INSERT INTO t1
 
20121
SET f_int1 = NULL , f_int2 = -@max_row,
 
20122
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20123
f_charbig = '#NULL#';
 
20124
# check null success:    1
 
20125
        
 
20126
# check null-1 success:         1
 
20127
UPDATE t1 SET f_int1 = -@max_row
 
20128
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20129
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20130
        
 
20131
# check null-2 success:         1
 
20132
UPDATE t1 SET f_int1 = NULL
 
20133
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20134
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20135
        
 
20136
# check null-3 success:         1
 
20137
DELETE FROM t1
 
20138
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20139
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20140
        
 
20141
# check null-4 success:         1
 
20142
DELETE FROM t1
 
20143
WHERE f_int1 = 0 AND f_int2 = 0
 
20144
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20145
AND f_charbig = '#NULL#';
 
20146
SET AUTOCOMMIT= 0;
 
20147
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20148
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20149
FROM t0_template source_tab
 
20150
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20151
        
 
20152
# check transactions-1 success:         1
 
20153
COMMIT WORK;
 
20154
        
 
20155
# check transactions-2 success:         1
 
20156
ROLLBACK WORK;
 
20157
        
 
20158
# check transactions-3 success:         1
 
20159
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20160
COMMIT WORK;
 
20161
ROLLBACK WORK;
 
20162
        
 
20163
# check transactions-4 success:         1
 
20164
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20165
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20166
FROM t0_template source_tab
 
20167
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20168
        
 
20169
# check transactions-5 success:         1
 
20170
ROLLBACK WORK;
 
20171
Warnings:
 
20172
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
20173
        
 
20174
# check transactions-6 success:         1
 
20175
# INFO: Storage engine used for t1 seems to be not transactional.
 
20176
COMMIT;
 
20177
        
 
20178
# check transactions-7 success:         1
 
20179
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20180
COMMIT WORK;
 
20181
SET @@session.sql_mode = 'traditional';
 
20182
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20183
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20184
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20185
'', '', 'was inserted' FROM t0_template
 
20186
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20187
ERROR 22012: Division by 0
 
20188
COMMIT;
 
20189
        
 
20190
# check transactions-8 success:         1
 
20191
# INFO: Storage engine used for t1 seems to be unable to revert
 
20192
#       changes made by the failing statement.
 
20193
SET @@session.sql_mode = '';
 
20194
SET AUTOCOMMIT= 1;
 
20195
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20196
COMMIT WORK;
 
20197
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20198
        
 
20199
# check special-1 success:      1
 
20200
UPDATE t1 SET f_charbig = '';
 
20201
        
 
20202
# check special-2 success:      1
 
20203
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20204
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20205
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20207
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20208
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20209
'just inserted' FROM t0_template
 
20210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20211
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20212
BEGIN
 
20213
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20214
f_charbig = 'updated by trigger'
 
20215
      WHERE f_int1 = new.f_int1;
 
20216
END|
 
20217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20218
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20220
        
 
20221
# check trigger-1 success:      1
 
20222
DROP TRIGGER trg_1;
 
20223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20225
f_charbig = 'just inserted'
 
20226
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20227
DELETE FROM t0_aux
 
20228
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20229
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20230
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20231
'just inserted' FROM t0_template
 
20232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20233
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20234
BEGIN
 
20235
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20236
f_charbig = 'updated by trigger'
 
20237
      WHERE f_int1 = new.f_int1;
 
20238
END|
 
20239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20240
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20242
        
 
20243
# check trigger-2 success:      1
 
20244
DROP TRIGGER trg_1;
 
20245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20247
f_charbig = 'just inserted'
 
20248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20249
DELETE FROM t0_aux
 
20250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20253
'just inserted' FROM t0_template
 
20254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20255
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20256
BEGIN
 
20257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20258
f_charbig = 'updated by trigger'
 
20259
      WHERE f_int1 = new.f_int1;
 
20260
END|
 
20261
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20263
        
 
20264
# check trigger-3 success:      1
 
20265
DROP TRIGGER trg_1;
 
20266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20268
f_charbig = 'just inserted'
 
20269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20270
DELETE FROM t0_aux
 
20271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20272
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20273
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20274
'just inserted' FROM t0_template
 
20275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20276
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20277
BEGIN
 
20278
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20279
f_charbig = 'updated by trigger'
 
20280
      WHERE f_int1 = - old.f_int1;
 
20281
END|
 
20282
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20283
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20284
        
 
20285
# check trigger-4 success:      1
 
20286
DROP TRIGGER trg_1;
 
20287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20289
f_charbig = 'just inserted'
 
20290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20291
DELETE FROM t0_aux
 
20292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20295
'just inserted' FROM t0_template
 
20296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20297
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20298
BEGIN
 
20299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20300
f_charbig = 'updated by trigger'
 
20301
      WHERE f_int1 = new.f_int1;
 
20302
END|
 
20303
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20305
        
 
20306
# check trigger-5 success:      1
 
20307
DROP TRIGGER trg_1;
 
20308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20310
f_charbig = 'just inserted'
 
20311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20312
DELETE FROM t0_aux
 
20313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20315
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20316
'just inserted' FROM t0_template
 
20317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20318
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20319
BEGIN
 
20320
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20321
f_charbig = 'updated by trigger'
 
20322
      WHERE f_int1 = - old.f_int1;
 
20323
END|
 
20324
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20325
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20326
        
 
20327
# check trigger-6 success:      1
 
20328
DROP TRIGGER trg_1;
 
20329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20331
f_charbig = 'just inserted'
 
20332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20333
DELETE FROM t0_aux
 
20334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20335
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20336
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20337
'just inserted' FROM t0_template
 
20338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20339
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20340
BEGIN
 
20341
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20342
f_charbig = 'updated by trigger'
 
20343
      WHERE f_int1 = - old.f_int1;
 
20344
END|
 
20345
DELETE FROM t0_aux
 
20346
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20347
        
 
20348
# check trigger-7 success:      1
 
20349
DROP TRIGGER trg_1;
 
20350
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20351
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20352
f_charbig = 'just inserted'
 
20353
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20354
DELETE FROM t0_aux
 
20355
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20356
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20357
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20358
'just inserted' FROM t0_template
 
20359
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20360
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20361
BEGIN
 
20362
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20363
f_charbig = 'updated by trigger'
 
20364
      WHERE f_int1 = - old.f_int1;
 
20365
END|
 
20366
DELETE FROM t0_aux
 
20367
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20368
        
 
20369
# check trigger-8 success:      1
 
20370
DROP TRIGGER trg_1;
 
20371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20373
f_charbig = 'just inserted'
 
20374
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20375
DELETE FROM t0_aux
 
20376
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20377
DELETE FROM t1
 
20378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20379
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20380
BEGIN
 
20381
SET new.f_int1 = old.f_int1 + @max_row,
 
20382
new.f_int2 = old.f_int2 - @max_row,
 
20383
new.f_charbig = '####updated per update trigger####';
 
20384
END|
 
20385
UPDATE t1
 
20386
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20387
f_charbig = '####updated per update statement itself####';
 
20388
        
 
20389
# check trigger-9 success:      1
 
20390
DROP TRIGGER trg_2;
 
20391
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20392
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20393
f_charbig = CONCAT('===',f_char1,'===');
 
20394
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20395
BEGIN
 
20396
SET new.f_int1 = new.f_int1 + @max_row,
 
20397
new.f_int2 = new.f_int2 - @max_row,
 
20398
new.f_charbig = '####updated per update trigger####';
 
20399
END|
 
20400
UPDATE t1
 
20401
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20402
f_charbig = '####updated per update statement itself####';
 
20403
        
 
20404
# check trigger-10 success:     1
 
20405
DROP TRIGGER trg_2;
 
20406
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20407
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20408
f_charbig = CONCAT('===',f_char1,'===');
 
20409
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20410
BEGIN
 
20411
SET new.f_int1 = @my_max1 + @counter,
 
20412
new.f_int2 = @my_min2 - @counter,
 
20413
new.f_charbig = '####updated per insert trigger####';
 
20414
SET @counter = @counter + 1;
 
20415
END|
 
20416
SET @counter = 1;
 
20417
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20419
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20420
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20421
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20422
ORDER BY f_int1;
 
20423
DROP TRIGGER trg_3;
 
20424
        
 
20425
# check trigger-11 success:     1
 
20426
DELETE FROM t1
 
20427
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20428
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20429
AND f_charbig = '####updated per insert trigger####';
 
20430
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20431
BEGIN
 
20432
SET new.f_int1 = @my_max1 + @counter,
 
20433
new.f_int2 = @my_min2 - @counter,
 
20434
new.f_charbig = '####updated per insert trigger####';
 
20435
SET @counter = @counter + 1;
 
20436
END|
 
20437
SET @counter = 1;
 
20438
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20439
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20440
SELECT CAST(f_int1 AS CHAR),
 
20441
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20443
ORDER BY f_int1;
 
20444
DROP TRIGGER trg_3;
 
20445
        
 
20446
# check trigger-12 success:     1
 
20447
DELETE FROM t1
 
20448
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20449
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20450
AND f_charbig = '####updated per insert trigger####';
 
20451
ANALYZE  TABLE t1;
 
20452
Table   Op      Msg_type        Msg_text
 
20453
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
20454
CHECK    TABLE t1 EXTENDED;
 
20455
Table   Op      Msg_type        Msg_text
 
20456
test.t1 check   note    The storage engine for the table doesn't support check
 
20457
CHECKSUM TABLE t1 EXTENDED;
 
20458
Table   Checksum
 
20459
test.t1 <some_value>
 
20460
OPTIMIZE TABLE t1;
 
20461
Table   Op      Msg_type        Msg_text
 
20462
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
20463
# check layout success:    1
 
20464
REPAIR   TABLE t1 EXTENDED;
 
20465
Table   Op      Msg_type        Msg_text
 
20466
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20467
# check layout success:    1
 
20468
TRUNCATE t1;
 
20469
        
 
20470
# check TRUNCATE success:       1
 
20471
# check layout success:    1
 
20472
# End usability test (inc/partition_check.inc)
 
20473
DROP TABLE t1;
 
20474
CREATE TABLE t1 (
 
20475
f_int1 INTEGER,
 
20476
f_int2 INTEGER,
 
20477
f_char1 CHAR(20),
 
20478
f_char2 CHAR(20),
 
20479
f_charbig VARCHAR(1000)
 
20480
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
20481
)
 
20482
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
20483
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
20484
(PARTITION part1 VALUES IN (0),
 
20485
 PARTITION part2 VALUES IN (1),
 
20486
 PARTITION part3 VALUES IN (NULL));
 
20487
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20488
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20489
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20490
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
20491
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20492
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20493
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20494
# Start usability test (inc/partition_check.inc)
 
20495
create_command
 
20496
SHOW CREATE TABLE t1;
 
20497
Table   Create Table
 
20498
t1      CREATE TABLE `t1` (
 
20499
  `f_int1` int(11) DEFAULT NULL,
 
20500
  `f_int2` int(11) DEFAULT NULL,
 
20501
  `f_char1` char(20) DEFAULT NULL,
 
20502
  `f_char2` char(20) DEFAULT NULL,
 
20503
  `f_charbig` varchar(1000) DEFAULT NULL
 
20504
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
20505
 
 
20506
unified filelist
 
20507
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
20508
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
20509
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
20510
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
20511
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
20512
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
20513
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
20514
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
20515
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
20516
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
20517
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
20518
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
20519
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
20520
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
20521
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
20522
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
20523
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
20524
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
20525
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
20526
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
20527
 
 
20528
# check prerequisites-1 success:    1
 
20529
# check COUNT(*) success:    1
 
20530
# check MIN/MAX(f_int1) success:    1
 
20531
# check MIN/MAX(f_int2) success:    1
 
20532
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20533
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20534
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20535
WHERE f_int1 IN (2,3);
 
20536
# check prerequisites-3 success:    1
 
20537
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20538
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20539
# check read via f_int1 success: 1
 
20540
# check read via f_int2 success: 1
 
20541
        
 
20542
# check multiple-1 success:     1
 
20543
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20544
        
 
20545
# check multiple-2 success:     1
 
20546
INSERT INTO t1 SELECT * FROM t0_template
 
20547
WHERE MOD(f_int1,3) = 0;
 
20548
        
 
20549
# check multiple-3 success:     1
 
20550
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20551
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20552
AND @max_row_div2 + @max_row_div4;
 
20553
        
 
20554
# check multiple-4 success:     1
 
20555
DELETE FROM t1
 
20556
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20557
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20558
        
 
20559
# check multiple-5 success:     1
 
20560
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20561
INSERT INTO t1
 
20562
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20563
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20564
f_charbig = '#SINGLE#';
 
20565
        
 
20566
# check single-1 success:       1
 
20567
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20568
INSERT INTO t1
 
20569
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20570
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20571
f_charbig = '#SINGLE#';
 
20572
        
 
20573
# check single-2 success:       1
 
20574
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20575
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20576
UPDATE t1 SET f_int1 = @cur_value2
 
20577
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20578
        
 
20579
# check single-3 success:       1
 
20580
SET @cur_value1= -1;
 
20581
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20582
UPDATE t1 SET f_int1 = @cur_value1
 
20583
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20584
        
 
20585
# check single-4 success:       1
 
20586
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20587
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20588
        
 
20589
# check single-5 success:       1
 
20590
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20591
        
 
20592
# check single-6 success:       1
 
20593
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20594
        
 
20595
# check single-7 success:       1
 
20596
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20597
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20598
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20599
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20600
f_charbig = '#NULL#';
 
20601
INSERT INTO t1
 
20602
SET f_int1 = NULL , f_int2 = -@max_row,
 
20603
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20604
f_charbig = '#NULL#';
 
20605
# check null success:    1
 
20606
        
 
20607
# check null-1 success:         1
 
20608
UPDATE t1 SET f_int1 = -@max_row
 
20609
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20610
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20611
        
 
20612
# check null-2 success:         1
 
20613
UPDATE t1 SET f_int1 = NULL
 
20614
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20615
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20616
        
 
20617
# check null-3 success:         1
 
20618
DELETE FROM t1
 
20619
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20620
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20621
        
 
20622
# check null-4 success:         1
 
20623
DELETE FROM t1
 
20624
WHERE f_int1 = 0 AND f_int2 = 0
 
20625
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20626
AND f_charbig = '#NULL#';
 
20627
SET AUTOCOMMIT= 0;
 
20628
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20629
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20630
FROM t0_template source_tab
 
20631
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20632
        
 
20633
# check transactions-1 success:         1
 
20634
COMMIT WORK;
 
20635
        
 
20636
# check transactions-2 success:         1
 
20637
ROLLBACK WORK;
 
20638
        
 
20639
# check transactions-3 success:         1
 
20640
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20641
COMMIT WORK;
 
20642
ROLLBACK WORK;
 
20643
        
 
20644
# check transactions-4 success:         1
 
20645
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20646
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20647
FROM t0_template source_tab
 
20648
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20649
        
 
20650
# check transactions-5 success:         1
 
20651
ROLLBACK WORK;
 
20652
Warnings:
 
20653
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
20654
        
 
20655
# check transactions-6 success:         1
 
20656
# INFO: Storage engine used for t1 seems to be not transactional.
 
20657
COMMIT;
 
20658
        
 
20659
# check transactions-7 success:         1
 
20660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20661
COMMIT WORK;
 
20662
SET @@session.sql_mode = 'traditional';
 
20663
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20664
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20665
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20666
'', '', 'was inserted' FROM t0_template
 
20667
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20668
ERROR 22012: Division by 0
 
20669
COMMIT;
 
20670
        
 
20671
# check transactions-8 success:         1
 
20672
# INFO: Storage engine used for t1 seems to be unable to revert
 
20673
#       changes made by the failing statement.
 
20674
SET @@session.sql_mode = '';
 
20675
SET AUTOCOMMIT= 1;
 
20676
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20677
COMMIT WORK;
 
20678
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20679
        
 
20680
# check special-1 success:      1
 
20681
UPDATE t1 SET f_charbig = '';
 
20682
        
 
20683
# check special-2 success:      1
 
20684
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20685
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20686
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20689
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20690
'just inserted' FROM t0_template
 
20691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20692
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20693
BEGIN
 
20694
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20695
f_charbig = 'updated by trigger'
 
20696
      WHERE f_int1 = new.f_int1;
 
20697
END|
 
20698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20699
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20701
        
 
20702
# check trigger-1 success:      1
 
20703
DROP TRIGGER trg_1;
 
20704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20706
f_charbig = 'just inserted'
 
20707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20708
DELETE FROM t0_aux
 
20709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20712
'just inserted' FROM t0_template
 
20713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20714
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20715
BEGIN
 
20716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20717
f_charbig = 'updated by trigger'
 
20718
      WHERE f_int1 = new.f_int1;
 
20719
END|
 
20720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20721
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20723
        
 
20724
# check trigger-2 success:      1
 
20725
DROP TRIGGER trg_1;
 
20726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20728
f_charbig = 'just inserted'
 
20729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20730
DELETE FROM t0_aux
 
20731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20734
'just inserted' FROM t0_template
 
20735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20736
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20737
BEGIN
 
20738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20739
f_charbig = 'updated by trigger'
 
20740
      WHERE f_int1 = new.f_int1;
 
20741
END|
 
20742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20744
        
 
20745
# check trigger-3 success:      1
 
20746
DROP TRIGGER trg_1;
 
20747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20749
f_charbig = 'just inserted'
 
20750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20751
DELETE FROM t0_aux
 
20752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20755
'just inserted' FROM t0_template
 
20756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20757
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20758
BEGIN
 
20759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20760
f_charbig = 'updated by trigger'
 
20761
      WHERE f_int1 = - old.f_int1;
 
20762
END|
 
20763
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20765
        
 
20766
# check trigger-4 success:      1
 
20767
DROP TRIGGER trg_1;
 
20768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20770
f_charbig = 'just inserted'
 
20771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20772
DELETE FROM t0_aux
 
20773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20776
'just inserted' FROM t0_template
 
20777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20778
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20779
BEGIN
 
20780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20781
f_charbig = 'updated by trigger'
 
20782
      WHERE f_int1 = new.f_int1;
 
20783
END|
 
20784
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20786
        
 
20787
# check trigger-5 success:      1
 
20788
DROP TRIGGER trg_1;
 
20789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20791
f_charbig = 'just inserted'
 
20792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20793
DELETE FROM t0_aux
 
20794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20797
'just inserted' FROM t0_template
 
20798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20799
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20800
BEGIN
 
20801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20802
f_charbig = 'updated by trigger'
 
20803
      WHERE f_int1 = - old.f_int1;
 
20804
END|
 
20805
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20807
        
 
20808
# check trigger-6 success:      1
 
20809
DROP TRIGGER trg_1;
 
20810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20812
f_charbig = 'just inserted'
 
20813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20814
DELETE FROM t0_aux
 
20815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20818
'just inserted' FROM t0_template
 
20819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20820
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20821
BEGIN
 
20822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20823
f_charbig = 'updated by trigger'
 
20824
      WHERE f_int1 = - old.f_int1;
 
20825
END|
 
20826
DELETE FROM t0_aux
 
20827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20828
        
 
20829
# check trigger-7 success:      1
 
20830
DROP TRIGGER trg_1;
 
20831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20833
f_charbig = 'just inserted'
 
20834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20835
DELETE FROM t0_aux
 
20836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20839
'just inserted' FROM t0_template
 
20840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20841
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20842
BEGIN
 
20843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20844
f_charbig = 'updated by trigger'
 
20845
      WHERE f_int1 = - old.f_int1;
 
20846
END|
 
20847
DELETE FROM t0_aux
 
20848
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20849
        
 
20850
# check trigger-8 success:      1
 
20851
DROP TRIGGER trg_1;
 
20852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20854
f_charbig = 'just inserted'
 
20855
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20856
DELETE FROM t0_aux
 
20857
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20858
DELETE FROM t1
 
20859
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20860
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20861
BEGIN
 
20862
SET new.f_int1 = old.f_int1 + @max_row,
 
20863
new.f_int2 = old.f_int2 - @max_row,
 
20864
new.f_charbig = '####updated per update trigger####';
 
20865
END|
 
20866
UPDATE t1
 
20867
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20868
f_charbig = '####updated per update statement itself####';
 
20869
        
 
20870
# check trigger-9 success:      1
 
20871
DROP TRIGGER trg_2;
 
20872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20874
f_charbig = CONCAT('===',f_char1,'===');
 
20875
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20876
BEGIN
 
20877
SET new.f_int1 = new.f_int1 + @max_row,
 
20878
new.f_int2 = new.f_int2 - @max_row,
 
20879
new.f_charbig = '####updated per update trigger####';
 
20880
END|
 
20881
UPDATE t1
 
20882
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20883
f_charbig = '####updated per update statement itself####';
 
20884
        
 
20885
# check trigger-10 success:     1
 
20886
DROP TRIGGER trg_2;
 
20887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20889
f_charbig = CONCAT('===',f_char1,'===');
 
20890
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20891
BEGIN
 
20892
SET new.f_int1 = @my_max1 + @counter,
 
20893
new.f_int2 = @my_min2 - @counter,
 
20894
new.f_charbig = '####updated per insert trigger####';
 
20895
SET @counter = @counter + 1;
 
20896
END|
 
20897
SET @counter = 1;
 
20898
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20900
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20901
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20903
ORDER BY f_int1;
 
20904
DROP TRIGGER trg_3;
 
20905
        
 
20906
# check trigger-11 success:     1
 
20907
DELETE FROM t1
 
20908
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20909
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20910
AND f_charbig = '####updated per insert trigger####';
 
20911
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20912
BEGIN
 
20913
SET new.f_int1 = @my_max1 + @counter,
 
20914
new.f_int2 = @my_min2 - @counter,
 
20915
new.f_charbig = '####updated per insert trigger####';
 
20916
SET @counter = @counter + 1;
 
20917
END|
 
20918
SET @counter = 1;
 
20919
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20920
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20921
SELECT CAST(f_int1 AS CHAR),
 
20922
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20924
ORDER BY f_int1;
 
20925
DROP TRIGGER trg_3;
 
20926
        
 
20927
# check trigger-12 success:     1
 
20928
DELETE FROM t1
 
20929
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20930
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20931
AND f_charbig = '####updated per insert trigger####';
 
20932
ANALYZE  TABLE t1;
 
20933
Table   Op      Msg_type        Msg_text
 
20934
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
20935
CHECK    TABLE t1 EXTENDED;
 
20936
Table   Op      Msg_type        Msg_text
 
20937
test.t1 check   note    The storage engine for the table doesn't support check
 
20938
CHECKSUM TABLE t1 EXTENDED;
 
20939
Table   Checksum
 
20940
test.t1 <some_value>
 
20941
OPTIMIZE TABLE t1;
 
20942
Table   Op      Msg_type        Msg_text
 
20943
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
20944
# check layout success:    1
 
20945
REPAIR   TABLE t1 EXTENDED;
 
20946
Table   Op      Msg_type        Msg_text
 
20947
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20948
# check layout success:    1
 
20949
TRUNCATE t1;
 
20950
        
 
20951
# check TRUNCATE success:       1
 
20952
# check layout success:    1
 
20953
# End usability test (inc/partition_check.inc)
 
20954
DROP TABLE t1;
 
20955
#------------------------------------------------------------------------
 
20956
#  2.2   Partitioning function contains two columns (f_int1,f_int2)
 
20957
#------------------------------------------------------------------------
 
20958
#  2.2.2 DROP UNIQUE INDEX consisting of two columns
 
20959
DROP TABLE IF EXISTS t1;
 
20960
CREATE TABLE t1 (
 
20961
f_int1 INTEGER,
 
20962
f_int2 INTEGER,
 
20963
f_char1 CHAR(20),
 
20964
f_char2 CHAR(20),
 
20965
f_charbig VARCHAR(1000)
 
20966
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
20967
)
 
20968
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
20969
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20970
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20971
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20972
ALTER TABLE t1 DROP INDEX uidx1;
 
20973
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20974
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20975
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20976
# Start usability test (inc/partition_check.inc)
 
20977
create_command
 
20978
SHOW CREATE TABLE t1;
 
20979
Table   Create Table
 
20980
t1      CREATE TABLE `t1` (
 
20981
  `f_int1` int(11) DEFAULT NULL,
 
20982
  `f_int2` int(11) DEFAULT NULL,
 
20983
  `f_char1` char(20) DEFAULT NULL,
 
20984
  `f_char2` char(20) DEFAULT NULL,
 
20985
  `f_charbig` varchar(1000) DEFAULT NULL
 
20986
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
20987
 
 
20988
unified filelist
 
20989
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
20990
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
20991
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
20992
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
20993
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
20994
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
20995
 
 
20996
# check prerequisites-1 success:    1
 
20997
# check COUNT(*) success:    1
 
20998
# check MIN/MAX(f_int1) success:    1
 
20999
# check MIN/MAX(f_int2) success:    1
 
21000
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21001
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21002
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21003
WHERE f_int1 IN (2,3);
 
21004
# check prerequisites-3 success:    1
 
21005
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21006
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21007
# check read via f_int1 success: 1
 
21008
# check read via f_int2 success: 1
 
21009
        
 
21010
# check multiple-1 success:     1
 
21011
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21012
        
 
21013
# check multiple-2 success:     1
 
21014
INSERT INTO t1 SELECT * FROM t0_template
 
21015
WHERE MOD(f_int1,3) = 0;
 
21016
        
 
21017
# check multiple-3 success:     1
 
21018
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21019
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21020
AND @max_row_div2 + @max_row_div4;
 
21021
        
 
21022
# check multiple-4 success:     1
 
21023
DELETE FROM t1
 
21024
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21025
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21026
        
 
21027
# check multiple-5 success:     1
 
21028
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21029
INSERT INTO t1
 
21030
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21031
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21032
f_charbig = '#SINGLE#';
 
21033
        
 
21034
# check single-1 success:       1
 
21035
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21036
INSERT INTO t1
 
21037
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21038
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21039
f_charbig = '#SINGLE#';
 
21040
        
 
21041
# check single-2 success:       1
 
21042
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21043
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21044
UPDATE t1 SET f_int1 = @cur_value2
 
21045
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21046
        
 
21047
# check single-3 success:       1
 
21048
SET @cur_value1= -1;
 
21049
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21050
UPDATE t1 SET f_int1 = @cur_value1
 
21051
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21052
        
 
21053
# check single-4 success:       1
 
21054
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21055
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21056
        
 
21057
# check single-5 success:       1
 
21058
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21059
        
 
21060
# check single-6 success:       1
 
21061
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21062
        
 
21063
# check single-7 success:       1
 
21064
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
21065
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21066
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21067
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21068
f_charbig = '#NULL#';
 
21069
INSERT INTO t1
 
21070
SET f_int1 = NULL , f_int2 = -@max_row,
 
21071
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21072
f_charbig = '#NULL#';
 
21073
# check null success:    1
 
21074
        
 
21075
# check null-1 success:         1
 
21076
UPDATE t1 SET f_int1 = -@max_row
 
21077
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21078
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21079
        
 
21080
# check null-2 success:         1
 
21081
UPDATE t1 SET f_int1 = NULL
 
21082
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21083
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21084
        
 
21085
# check null-3 success:         1
 
21086
DELETE FROM t1
 
21087
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21088
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21089
        
 
21090
# check null-4 success:         1
 
21091
DELETE FROM t1
 
21092
WHERE f_int1 = 0 AND f_int2 = 0
 
21093
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21094
AND f_charbig = '#NULL#';
 
21095
SET AUTOCOMMIT= 0;
 
21096
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21097
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21098
FROM t0_template source_tab
 
21099
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21100
        
 
21101
# check transactions-1 success:         1
 
21102
COMMIT WORK;
 
21103
        
 
21104
# check transactions-2 success:         1
 
21105
ROLLBACK WORK;
 
21106
        
 
21107
# check transactions-3 success:         1
 
21108
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21109
COMMIT WORK;
 
21110
ROLLBACK WORK;
 
21111
        
 
21112
# check transactions-4 success:         1
 
21113
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21114
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21115
FROM t0_template source_tab
 
21116
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21117
        
 
21118
# check transactions-5 success:         1
 
21119
ROLLBACK WORK;
 
21120
Warnings:
 
21121
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
21122
        
 
21123
# check transactions-6 success:         1
 
21124
# INFO: Storage engine used for t1 seems to be not transactional.
 
21125
COMMIT;
 
21126
        
 
21127
# check transactions-7 success:         1
 
21128
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21129
COMMIT WORK;
 
21130
SET @@session.sql_mode = 'traditional';
 
21131
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21132
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21133
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21134
'', '', 'was inserted' FROM t0_template
 
21135
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21136
ERROR 22012: Division by 0
 
21137
COMMIT;
 
21138
        
 
21139
# check transactions-8 success:         1
 
21140
# INFO: Storage engine used for t1 seems to be unable to revert
 
21141
#       changes made by the failing statement.
 
21142
SET @@session.sql_mode = '';
 
21143
SET AUTOCOMMIT= 1;
 
21144
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21145
COMMIT WORK;
 
21146
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21147
        
 
21148
# check special-1 success:      1
 
21149
UPDATE t1 SET f_charbig = '';
 
21150
        
 
21151
# check special-2 success:      1
 
21152
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21153
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21154
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21156
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21157
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21158
'just inserted' FROM t0_template
 
21159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21160
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21161
BEGIN
 
21162
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21163
f_charbig = 'updated by trigger'
 
21164
      WHERE f_int1 = new.f_int1;
 
21165
END|
 
21166
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21167
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21169
        
 
21170
# check trigger-1 success:      1
 
21171
DROP TRIGGER trg_1;
 
21172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21173
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21174
f_charbig = 'just inserted'
 
21175
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21176
DELETE FROM t0_aux
 
21177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21180
'just inserted' FROM t0_template
 
21181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21182
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21183
BEGIN
 
21184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21185
f_charbig = 'updated by trigger'
 
21186
      WHERE f_int1 = new.f_int1;
 
21187
END|
 
21188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21189
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21191
        
 
21192
# check trigger-2 success:      1
 
21193
DROP TRIGGER trg_1;
 
21194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21195
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21196
f_charbig = 'just inserted'
 
21197
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21198
DELETE FROM t0_aux
 
21199
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21202
'just inserted' FROM t0_template
 
21203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21204
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21205
BEGIN
 
21206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21207
f_charbig = 'updated by trigger'
 
21208
      WHERE f_int1 = new.f_int1;
 
21209
END|
 
21210
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21211
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21212
        
 
21213
# check trigger-3 success:      1
 
21214
DROP TRIGGER trg_1;
 
21215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21217
f_charbig = 'just inserted'
 
21218
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21219
DELETE FROM t0_aux
 
21220
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21223
'just inserted' FROM t0_template
 
21224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21225
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21226
BEGIN
 
21227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21228
f_charbig = 'updated by trigger'
 
21229
      WHERE f_int1 = - old.f_int1;
 
21230
END|
 
21231
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21232
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21233
        
 
21234
# check trigger-4 success:      1
 
21235
DROP TRIGGER trg_1;
 
21236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21238
f_charbig = 'just inserted'
 
21239
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21240
DELETE FROM t0_aux
 
21241
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21242
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21243
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21244
'just inserted' FROM t0_template
 
21245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21246
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21247
BEGIN
 
21248
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21249
f_charbig = 'updated by trigger'
 
21250
      WHERE f_int1 = new.f_int1;
 
21251
END|
 
21252
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21253
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21254
        
 
21255
# check trigger-5 success:      1
 
21256
DROP TRIGGER trg_1;
 
21257
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21258
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21259
f_charbig = 'just inserted'
 
21260
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21261
DELETE FROM t0_aux
 
21262
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21263
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21264
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21265
'just inserted' FROM t0_template
 
21266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21267
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21268
BEGIN
 
21269
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21270
f_charbig = 'updated by trigger'
 
21271
      WHERE f_int1 = - old.f_int1;
 
21272
END|
 
21273
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21274
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21275
        
 
21276
# check trigger-6 success:      1
 
21277
DROP TRIGGER trg_1;
 
21278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21280
f_charbig = 'just inserted'
 
21281
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21282
DELETE FROM t0_aux
 
21283
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21284
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21285
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21286
'just inserted' FROM t0_template
 
21287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21288
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21289
BEGIN
 
21290
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21291
f_charbig = 'updated by trigger'
 
21292
      WHERE f_int1 = - old.f_int1;
 
21293
END|
 
21294
DELETE FROM t0_aux
 
21295
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21296
        
 
21297
# check trigger-7 success:      1
 
21298
DROP TRIGGER trg_1;
 
21299
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21300
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21301
f_charbig = 'just inserted'
 
21302
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21303
DELETE FROM t0_aux
 
21304
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21305
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21306
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21307
'just inserted' FROM t0_template
 
21308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21309
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21310
BEGIN
 
21311
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21312
f_charbig = 'updated by trigger'
 
21313
      WHERE f_int1 = - old.f_int1;
 
21314
END|
 
21315
DELETE FROM t0_aux
 
21316
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21317
        
 
21318
# check trigger-8 success:      1
 
21319
DROP TRIGGER trg_1;
 
21320
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21321
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21322
f_charbig = 'just inserted'
 
21323
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21324
DELETE FROM t0_aux
 
21325
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21326
DELETE FROM t1
 
21327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21328
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21329
BEGIN
 
21330
SET new.f_int1 = old.f_int1 + @max_row,
 
21331
new.f_int2 = old.f_int2 - @max_row,
 
21332
new.f_charbig = '####updated per update trigger####';
 
21333
END|
 
21334
UPDATE t1
 
21335
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21336
f_charbig = '####updated per update statement itself####';
 
21337
        
 
21338
# check trigger-9 success:      1
 
21339
DROP TRIGGER trg_2;
 
21340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21342
f_charbig = CONCAT('===',f_char1,'===');
 
21343
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21344
BEGIN
 
21345
SET new.f_int1 = new.f_int1 + @max_row,
 
21346
new.f_int2 = new.f_int2 - @max_row,
 
21347
new.f_charbig = '####updated per update trigger####';
 
21348
END|
 
21349
UPDATE t1
 
21350
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21351
f_charbig = '####updated per update statement itself####';
 
21352
        
 
21353
# check trigger-10 success:     1
 
21354
DROP TRIGGER trg_2;
 
21355
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21356
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21357
f_charbig = CONCAT('===',f_char1,'===');
 
21358
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21359
BEGIN
 
21360
SET new.f_int1 = @my_max1 + @counter,
 
21361
new.f_int2 = @my_min2 - @counter,
 
21362
new.f_charbig = '####updated per insert trigger####';
 
21363
SET @counter = @counter + 1;
 
21364
END|
 
21365
SET @counter = 1;
 
21366
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21367
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21368
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21369
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21371
ORDER BY f_int1;
 
21372
DROP TRIGGER trg_3;
 
21373
        
 
21374
# check trigger-11 success:     1
 
21375
DELETE FROM t1
 
21376
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21377
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21378
AND f_charbig = '####updated per insert trigger####';
 
21379
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21380
BEGIN
 
21381
SET new.f_int1 = @my_max1 + @counter,
 
21382
new.f_int2 = @my_min2 - @counter,
 
21383
new.f_charbig = '####updated per insert trigger####';
 
21384
SET @counter = @counter + 1;
 
21385
END|
 
21386
SET @counter = 1;
 
21387
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21388
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21389
SELECT CAST(f_int1 AS CHAR),
 
21390
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21391
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21392
ORDER BY f_int1;
 
21393
DROP TRIGGER trg_3;
 
21394
        
 
21395
# check trigger-12 success:     1
 
21396
DELETE FROM t1
 
21397
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21398
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21399
AND f_charbig = '####updated per insert trigger####';
 
21400
ANALYZE  TABLE t1;
 
21401
Table   Op      Msg_type        Msg_text
 
21402
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
21403
CHECK    TABLE t1 EXTENDED;
 
21404
Table   Op      Msg_type        Msg_text
 
21405
test.t1 check   note    The storage engine for the table doesn't support check
 
21406
CHECKSUM TABLE t1 EXTENDED;
 
21407
Table   Checksum
 
21408
test.t1 <some_value>
 
21409
OPTIMIZE TABLE t1;
 
21410
Table   Op      Msg_type        Msg_text
 
21411
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
21412
# check layout success:    1
 
21413
REPAIR   TABLE t1 EXTENDED;
 
21414
Table   Op      Msg_type        Msg_text
 
21415
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21416
# check layout success:    1
 
21417
TRUNCATE t1;
 
21418
        
 
21419
# check TRUNCATE success:       1
 
21420
# check layout success:    1
 
21421
# End usability test (inc/partition_check.inc)
 
21422
DROP TABLE t1;
 
21423
CREATE TABLE t1 (
 
21424
f_int1 INTEGER,
 
21425
f_int2 INTEGER,
 
21426
f_char1 CHAR(20),
 
21427
f_char2 CHAR(20),
 
21428
f_charbig VARCHAR(1000)
 
21429
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
21430
)
 
21431
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
21432
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21433
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21434
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21435
ALTER TABLE t1 DROP INDEX uidx1;
 
21436
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21437
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21438
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21439
# Start usability test (inc/partition_check.inc)
 
21440
create_command
 
21441
SHOW CREATE TABLE t1;
 
21442
Table   Create Table
 
21443
t1      CREATE TABLE `t1` (
 
21444
  `f_int1` int(11) DEFAULT NULL,
 
21445
  `f_int2` int(11) DEFAULT NULL,
 
21446
  `f_char1` char(20) DEFAULT NULL,
 
21447
  `f_char2` char(20) DEFAULT NULL,
 
21448
  `f_charbig` varchar(1000) DEFAULT NULL
 
21449
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
21450
 
 
21451
unified filelist
 
21452
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
21453
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
21454
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
21455
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
21456
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
21457
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
21458
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
21459
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
21460
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
21461
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
21462
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
21463
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
21464
 
 
21465
# check prerequisites-1 success:    1
 
21466
# check COUNT(*) success:    1
 
21467
# check MIN/MAX(f_int1) success:    1
 
21468
# check MIN/MAX(f_int2) success:    1
 
21469
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21470
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21471
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21472
WHERE f_int1 IN (2,3);
 
21473
# check prerequisites-3 success:    1
 
21474
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21475
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21476
# check read via f_int1 success: 1
 
21477
# check read via f_int2 success: 1
 
21478
        
 
21479
# check multiple-1 success:     1
 
21480
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21481
        
 
21482
# check multiple-2 success:     1
 
21483
INSERT INTO t1 SELECT * FROM t0_template
 
21484
WHERE MOD(f_int1,3) = 0;
 
21485
        
 
21486
# check multiple-3 success:     1
 
21487
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21488
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21489
AND @max_row_div2 + @max_row_div4;
 
21490
        
 
21491
# check multiple-4 success:     1
 
21492
DELETE FROM t1
 
21493
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21494
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21495
        
 
21496
# check multiple-5 success:     1
 
21497
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21498
INSERT INTO t1
 
21499
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21500
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21501
f_charbig = '#SINGLE#';
 
21502
        
 
21503
# check single-1 success:       1
 
21504
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21505
INSERT INTO t1
 
21506
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21507
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21508
f_charbig = '#SINGLE#';
 
21509
        
 
21510
# check single-2 success:       1
 
21511
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21512
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21513
UPDATE t1 SET f_int1 = @cur_value2
 
21514
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21515
        
 
21516
# check single-3 success:       1
 
21517
SET @cur_value1= -1;
 
21518
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21519
UPDATE t1 SET f_int1 = @cur_value1
 
21520
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21521
        
 
21522
# check single-4 success:       1
 
21523
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21524
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21525
        
 
21526
# check single-5 success:       1
 
21527
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21528
        
 
21529
# check single-6 success:       1
 
21530
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21531
        
 
21532
# check single-7 success:       1
 
21533
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
21534
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21535
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21536
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21537
f_charbig = '#NULL#';
 
21538
INSERT INTO t1
 
21539
SET f_int1 = NULL , f_int2 = -@max_row,
 
21540
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21541
f_charbig = '#NULL#';
 
21542
# check null success:    1
 
21543
        
 
21544
# check null-1 success:         1
 
21545
UPDATE t1 SET f_int1 = -@max_row
 
21546
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21547
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21548
        
 
21549
# check null-2 success:         1
 
21550
UPDATE t1 SET f_int1 = NULL
 
21551
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21552
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21553
        
 
21554
# check null-3 success:         1
 
21555
DELETE FROM t1
 
21556
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21557
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21558
        
 
21559
# check null-4 success:         1
 
21560
DELETE FROM t1
 
21561
WHERE f_int1 = 0 AND f_int2 = 0
 
21562
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21563
AND f_charbig = '#NULL#';
 
21564
SET AUTOCOMMIT= 0;
 
21565
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21566
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21567
FROM t0_template source_tab
 
21568
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21569
        
 
21570
# check transactions-1 success:         1
 
21571
COMMIT WORK;
 
21572
        
 
21573
# check transactions-2 success:         1
 
21574
ROLLBACK WORK;
 
21575
        
 
21576
# check transactions-3 success:         1
 
21577
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21578
COMMIT WORK;
 
21579
ROLLBACK WORK;
 
21580
        
 
21581
# check transactions-4 success:         1
 
21582
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21583
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21584
FROM t0_template source_tab
 
21585
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21586
        
 
21587
# check transactions-5 success:         1
 
21588
ROLLBACK WORK;
 
21589
Warnings:
 
21590
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
21591
        
 
21592
# check transactions-6 success:         1
 
21593
# INFO: Storage engine used for t1 seems to be not transactional.
 
21594
COMMIT;
 
21595
        
 
21596
# check transactions-7 success:         1
 
21597
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21598
COMMIT WORK;
 
21599
SET @@session.sql_mode = 'traditional';
 
21600
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21601
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21602
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21603
'', '', 'was inserted' FROM t0_template
 
21604
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21605
ERROR 22012: Division by 0
 
21606
COMMIT;
 
21607
        
 
21608
# check transactions-8 success:         1
 
21609
# INFO: Storage engine used for t1 seems to be unable to revert
 
21610
#       changes made by the failing statement.
 
21611
SET @@session.sql_mode = '';
 
21612
SET AUTOCOMMIT= 1;
 
21613
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21614
COMMIT WORK;
 
21615
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21616
        
 
21617
# check special-1 success:      1
 
21618
UPDATE t1 SET f_charbig = '';
 
21619
        
 
21620
# check special-2 success:      1
 
21621
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21622
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21623
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21624
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21625
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21626
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21627
'just inserted' FROM t0_template
 
21628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21629
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21630
BEGIN
 
21631
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21632
f_charbig = 'updated by trigger'
 
21633
      WHERE f_int1 = new.f_int1;
 
21634
END|
 
21635
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21636
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21638
        
 
21639
# check trigger-1 success:      1
 
21640
DROP TRIGGER trg_1;
 
21641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21643
f_charbig = 'just inserted'
 
21644
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21645
DELETE FROM t0_aux
 
21646
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21647
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21648
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21649
'just inserted' FROM t0_template
 
21650
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21651
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21652
BEGIN
 
21653
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21654
f_charbig = 'updated by trigger'
 
21655
      WHERE f_int1 = new.f_int1;
 
21656
END|
 
21657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21658
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21660
        
 
21661
# check trigger-2 success:      1
 
21662
DROP TRIGGER trg_1;
 
21663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21665
f_charbig = 'just inserted'
 
21666
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21667
DELETE FROM t0_aux
 
21668
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21670
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21671
'just inserted' FROM t0_template
 
21672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21673
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21674
BEGIN
 
21675
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21676
f_charbig = 'updated by trigger'
 
21677
      WHERE f_int1 = new.f_int1;
 
21678
END|
 
21679
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21680
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21681
        
 
21682
# check trigger-3 success:      1
 
21683
DROP TRIGGER trg_1;
 
21684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21686
f_charbig = 'just inserted'
 
21687
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21688
DELETE FROM t0_aux
 
21689
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21690
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21691
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21692
'just inserted' FROM t0_template
 
21693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21694
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21695
BEGIN
 
21696
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21697
f_charbig = 'updated by trigger'
 
21698
      WHERE f_int1 = - old.f_int1;
 
21699
END|
 
21700
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21701
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21702
        
 
21703
# check trigger-4 success:      1
 
21704
DROP TRIGGER trg_1;
 
21705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21707
f_charbig = 'just inserted'
 
21708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21709
DELETE FROM t0_aux
 
21710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21711
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21712
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21713
'just inserted' FROM t0_template
 
21714
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21715
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21716
BEGIN
 
21717
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21718
f_charbig = 'updated by trigger'
 
21719
      WHERE f_int1 = new.f_int1;
 
21720
END|
 
21721
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21722
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21723
        
 
21724
# check trigger-5 success:      1
 
21725
DROP TRIGGER trg_1;
 
21726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21728
f_charbig = 'just inserted'
 
21729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21730
DELETE FROM t0_aux
 
21731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21734
'just inserted' FROM t0_template
 
21735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21736
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21737
BEGIN
 
21738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21739
f_charbig = 'updated by trigger'
 
21740
      WHERE f_int1 = - old.f_int1;
 
21741
END|
 
21742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21744
        
 
21745
# check trigger-6 success:      1
 
21746
DROP TRIGGER trg_1;
 
21747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21749
f_charbig = 'just inserted'
 
21750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21751
DELETE FROM t0_aux
 
21752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21755
'just inserted' FROM t0_template
 
21756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21757
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21758
BEGIN
 
21759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21760
f_charbig = 'updated by trigger'
 
21761
      WHERE f_int1 = - old.f_int1;
 
21762
END|
 
21763
DELETE FROM t0_aux
 
21764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21765
        
 
21766
# check trigger-7 success:      1
 
21767
DROP TRIGGER trg_1;
 
21768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21770
f_charbig = 'just inserted'
 
21771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21772
DELETE FROM t0_aux
 
21773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21776
'just inserted' FROM t0_template
 
21777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21778
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21779
BEGIN
 
21780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21781
f_charbig = 'updated by trigger'
 
21782
      WHERE f_int1 = - old.f_int1;
 
21783
END|
 
21784
DELETE FROM t0_aux
 
21785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21786
        
 
21787
# check trigger-8 success:      1
 
21788
DROP TRIGGER trg_1;
 
21789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21791
f_charbig = 'just inserted'
 
21792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21793
DELETE FROM t0_aux
 
21794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21795
DELETE FROM t1
 
21796
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21797
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21798
BEGIN
 
21799
SET new.f_int1 = old.f_int1 + @max_row,
 
21800
new.f_int2 = old.f_int2 - @max_row,
 
21801
new.f_charbig = '####updated per update trigger####';
 
21802
END|
 
21803
UPDATE t1
 
21804
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21805
f_charbig = '####updated per update statement itself####';
 
21806
        
 
21807
# check trigger-9 success:      1
 
21808
DROP TRIGGER trg_2;
 
21809
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21810
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21811
f_charbig = CONCAT('===',f_char1,'===');
 
21812
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21813
BEGIN
 
21814
SET new.f_int1 = new.f_int1 + @max_row,
 
21815
new.f_int2 = new.f_int2 - @max_row,
 
21816
new.f_charbig = '####updated per update trigger####';
 
21817
END|
 
21818
UPDATE t1
 
21819
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21820
f_charbig = '####updated per update statement itself####';
 
21821
        
 
21822
# check trigger-10 success:     1
 
21823
DROP TRIGGER trg_2;
 
21824
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21825
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21826
f_charbig = CONCAT('===',f_char1,'===');
 
21827
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21828
BEGIN
 
21829
SET new.f_int1 = @my_max1 + @counter,
 
21830
new.f_int2 = @my_min2 - @counter,
 
21831
new.f_charbig = '####updated per insert trigger####';
 
21832
SET @counter = @counter + 1;
 
21833
END|
 
21834
SET @counter = 1;
 
21835
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21836
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21837
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21838
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21839
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21840
ORDER BY f_int1;
 
21841
DROP TRIGGER trg_3;
 
21842
        
 
21843
# check trigger-11 success:     1
 
21844
DELETE FROM t1
 
21845
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21846
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21847
AND f_charbig = '####updated per insert trigger####';
 
21848
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21849
BEGIN
 
21850
SET new.f_int1 = @my_max1 + @counter,
 
21851
new.f_int2 = @my_min2 - @counter,
 
21852
new.f_charbig = '####updated per insert trigger####';
 
21853
SET @counter = @counter + 1;
 
21854
END|
 
21855
SET @counter = 1;
 
21856
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21857
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21858
SELECT CAST(f_int1 AS CHAR),
 
21859
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21860
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21861
ORDER BY f_int1;
 
21862
DROP TRIGGER trg_3;
 
21863
        
 
21864
# check trigger-12 success:     1
 
21865
DELETE FROM t1
 
21866
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21867
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21868
AND f_charbig = '####updated per insert trigger####';
 
21869
ANALYZE  TABLE t1;
 
21870
Table   Op      Msg_type        Msg_text
 
21871
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
21872
CHECK    TABLE t1 EXTENDED;
 
21873
Table   Op      Msg_type        Msg_text
 
21874
test.t1 check   note    The storage engine for the table doesn't support check
 
21875
CHECKSUM TABLE t1 EXTENDED;
 
21876
Table   Checksum
 
21877
test.t1 <some_value>
 
21878
OPTIMIZE TABLE t1;
 
21879
Table   Op      Msg_type        Msg_text
 
21880
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
21881
# check layout success:    1
 
21882
REPAIR   TABLE t1 EXTENDED;
 
21883
Table   Op      Msg_type        Msg_text
 
21884
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21885
# check layout success:    1
 
21886
TRUNCATE t1;
 
21887
        
 
21888
# check TRUNCATE success:       1
 
21889
# check layout success:    1
 
21890
# End usability test (inc/partition_check.inc)
 
21891
DROP TABLE t1;
 
21892
CREATE TABLE t1 (
 
21893
f_int1 INTEGER,
 
21894
f_int2 INTEGER,
 
21895
f_char1 CHAR(20),
 
21896
f_char2 CHAR(20),
 
21897
f_charbig VARCHAR(1000)
 
21898
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
21899
)
 
21900
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
21901
(PARTITION part_3 VALUES IN (-3),
 
21902
PARTITION part_2 VALUES IN (-2),
 
21903
PARTITION part_1 VALUES IN (-1),
 
21904
PARTITION part_N VALUES IN (NULL),
 
21905
PARTITION part0 VALUES IN (0),
 
21906
PARTITION part1 VALUES IN (1),
 
21907
PARTITION part2 VALUES IN (2),
 
21908
PARTITION part3 VALUES IN (3));
 
21909
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21910
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21911
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21912
ALTER TABLE t1 DROP INDEX uidx1;
 
21913
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21914
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21915
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21916
# Start usability test (inc/partition_check.inc)
 
21917
create_command
 
21918
SHOW CREATE TABLE t1;
 
21919
Table   Create Table
 
21920
t1      CREATE TABLE `t1` (
 
21921
  `f_int1` int(11) DEFAULT NULL,
 
21922
  `f_int2` int(11) DEFAULT NULL,
 
21923
  `f_char1` char(20) DEFAULT NULL,
 
21924
  `f_char2` char(20) DEFAULT NULL,
 
21925
  `f_charbig` varchar(1000) DEFAULT NULL
 
21926
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
21927
 
 
21928
unified filelist
 
21929
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
21930
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
21931
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
21932
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
21933
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
21934
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
21935
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
21936
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
21937
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
21938
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
21939
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
21940
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
21941
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
21942
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
21943
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
21944
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
21945
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
21946
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
21947
 
 
21948
# check prerequisites-1 success:    1
 
21949
# check COUNT(*) success:    1
 
21950
# check MIN/MAX(f_int1) success:    1
 
21951
# check MIN/MAX(f_int2) success:    1
 
21952
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21953
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21954
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21955
WHERE f_int1 IN (2,3);
 
21956
# check prerequisites-3 success:    1
 
21957
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21958
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21959
# check read via f_int1 success: 1
 
21960
# check read via f_int2 success: 1
 
21961
        
 
21962
# check multiple-1 success:     1
 
21963
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21964
        
 
21965
# check multiple-2 success:     1
 
21966
INSERT INTO t1 SELECT * FROM t0_template
 
21967
WHERE MOD(f_int1,3) = 0;
 
21968
        
 
21969
# check multiple-3 success:     1
 
21970
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21971
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21972
AND @max_row_div2 + @max_row_div4;
 
21973
        
 
21974
# check multiple-4 success:     1
 
21975
DELETE FROM t1
 
21976
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21977
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21978
        
 
21979
# check multiple-5 success:     1
 
21980
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21981
INSERT INTO t1
 
21982
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21983
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21984
f_charbig = '#SINGLE#';
 
21985
        
 
21986
# check single-1 success:       1
 
21987
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21988
INSERT INTO t1
 
21989
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21990
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21991
f_charbig = '#SINGLE#';
 
21992
        
 
21993
# check single-2 success:       1
 
21994
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21995
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21996
UPDATE t1 SET f_int1 = @cur_value2
 
21997
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21998
        
 
21999
# check single-3 success:       1
 
22000
SET @cur_value1= -1;
 
22001
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22002
UPDATE t1 SET f_int1 = @cur_value1
 
22003
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22004
        
 
22005
# check single-4 success:       1
 
22006
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22007
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22008
        
 
22009
# check single-5 success:       1
 
22010
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22011
        
 
22012
# check single-6 success:       1
 
22013
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22014
        
 
22015
# check single-7 success:       1
 
22016
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22017
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22018
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22019
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22020
f_charbig = '#NULL#';
 
22021
INSERT INTO t1
 
22022
SET f_int1 = NULL , f_int2 = -@max_row,
 
22023
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22024
f_charbig = '#NULL#';
 
22025
# check null success:    1
 
22026
        
 
22027
# check null-1 success:         1
 
22028
UPDATE t1 SET f_int1 = -@max_row
 
22029
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22030
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22031
        
 
22032
# check null-2 success:         1
 
22033
UPDATE t1 SET f_int1 = NULL
 
22034
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22035
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22036
        
 
22037
# check null-3 success:         1
 
22038
DELETE FROM t1
 
22039
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22040
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22041
        
 
22042
# check null-4 success:         1
 
22043
DELETE FROM t1
 
22044
WHERE f_int1 = 0 AND f_int2 = 0
 
22045
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22046
AND f_charbig = '#NULL#';
 
22047
SET AUTOCOMMIT= 0;
 
22048
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22049
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22050
FROM t0_template source_tab
 
22051
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22052
        
 
22053
# check transactions-1 success:         1
 
22054
COMMIT WORK;
 
22055
        
 
22056
# check transactions-2 success:         1
 
22057
ROLLBACK WORK;
 
22058
        
 
22059
# check transactions-3 success:         1
 
22060
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22061
COMMIT WORK;
 
22062
ROLLBACK WORK;
 
22063
        
 
22064
# check transactions-4 success:         1
 
22065
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22066
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22067
FROM t0_template source_tab
 
22068
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22069
        
 
22070
# check transactions-5 success:         1
 
22071
ROLLBACK WORK;
 
22072
Warnings:
 
22073
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
22074
        
 
22075
# check transactions-6 success:         1
 
22076
# INFO: Storage engine used for t1 seems to be not transactional.
 
22077
COMMIT;
 
22078
        
 
22079
# check transactions-7 success:         1
 
22080
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22081
COMMIT WORK;
 
22082
SET @@session.sql_mode = 'traditional';
 
22083
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22084
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22085
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22086
'', '', 'was inserted' FROM t0_template
 
22087
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22088
ERROR 22012: Division by 0
 
22089
COMMIT;
 
22090
        
 
22091
# check transactions-8 success:         1
 
22092
# INFO: Storage engine used for t1 seems to be unable to revert
 
22093
#       changes made by the failing statement.
 
22094
SET @@session.sql_mode = '';
 
22095
SET AUTOCOMMIT= 1;
 
22096
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22097
COMMIT WORK;
 
22098
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22099
        
 
22100
# check special-1 success:      1
 
22101
UPDATE t1 SET f_charbig = '';
 
22102
        
 
22103
# check special-2 success:      1
 
22104
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22105
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22106
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22107
WHERE 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 INSERT 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
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22119
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22121
        
 
22122
# check trigger-1 success:      1
 
22123
DROP TRIGGER trg_1;
 
22124
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22125
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22126
f_charbig = 'just inserted'
 
22127
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22128
DELETE FROM t0_aux
 
22129
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22130
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22131
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22132
'just inserted' FROM t0_template
 
22133
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22134
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22135
BEGIN
 
22136
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22137
f_charbig = 'updated by trigger'
 
22138
      WHERE f_int1 = new.f_int1;
 
22139
END|
 
22140
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22141
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22143
        
 
22144
# check trigger-2 success:      1
 
22145
DROP TRIGGER trg_1;
 
22146
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22147
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22148
f_charbig = 'just inserted'
 
22149
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22150
DELETE FROM t0_aux
 
22151
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22152
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22153
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22154
'just inserted' FROM t0_template
 
22155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22156
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22157
BEGIN
 
22158
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22159
f_charbig = 'updated by trigger'
 
22160
      WHERE f_int1 = new.f_int1;
 
22161
END|
 
22162
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22163
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22164
        
 
22165
# check trigger-3 success:      1
 
22166
DROP TRIGGER trg_1;
 
22167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22169
f_charbig = 'just inserted'
 
22170
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22171
DELETE FROM t0_aux
 
22172
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22173
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22174
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22175
'just inserted' FROM t0_template
 
22176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22177
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22178
BEGIN
 
22179
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22180
f_charbig = 'updated by trigger'
 
22181
      WHERE f_int1 = - old.f_int1;
 
22182
END|
 
22183
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22184
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22185
        
 
22186
# check trigger-4 success:      1
 
22187
DROP TRIGGER trg_1;
 
22188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22190
f_charbig = 'just inserted'
 
22191
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22192
DELETE FROM t0_aux
 
22193
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22194
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22195
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22196
'just inserted' FROM t0_template
 
22197
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22198
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22199
BEGIN
 
22200
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22201
f_charbig = 'updated by trigger'
 
22202
      WHERE f_int1 = new.f_int1;
 
22203
END|
 
22204
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22205
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22206
        
 
22207
# check trigger-5 success:      1
 
22208
DROP TRIGGER trg_1;
 
22209
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22210
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22211
f_charbig = 'just inserted'
 
22212
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22213
DELETE FROM t0_aux
 
22214
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22215
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22216
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22217
'just inserted' FROM t0_template
 
22218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22219
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22220
BEGIN
 
22221
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22222
f_charbig = 'updated by trigger'
 
22223
      WHERE f_int1 = - old.f_int1;
 
22224
END|
 
22225
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22226
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22227
        
 
22228
# check trigger-6 success:      1
 
22229
DROP TRIGGER trg_1;
 
22230
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22231
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22232
f_charbig = 'just inserted'
 
22233
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22234
DELETE FROM t0_aux
 
22235
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22236
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22237
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22238
'just inserted' FROM t0_template
 
22239
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22240
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22241
BEGIN
 
22242
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22243
f_charbig = 'updated by trigger'
 
22244
      WHERE f_int1 = - old.f_int1;
 
22245
END|
 
22246
DELETE FROM t0_aux
 
22247
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22248
        
 
22249
# check trigger-7 success:      1
 
22250
DROP TRIGGER trg_1;
 
22251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22253
f_charbig = 'just inserted'
 
22254
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22255
DELETE FROM t0_aux
 
22256
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22259
'just inserted' FROM t0_template
 
22260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22261
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22262
BEGIN
 
22263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22264
f_charbig = 'updated by trigger'
 
22265
      WHERE f_int1 = - old.f_int1;
 
22266
END|
 
22267
DELETE FROM t0_aux
 
22268
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22269
        
 
22270
# check trigger-8 success:      1
 
22271
DROP TRIGGER trg_1;
 
22272
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22273
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22274
f_charbig = 'just inserted'
 
22275
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22276
DELETE FROM t0_aux
 
22277
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22278
DELETE FROM t1
 
22279
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22280
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22281
BEGIN
 
22282
SET new.f_int1 = old.f_int1 + @max_row,
 
22283
new.f_int2 = old.f_int2 - @max_row,
 
22284
new.f_charbig = '####updated per update trigger####';
 
22285
END|
 
22286
UPDATE t1
 
22287
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22288
f_charbig = '####updated per update statement itself####';
 
22289
        
 
22290
# check trigger-9 success:      1
 
22291
DROP TRIGGER trg_2;
 
22292
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22293
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22294
f_charbig = CONCAT('===',f_char1,'===');
 
22295
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22296
BEGIN
 
22297
SET new.f_int1 = new.f_int1 + @max_row,
 
22298
new.f_int2 = new.f_int2 - @max_row,
 
22299
new.f_charbig = '####updated per update trigger####';
 
22300
END|
 
22301
UPDATE t1
 
22302
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22303
f_charbig = '####updated per update statement itself####';
 
22304
        
 
22305
# check trigger-10 success:     1
 
22306
DROP TRIGGER trg_2;
 
22307
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22308
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22309
f_charbig = CONCAT('===',f_char1,'===');
 
22310
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22311
BEGIN
 
22312
SET new.f_int1 = @my_max1 + @counter,
 
22313
new.f_int2 = @my_min2 - @counter,
 
22314
new.f_charbig = '####updated per insert trigger####';
 
22315
SET @counter = @counter + 1;
 
22316
END|
 
22317
SET @counter = 1;
 
22318
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22319
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22320
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22321
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22323
ORDER BY f_int1;
 
22324
DROP TRIGGER trg_3;
 
22325
        
 
22326
# check trigger-11 success:     1
 
22327
DELETE FROM t1
 
22328
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22329
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22330
AND f_charbig = '####updated per insert trigger####';
 
22331
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22332
BEGIN
 
22333
SET new.f_int1 = @my_max1 + @counter,
 
22334
new.f_int2 = @my_min2 - @counter,
 
22335
new.f_charbig = '####updated per insert trigger####';
 
22336
SET @counter = @counter + 1;
 
22337
END|
 
22338
SET @counter = 1;
 
22339
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22340
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22341
SELECT CAST(f_int1 AS CHAR),
 
22342
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22344
ORDER BY f_int1;
 
22345
DROP TRIGGER trg_3;
 
22346
        
 
22347
# check trigger-12 success:     1
 
22348
DELETE FROM t1
 
22349
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22350
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22351
AND f_charbig = '####updated per insert trigger####';
 
22352
ANALYZE  TABLE t1;
 
22353
Table   Op      Msg_type        Msg_text
 
22354
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
22355
CHECK    TABLE t1 EXTENDED;
 
22356
Table   Op      Msg_type        Msg_text
 
22357
test.t1 check   note    The storage engine for the table doesn't support check
 
22358
CHECKSUM TABLE t1 EXTENDED;
 
22359
Table   Checksum
 
22360
test.t1 <some_value>
 
22361
OPTIMIZE TABLE t1;
 
22362
Table   Op      Msg_type        Msg_text
 
22363
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
22364
# check layout success:    1
 
22365
REPAIR   TABLE t1 EXTENDED;
 
22366
Table   Op      Msg_type        Msg_text
 
22367
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22368
# check layout success:    1
 
22369
TRUNCATE t1;
 
22370
        
 
22371
# check TRUNCATE success:       1
 
22372
# check layout success:    1
 
22373
# End usability test (inc/partition_check.inc)
 
22374
DROP TABLE t1;
 
22375
CREATE TABLE t1 (
 
22376
f_int1 INTEGER,
 
22377
f_int2 INTEGER,
 
22378
f_char1 CHAR(20),
 
22379
f_char2 CHAR(20),
 
22380
f_charbig VARCHAR(1000)
 
22381
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
22382
)
 
22383
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
22384
(PARTITION parta VALUES LESS THAN (0),
 
22385
PARTITION partb VALUES LESS THAN (5),
 
22386
PARTITION partc VALUES LESS THAN (10),
 
22387
PARTITION partd VALUES LESS THAN (10 + 5),
 
22388
PARTITION parte VALUES LESS THAN (20),
 
22389
PARTITION partf VALUES LESS THAN (2147483646));
 
22390
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22391
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22392
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22393
ALTER TABLE t1 DROP INDEX uidx1;
 
22394
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22395
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22396
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22397
# Start usability test (inc/partition_check.inc)
 
22398
create_command
 
22399
SHOW CREATE TABLE t1;
 
22400
Table   Create Table
 
22401
t1      CREATE TABLE `t1` (
 
22402
  `f_int1` int(11) DEFAULT NULL,
 
22403
  `f_int2` int(11) DEFAULT NULL,
 
22404
  `f_char1` char(20) DEFAULT NULL,
 
22405
  `f_char2` char(20) DEFAULT NULL,
 
22406
  `f_charbig` varchar(1000) DEFAULT NULL
 
22407
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
22408
 
 
22409
unified filelist
 
22410
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
22411
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
22412
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
22413
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
22414
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
22415
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
22416
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
22417
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
22418
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
22419
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
22420
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
22421
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
22422
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
22423
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
22424
 
 
22425
# check prerequisites-1 success:    1
 
22426
# check COUNT(*) success:    1
 
22427
# check MIN/MAX(f_int1) success:    1
 
22428
# check MIN/MAX(f_int2) success:    1
 
22429
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22430
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22431
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22432
WHERE f_int1 IN (2,3);
 
22433
# check prerequisites-3 success:    1
 
22434
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22435
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22436
# check read via f_int1 success: 1
 
22437
# check read via f_int2 success: 1
 
22438
        
 
22439
# check multiple-1 success:     1
 
22440
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22441
        
 
22442
# check multiple-2 success:     1
 
22443
INSERT INTO t1 SELECT * FROM t0_template
 
22444
WHERE MOD(f_int1,3) = 0;
 
22445
        
 
22446
# check multiple-3 success:     1
 
22447
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22448
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22449
AND @max_row_div2 + @max_row_div4;
 
22450
        
 
22451
# check multiple-4 success:     1
 
22452
DELETE FROM t1
 
22453
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22454
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22455
        
 
22456
# check multiple-5 success:     1
 
22457
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22458
INSERT INTO t1
 
22459
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22460
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22461
f_charbig = '#SINGLE#';
 
22462
        
 
22463
# check single-1 success:       1
 
22464
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22465
INSERT INTO t1
 
22466
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22467
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22468
f_charbig = '#SINGLE#';
 
22469
        
 
22470
# check single-2 success:       1
 
22471
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22472
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22473
UPDATE t1 SET f_int1 = @cur_value2
 
22474
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22475
        
 
22476
# check single-3 success:       1
 
22477
SET @cur_value1= -1;
 
22478
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22479
UPDATE t1 SET f_int1 = @cur_value1
 
22480
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22481
        
 
22482
# check single-4 success:       1
 
22483
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22484
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22485
        
 
22486
# check single-5 success:       1
 
22487
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22488
        
 
22489
# check single-6 success:       1
 
22490
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22491
ERROR HY000: Table has no partition for value 2147483647
 
22492
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22493
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22494
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22495
f_charbig = '#NULL#';
 
22496
INSERT INTO t1
 
22497
SET f_int1 = NULL , f_int2 = -@max_row,
 
22498
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22499
f_charbig = '#NULL#';
 
22500
# check null success:    1
 
22501
        
 
22502
# check null-1 success:         1
 
22503
UPDATE t1 SET f_int1 = -@max_row
 
22504
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22505
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22506
        
 
22507
# check null-2 success:         1
 
22508
UPDATE t1 SET f_int1 = NULL
 
22509
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22510
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22511
        
 
22512
# check null-3 success:         1
 
22513
DELETE FROM t1
 
22514
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22515
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22516
        
 
22517
# check null-4 success:         1
 
22518
DELETE FROM t1
 
22519
WHERE f_int1 = 0 AND f_int2 = 0
 
22520
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22521
AND f_charbig = '#NULL#';
 
22522
SET AUTOCOMMIT= 0;
 
22523
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22524
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22525
FROM t0_template source_tab
 
22526
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22527
        
 
22528
# check transactions-1 success:         1
 
22529
COMMIT WORK;
 
22530
        
 
22531
# check transactions-2 success:         1
 
22532
ROLLBACK WORK;
 
22533
        
 
22534
# check transactions-3 success:         1
 
22535
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22536
COMMIT WORK;
 
22537
ROLLBACK WORK;
 
22538
        
 
22539
# check transactions-4 success:         1
 
22540
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22541
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22542
FROM t0_template source_tab
 
22543
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22544
        
 
22545
# check transactions-5 success:         1
 
22546
ROLLBACK WORK;
 
22547
Warnings:
 
22548
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
22549
        
 
22550
# check transactions-6 success:         1
 
22551
# INFO: Storage engine used for t1 seems to be not transactional.
 
22552
COMMIT;
 
22553
        
 
22554
# check transactions-7 success:         1
 
22555
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22556
COMMIT WORK;
 
22557
SET @@session.sql_mode = 'traditional';
 
22558
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22559
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22560
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22561
'', '', 'was inserted' FROM t0_template
 
22562
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22563
ERROR 22012: Division by 0
 
22564
COMMIT;
 
22565
        
 
22566
# check transactions-8 success:         1
 
22567
# INFO: Storage engine used for t1 seems to be unable to revert
 
22568
#       changes made by the failing statement.
 
22569
SET @@session.sql_mode = '';
 
22570
SET AUTOCOMMIT= 1;
 
22571
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22572
COMMIT WORK;
 
22573
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22574
        
 
22575
# check special-1 success:      1
 
22576
UPDATE t1 SET f_charbig = '';
 
22577
        
 
22578
# check special-2 success:      1
 
22579
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22580
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22581
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22583
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22584
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22585
'just inserted' FROM t0_template
 
22586
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22587
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22588
BEGIN
 
22589
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22590
f_charbig = 'updated by trigger'
 
22591
      WHERE f_int1 = new.f_int1;
 
22592
END|
 
22593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22594
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22596
        
 
22597
# check trigger-1 success:      1
 
22598
DROP TRIGGER trg_1;
 
22599
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22600
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22601
f_charbig = 'just inserted'
 
22602
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22603
DELETE FROM t0_aux
 
22604
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22605
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22606
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22607
'just inserted' FROM t0_template
 
22608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22609
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22610
BEGIN
 
22611
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22612
f_charbig = 'updated by trigger'
 
22613
      WHERE f_int1 = new.f_int1;
 
22614
END|
 
22615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22616
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22618
        
 
22619
# check trigger-2 success:      1
 
22620
DROP TRIGGER trg_1;
 
22621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22623
f_charbig = 'just inserted'
 
22624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22625
DELETE FROM t0_aux
 
22626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22628
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22629
'just inserted' FROM t0_template
 
22630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22631
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22632
BEGIN
 
22633
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22634
f_charbig = 'updated by trigger'
 
22635
      WHERE f_int1 = new.f_int1;
 
22636
END|
 
22637
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22638
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22639
        
 
22640
# check trigger-3 success:      1
 
22641
DROP TRIGGER trg_1;
 
22642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22644
f_charbig = 'just inserted'
 
22645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22646
DELETE FROM t0_aux
 
22647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22650
'just inserted' FROM t0_template
 
22651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22652
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22653
BEGIN
 
22654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22655
f_charbig = 'updated by trigger'
 
22656
      WHERE f_int1 = - old.f_int1;
 
22657
END|
 
22658
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22659
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22660
        
 
22661
# check trigger-4 success:      1
 
22662
DROP TRIGGER trg_1;
 
22663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22665
f_charbig = 'just inserted'
 
22666
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22667
DELETE FROM t0_aux
 
22668
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22670
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22671
'just inserted' FROM t0_template
 
22672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22673
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22674
BEGIN
 
22675
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22676
f_charbig = 'updated by trigger'
 
22677
      WHERE f_int1 = new.f_int1;
 
22678
END|
 
22679
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22680
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22681
        
 
22682
# check trigger-5 success:      1
 
22683
DROP TRIGGER trg_1;
 
22684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22686
f_charbig = 'just inserted'
 
22687
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22688
DELETE FROM t0_aux
 
22689
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22690
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22691
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22692
'just inserted' FROM t0_template
 
22693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22694
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22695
BEGIN
 
22696
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22697
f_charbig = 'updated by trigger'
 
22698
      WHERE f_int1 = - old.f_int1;
 
22699
END|
 
22700
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22701
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22702
        
 
22703
# check trigger-6 success:      1
 
22704
DROP TRIGGER trg_1;
 
22705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22707
f_charbig = 'just inserted'
 
22708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22709
DELETE FROM t0_aux
 
22710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22711
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22712
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22713
'just inserted' FROM t0_template
 
22714
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22715
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22716
BEGIN
 
22717
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22718
f_charbig = 'updated by trigger'
 
22719
      WHERE f_int1 = - old.f_int1;
 
22720
END|
 
22721
DELETE FROM t0_aux
 
22722
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22723
        
 
22724
# check trigger-7 success:      1
 
22725
DROP TRIGGER trg_1;
 
22726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22728
f_charbig = 'just inserted'
 
22729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22730
DELETE FROM t0_aux
 
22731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22734
'just inserted' FROM t0_template
 
22735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22736
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22737
BEGIN
 
22738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22739
f_charbig = 'updated by trigger'
 
22740
      WHERE f_int1 = - old.f_int1;
 
22741
END|
 
22742
DELETE FROM t0_aux
 
22743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22744
        
 
22745
# check trigger-8 success:      1
 
22746
DROP TRIGGER trg_1;
 
22747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22749
f_charbig = 'just inserted'
 
22750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22751
DELETE FROM t0_aux
 
22752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22753
DELETE FROM t1
 
22754
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22755
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22756
BEGIN
 
22757
SET new.f_int1 = old.f_int1 + @max_row,
 
22758
new.f_int2 = old.f_int2 - @max_row,
 
22759
new.f_charbig = '####updated per update trigger####';
 
22760
END|
 
22761
UPDATE t1
 
22762
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22763
f_charbig = '####updated per update statement itself####';
 
22764
        
 
22765
# check trigger-9 success:      1
 
22766
DROP TRIGGER trg_2;
 
22767
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22768
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22769
f_charbig = CONCAT('===',f_char1,'===');
 
22770
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22771
BEGIN
 
22772
SET new.f_int1 = new.f_int1 + @max_row,
 
22773
new.f_int2 = new.f_int2 - @max_row,
 
22774
new.f_charbig = '####updated per update trigger####';
 
22775
END|
 
22776
UPDATE t1
 
22777
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22778
f_charbig = '####updated per update statement itself####';
 
22779
        
 
22780
# check trigger-10 success:     1
 
22781
DROP TRIGGER trg_2;
 
22782
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22783
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22784
f_charbig = CONCAT('===',f_char1,'===');
 
22785
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22786
BEGIN
 
22787
SET new.f_int1 = @my_max1 + @counter,
 
22788
new.f_int2 = @my_min2 - @counter,
 
22789
new.f_charbig = '####updated per insert trigger####';
 
22790
SET @counter = @counter + 1;
 
22791
END|
 
22792
SET @counter = 1;
 
22793
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22794
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22795
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22796
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22798
ORDER BY f_int1;
 
22799
DROP TRIGGER trg_3;
 
22800
        
 
22801
# check trigger-11 success:     1
 
22802
DELETE FROM t1
 
22803
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22804
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22805
AND f_charbig = '####updated per insert trigger####';
 
22806
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22807
BEGIN
 
22808
SET new.f_int1 = @my_max1 + @counter,
 
22809
new.f_int2 = @my_min2 - @counter,
 
22810
new.f_charbig = '####updated per insert trigger####';
 
22811
SET @counter = @counter + 1;
 
22812
END|
 
22813
SET @counter = 1;
 
22814
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22815
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22816
SELECT CAST(f_int1 AS CHAR),
 
22817
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22818
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22819
ORDER BY f_int1;
 
22820
DROP TRIGGER trg_3;
 
22821
        
 
22822
# check trigger-12 success:     1
 
22823
DELETE FROM t1
 
22824
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22825
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22826
AND f_charbig = '####updated per insert trigger####';
 
22827
ANALYZE  TABLE t1;
 
22828
Table   Op      Msg_type        Msg_text
 
22829
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
22830
CHECK    TABLE t1 EXTENDED;
 
22831
Table   Op      Msg_type        Msg_text
 
22832
test.t1 check   note    The storage engine for the table doesn't support check
 
22833
CHECKSUM TABLE t1 EXTENDED;
 
22834
Table   Checksum
 
22835
test.t1 <some_value>
 
22836
OPTIMIZE TABLE t1;
 
22837
Table   Op      Msg_type        Msg_text
 
22838
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
22839
# check layout success:    1
 
22840
REPAIR   TABLE t1 EXTENDED;
 
22841
Table   Op      Msg_type        Msg_text
 
22842
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22843
# check layout success:    1
 
22844
TRUNCATE t1;
 
22845
        
 
22846
# check TRUNCATE success:       1
 
22847
# check layout success:    1
 
22848
# End usability test (inc/partition_check.inc)
 
22849
DROP TABLE t1;
 
22850
CREATE TABLE t1 (
 
22851
f_int1 INTEGER,
 
22852
f_int2 INTEGER,
 
22853
f_char1 CHAR(20),
 
22854
f_char2 CHAR(20),
 
22855
f_charbig VARCHAR(1000)
 
22856
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
22857
)
 
22858
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
22859
(PARTITION parta VALUES LESS THAN (0),
 
22860
PARTITION partb VALUES LESS THAN (5),
 
22861
PARTITION partc VALUES LESS THAN (10),
 
22862
PARTITION partd VALUES LESS THAN (2147483646));
 
22863
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22864
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22865
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22866
ALTER TABLE t1 DROP INDEX uidx1;
 
22867
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22868
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22869
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22870
# Start usability test (inc/partition_check.inc)
 
22871
create_command
 
22872
SHOW CREATE TABLE t1;
 
22873
Table   Create Table
 
22874
t1      CREATE TABLE `t1` (
 
22875
  `f_int1` int(11) DEFAULT NULL,
 
22876
  `f_int2` int(11) DEFAULT NULL,
 
22877
  `f_char1` char(20) DEFAULT NULL,
 
22878
  `f_char2` char(20) DEFAULT NULL,
 
22879
  `f_charbig` varchar(1000) DEFAULT NULL
 
22880
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
22881
 
 
22882
unified filelist
 
22883
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
22884
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
22885
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
22886
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
22887
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
22888
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
22889
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
22890
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
22891
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
22892
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
22893
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
22894
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
22895
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
22896
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
22897
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
22898
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
22899
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
22900
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
22901
 
 
22902
# check prerequisites-1 success:    1
 
22903
# check COUNT(*) success:    1
 
22904
# check MIN/MAX(f_int1) success:    1
 
22905
# check MIN/MAX(f_int2) success:    1
 
22906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22907
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22908
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22909
WHERE f_int1 IN (2,3);
 
22910
# check prerequisites-3 success:    1
 
22911
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22912
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22913
# check read via f_int1 success: 1
 
22914
# check read via f_int2 success: 1
 
22915
        
 
22916
# check multiple-1 success:     1
 
22917
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22918
        
 
22919
# check multiple-2 success:     1
 
22920
INSERT INTO t1 SELECT * FROM t0_template
 
22921
WHERE MOD(f_int1,3) = 0;
 
22922
        
 
22923
# check multiple-3 success:     1
 
22924
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22925
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22926
AND @max_row_div2 + @max_row_div4;
 
22927
        
 
22928
# check multiple-4 success:     1
 
22929
DELETE FROM t1
 
22930
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22931
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22932
        
 
22933
# check multiple-5 success:     1
 
22934
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22935
INSERT INTO t1
 
22936
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22937
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22938
f_charbig = '#SINGLE#';
 
22939
        
 
22940
# check single-1 success:       1
 
22941
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22942
INSERT INTO t1
 
22943
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22944
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22945
f_charbig = '#SINGLE#';
 
22946
        
 
22947
# check single-2 success:       1
 
22948
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22949
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22950
UPDATE t1 SET f_int1 = @cur_value2
 
22951
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22952
        
 
22953
# check single-3 success:       1
 
22954
SET @cur_value1= -1;
 
22955
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22956
UPDATE t1 SET f_int1 = @cur_value1
 
22957
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22958
        
 
22959
# check single-4 success:       1
 
22960
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22961
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22962
        
 
22963
# check single-5 success:       1
 
22964
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22965
        
 
22966
# check single-6 success:       1
 
22967
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22968
ERROR HY000: Table has no partition for value 2147483647
 
22969
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22970
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22971
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22972
f_charbig = '#NULL#';
 
22973
INSERT INTO t1
 
22974
SET f_int1 = NULL , f_int2 = -@max_row,
 
22975
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22976
f_charbig = '#NULL#';
 
22977
# check null success:    1
 
22978
        
 
22979
# check null-1 success:         1
 
22980
UPDATE t1 SET f_int1 = -@max_row
 
22981
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22982
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22983
        
 
22984
# check null-2 success:         1
 
22985
UPDATE t1 SET f_int1 = NULL
 
22986
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22987
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22988
        
 
22989
# check null-3 success:         1
 
22990
DELETE FROM t1
 
22991
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22993
        
 
22994
# check null-4 success:         1
 
22995
DELETE FROM t1
 
22996
WHERE f_int1 = 0 AND f_int2 = 0
 
22997
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22998
AND f_charbig = '#NULL#';
 
22999
SET AUTOCOMMIT= 0;
 
23000
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23001
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23002
FROM t0_template source_tab
 
23003
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23004
        
 
23005
# check transactions-1 success:         1
 
23006
COMMIT WORK;
 
23007
        
 
23008
# check transactions-2 success:         1
 
23009
ROLLBACK WORK;
 
23010
        
 
23011
# check transactions-3 success:         1
 
23012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23013
COMMIT WORK;
 
23014
ROLLBACK WORK;
 
23015
        
 
23016
# check transactions-4 success:         1
 
23017
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23018
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23019
FROM t0_template source_tab
 
23020
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23021
        
 
23022
# check transactions-5 success:         1
 
23023
ROLLBACK WORK;
 
23024
Warnings:
 
23025
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
23026
        
 
23027
# check transactions-6 success:         1
 
23028
# INFO: Storage engine used for t1 seems to be not transactional.
 
23029
COMMIT;
 
23030
        
 
23031
# check transactions-7 success:         1
 
23032
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23033
COMMIT WORK;
 
23034
SET @@session.sql_mode = 'traditional';
 
23035
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23036
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23037
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23038
'', '', 'was inserted' FROM t0_template
 
23039
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23040
ERROR 22012: Division by 0
 
23041
COMMIT;
 
23042
        
 
23043
# check transactions-8 success:         1
 
23044
# INFO: Storage engine used for t1 seems to be unable to revert
 
23045
#       changes made by the failing statement.
 
23046
SET @@session.sql_mode = '';
 
23047
SET AUTOCOMMIT= 1;
 
23048
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23049
COMMIT WORK;
 
23050
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23051
        
 
23052
# check special-1 success:      1
 
23053
UPDATE t1 SET f_charbig = '';
 
23054
        
 
23055
# check special-2 success:      1
 
23056
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23057
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23058
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23061
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23062
'just inserted' FROM t0_template
 
23063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23064
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23065
BEGIN
 
23066
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23067
f_charbig = 'updated by trigger'
 
23068
      WHERE f_int1 = new.f_int1;
 
23069
END|
 
23070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23071
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23073
        
 
23074
# check trigger-1 success:      1
 
23075
DROP TRIGGER trg_1;
 
23076
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23077
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23078
f_charbig = 'just inserted'
 
23079
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23080
DELETE FROM t0_aux
 
23081
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23083
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23084
'just inserted' FROM t0_template
 
23085
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23086
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23087
BEGIN
 
23088
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23089
f_charbig = 'updated by trigger'
 
23090
      WHERE f_int1 = new.f_int1;
 
23091
END|
 
23092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23093
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23095
        
 
23096
# check trigger-2 success:      1
 
23097
DROP TRIGGER trg_1;
 
23098
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23099
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23100
f_charbig = 'just inserted'
 
23101
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23102
DELETE FROM t0_aux
 
23103
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23105
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23106
'just inserted' FROM t0_template
 
23107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23108
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23109
BEGIN
 
23110
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23111
f_charbig = 'updated by trigger'
 
23112
      WHERE f_int1 = new.f_int1;
 
23113
END|
 
23114
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23115
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23116
        
 
23117
# check trigger-3 success:      1
 
23118
DROP TRIGGER trg_1;
 
23119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23121
f_charbig = 'just inserted'
 
23122
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23123
DELETE FROM t0_aux
 
23124
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23127
'just inserted' FROM t0_template
 
23128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23129
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23130
BEGIN
 
23131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23132
f_charbig = 'updated by trigger'
 
23133
      WHERE f_int1 = - old.f_int1;
 
23134
END|
 
23135
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23136
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23137
        
 
23138
# check trigger-4 success:      1
 
23139
DROP TRIGGER trg_1;
 
23140
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23141
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23142
f_charbig = 'just inserted'
 
23143
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23144
DELETE FROM t0_aux
 
23145
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23147
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23148
'just inserted' FROM t0_template
 
23149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23150
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23151
BEGIN
 
23152
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23153
f_charbig = 'updated by trigger'
 
23154
      WHERE f_int1 = new.f_int1;
 
23155
END|
 
23156
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23157
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23158
        
 
23159
# check trigger-5 success:      1
 
23160
DROP TRIGGER trg_1;
 
23161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23163
f_charbig = 'just inserted'
 
23164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23165
DELETE FROM t0_aux
 
23166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23169
'just inserted' FROM t0_template
 
23170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23171
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23172
BEGIN
 
23173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23174
f_charbig = 'updated by trigger'
 
23175
      WHERE f_int1 = - old.f_int1;
 
23176
END|
 
23177
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23178
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23179
        
 
23180
# check trigger-6 success:      1
 
23181
DROP TRIGGER trg_1;
 
23182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23184
f_charbig = 'just inserted'
 
23185
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23186
DELETE FROM t0_aux
 
23187
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23189
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23190
'just inserted' FROM t0_template
 
23191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23192
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23193
BEGIN
 
23194
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23195
f_charbig = 'updated by trigger'
 
23196
      WHERE f_int1 = - old.f_int1;
 
23197
END|
 
23198
DELETE FROM t0_aux
 
23199
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23200
        
 
23201
# check trigger-7 success:      1
 
23202
DROP TRIGGER trg_1;
 
23203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23205
f_charbig = 'just inserted'
 
23206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23207
DELETE FROM t0_aux
 
23208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23211
'just inserted' FROM t0_template
 
23212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23213
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23214
BEGIN
 
23215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23216
f_charbig = 'updated by trigger'
 
23217
      WHERE f_int1 = - old.f_int1;
 
23218
END|
 
23219
DELETE FROM t0_aux
 
23220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23221
        
 
23222
# check trigger-8 success:      1
 
23223
DROP TRIGGER trg_1;
 
23224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23226
f_charbig = 'just inserted'
 
23227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23228
DELETE FROM t0_aux
 
23229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23230
DELETE FROM t1
 
23231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23232
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23233
BEGIN
 
23234
SET new.f_int1 = old.f_int1 + @max_row,
 
23235
new.f_int2 = old.f_int2 - @max_row,
 
23236
new.f_charbig = '####updated per update trigger####';
 
23237
END|
 
23238
UPDATE t1
 
23239
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23240
f_charbig = '####updated per update statement itself####';
 
23241
        
 
23242
# check trigger-9 success:      1
 
23243
DROP TRIGGER trg_2;
 
23244
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23245
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23246
f_charbig = CONCAT('===',f_char1,'===');
 
23247
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23248
BEGIN
 
23249
SET new.f_int1 = new.f_int1 + @max_row,
 
23250
new.f_int2 = new.f_int2 - @max_row,
 
23251
new.f_charbig = '####updated per update trigger####';
 
23252
END|
 
23253
UPDATE t1
 
23254
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23255
f_charbig = '####updated per update statement itself####';
 
23256
        
 
23257
# check trigger-10 success:     1
 
23258
DROP TRIGGER trg_2;
 
23259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23261
f_charbig = CONCAT('===',f_char1,'===');
 
23262
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23263
BEGIN
 
23264
SET new.f_int1 = @my_max1 + @counter,
 
23265
new.f_int2 = @my_min2 - @counter,
 
23266
new.f_charbig = '####updated per insert trigger####';
 
23267
SET @counter = @counter + 1;
 
23268
END|
 
23269
SET @counter = 1;
 
23270
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23271
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23272
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23273
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23275
ORDER BY f_int1;
 
23276
DROP TRIGGER trg_3;
 
23277
        
 
23278
# check trigger-11 success:     1
 
23279
DELETE FROM t1
 
23280
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23281
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23282
AND f_charbig = '####updated per insert trigger####';
 
23283
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23284
BEGIN
 
23285
SET new.f_int1 = @my_max1 + @counter,
 
23286
new.f_int2 = @my_min2 - @counter,
 
23287
new.f_charbig = '####updated per insert trigger####';
 
23288
SET @counter = @counter + 1;
 
23289
END|
 
23290
SET @counter = 1;
 
23291
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23292
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23293
SELECT CAST(f_int1 AS CHAR),
 
23294
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23295
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23296
ORDER BY f_int1;
 
23297
DROP TRIGGER trg_3;
 
23298
        
 
23299
# check trigger-12 success:     1
 
23300
DELETE FROM t1
 
23301
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23302
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23303
AND f_charbig = '####updated per insert trigger####';
 
23304
ANALYZE  TABLE t1;
 
23305
Table   Op      Msg_type        Msg_text
 
23306
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
23307
CHECK    TABLE t1 EXTENDED;
 
23308
Table   Op      Msg_type        Msg_text
 
23309
test.t1 check   note    The storage engine for the table doesn't support check
 
23310
CHECKSUM TABLE t1 EXTENDED;
 
23311
Table   Checksum
 
23312
test.t1 <some_value>
 
23313
OPTIMIZE TABLE t1;
 
23314
Table   Op      Msg_type        Msg_text
 
23315
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
23316
# check layout success:    1
 
23317
REPAIR   TABLE t1 EXTENDED;
 
23318
Table   Op      Msg_type        Msg_text
 
23319
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23320
# check layout success:    1
 
23321
TRUNCATE t1;
 
23322
        
 
23323
# check TRUNCATE success:       1
 
23324
# check layout success:    1
 
23325
# End usability test (inc/partition_check.inc)
 
23326
DROP TABLE t1;
 
23327
CREATE TABLE t1 (
 
23328
f_int1 INTEGER,
 
23329
f_int2 INTEGER,
 
23330
f_char1 CHAR(20),
 
23331
f_char2 CHAR(20),
 
23332
f_charbig VARCHAR(1000)
 
23333
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
23334
)
 
23335
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
23336
(PARTITION part1 VALUES LESS THAN (0)
 
23337
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
23338
PARTITION part2 VALUES LESS THAN (5)
 
23339
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
23340
PARTITION part3 VALUES LESS THAN (10)
 
23341
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
23342
PARTITION part4 VALUES LESS THAN (2147483646)
 
23343
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
23344
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23345
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23346
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23347
ALTER TABLE t1 DROP INDEX uidx1;
 
23348
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23349
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23350
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23351
# Start usability test (inc/partition_check.inc)
 
23352
create_command
 
23353
SHOW CREATE TABLE t1;
 
23354
Table   Create Table
 
23355
t1      CREATE TABLE `t1` (
 
23356
  `f_int1` int(11) DEFAULT NULL,
 
23357
  `f_int2` int(11) DEFAULT NULL,
 
23358
  `f_char1` char(20) DEFAULT NULL,
 
23359
  `f_char2` char(20) DEFAULT NULL,
 
23360
  `f_charbig` varchar(1000) DEFAULT NULL
 
23361
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
23362
 
 
23363
unified filelist
 
23364
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
23365
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
23366
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
23367
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
23368
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
23369
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
23370
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
23371
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
23372
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
23373
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
23374
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
23375
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
23376
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
23377
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
23378
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
23379
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
23380
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
23381
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
23382
 
 
23383
# check prerequisites-1 success:    1
 
23384
# check COUNT(*) success:    1
 
23385
# check MIN/MAX(f_int1) success:    1
 
23386
# check MIN/MAX(f_int2) success:    1
 
23387
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23388
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23389
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23390
WHERE f_int1 IN (2,3);
 
23391
# check prerequisites-3 success:    1
 
23392
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23393
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
23394
# check read via f_int1 success: 1
 
23395
# check read via f_int2 success: 1
 
23396
        
 
23397
# check multiple-1 success:     1
 
23398
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23399
        
 
23400
# check multiple-2 success:     1
 
23401
INSERT INTO t1 SELECT * FROM t0_template
 
23402
WHERE MOD(f_int1,3) = 0;
 
23403
        
 
23404
# check multiple-3 success:     1
 
23405
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23406
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23407
AND @max_row_div2 + @max_row_div4;
 
23408
        
 
23409
# check multiple-4 success:     1
 
23410
DELETE FROM t1
 
23411
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23412
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23413
        
 
23414
# check multiple-5 success:     1
 
23415
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23416
INSERT INTO t1
 
23417
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23418
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23419
f_charbig = '#SINGLE#';
 
23420
        
 
23421
# check single-1 success:       1
 
23422
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23423
INSERT INTO t1
 
23424
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23425
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23426
f_charbig = '#SINGLE#';
 
23427
        
 
23428
# check single-2 success:       1
 
23429
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23430
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23431
UPDATE t1 SET f_int1 = @cur_value2
 
23432
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23433
        
 
23434
# check single-3 success:       1
 
23435
SET @cur_value1= -1;
 
23436
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23437
UPDATE t1 SET f_int1 = @cur_value1
 
23438
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23439
        
 
23440
# check single-4 success:       1
 
23441
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23442
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23443
        
 
23444
# check single-5 success:       1
 
23445
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23446
        
 
23447
# check single-6 success:       1
 
23448
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23449
ERROR HY000: Table has no partition for value 2147483647
 
23450
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23451
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23452
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23453
f_charbig = '#NULL#';
 
23454
INSERT INTO t1
 
23455
SET f_int1 = NULL , f_int2 = -@max_row,
 
23456
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23457
f_charbig = '#NULL#';
 
23458
# check null success:    1
 
23459
        
 
23460
# check null-1 success:         1
 
23461
UPDATE t1 SET f_int1 = -@max_row
 
23462
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23463
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23464
        
 
23465
# check null-2 success:         1
 
23466
UPDATE t1 SET f_int1 = NULL
 
23467
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23468
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23469
        
 
23470
# check null-3 success:         1
 
23471
DELETE FROM t1
 
23472
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23473
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23474
        
 
23475
# check null-4 success:         1
 
23476
DELETE FROM t1
 
23477
WHERE f_int1 = 0 AND f_int2 = 0
 
23478
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23479
AND f_charbig = '#NULL#';
 
23480
SET AUTOCOMMIT= 0;
 
23481
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23482
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23483
FROM t0_template source_tab
 
23484
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23485
        
 
23486
# check transactions-1 success:         1
 
23487
COMMIT WORK;
 
23488
        
 
23489
# check transactions-2 success:         1
 
23490
ROLLBACK WORK;
 
23491
        
 
23492
# check transactions-3 success:         1
 
23493
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23494
COMMIT WORK;
 
23495
ROLLBACK WORK;
 
23496
        
 
23497
# check transactions-4 success:         1
 
23498
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23499
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23500
FROM t0_template source_tab
 
23501
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23502
        
 
23503
# check transactions-5 success:         1
 
23504
ROLLBACK WORK;
 
23505
Warnings:
 
23506
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
23507
        
 
23508
# check transactions-6 success:         1
 
23509
# INFO: Storage engine used for t1 seems to be not transactional.
 
23510
COMMIT;
 
23511
        
 
23512
# check transactions-7 success:         1
 
23513
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23514
COMMIT WORK;
 
23515
SET @@session.sql_mode = 'traditional';
 
23516
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23517
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23518
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23519
'', '', 'was inserted' FROM t0_template
 
23520
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23521
ERROR 22012: Division by 0
 
23522
COMMIT;
 
23523
        
 
23524
# check transactions-8 success:         1
 
23525
# INFO: Storage engine used for t1 seems to be unable to revert
 
23526
#       changes made by the failing statement.
 
23527
SET @@session.sql_mode = '';
 
23528
SET AUTOCOMMIT= 1;
 
23529
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23530
COMMIT WORK;
 
23531
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23532
        
 
23533
# check special-1 success:      1
 
23534
UPDATE t1 SET f_charbig = '';
 
23535
        
 
23536
# check special-2 success:      1
 
23537
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23538
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23539
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23542
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23543
'just inserted' FROM t0_template
 
23544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23545
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23546
BEGIN
 
23547
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23548
f_charbig = 'updated by trigger'
 
23549
      WHERE f_int1 = new.f_int1;
 
23550
END|
 
23551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23552
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23554
        
 
23555
# check trigger-1 success:      1
 
23556
DROP TRIGGER trg_1;
 
23557
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23558
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23559
f_charbig = 'just inserted'
 
23560
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23561
DELETE FROM t0_aux
 
23562
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23563
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23564
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23565
'just inserted' FROM t0_template
 
23566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23567
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23568
BEGIN
 
23569
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23570
f_charbig = 'updated by trigger'
 
23571
      WHERE f_int1 = new.f_int1;
 
23572
END|
 
23573
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23574
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23576
        
 
23577
# check trigger-2 success:      1
 
23578
DROP TRIGGER trg_1;
 
23579
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23580
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23581
f_charbig = 'just inserted'
 
23582
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23583
DELETE FROM t0_aux
 
23584
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23586
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23587
'just inserted' FROM t0_template
 
23588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23589
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23590
BEGIN
 
23591
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23592
f_charbig = 'updated by trigger'
 
23593
      WHERE f_int1 = new.f_int1;
 
23594
END|
 
23595
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23596
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23597
        
 
23598
# check trigger-3 success:      1
 
23599
DROP TRIGGER trg_1;
 
23600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23602
f_charbig = 'just inserted'
 
23603
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23604
DELETE FROM t0_aux
 
23605
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23608
'just inserted' FROM t0_template
 
23609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23610
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23611
BEGIN
 
23612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23613
f_charbig = 'updated by trigger'
 
23614
      WHERE f_int1 = - old.f_int1;
 
23615
END|
 
23616
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23617
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23618
        
 
23619
# check trigger-4 success:      1
 
23620
DROP TRIGGER trg_1;
 
23621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23623
f_charbig = 'just inserted'
 
23624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23625
DELETE FROM t0_aux
 
23626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23628
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23629
'just inserted' FROM t0_template
 
23630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23631
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23632
BEGIN
 
23633
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23634
f_charbig = 'updated by trigger'
 
23635
      WHERE f_int1 = new.f_int1;
 
23636
END|
 
23637
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23638
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23639
        
 
23640
# check trigger-5 success:      1
 
23641
DROP TRIGGER trg_1;
 
23642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23644
f_charbig = 'just inserted'
 
23645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23646
DELETE FROM t0_aux
 
23647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23650
'just inserted' FROM t0_template
 
23651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23652
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23653
BEGIN
 
23654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23655
f_charbig = 'updated by trigger'
 
23656
      WHERE f_int1 = - old.f_int1;
 
23657
END|
 
23658
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23659
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23660
        
 
23661
# check trigger-6 success:      1
 
23662
DROP TRIGGER trg_1;
 
23663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23665
f_charbig = 'just inserted'
 
23666
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23667
DELETE FROM t0_aux
 
23668
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23670
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23671
'just inserted' FROM t0_template
 
23672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23673
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23674
BEGIN
 
23675
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23676
f_charbig = 'updated by trigger'
 
23677
      WHERE f_int1 = - old.f_int1;
 
23678
END|
 
23679
DELETE FROM t0_aux
 
23680
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23681
        
 
23682
# check trigger-7 success:      1
 
23683
DROP TRIGGER trg_1;
 
23684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23686
f_charbig = 'just inserted'
 
23687
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23688
DELETE FROM t0_aux
 
23689
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23690
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23691
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23692
'just inserted' FROM t0_template
 
23693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23694
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23695
BEGIN
 
23696
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23697
f_charbig = 'updated by trigger'
 
23698
      WHERE f_int1 = - old.f_int1;
 
23699
END|
 
23700
DELETE FROM t0_aux
 
23701
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23702
        
 
23703
# check trigger-8 success:      1
 
23704
DROP TRIGGER trg_1;
 
23705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23707
f_charbig = 'just inserted'
 
23708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23709
DELETE FROM t0_aux
 
23710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23711
DELETE FROM t1
 
23712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23713
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23714
BEGIN
 
23715
SET new.f_int1 = old.f_int1 + @max_row,
 
23716
new.f_int2 = old.f_int2 - @max_row,
 
23717
new.f_charbig = '####updated per update trigger####';
 
23718
END|
 
23719
UPDATE t1
 
23720
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23721
f_charbig = '####updated per update statement itself####';
 
23722
        
 
23723
# check trigger-9 success:      1
 
23724
DROP TRIGGER trg_2;
 
23725
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23726
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23727
f_charbig = CONCAT('===',f_char1,'===');
 
23728
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23729
BEGIN
 
23730
SET new.f_int1 = new.f_int1 + @max_row,
 
23731
new.f_int2 = new.f_int2 - @max_row,
 
23732
new.f_charbig = '####updated per update trigger####';
 
23733
END|
 
23734
UPDATE t1
 
23735
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23736
f_charbig = '####updated per update statement itself####';
 
23737
        
 
23738
# check trigger-10 success:     1
 
23739
DROP TRIGGER trg_2;
 
23740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23742
f_charbig = CONCAT('===',f_char1,'===');
 
23743
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23744
BEGIN
 
23745
SET new.f_int1 = @my_max1 + @counter,
 
23746
new.f_int2 = @my_min2 - @counter,
 
23747
new.f_charbig = '####updated per insert trigger####';
 
23748
SET @counter = @counter + 1;
 
23749
END|
 
23750
SET @counter = 1;
 
23751
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23752
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23753
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23754
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23756
ORDER BY f_int1;
 
23757
DROP TRIGGER trg_3;
 
23758
        
 
23759
# check trigger-11 success:     1
 
23760
DELETE FROM t1
 
23761
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23762
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23763
AND f_charbig = '####updated per insert trigger####';
 
23764
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23765
BEGIN
 
23766
SET new.f_int1 = @my_max1 + @counter,
 
23767
new.f_int2 = @my_min2 - @counter,
 
23768
new.f_charbig = '####updated per insert trigger####';
 
23769
SET @counter = @counter + 1;
 
23770
END|
 
23771
SET @counter = 1;
 
23772
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23773
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23774
SELECT CAST(f_int1 AS CHAR),
 
23775
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23777
ORDER BY f_int1;
 
23778
DROP TRIGGER trg_3;
 
23779
        
 
23780
# check trigger-12 success:     1
 
23781
DELETE FROM t1
 
23782
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23783
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23784
AND f_charbig = '####updated per insert trigger####';
 
23785
ANALYZE  TABLE t1;
 
23786
Table   Op      Msg_type        Msg_text
 
23787
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
23788
CHECK    TABLE t1 EXTENDED;
 
23789
Table   Op      Msg_type        Msg_text
 
23790
test.t1 check   note    The storage engine for the table doesn't support check
 
23791
CHECKSUM TABLE t1 EXTENDED;
 
23792
Table   Checksum
 
23793
test.t1 <some_value>
 
23794
OPTIMIZE TABLE t1;
 
23795
Table   Op      Msg_type        Msg_text
 
23796
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
23797
# check layout success:    1
 
23798
REPAIR   TABLE t1 EXTENDED;
 
23799
Table   Op      Msg_type        Msg_text
 
23800
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23801
# check layout success:    1
 
23802
TRUNCATE t1;
 
23803
        
 
23804
# check TRUNCATE success:       1
 
23805
# check layout success:    1
 
23806
# End usability test (inc/partition_check.inc)
 
23807
DROP TABLE t1;
 
23808
CREATE TABLE t1 (
 
23809
f_int1 INTEGER,
 
23810
f_int2 INTEGER,
 
23811
f_char1 CHAR(20),
 
23812
f_char2 CHAR(20),
 
23813
f_charbig VARCHAR(1000)
 
23814
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
23815
)
 
23816
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
23817
(PARTITION part1 VALUES IN (0)
 
23818
(SUBPARTITION sp11, SUBPARTITION sp12),
 
23819
PARTITION part2 VALUES IN (1)
 
23820
(SUBPARTITION sp21, SUBPARTITION sp22),
 
23821
PARTITION part3 VALUES IN (2)
 
23822
(SUBPARTITION sp31, SUBPARTITION sp32),
 
23823
PARTITION part4 VALUES IN (NULL)
 
23824
(SUBPARTITION sp41, SUBPARTITION sp42));
 
23825
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23826
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23827
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23828
ALTER TABLE t1 DROP INDEX uidx1;
 
23829
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23830
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23831
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23832
# Start usability test (inc/partition_check.inc)
 
23833
create_command
 
23834
SHOW CREATE TABLE t1;
 
23835
Table   Create Table
 
23836
t1      CREATE TABLE `t1` (
 
23837
  `f_int1` int(11) DEFAULT NULL,
 
23838
  `f_int2` int(11) DEFAULT NULL,
 
23839
  `f_char1` char(20) DEFAULT NULL,
 
23840
  `f_char2` char(20) DEFAULT NULL,
 
23841
  `f_charbig` varchar(1000) DEFAULT NULL
 
23842
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
23843
 
 
23844
unified filelist
 
23845
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
23846
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
23847
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
23848
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
23849
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
23850
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
23851
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
23852
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
23853
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
23854
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
23855
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
23856
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
23857
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
23858
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
23859
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
23860
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
23861
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
23862
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
23863
 
 
23864
# check prerequisites-1 success:    1
 
23865
# check COUNT(*) success:    1
 
23866
# check MIN/MAX(f_int1) success:    1
 
23867
# check MIN/MAX(f_int2) success:    1
 
23868
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23869
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23870
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23871
WHERE f_int1 IN (2,3);
 
23872
# check prerequisites-3 success:    1
 
23873
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23874
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
23875
# check read via f_int1 success: 1
 
23876
# check read via f_int2 success: 1
 
23877
        
 
23878
# check multiple-1 success:     1
 
23879
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23880
        
 
23881
# check multiple-2 success:     1
 
23882
INSERT INTO t1 SELECT * FROM t0_template
 
23883
WHERE MOD(f_int1,3) = 0;
 
23884
        
 
23885
# check multiple-3 success:     1
 
23886
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23887
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23888
AND @max_row_div2 + @max_row_div4;
 
23889
        
 
23890
# check multiple-4 success:     1
 
23891
DELETE FROM t1
 
23892
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23893
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23894
        
 
23895
# check multiple-5 success:     1
 
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
# check null success:    1
 
23942
        
 
23943
# check null-1 success:         1
 
23944
UPDATE t1 SET f_int1 = -@max_row
 
23945
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23946
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23947
        
 
23948
# check null-2 success:         1
 
23949
UPDATE t1 SET f_int1 = NULL
 
23950
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23951
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23952
        
 
23953
# check null-3 success:         1
 
23954
DELETE FROM t1
 
23955
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23956
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23957
        
 
23958
# check null-4 success:         1
 
23959
DELETE FROM t1
 
23960
WHERE f_int1 = 0 AND f_int2 = 0
 
23961
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23962
AND f_charbig = '#NULL#';
 
23963
SET AUTOCOMMIT= 0;
 
23964
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23965
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23966
FROM t0_template source_tab
 
23967
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23968
        
 
23969
# check transactions-1 success:         1
 
23970
COMMIT WORK;
 
23971
        
 
23972
# check transactions-2 success:         1
 
23973
ROLLBACK WORK;
 
23974
        
 
23975
# check transactions-3 success:         1
 
23976
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23977
COMMIT WORK;
 
23978
ROLLBACK WORK;
 
23979
        
 
23980
# check transactions-4 success:         1
 
23981
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23982
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23983
FROM t0_template source_tab
 
23984
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23985
        
 
23986
# check transactions-5 success:         1
 
23987
ROLLBACK WORK;
 
23988
Warnings:
 
23989
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
23990
        
 
23991
# check transactions-6 success:         1
 
23992
# INFO: Storage engine used for t1 seems to be not transactional.
 
23993
COMMIT;
 
23994
        
 
23995
# check transactions-7 success:         1
 
23996
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23997
COMMIT WORK;
 
23998
SET @@session.sql_mode = 'traditional';
 
23999
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24000
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24001
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24002
'', '', 'was inserted' FROM t0_template
 
24003
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24004
ERROR 22012: Division by 0
 
24005
COMMIT;
 
24006
        
 
24007
# check transactions-8 success:         1
 
24008
# INFO: Storage engine used for t1 seems to be unable to revert
 
24009
#       changes made by the failing statement.
 
24010
SET @@session.sql_mode = '';
 
24011
SET AUTOCOMMIT= 1;
 
24012
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24013
COMMIT WORK;
 
24014
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24015
        
 
24016
# check special-1 success:      1
 
24017
UPDATE t1 SET f_charbig = '';
 
24018
        
 
24019
# check special-2 success:      1
 
24020
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24021
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24022
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24023
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24026
'just inserted' FROM t0_template
 
24027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24028
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24029
BEGIN
 
24030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24031
f_charbig = 'updated by trigger'
 
24032
      WHERE f_int1 = new.f_int1;
 
24033
END|
 
24034
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24035
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24037
        
 
24038
# check trigger-1 success:      1
 
24039
DROP TRIGGER trg_1;
 
24040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24042
f_charbig = 'just inserted'
 
24043
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24044
DELETE FROM t0_aux
 
24045
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24047
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24048
'just inserted' FROM t0_template
 
24049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24050
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24051
BEGIN
 
24052
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24053
f_charbig = 'updated by trigger'
 
24054
      WHERE f_int1 = new.f_int1;
 
24055
END|
 
24056
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24057
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24059
        
 
24060
# check trigger-2 success:      1
 
24061
DROP TRIGGER trg_1;
 
24062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24064
f_charbig = 'just inserted'
 
24065
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24066
DELETE FROM t0_aux
 
24067
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24068
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24069
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24070
'just inserted' FROM t0_template
 
24071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24072
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24073
BEGIN
 
24074
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24075
f_charbig = 'updated by trigger'
 
24076
      WHERE f_int1 = new.f_int1;
 
24077
END|
 
24078
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24079
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24080
        
 
24081
# check trigger-3 success:      1
 
24082
DROP TRIGGER trg_1;
 
24083
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24084
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24085
f_charbig = 'just inserted'
 
24086
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24087
DELETE FROM t0_aux
 
24088
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24090
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24091
'just inserted' FROM t0_template
 
24092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24093
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24094
BEGIN
 
24095
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24096
f_charbig = 'updated by trigger'
 
24097
      WHERE f_int1 = - old.f_int1;
 
24098
END|
 
24099
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24100
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24101
        
 
24102
# check trigger-4 success:      1
 
24103
DROP TRIGGER trg_1;
 
24104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24106
f_charbig = 'just inserted'
 
24107
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24108
DELETE FROM t0_aux
 
24109
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24111
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24112
'just inserted' FROM t0_template
 
24113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24114
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24115
BEGIN
 
24116
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24117
f_charbig = 'updated by trigger'
 
24118
      WHERE f_int1 = new.f_int1;
 
24119
END|
 
24120
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24121
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24122
        
 
24123
# check trigger-5 success:      1
 
24124
DROP TRIGGER trg_1;
 
24125
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24126
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24127
f_charbig = 'just inserted'
 
24128
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24129
DELETE FROM t0_aux
 
24130
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24131
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24132
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24133
'just inserted' FROM t0_template
 
24134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24135
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24136
BEGIN
 
24137
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24138
f_charbig = 'updated by trigger'
 
24139
      WHERE f_int1 = - old.f_int1;
 
24140
END|
 
24141
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24142
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24143
        
 
24144
# check trigger-6 success:      1
 
24145
DROP TRIGGER trg_1;
 
24146
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24147
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24148
f_charbig = 'just inserted'
 
24149
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24150
DELETE FROM t0_aux
 
24151
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24152
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24153
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24154
'just inserted' FROM t0_template
 
24155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24156
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24157
BEGIN
 
24158
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24159
f_charbig = 'updated by trigger'
 
24160
      WHERE f_int1 = - old.f_int1;
 
24161
END|
 
24162
DELETE FROM t0_aux
 
24163
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24164
        
 
24165
# check trigger-7 success:      1
 
24166
DROP TRIGGER trg_1;
 
24167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24169
f_charbig = 'just inserted'
 
24170
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24171
DELETE FROM t0_aux
 
24172
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24173
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24174
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24175
'just inserted' FROM t0_template
 
24176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24177
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24178
BEGIN
 
24179
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24180
f_charbig = 'updated by trigger'
 
24181
      WHERE f_int1 = - old.f_int1;
 
24182
END|
 
24183
DELETE FROM t0_aux
 
24184
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24185
        
 
24186
# check trigger-8 success:      1
 
24187
DROP TRIGGER trg_1;
 
24188
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24189
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24190
f_charbig = 'just inserted'
 
24191
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24192
DELETE FROM t0_aux
 
24193
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24194
DELETE FROM t1
 
24195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24196
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24197
BEGIN
 
24198
SET new.f_int1 = old.f_int1 + @max_row,
 
24199
new.f_int2 = old.f_int2 - @max_row,
 
24200
new.f_charbig = '####updated per update trigger####';
 
24201
END|
 
24202
UPDATE t1
 
24203
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24204
f_charbig = '####updated per update statement itself####';
 
24205
        
 
24206
# check trigger-9 success:      1
 
24207
DROP TRIGGER trg_2;
 
24208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24210
f_charbig = CONCAT('===',f_char1,'===');
 
24211
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24212
BEGIN
 
24213
SET new.f_int1 = new.f_int1 + @max_row,
 
24214
new.f_int2 = new.f_int2 - @max_row,
 
24215
new.f_charbig = '####updated per update trigger####';
 
24216
END|
 
24217
UPDATE t1
 
24218
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24219
f_charbig = '####updated per update statement itself####';
 
24220
        
 
24221
# check trigger-10 success:     1
 
24222
DROP TRIGGER trg_2;
 
24223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24225
f_charbig = CONCAT('===',f_char1,'===');
 
24226
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24227
BEGIN
 
24228
SET new.f_int1 = @my_max1 + @counter,
 
24229
new.f_int2 = @my_min2 - @counter,
 
24230
new.f_charbig = '####updated per insert trigger####';
 
24231
SET @counter = @counter + 1;
 
24232
END|
 
24233
SET @counter = 1;
 
24234
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24235
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24236
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24237
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24239
ORDER BY f_int1;
 
24240
DROP TRIGGER trg_3;
 
24241
        
 
24242
# check trigger-11 success:     1
 
24243
DELETE FROM t1
 
24244
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24245
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24246
AND f_charbig = '####updated per insert trigger####';
 
24247
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24248
BEGIN
 
24249
SET new.f_int1 = @my_max1 + @counter,
 
24250
new.f_int2 = @my_min2 - @counter,
 
24251
new.f_charbig = '####updated per insert trigger####';
 
24252
SET @counter = @counter + 1;
 
24253
END|
 
24254
SET @counter = 1;
 
24255
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24256
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24257
SELECT CAST(f_int1 AS CHAR),
 
24258
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24260
ORDER BY f_int1;
 
24261
DROP TRIGGER trg_3;
 
24262
        
 
24263
# check trigger-12 success:     1
 
24264
DELETE FROM t1
 
24265
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24266
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24267
AND f_charbig = '####updated per insert trigger####';
 
24268
ANALYZE  TABLE t1;
 
24269
Table   Op      Msg_type        Msg_text
 
24270
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
24271
CHECK    TABLE t1 EXTENDED;
 
24272
Table   Op      Msg_type        Msg_text
 
24273
test.t1 check   note    The storage engine for the table doesn't support check
 
24274
CHECKSUM TABLE t1 EXTENDED;
 
24275
Table   Checksum
 
24276
test.t1 <some_value>
 
24277
OPTIMIZE TABLE t1;
 
24278
Table   Op      Msg_type        Msg_text
 
24279
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
24280
# check layout success:    1
 
24281
REPAIR   TABLE t1 EXTENDED;
 
24282
Table   Op      Msg_type        Msg_text
 
24283
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24284
# check layout success:    1
 
24285
TRUNCATE t1;
 
24286
        
 
24287
# check TRUNCATE success:       1
 
24288
# check layout success:    1
 
24289
# End usability test (inc/partition_check.inc)
 
24290
DROP TABLE t1;
 
24291
CREATE TABLE t1 (
 
24292
f_int1 INTEGER,
 
24293
f_int2 INTEGER,
 
24294
f_char1 CHAR(20),
 
24295
f_char2 CHAR(20),
 
24296
f_charbig VARCHAR(1000)
 
24297
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
24298
)
 
24299
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
24300
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
24301
(PARTITION part1 VALUES IN (0),
 
24302
 PARTITION part2 VALUES IN (1),
 
24303
 PARTITION part3 VALUES IN (NULL));
 
24304
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24305
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24306
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24307
ALTER TABLE t1 DROP INDEX uidx1;
 
24308
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24309
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24310
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24311
# Start usability test (inc/partition_check.inc)
 
24312
create_command
 
24313
SHOW CREATE TABLE t1;
 
24314
Table   Create Table
 
24315
t1      CREATE TABLE `t1` (
 
24316
  `f_int1` int(11) DEFAULT NULL,
 
24317
  `f_int2` int(11) DEFAULT NULL,
 
24318
  `f_char1` char(20) DEFAULT NULL,
 
24319
  `f_char2` char(20) DEFAULT NULL,
 
24320
  `f_charbig` varchar(1000) DEFAULT NULL
 
24321
) ENGINE=MyISAM 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 = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
24322
 
 
24323
unified filelist
 
24324
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
24325
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
24326
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
24327
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
24328
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
24329
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
24330
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
24331
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
24332
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
24333
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
24334
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
24335
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
24336
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
24337
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
24338
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
24339
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
24340
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
24341
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
24342
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
24343
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
24344
 
 
24345
# check prerequisites-1 success:    1
 
24346
# check COUNT(*) success:    1
 
24347
# check MIN/MAX(f_int1) success:    1
 
24348
# check MIN/MAX(f_int2) success:    1
 
24349
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24350
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24351
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24352
WHERE f_int1 IN (2,3);
 
24353
# check prerequisites-3 success:    1
 
24354
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24355
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24356
# check read via f_int1 success: 1
 
24357
# check read via f_int2 success: 1
 
24358
        
 
24359
# check multiple-1 success:     1
 
24360
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24361
        
 
24362
# check multiple-2 success:     1
 
24363
INSERT INTO t1 SELECT * FROM t0_template
 
24364
WHERE MOD(f_int1,3) = 0;
 
24365
        
 
24366
# check multiple-3 success:     1
 
24367
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24368
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24369
AND @max_row_div2 + @max_row_div4;
 
24370
        
 
24371
# check multiple-4 success:     1
 
24372
DELETE FROM t1
 
24373
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24374
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24375
        
 
24376
# check multiple-5 success:     1
 
24377
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24378
INSERT INTO t1
 
24379
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24380
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24381
f_charbig = '#SINGLE#';
 
24382
        
 
24383
# check single-1 success:       1
 
24384
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24385
INSERT INTO t1
 
24386
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24387
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24388
f_charbig = '#SINGLE#';
 
24389
        
 
24390
# check single-2 success:       1
 
24391
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24392
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24393
UPDATE t1 SET f_int1 = @cur_value2
 
24394
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24395
        
 
24396
# check single-3 success:       1
 
24397
SET @cur_value1= -1;
 
24398
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24399
UPDATE t1 SET f_int1 = @cur_value1
 
24400
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24401
        
 
24402
# check single-4 success:       1
 
24403
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24404
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24405
        
 
24406
# check single-5 success:       1
 
24407
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24408
        
 
24409
# check single-6 success:       1
 
24410
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24411
        
 
24412
# check single-7 success:       1
 
24413
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24414
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24415
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24416
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24417
f_charbig = '#NULL#';
 
24418
INSERT INTO t1
 
24419
SET f_int1 = NULL , f_int2 = -@max_row,
 
24420
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24421
f_charbig = '#NULL#';
 
24422
# check null success:    1
 
24423
        
 
24424
# check null-1 success:         1
 
24425
UPDATE t1 SET f_int1 = -@max_row
 
24426
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24427
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24428
        
 
24429
# check null-2 success:         1
 
24430
UPDATE t1 SET f_int1 = NULL
 
24431
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24432
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24433
        
 
24434
# check null-3 success:         1
 
24435
DELETE FROM t1
 
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-4 success:         1
 
24440
DELETE FROM t1
 
24441
WHERE f_int1 = 0 AND f_int2 = 0
 
24442
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24443
AND f_charbig = '#NULL#';
 
24444
SET AUTOCOMMIT= 0;
 
24445
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24446
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24447
FROM t0_template source_tab
 
24448
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24449
        
 
24450
# check transactions-1 success:         1
 
24451
COMMIT WORK;
 
24452
        
 
24453
# check transactions-2 success:         1
 
24454
ROLLBACK WORK;
 
24455
        
 
24456
# check transactions-3 success:         1
 
24457
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24458
COMMIT WORK;
 
24459
ROLLBACK WORK;
 
24460
        
 
24461
# check transactions-4 success:         1
 
24462
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24463
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24464
FROM t0_template source_tab
 
24465
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24466
        
 
24467
# check transactions-5 success:         1
 
24468
ROLLBACK WORK;
 
24469
Warnings:
 
24470
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
24471
        
 
24472
# check transactions-6 success:         1
 
24473
# INFO: Storage engine used for t1 seems to be not transactional.
 
24474
COMMIT;
 
24475
        
 
24476
# check transactions-7 success:         1
 
24477
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24478
COMMIT WORK;
 
24479
SET @@session.sql_mode = 'traditional';
 
24480
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24481
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24482
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24483
'', '', 'was inserted' FROM t0_template
 
24484
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24485
ERROR 22012: Division by 0
 
24486
COMMIT;
 
24487
        
 
24488
# check transactions-8 success:         1
 
24489
# INFO: Storage engine used for t1 seems to be unable to revert
 
24490
#       changes made by the failing statement.
 
24491
SET @@session.sql_mode = '';
 
24492
SET AUTOCOMMIT= 1;
 
24493
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24494
COMMIT WORK;
 
24495
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24496
        
 
24497
# check special-1 success:      1
 
24498
UPDATE t1 SET f_charbig = '';
 
24499
        
 
24500
# check special-2 success:      1
 
24501
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24502
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24503
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24507
'just inserted' FROM t0_template
 
24508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24509
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24510
BEGIN
 
24511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24512
f_charbig = 'updated by trigger'
 
24513
      WHERE f_int1 = new.f_int1;
 
24514
END|
 
24515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24516
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24517
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24518
        
 
24519
# check trigger-1 success:      1
 
24520
DROP TRIGGER trg_1;
 
24521
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24522
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24523
f_charbig = 'just inserted'
 
24524
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24525
DELETE FROM t0_aux
 
24526
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24527
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24528
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24529
'just inserted' FROM t0_template
 
24530
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24531
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24532
BEGIN
 
24533
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24534
f_charbig = 'updated by trigger'
 
24535
      WHERE f_int1 = new.f_int1;
 
24536
END|
 
24537
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24538
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24540
        
 
24541
# check trigger-2 success:      1
 
24542
DROP TRIGGER trg_1;
 
24543
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24544
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24545
f_charbig = 'just inserted'
 
24546
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24547
DELETE FROM t0_aux
 
24548
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24549
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24550
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24551
'just inserted' FROM t0_template
 
24552
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24553
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24554
BEGIN
 
24555
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24556
f_charbig = 'updated by trigger'
 
24557
      WHERE f_int1 = new.f_int1;
 
24558
END|
 
24559
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24560
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24561
        
 
24562
# check trigger-3 success:      1
 
24563
DROP TRIGGER trg_1;
 
24564
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24565
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24566
f_charbig = 'just inserted'
 
24567
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24568
DELETE FROM t0_aux
 
24569
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24570
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24571
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24572
'just inserted' FROM t0_template
 
24573
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24574
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24575
BEGIN
 
24576
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24577
f_charbig = 'updated by trigger'
 
24578
      WHERE f_int1 = - old.f_int1;
 
24579
END|
 
24580
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24581
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24582
        
 
24583
# check trigger-4 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 AFTER 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-5 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 AFTER 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-6 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 BEFORE DELETE 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 = - old.f_int1;
 
24642
END|
 
24643
DELETE FROM t0_aux
 
24644
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24645
        
 
24646
# check trigger-7 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 DELETE 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
DELETE FROM t0_aux
 
24665
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24666
        
 
24667
# check trigger-8 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
DELETE FROM t1
 
24676
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24677
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24678
BEGIN
 
24679
SET new.f_int1 = old.f_int1 + @max_row,
 
24680
new.f_int2 = old.f_int2 - @max_row,
 
24681
new.f_charbig = '####updated per update trigger####';
 
24682
END|
 
24683
UPDATE t1
 
24684
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24685
f_charbig = '####updated per update statement itself####';
 
24686
        
 
24687
# check trigger-9 success:      1
 
24688
DROP TRIGGER trg_2;
 
24689
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24690
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24691
f_charbig = CONCAT('===',f_char1,'===');
 
24692
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24693
BEGIN
 
24694
SET new.f_int1 = new.f_int1 + @max_row,
 
24695
new.f_int2 = new.f_int2 - @max_row,
 
24696
new.f_charbig = '####updated per update trigger####';
 
24697
END|
 
24698
UPDATE t1
 
24699
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24700
f_charbig = '####updated per update statement itself####';
 
24701
        
 
24702
# check trigger-10 success:     1
 
24703
DROP TRIGGER trg_2;
 
24704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24706
f_charbig = CONCAT('===',f_char1,'===');
 
24707
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24708
BEGIN
 
24709
SET new.f_int1 = @my_max1 + @counter,
 
24710
new.f_int2 = @my_min2 - @counter,
 
24711
new.f_charbig = '####updated per insert trigger####';
 
24712
SET @counter = @counter + 1;
 
24713
END|
 
24714
SET @counter = 1;
 
24715
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24716
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24717
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24718
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24719
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24720
ORDER BY f_int1;
 
24721
DROP TRIGGER trg_3;
 
24722
        
 
24723
# check trigger-11 success:     1
 
24724
DELETE FROM t1
 
24725
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24726
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24727
AND f_charbig = '####updated per insert trigger####';
 
24728
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24729
BEGIN
 
24730
SET new.f_int1 = @my_max1 + @counter,
 
24731
new.f_int2 = @my_min2 - @counter,
 
24732
new.f_charbig = '####updated per insert trigger####';
 
24733
SET @counter = @counter + 1;
 
24734
END|
 
24735
SET @counter = 1;
 
24736
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24737
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24738
SELECT CAST(f_int1 AS CHAR),
 
24739
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24741
ORDER BY f_int1;
 
24742
DROP TRIGGER trg_3;
 
24743
        
 
24744
# check trigger-12 success:     1
 
24745
DELETE FROM t1
 
24746
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24747
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24748
AND f_charbig = '####updated per insert trigger####';
 
24749
ANALYZE  TABLE t1;
 
24750
Table   Op      Msg_type        Msg_text
 
24751
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
24752
CHECK    TABLE t1 EXTENDED;
 
24753
Table   Op      Msg_type        Msg_text
 
24754
test.t1 check   note    The storage engine for the table doesn't support check
 
24755
CHECKSUM TABLE t1 EXTENDED;
 
24756
Table   Checksum
 
24757
test.t1 <some_value>
 
24758
OPTIMIZE TABLE t1;
 
24759
Table   Op      Msg_type        Msg_text
 
24760
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
24761
# check layout success:    1
 
24762
REPAIR   TABLE t1 EXTENDED;
 
24763
Table   Op      Msg_type        Msg_text
 
24764
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24765
# check layout success:    1
 
24766
TRUNCATE t1;
 
24767
        
 
24768
# check TRUNCATE success:       1
 
24769
# check layout success:    1
 
24770
# End usability test (inc/partition_check.inc)
 
24771
DROP TABLE t1;
 
24772
DROP TABLE IF EXISTS t1;
 
24773
CREATE TABLE t1 (
 
24774
f_int1 INTEGER,
 
24775
f_int2 INTEGER,
 
24776
f_char1 CHAR(20),
 
24777
f_char2 CHAR(20),
 
24778
f_charbig VARCHAR(1000)
 
24779
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
24780
)
 
24781
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
24782
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24783
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24784
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24785
ALTER TABLE t1 DROP INDEX uidx1;
 
24786
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24787
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24788
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24789
# Start usability test (inc/partition_check.inc)
 
24790
create_command
 
24791
SHOW CREATE TABLE t1;
 
24792
Table   Create Table
 
24793
t1      CREATE TABLE `t1` (
 
24794
  `f_int1` int(11) DEFAULT NULL,
 
24795
  `f_int2` int(11) DEFAULT NULL,
 
24796
  `f_char1` char(20) DEFAULT NULL,
 
24797
  `f_char2` char(20) DEFAULT NULL,
 
24798
  `f_charbig` varchar(1000) DEFAULT NULL
 
24799
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
24800
 
 
24801
unified filelist
 
24802
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
24803
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
24804
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
24805
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
24806
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
24807
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
24808
 
 
24809
# check prerequisites-1 success:    1
 
24810
# check COUNT(*) success:    1
 
24811
# check MIN/MAX(f_int1) success:    1
 
24812
# check MIN/MAX(f_int2) success:    1
 
24813
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24814
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24815
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24816
WHERE f_int1 IN (2,3);
 
24817
# check prerequisites-3 success:    1
 
24818
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24819
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24820
# check read via f_int1 success: 1
 
24821
# check read via f_int2 success: 1
 
24822
        
 
24823
# check multiple-1 success:     1
 
24824
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24825
        
 
24826
# check multiple-2 success:     1
 
24827
INSERT INTO t1 SELECT * FROM t0_template
 
24828
WHERE MOD(f_int1,3) = 0;
 
24829
        
 
24830
# check multiple-3 success:     1
 
24831
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24832
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24833
AND @max_row_div2 + @max_row_div4;
 
24834
        
 
24835
# check multiple-4 success:     1
 
24836
DELETE FROM t1
 
24837
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24838
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24839
        
 
24840
# check multiple-5 success:     1
 
24841
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24842
INSERT INTO t1
 
24843
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24844
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24845
f_charbig = '#SINGLE#';
 
24846
        
 
24847
# check single-1 success:       1
 
24848
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24849
INSERT INTO t1
 
24850
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24851
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24852
f_charbig = '#SINGLE#';
 
24853
        
 
24854
# check single-2 success:       1
 
24855
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24856
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24857
UPDATE t1 SET f_int1 = @cur_value2
 
24858
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24859
        
 
24860
# check single-3 success:       1
 
24861
SET @cur_value1= -1;
 
24862
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24863
UPDATE t1 SET f_int1 = @cur_value1
 
24864
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24865
        
 
24866
# check single-4 success:       1
 
24867
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24868
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24869
        
 
24870
# check single-5 success:       1
 
24871
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24872
        
 
24873
# check single-6 success:       1
 
24874
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24875
        
 
24876
# check single-7 success:       1
 
24877
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24878
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24879
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24880
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24881
f_charbig = '#NULL#';
 
24882
INSERT INTO t1
 
24883
SET f_int1 = NULL , f_int2 = -@max_row,
 
24884
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24885
f_charbig = '#NULL#';
 
24886
# check null success:    1
 
24887
        
 
24888
# check null-1 success:         1
 
24889
UPDATE t1 SET f_int1 = -@max_row
 
24890
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24891
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24892
        
 
24893
# check null-2 success:         1
 
24894
UPDATE t1 SET f_int1 = NULL
 
24895
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24896
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24897
        
 
24898
# check null-3 success:         1
 
24899
DELETE FROM t1
 
24900
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24901
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24902
        
 
24903
# check null-4 success:         1
 
24904
DELETE FROM t1
 
24905
WHERE f_int1 = 0 AND f_int2 = 0
 
24906
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24907
AND f_charbig = '#NULL#';
 
24908
SET AUTOCOMMIT= 0;
 
24909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24910
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24911
FROM t0_template source_tab
 
24912
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24913
        
 
24914
# check transactions-1 success:         1
 
24915
COMMIT WORK;
 
24916
        
 
24917
# check transactions-2 success:         1
 
24918
ROLLBACK WORK;
 
24919
        
 
24920
# check transactions-3 success:         1
 
24921
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24922
COMMIT WORK;
 
24923
ROLLBACK WORK;
 
24924
        
 
24925
# check transactions-4 success:         1
 
24926
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24927
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24928
FROM t0_template source_tab
 
24929
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24930
        
 
24931
# check transactions-5 success:         1
 
24932
ROLLBACK WORK;
 
24933
Warnings:
 
24934
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
24935
        
 
24936
# check transactions-6 success:         1
 
24937
# INFO: Storage engine used for t1 seems to be not transactional.
 
24938
COMMIT;
 
24939
        
 
24940
# check transactions-7 success:         1
 
24941
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24942
COMMIT WORK;
 
24943
SET @@session.sql_mode = 'traditional';
 
24944
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24945
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24946
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24947
'', '', 'was inserted' FROM t0_template
 
24948
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24949
ERROR 22012: Division by 0
 
24950
COMMIT;
 
24951
        
 
24952
# check transactions-8 success:         1
 
24953
# INFO: Storage engine used for t1 seems to be unable to revert
 
24954
#       changes made by the failing statement.
 
24955
SET @@session.sql_mode = '';
 
24956
SET AUTOCOMMIT= 1;
 
24957
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24958
COMMIT WORK;
 
24959
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24960
        
 
24961
# check special-1 success:      1
 
24962
UPDATE t1 SET f_charbig = '';
 
24963
        
 
24964
# check special-2 success:      1
 
24965
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24966
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24967
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24969
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24970
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24971
'just inserted' FROM t0_template
 
24972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24973
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24974
BEGIN
 
24975
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24976
f_charbig = 'updated by trigger'
 
24977
      WHERE f_int1 = new.f_int1;
 
24978
END|
 
24979
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24980
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24982
        
 
24983
# check trigger-1 success:      1
 
24984
DROP TRIGGER trg_1;
 
24985
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24986
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24987
f_charbig = 'just inserted'
 
24988
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24989
DELETE FROM t0_aux
 
24990
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24991
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24992
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24993
'just inserted' FROM t0_template
 
24994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24995
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24996
BEGIN
 
24997
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24998
f_charbig = 'updated by trigger'
 
24999
      WHERE f_int1 = new.f_int1;
 
25000
END|
 
25001
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25002
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25004
        
 
25005
# check trigger-2 success:      1
 
25006
DROP TRIGGER trg_1;
 
25007
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25008
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25009
f_charbig = 'just inserted'
 
25010
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25011
DELETE FROM t0_aux
 
25012
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25013
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25014
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25015
'just inserted' FROM t0_template
 
25016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25017
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25018
BEGIN
 
25019
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25020
f_charbig = 'updated by trigger'
 
25021
      WHERE f_int1 = new.f_int1;
 
25022
END|
 
25023
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25024
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25025
        
 
25026
# check trigger-3 success:      1
 
25027
DROP TRIGGER trg_1;
 
25028
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25029
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25030
f_charbig = 'just inserted'
 
25031
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25032
DELETE FROM t0_aux
 
25033
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25034
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25035
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25036
'just inserted' FROM t0_template
 
25037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25038
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25039
BEGIN
 
25040
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25041
f_charbig = 'updated by trigger'
 
25042
      WHERE f_int1 = - old.f_int1;
 
25043
END|
 
25044
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25045
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25046
        
 
25047
# check trigger-4 success:      1
 
25048
DROP TRIGGER trg_1;
 
25049
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25050
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25051
f_charbig = 'just inserted'
 
25052
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25053
DELETE FROM t0_aux
 
25054
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25055
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25056
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25057
'just inserted' FROM t0_template
 
25058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25059
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25060
BEGIN
 
25061
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25062
f_charbig = 'updated by trigger'
 
25063
      WHERE f_int1 = new.f_int1;
 
25064
END|
 
25065
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25066
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25067
        
 
25068
# check trigger-5 success:      1
 
25069
DROP TRIGGER trg_1;
 
25070
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25071
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25072
f_charbig = 'just inserted'
 
25073
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25074
DELETE FROM t0_aux
 
25075
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25076
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25077
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25078
'just inserted' FROM t0_template
 
25079
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25080
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25081
BEGIN
 
25082
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25083
f_charbig = 'updated by trigger'
 
25084
      WHERE f_int1 = - old.f_int1;
 
25085
END|
 
25086
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25087
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25088
        
 
25089
# check trigger-6 success:      1
 
25090
DROP TRIGGER trg_1;
 
25091
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25092
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25093
f_charbig = 'just inserted'
 
25094
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25095
DELETE FROM t0_aux
 
25096
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25097
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25098
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25099
'just inserted' FROM t0_template
 
25100
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25101
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25102
BEGIN
 
25103
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25104
f_charbig = 'updated by trigger'
 
25105
      WHERE f_int1 = - old.f_int1;
 
25106
END|
 
25107
DELETE FROM t0_aux
 
25108
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25109
        
 
25110
# check trigger-7 success:      1
 
25111
DROP TRIGGER trg_1;
 
25112
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25113
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25114
f_charbig = 'just inserted'
 
25115
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25116
DELETE FROM t0_aux
 
25117
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25118
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25119
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25120
'just inserted' FROM t0_template
 
25121
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25122
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25123
BEGIN
 
25124
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25125
f_charbig = 'updated by trigger'
 
25126
      WHERE f_int1 = - old.f_int1;
 
25127
END|
 
25128
DELETE FROM t0_aux
 
25129
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25130
        
 
25131
# check trigger-8 success:      1
 
25132
DROP TRIGGER trg_1;
 
25133
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25134
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25135
f_charbig = 'just inserted'
 
25136
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25137
DELETE FROM t0_aux
 
25138
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25139
DELETE FROM t1
 
25140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25141
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25142
BEGIN
 
25143
SET new.f_int1 = old.f_int1 + @max_row,
 
25144
new.f_int2 = old.f_int2 - @max_row,
 
25145
new.f_charbig = '####updated per update trigger####';
 
25146
END|
 
25147
UPDATE t1
 
25148
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25149
f_charbig = '####updated per update statement itself####';
 
25150
        
 
25151
# check trigger-9 success:      1
 
25152
DROP TRIGGER trg_2;
 
25153
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25154
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25155
f_charbig = CONCAT('===',f_char1,'===');
 
25156
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25157
BEGIN
 
25158
SET new.f_int1 = new.f_int1 + @max_row,
 
25159
new.f_int2 = new.f_int2 - @max_row,
 
25160
new.f_charbig = '####updated per update trigger####';
 
25161
END|
 
25162
UPDATE t1
 
25163
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25164
f_charbig = '####updated per update statement itself####';
 
25165
        
 
25166
# check trigger-10 success:     1
 
25167
DROP TRIGGER trg_2;
 
25168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25169
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25170
f_charbig = CONCAT('===',f_char1,'===');
 
25171
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25172
BEGIN
 
25173
SET new.f_int1 = @my_max1 + @counter,
 
25174
new.f_int2 = @my_min2 - @counter,
 
25175
new.f_charbig = '####updated per insert trigger####';
 
25176
SET @counter = @counter + 1;
 
25177
END|
 
25178
SET @counter = 1;
 
25179
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25180
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25181
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25182
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25184
ORDER BY f_int1;
 
25185
DROP TRIGGER trg_3;
 
25186
        
 
25187
# check trigger-11 success:     1
 
25188
DELETE FROM t1
 
25189
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25190
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25191
AND f_charbig = '####updated per insert trigger####';
 
25192
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25193
BEGIN
 
25194
SET new.f_int1 = @my_max1 + @counter,
 
25195
new.f_int2 = @my_min2 - @counter,
 
25196
new.f_charbig = '####updated per insert trigger####';
 
25197
SET @counter = @counter + 1;
 
25198
END|
 
25199
SET @counter = 1;
 
25200
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25201
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25202
SELECT CAST(f_int1 AS CHAR),
 
25203
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25204
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25205
ORDER BY f_int1;
 
25206
DROP TRIGGER trg_3;
 
25207
        
 
25208
# check trigger-12 success:     1
 
25209
DELETE FROM t1
 
25210
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25211
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25212
AND f_charbig = '####updated per insert trigger####';
 
25213
ANALYZE  TABLE t1;
 
25214
Table   Op      Msg_type        Msg_text
 
25215
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
25216
CHECK    TABLE t1 EXTENDED;
 
25217
Table   Op      Msg_type        Msg_text
 
25218
test.t1 check   note    The storage engine for the table doesn't support check
 
25219
CHECKSUM TABLE t1 EXTENDED;
 
25220
Table   Checksum
 
25221
test.t1 <some_value>
 
25222
OPTIMIZE TABLE t1;
 
25223
Table   Op      Msg_type        Msg_text
 
25224
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
25225
# check layout success:    1
 
25226
REPAIR   TABLE t1 EXTENDED;
 
25227
Table   Op      Msg_type        Msg_text
 
25228
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25229
# check layout success:    1
 
25230
TRUNCATE t1;
 
25231
        
 
25232
# check TRUNCATE success:       1
 
25233
# check layout success:    1
 
25234
# End usability test (inc/partition_check.inc)
 
25235
DROP TABLE t1;
 
25236
CREATE TABLE t1 (
 
25237
f_int1 INTEGER,
 
25238
f_int2 INTEGER,
 
25239
f_char1 CHAR(20),
 
25240
f_char2 CHAR(20),
 
25241
f_charbig VARCHAR(1000)
 
25242
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
25243
)
 
25244
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
25245
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25246
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25247
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25248
ALTER TABLE t1 DROP INDEX uidx1;
 
25249
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25250
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25251
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25252
# Start usability test (inc/partition_check.inc)
 
25253
create_command
 
25254
SHOW CREATE TABLE t1;
 
25255
Table   Create Table
 
25256
t1      CREATE TABLE `t1` (
 
25257
  `f_int1` int(11) DEFAULT NULL,
 
25258
  `f_int2` int(11) DEFAULT NULL,
 
25259
  `f_char1` char(20) DEFAULT NULL,
 
25260
  `f_char2` char(20) DEFAULT NULL,
 
25261
  `f_charbig` varchar(1000) DEFAULT NULL
 
25262
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
25263
 
 
25264
unified filelist
 
25265
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
25266
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
25267
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
25268
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
25269
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
25270
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
25271
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
25272
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
25273
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
25274
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
25275
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
25276
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
25277
 
 
25278
# check prerequisites-1 success:    1
 
25279
# check COUNT(*) success:    1
 
25280
# check MIN/MAX(f_int1) success:    1
 
25281
# check MIN/MAX(f_int2) success:    1
 
25282
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25283
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25284
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25285
WHERE f_int1 IN (2,3);
 
25286
# check prerequisites-3 success:    1
 
25287
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25288
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25289
# check read via f_int1 success: 1
 
25290
# check read via f_int2 success: 1
 
25291
        
 
25292
# check multiple-1 success:     1
 
25293
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25294
        
 
25295
# check multiple-2 success:     1
 
25296
INSERT INTO t1 SELECT * FROM t0_template
 
25297
WHERE MOD(f_int1,3) = 0;
 
25298
        
 
25299
# check multiple-3 success:     1
 
25300
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25301
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25302
AND @max_row_div2 + @max_row_div4;
 
25303
        
 
25304
# check multiple-4 success:     1
 
25305
DELETE FROM t1
 
25306
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25307
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25308
        
 
25309
# check multiple-5 success:     1
 
25310
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25311
INSERT INTO t1
 
25312
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25313
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25314
f_charbig = '#SINGLE#';
 
25315
        
 
25316
# check single-1 success:       1
 
25317
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25318
INSERT INTO t1
 
25319
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25320
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25321
f_charbig = '#SINGLE#';
 
25322
        
 
25323
# check single-2 success:       1
 
25324
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25325
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25326
UPDATE t1 SET f_int1 = @cur_value2
 
25327
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25328
        
 
25329
# check single-3 success:       1
 
25330
SET @cur_value1= -1;
 
25331
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25332
UPDATE t1 SET f_int1 = @cur_value1
 
25333
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25334
        
 
25335
# check single-4 success:       1
 
25336
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25337
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25338
        
 
25339
# check single-5 success:       1
 
25340
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25341
        
 
25342
# check single-6 success:       1
 
25343
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25344
        
 
25345
# check single-7 success:       1
 
25346
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
25347
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25348
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25349
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25350
f_charbig = '#NULL#';
 
25351
INSERT INTO t1
 
25352
SET f_int1 = NULL , f_int2 = -@max_row,
 
25353
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25354
f_charbig = '#NULL#';
 
25355
# check null success:    1
 
25356
        
 
25357
# check null-1 success:         1
 
25358
UPDATE t1 SET f_int1 = -@max_row
 
25359
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25360
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25361
        
 
25362
# check null-2 success:         1
 
25363
UPDATE t1 SET f_int1 = NULL
 
25364
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25365
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25366
        
 
25367
# check null-3 success:         1
 
25368
DELETE FROM t1
 
25369
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25370
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25371
        
 
25372
# check null-4 success:         1
 
25373
DELETE FROM t1
 
25374
WHERE f_int1 = 0 AND f_int2 = 0
 
25375
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25376
AND f_charbig = '#NULL#';
 
25377
SET AUTOCOMMIT= 0;
 
25378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25379
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25380
FROM t0_template source_tab
 
25381
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25382
        
 
25383
# check transactions-1 success:         1
 
25384
COMMIT WORK;
 
25385
        
 
25386
# check transactions-2 success:         1
 
25387
ROLLBACK WORK;
 
25388
        
 
25389
# check transactions-3 success:         1
 
25390
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25391
COMMIT WORK;
 
25392
ROLLBACK WORK;
 
25393
        
 
25394
# check transactions-4 success:         1
 
25395
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25396
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25397
FROM t0_template source_tab
 
25398
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25399
        
 
25400
# check transactions-5 success:         1
 
25401
ROLLBACK WORK;
 
25402
Warnings:
 
25403
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
25404
        
 
25405
# check transactions-6 success:         1
 
25406
# INFO: Storage engine used for t1 seems to be not transactional.
 
25407
COMMIT;
 
25408
        
 
25409
# check transactions-7 success:         1
 
25410
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25411
COMMIT WORK;
 
25412
SET @@session.sql_mode = 'traditional';
 
25413
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25414
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25415
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25416
'', '', 'was inserted' FROM t0_template
 
25417
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25418
ERROR 22012: Division by 0
 
25419
COMMIT;
 
25420
        
 
25421
# check transactions-8 success:         1
 
25422
# INFO: Storage engine used for t1 seems to be unable to revert
 
25423
#       changes made by the failing statement.
 
25424
SET @@session.sql_mode = '';
 
25425
SET AUTOCOMMIT= 1;
 
25426
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25427
COMMIT WORK;
 
25428
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25429
        
 
25430
# check special-1 success:      1
 
25431
UPDATE t1 SET f_charbig = '';
 
25432
        
 
25433
# check special-2 success:      1
 
25434
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25435
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25436
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25438
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25439
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25440
'just inserted' FROM t0_template
 
25441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25442
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25443
BEGIN
 
25444
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25445
f_charbig = 'updated by trigger'
 
25446
      WHERE f_int1 = new.f_int1;
 
25447
END|
 
25448
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25449
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25451
        
 
25452
# check trigger-1 success:      1
 
25453
DROP TRIGGER trg_1;
 
25454
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25455
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25456
f_charbig = 'just inserted'
 
25457
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25458
DELETE FROM t0_aux
 
25459
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25460
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25461
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25462
'just inserted' FROM t0_template
 
25463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25464
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25465
BEGIN
 
25466
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25467
f_charbig = 'updated by trigger'
 
25468
      WHERE f_int1 = new.f_int1;
 
25469
END|
 
25470
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25471
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25472
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25473
        
 
25474
# check trigger-2 success:      1
 
25475
DROP TRIGGER trg_1;
 
25476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25478
f_charbig = 'just inserted'
 
25479
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25480
DELETE FROM t0_aux
 
25481
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25483
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25484
'just inserted' FROM t0_template
 
25485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25486
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25487
BEGIN
 
25488
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25489
f_charbig = 'updated by trigger'
 
25490
      WHERE f_int1 = new.f_int1;
 
25491
END|
 
25492
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25493
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25494
        
 
25495
# check trigger-3 success:      1
 
25496
DROP TRIGGER trg_1;
 
25497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25499
f_charbig = 'just inserted'
 
25500
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25501
DELETE FROM t0_aux
 
25502
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25504
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25505
'just inserted' FROM t0_template
 
25506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25507
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25508
BEGIN
 
25509
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25510
f_charbig = 'updated by trigger'
 
25511
      WHERE f_int1 = - old.f_int1;
 
25512
END|
 
25513
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25514
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25515
        
 
25516
# check trigger-4 success:      1
 
25517
DROP TRIGGER trg_1;
 
25518
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25519
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25520
f_charbig = 'just inserted'
 
25521
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25522
DELETE FROM t0_aux
 
25523
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25524
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25525
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25526
'just inserted' FROM t0_template
 
25527
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25528
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25529
BEGIN
 
25530
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25531
f_charbig = 'updated by trigger'
 
25532
      WHERE f_int1 = new.f_int1;
 
25533
END|
 
25534
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25535
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25536
        
 
25537
# check trigger-5 success:      1
 
25538
DROP TRIGGER trg_1;
 
25539
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25540
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25541
f_charbig = 'just inserted'
 
25542
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25543
DELETE FROM t0_aux
 
25544
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25546
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25547
'just inserted' FROM t0_template
 
25548
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25549
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25550
BEGIN
 
25551
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25552
f_charbig = 'updated by trigger'
 
25553
      WHERE f_int1 = - old.f_int1;
 
25554
END|
 
25555
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25556
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25557
        
 
25558
# check trigger-6 success:      1
 
25559
DROP TRIGGER trg_1;
 
25560
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25561
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25562
f_charbig = 'just inserted'
 
25563
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25564
DELETE FROM t0_aux
 
25565
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25566
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25567
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25568
'just inserted' FROM t0_template
 
25569
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25570
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25571
BEGIN
 
25572
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25573
f_charbig = 'updated by trigger'
 
25574
      WHERE f_int1 = - old.f_int1;
 
25575
END|
 
25576
DELETE FROM t0_aux
 
25577
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25578
        
 
25579
# check trigger-7 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 DELETE 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 = - old.f_int1;
 
25596
END|
 
25597
DELETE FROM t0_aux
 
25598
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25599
        
 
25600
# check trigger-8 success:      1
 
25601
DROP TRIGGER trg_1;
 
25602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25604
f_charbig = 'just inserted'
 
25605
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25606
DELETE FROM t0_aux
 
25607
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25608
DELETE FROM t1
 
25609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25610
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25611
BEGIN
 
25612
SET new.f_int1 = old.f_int1 + @max_row,
 
25613
new.f_int2 = old.f_int2 - @max_row,
 
25614
new.f_charbig = '####updated per update trigger####';
 
25615
END|
 
25616
UPDATE t1
 
25617
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25618
f_charbig = '####updated per update statement itself####';
 
25619
        
 
25620
# check trigger-9 success:      1
 
25621
DROP TRIGGER trg_2;
 
25622
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25623
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25624
f_charbig = CONCAT('===',f_char1,'===');
 
25625
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25626
BEGIN
 
25627
SET new.f_int1 = new.f_int1 + @max_row,
 
25628
new.f_int2 = new.f_int2 - @max_row,
 
25629
new.f_charbig = '####updated per update trigger####';
 
25630
END|
 
25631
UPDATE t1
 
25632
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25633
f_charbig = '####updated per update statement itself####';
 
25634
        
 
25635
# check trigger-10 success:     1
 
25636
DROP TRIGGER trg_2;
 
25637
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25638
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25639
f_charbig = CONCAT('===',f_char1,'===');
 
25640
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25641
BEGIN
 
25642
SET new.f_int1 = @my_max1 + @counter,
 
25643
new.f_int2 = @my_min2 - @counter,
 
25644
new.f_charbig = '####updated per insert trigger####';
 
25645
SET @counter = @counter + 1;
 
25646
END|
 
25647
SET @counter = 1;
 
25648
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25649
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25650
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25651
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25652
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25653
ORDER BY f_int1;
 
25654
DROP TRIGGER trg_3;
 
25655
        
 
25656
# check trigger-11 success:     1
 
25657
DELETE FROM t1
 
25658
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25659
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25660
AND f_charbig = '####updated per insert trigger####';
 
25661
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25662
BEGIN
 
25663
SET new.f_int1 = @my_max1 + @counter,
 
25664
new.f_int2 = @my_min2 - @counter,
 
25665
new.f_charbig = '####updated per insert trigger####';
 
25666
SET @counter = @counter + 1;
 
25667
END|
 
25668
SET @counter = 1;
 
25669
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25670
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25671
SELECT CAST(f_int1 AS CHAR),
 
25672
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25674
ORDER BY f_int1;
 
25675
DROP TRIGGER trg_3;
 
25676
        
 
25677
# check trigger-12 success:     1
 
25678
DELETE FROM t1
 
25679
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25680
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25681
AND f_charbig = '####updated per insert trigger####';
 
25682
ANALYZE  TABLE t1;
 
25683
Table   Op      Msg_type        Msg_text
 
25684
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
25685
CHECK    TABLE t1 EXTENDED;
 
25686
Table   Op      Msg_type        Msg_text
 
25687
test.t1 check   note    The storage engine for the table doesn't support check
 
25688
CHECKSUM TABLE t1 EXTENDED;
 
25689
Table   Checksum
 
25690
test.t1 <some_value>
 
25691
OPTIMIZE TABLE t1;
 
25692
Table   Op      Msg_type        Msg_text
 
25693
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
25694
# check layout success:    1
 
25695
REPAIR   TABLE t1 EXTENDED;
 
25696
Table   Op      Msg_type        Msg_text
 
25697
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25698
# check layout success:    1
 
25699
TRUNCATE t1;
 
25700
        
 
25701
# check TRUNCATE success:       1
 
25702
# check layout success:    1
 
25703
# End usability test (inc/partition_check.inc)
 
25704
DROP TABLE t1;
 
25705
CREATE TABLE t1 (
 
25706
f_int1 INTEGER,
 
25707
f_int2 INTEGER,
 
25708
f_char1 CHAR(20),
 
25709
f_char2 CHAR(20),
 
25710
f_charbig VARCHAR(1000)
 
25711
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
25712
)
 
25713
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
25714
(PARTITION part_3 VALUES IN (-3),
 
25715
PARTITION part_2 VALUES IN (-2),
 
25716
PARTITION part_1 VALUES IN (-1),
 
25717
PARTITION part_N VALUES IN (NULL),
 
25718
PARTITION part0 VALUES IN (0),
 
25719
PARTITION part1 VALUES IN (1),
 
25720
PARTITION part2 VALUES IN (2),
 
25721
PARTITION part3 VALUES IN (3));
 
25722
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25723
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25724
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25725
ALTER TABLE t1 DROP INDEX uidx1;
 
25726
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25727
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25728
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25729
# Start usability test (inc/partition_check.inc)
 
25730
create_command
 
25731
SHOW CREATE TABLE t1;
 
25732
Table   Create Table
 
25733
t1      CREATE TABLE `t1` (
 
25734
  `f_int1` int(11) DEFAULT NULL,
 
25735
  `f_int2` int(11) DEFAULT NULL,
 
25736
  `f_char1` char(20) DEFAULT NULL,
 
25737
  `f_char2` char(20) DEFAULT NULL,
 
25738
  `f_charbig` varchar(1000) DEFAULT NULL
 
25739
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
25740
 
 
25741
unified filelist
 
25742
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
25743
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
25744
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
25745
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
25746
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
25747
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
25748
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
25749
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
25750
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
25751
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
25752
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
25753
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
25754
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
25755
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
25756
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
25757
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
25758
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
25759
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
25760
 
 
25761
# check prerequisites-1 success:    1
 
25762
# check COUNT(*) success:    1
 
25763
# check MIN/MAX(f_int1) success:    1
 
25764
# check MIN/MAX(f_int2) success:    1
 
25765
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25766
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25767
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25768
WHERE f_int1 IN (2,3);
 
25769
# check prerequisites-3 success:    1
 
25770
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25771
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25772
# check read via f_int1 success: 1
 
25773
# check read via f_int2 success: 1
 
25774
        
 
25775
# check multiple-1 success:     1
 
25776
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25777
        
 
25778
# check multiple-2 success:     1
 
25779
INSERT INTO t1 SELECT * FROM t0_template
 
25780
WHERE MOD(f_int1,3) = 0;
 
25781
        
 
25782
# check multiple-3 success:     1
 
25783
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25784
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25785
AND @max_row_div2 + @max_row_div4;
 
25786
        
 
25787
# check multiple-4 success:     1
 
25788
DELETE FROM t1
 
25789
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25790
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25791
        
 
25792
# check multiple-5 success:     1
 
25793
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25794
INSERT INTO t1
 
25795
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25796
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25797
f_charbig = '#SINGLE#';
 
25798
        
 
25799
# check single-1 success:       1
 
25800
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25801
INSERT INTO t1
 
25802
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25803
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25804
f_charbig = '#SINGLE#';
 
25805
        
 
25806
# check single-2 success:       1
 
25807
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25808
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25809
UPDATE t1 SET f_int1 = @cur_value2
 
25810
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25811
        
 
25812
# check single-3 success:       1
 
25813
SET @cur_value1= -1;
 
25814
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25815
UPDATE t1 SET f_int1 = @cur_value1
 
25816
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25817
        
 
25818
# check single-4 success:       1
 
25819
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25820
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25821
        
 
25822
# check single-5 success:       1
 
25823
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25824
        
 
25825
# check single-6 success:       1
 
25826
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25827
        
 
25828
# check single-7 success:       1
 
25829
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
25830
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25831
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25832
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25833
f_charbig = '#NULL#';
 
25834
INSERT INTO t1
 
25835
SET f_int1 = NULL , f_int2 = -@max_row,
 
25836
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25837
f_charbig = '#NULL#';
 
25838
# check null success:    1
 
25839
        
 
25840
# check null-1 success:         1
 
25841
UPDATE t1 SET f_int1 = -@max_row
 
25842
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25843
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25844
        
 
25845
# check null-2 success:         1
 
25846
UPDATE t1 SET f_int1 = NULL
 
25847
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25848
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25849
        
 
25850
# check null-3 success:         1
 
25851
DELETE FROM t1
 
25852
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25853
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25854
        
 
25855
# check null-4 success:         1
 
25856
DELETE FROM t1
 
25857
WHERE f_int1 = 0 AND f_int2 = 0
 
25858
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25859
AND f_charbig = '#NULL#';
 
25860
SET AUTOCOMMIT= 0;
 
25861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25862
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25863
FROM t0_template source_tab
 
25864
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25865
        
 
25866
# check transactions-1 success:         1
 
25867
COMMIT WORK;
 
25868
        
 
25869
# check transactions-2 success:         1
 
25870
ROLLBACK WORK;
 
25871
        
 
25872
# check transactions-3 success:         1
 
25873
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25874
COMMIT WORK;
 
25875
ROLLBACK WORK;
 
25876
        
 
25877
# check transactions-4 success:         1
 
25878
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25879
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25880
FROM t0_template source_tab
 
25881
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25882
        
 
25883
# check transactions-5 success:         1
 
25884
ROLLBACK WORK;
 
25885
Warnings:
 
25886
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
25887
        
 
25888
# check transactions-6 success:         1
 
25889
# INFO: Storage engine used for t1 seems to be not transactional.
 
25890
COMMIT;
 
25891
        
 
25892
# check transactions-7 success:         1
 
25893
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25894
COMMIT WORK;
 
25895
SET @@session.sql_mode = 'traditional';
 
25896
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25897
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25898
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25899
'', '', 'was inserted' FROM t0_template
 
25900
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25901
ERROR 22012: Division by 0
 
25902
COMMIT;
 
25903
        
 
25904
# check transactions-8 success:         1
 
25905
# INFO: Storage engine used for t1 seems to be unable to revert
 
25906
#       changes made by the failing statement.
 
25907
SET @@session.sql_mode = '';
 
25908
SET AUTOCOMMIT= 1;
 
25909
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25910
COMMIT WORK;
 
25911
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25912
        
 
25913
# check special-1 success:      1
 
25914
UPDATE t1 SET f_charbig = '';
 
25915
        
 
25916
# check special-2 success:      1
 
25917
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25918
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25919
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25921
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25922
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25923
'just inserted' FROM t0_template
 
25924
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25925
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25926
BEGIN
 
25927
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25928
f_charbig = 'updated by trigger'
 
25929
      WHERE f_int1 = new.f_int1;
 
25930
END|
 
25931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25932
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25934
        
 
25935
# check trigger-1 success:      1
 
25936
DROP TRIGGER trg_1;
 
25937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25939
f_charbig = 'just inserted'
 
25940
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25941
DELETE FROM t0_aux
 
25942
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25943
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25944
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25945
'just inserted' FROM t0_template
 
25946
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25947
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25948
BEGIN
 
25949
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25950
f_charbig = 'updated by trigger'
 
25951
      WHERE f_int1 = new.f_int1;
 
25952
END|
 
25953
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25954
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25956
        
 
25957
# check trigger-2 success:      1
 
25958
DROP TRIGGER trg_1;
 
25959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25961
f_charbig = 'just inserted'
 
25962
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25963
DELETE FROM t0_aux
 
25964
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25965
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25966
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25967
'just inserted' FROM t0_template
 
25968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25969
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25970
BEGIN
 
25971
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25972
f_charbig = 'updated by trigger'
 
25973
      WHERE f_int1 = new.f_int1;
 
25974
END|
 
25975
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25976
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25977
        
 
25978
# check trigger-3 success:      1
 
25979
DROP TRIGGER trg_1;
 
25980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25982
f_charbig = 'just inserted'
 
25983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25984
DELETE FROM t0_aux
 
25985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25987
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25988
'just inserted' FROM t0_template
 
25989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25990
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25991
BEGIN
 
25992
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25993
f_charbig = 'updated by trigger'
 
25994
      WHERE f_int1 = - old.f_int1;
 
25995
END|
 
25996
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25997
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25998
        
 
25999
# check trigger-4 success:      1
 
26000
DROP TRIGGER trg_1;
 
26001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26003
f_charbig = 'just inserted'
 
26004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26005
DELETE FROM t0_aux
 
26006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26008
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26009
'just inserted' FROM t0_template
 
26010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26011
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26012
BEGIN
 
26013
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26014
f_charbig = 'updated by trigger'
 
26015
      WHERE f_int1 = new.f_int1;
 
26016
END|
 
26017
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26018
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26019
        
 
26020
# check trigger-5 success:      1
 
26021
DROP TRIGGER trg_1;
 
26022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26024
f_charbig = 'just inserted'
 
26025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26026
DELETE FROM t0_aux
 
26027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26030
'just inserted' FROM t0_template
 
26031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26032
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26033
BEGIN
 
26034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26035
f_charbig = 'updated by trigger'
 
26036
      WHERE f_int1 = - old.f_int1;
 
26037
END|
 
26038
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26039
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26040
        
 
26041
# check trigger-6 success:      1
 
26042
DROP TRIGGER trg_1;
 
26043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26044
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26045
f_charbig = 'just inserted'
 
26046
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26047
DELETE FROM t0_aux
 
26048
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26050
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26051
'just inserted' FROM t0_template
 
26052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26053
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26054
BEGIN
 
26055
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26056
f_charbig = 'updated by trigger'
 
26057
      WHERE f_int1 = - old.f_int1;
 
26058
END|
 
26059
DELETE FROM t0_aux
 
26060
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26061
        
 
26062
# check trigger-7 success:      1
 
26063
DROP TRIGGER trg_1;
 
26064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26066
f_charbig = 'just inserted'
 
26067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26068
DELETE FROM t0_aux
 
26069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26072
'just inserted' FROM t0_template
 
26073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26074
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26075
BEGIN
 
26076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26077
f_charbig = 'updated by trigger'
 
26078
      WHERE f_int1 = - old.f_int1;
 
26079
END|
 
26080
DELETE FROM t0_aux
 
26081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26082
        
 
26083
# check trigger-8 success:      1
 
26084
DROP TRIGGER trg_1;
 
26085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26087
f_charbig = 'just inserted'
 
26088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26089
DELETE FROM t0_aux
 
26090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26091
DELETE FROM t1
 
26092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26093
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26094
BEGIN
 
26095
SET new.f_int1 = old.f_int1 + @max_row,
 
26096
new.f_int2 = old.f_int2 - @max_row,
 
26097
new.f_charbig = '####updated per update trigger####';
 
26098
END|
 
26099
UPDATE t1
 
26100
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26101
f_charbig = '####updated per update statement itself####';
 
26102
        
 
26103
# check trigger-9 success:      1
 
26104
DROP TRIGGER trg_2;
 
26105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26107
f_charbig = CONCAT('===',f_char1,'===');
 
26108
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26109
BEGIN
 
26110
SET new.f_int1 = new.f_int1 + @max_row,
 
26111
new.f_int2 = new.f_int2 - @max_row,
 
26112
new.f_charbig = '####updated per update trigger####';
 
26113
END|
 
26114
UPDATE t1
 
26115
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26116
f_charbig = '####updated per update statement itself####';
 
26117
        
 
26118
# check trigger-10 success:     1
 
26119
DROP TRIGGER trg_2;
 
26120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26122
f_charbig = CONCAT('===',f_char1,'===');
 
26123
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26124
BEGIN
 
26125
SET new.f_int1 = @my_max1 + @counter,
 
26126
new.f_int2 = @my_min2 - @counter,
 
26127
new.f_charbig = '####updated per insert trigger####';
 
26128
SET @counter = @counter + 1;
 
26129
END|
 
26130
SET @counter = 1;
 
26131
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26132
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26133
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26134
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26136
ORDER BY f_int1;
 
26137
DROP TRIGGER trg_3;
 
26138
        
 
26139
# check trigger-11 success:     1
 
26140
DELETE FROM t1
 
26141
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26142
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26143
AND f_charbig = '####updated per insert trigger####';
 
26144
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26145
BEGIN
 
26146
SET new.f_int1 = @my_max1 + @counter,
 
26147
new.f_int2 = @my_min2 - @counter,
 
26148
new.f_charbig = '####updated per insert trigger####';
 
26149
SET @counter = @counter + 1;
 
26150
END|
 
26151
SET @counter = 1;
 
26152
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26153
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26154
SELECT CAST(f_int1 AS CHAR),
 
26155
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26157
ORDER BY f_int1;
 
26158
DROP TRIGGER trg_3;
 
26159
        
 
26160
# check trigger-12 success:     1
 
26161
DELETE FROM t1
 
26162
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26163
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26164
AND f_charbig = '####updated per insert trigger####';
 
26165
ANALYZE  TABLE t1;
 
26166
Table   Op      Msg_type        Msg_text
 
26167
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
26168
CHECK    TABLE t1 EXTENDED;
 
26169
Table   Op      Msg_type        Msg_text
 
26170
test.t1 check   note    The storage engine for the table doesn't support check
 
26171
CHECKSUM TABLE t1 EXTENDED;
 
26172
Table   Checksum
 
26173
test.t1 <some_value>
 
26174
OPTIMIZE TABLE t1;
 
26175
Table   Op      Msg_type        Msg_text
 
26176
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
26177
# check layout success:    1
 
26178
REPAIR   TABLE t1 EXTENDED;
 
26179
Table   Op      Msg_type        Msg_text
 
26180
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26181
# check layout success:    1
 
26182
TRUNCATE t1;
 
26183
        
 
26184
# check TRUNCATE success:       1
 
26185
# check layout success:    1
 
26186
# End usability test (inc/partition_check.inc)
 
26187
DROP TABLE t1;
 
26188
CREATE TABLE t1 (
 
26189
f_int1 INTEGER,
 
26190
f_int2 INTEGER,
 
26191
f_char1 CHAR(20),
 
26192
f_char2 CHAR(20),
 
26193
f_charbig VARCHAR(1000)
 
26194
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
26195
)
 
26196
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
26197
(PARTITION parta VALUES LESS THAN (0),
 
26198
PARTITION partb VALUES LESS THAN (5),
 
26199
PARTITION partc VALUES LESS THAN (10),
 
26200
PARTITION partd VALUES LESS THAN (10 + 5),
 
26201
PARTITION parte VALUES LESS THAN (20),
 
26202
PARTITION partf VALUES LESS THAN (2147483646));
 
26203
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26204
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26205
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26206
ALTER TABLE t1 DROP INDEX uidx1;
 
26207
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26208
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26209
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26210
# Start usability test (inc/partition_check.inc)
 
26211
create_command
 
26212
SHOW CREATE TABLE t1;
 
26213
Table   Create Table
 
26214
t1      CREATE TABLE `t1` (
 
26215
  `f_int1` int(11) DEFAULT NULL,
 
26216
  `f_int2` int(11) DEFAULT NULL,
 
26217
  `f_char1` char(20) DEFAULT NULL,
 
26218
  `f_char2` char(20) DEFAULT NULL,
 
26219
  `f_charbig` varchar(1000) DEFAULT NULL
 
26220
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
26221
 
 
26222
unified filelist
 
26223
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
26224
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
26225
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
26226
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
26227
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
26228
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
26229
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
26230
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
26231
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
26232
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
26233
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
26234
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
26235
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
26236
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
26237
 
 
26238
# check prerequisites-1 success:    1
 
26239
# check COUNT(*) success:    1
 
26240
# check MIN/MAX(f_int1) success:    1
 
26241
# check MIN/MAX(f_int2) success:    1
 
26242
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26243
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26244
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26245
WHERE f_int1 IN (2,3);
 
26246
# check prerequisites-3 success:    1
 
26247
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26248
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26249
# check read via f_int1 success: 1
 
26250
# check read via f_int2 success: 1
 
26251
        
 
26252
# check multiple-1 success:     1
 
26253
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26254
        
 
26255
# check multiple-2 success:     1
 
26256
INSERT INTO t1 SELECT * FROM t0_template
 
26257
WHERE MOD(f_int1,3) = 0;
 
26258
        
 
26259
# check multiple-3 success:     1
 
26260
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26261
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26262
AND @max_row_div2 + @max_row_div4;
 
26263
        
 
26264
# check multiple-4 success:     1
 
26265
DELETE FROM t1
 
26266
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26267
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26268
        
 
26269
# check multiple-5 success:     1
 
26270
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26271
INSERT INTO t1
 
26272
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26273
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26274
f_charbig = '#SINGLE#';
 
26275
        
 
26276
# check single-1 success:       1
 
26277
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26278
INSERT INTO t1
 
26279
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26280
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26281
f_charbig = '#SINGLE#';
 
26282
        
 
26283
# check single-2 success:       1
 
26284
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26285
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26286
UPDATE t1 SET f_int1 = @cur_value2
 
26287
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26288
        
 
26289
# check single-3 success:       1
 
26290
SET @cur_value1= -1;
 
26291
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26292
UPDATE t1 SET f_int1 = @cur_value1
 
26293
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26294
        
 
26295
# check single-4 success:       1
 
26296
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26297
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26298
        
 
26299
# check single-5 success:       1
 
26300
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26301
        
 
26302
# check single-6 success:       1
 
26303
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26304
ERROR HY000: Table has no partition for value 2147483647
 
26305
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26306
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26307
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26308
f_charbig = '#NULL#';
 
26309
INSERT INTO t1
 
26310
SET f_int1 = NULL , f_int2 = -@max_row,
 
26311
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26312
f_charbig = '#NULL#';
 
26313
# check null success:    1
 
26314
        
 
26315
# check null-1 success:         1
 
26316
UPDATE t1 SET f_int1 = -@max_row
 
26317
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26318
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26319
        
 
26320
# check null-2 success:         1
 
26321
UPDATE t1 SET f_int1 = NULL
 
26322
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26323
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26324
        
 
26325
# check null-3 success:         1
 
26326
DELETE FROM t1
 
26327
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26328
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26329
        
 
26330
# check null-4 success:         1
 
26331
DELETE FROM t1
 
26332
WHERE f_int1 = 0 AND f_int2 = 0
 
26333
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26334
AND f_charbig = '#NULL#';
 
26335
SET AUTOCOMMIT= 0;
 
26336
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26337
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26338
FROM t0_template source_tab
 
26339
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26340
        
 
26341
# check transactions-1 success:         1
 
26342
COMMIT WORK;
 
26343
        
 
26344
# check transactions-2 success:         1
 
26345
ROLLBACK WORK;
 
26346
        
 
26347
# check transactions-3 success:         1
 
26348
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26349
COMMIT WORK;
 
26350
ROLLBACK WORK;
 
26351
        
 
26352
# check transactions-4 success:         1
 
26353
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26354
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26355
FROM t0_template source_tab
 
26356
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26357
        
 
26358
# check transactions-5 success:         1
 
26359
ROLLBACK WORK;
 
26360
Warnings:
 
26361
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
26362
        
 
26363
# check transactions-6 success:         1
 
26364
# INFO: Storage engine used for t1 seems to be not transactional.
 
26365
COMMIT;
 
26366
        
 
26367
# check transactions-7 success:         1
 
26368
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26369
COMMIT WORK;
 
26370
SET @@session.sql_mode = 'traditional';
 
26371
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26372
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26373
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26374
'', '', 'was inserted' FROM t0_template
 
26375
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26376
ERROR 22012: Division by 0
 
26377
COMMIT;
 
26378
        
 
26379
# check transactions-8 success:         1
 
26380
# INFO: Storage engine used for t1 seems to be unable to revert
 
26381
#       changes made by the failing statement.
 
26382
SET @@session.sql_mode = '';
 
26383
SET AUTOCOMMIT= 1;
 
26384
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26385
COMMIT WORK;
 
26386
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26387
        
 
26388
# check special-1 success:      1
 
26389
UPDATE t1 SET f_charbig = '';
 
26390
        
 
26391
# check special-2 success:      1
 
26392
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26393
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26394
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26395
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26397
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26398
'just inserted' FROM t0_template
 
26399
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26400
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26401
BEGIN
 
26402
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26403
f_charbig = 'updated by trigger'
 
26404
      WHERE f_int1 = new.f_int1;
 
26405
END|
 
26406
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26407
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26409
        
 
26410
# check trigger-1 success:      1
 
26411
DROP TRIGGER trg_1;
 
26412
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26413
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26414
f_charbig = 'just inserted'
 
26415
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26416
DELETE FROM t0_aux
 
26417
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26418
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26419
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26420
'just inserted' FROM t0_template
 
26421
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26422
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26423
BEGIN
 
26424
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26425
f_charbig = 'updated by trigger'
 
26426
      WHERE f_int1 = new.f_int1;
 
26427
END|
 
26428
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26429
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26430
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26431
        
 
26432
# check trigger-2 success:      1
 
26433
DROP TRIGGER trg_1;
 
26434
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26435
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26436
f_charbig = 'just inserted'
 
26437
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26438
DELETE FROM t0_aux
 
26439
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26442
'just inserted' FROM t0_template
 
26443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26444
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26445
BEGIN
 
26446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26447
f_charbig = 'updated by trigger'
 
26448
      WHERE f_int1 = new.f_int1;
 
26449
END|
 
26450
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26451
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26452
        
 
26453
# check trigger-3 success:      1
 
26454
DROP TRIGGER trg_1;
 
26455
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26456
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26457
f_charbig = 'just inserted'
 
26458
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26459
DELETE FROM t0_aux
 
26460
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26463
'just inserted' FROM t0_template
 
26464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26465
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26466
BEGIN
 
26467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26468
f_charbig = 'updated by trigger'
 
26469
      WHERE f_int1 = - old.f_int1;
 
26470
END|
 
26471
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26472
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26473
        
 
26474
# check trigger-4 success:      1
 
26475
DROP TRIGGER trg_1;
 
26476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26478
f_charbig = 'just inserted'
 
26479
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26480
DELETE FROM t0_aux
 
26481
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26483
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26484
'just inserted' FROM t0_template
 
26485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26486
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26487
BEGIN
 
26488
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26489
f_charbig = 'updated by trigger'
 
26490
      WHERE f_int1 = new.f_int1;
 
26491
END|
 
26492
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26493
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26494
        
 
26495
# check trigger-5 success:      1
 
26496
DROP TRIGGER trg_1;
 
26497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26499
f_charbig = 'just inserted'
 
26500
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26501
DELETE FROM t0_aux
 
26502
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26504
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26505
'just inserted' FROM t0_template
 
26506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26507
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26508
BEGIN
 
26509
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26510
f_charbig = 'updated by trigger'
 
26511
      WHERE f_int1 = - old.f_int1;
 
26512
END|
 
26513
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26514
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26515
        
 
26516
# check trigger-6 success:      1
 
26517
DROP TRIGGER trg_1;
 
26518
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26519
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26520
f_charbig = 'just inserted'
 
26521
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26522
DELETE FROM t0_aux
 
26523
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26524
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26525
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26526
'just inserted' FROM t0_template
 
26527
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26528
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26529
BEGIN
 
26530
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26531
f_charbig = 'updated by trigger'
 
26532
      WHERE f_int1 = - old.f_int1;
 
26533
END|
 
26534
DELETE FROM t0_aux
 
26535
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26536
        
 
26537
# check trigger-7 success:      1
 
26538
DROP TRIGGER trg_1;
 
26539
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26540
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26541
f_charbig = 'just inserted'
 
26542
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26543
DELETE FROM t0_aux
 
26544
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26546
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26547
'just inserted' FROM t0_template
 
26548
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26549
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26550
BEGIN
 
26551
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26552
f_charbig = 'updated by trigger'
 
26553
      WHERE f_int1 = - old.f_int1;
 
26554
END|
 
26555
DELETE FROM t0_aux
 
26556
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26557
        
 
26558
# check trigger-8 success:      1
 
26559
DROP TRIGGER trg_1;
 
26560
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26561
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26562
f_charbig = 'just inserted'
 
26563
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26564
DELETE FROM t0_aux
 
26565
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26566
DELETE FROM t1
 
26567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26568
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26569
BEGIN
 
26570
SET new.f_int1 = old.f_int1 + @max_row,
 
26571
new.f_int2 = old.f_int2 - @max_row,
 
26572
new.f_charbig = '####updated per update trigger####';
 
26573
END|
 
26574
UPDATE t1
 
26575
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26576
f_charbig = '####updated per update statement itself####';
 
26577
        
 
26578
# check trigger-9 success:      1
 
26579
DROP TRIGGER trg_2;
 
26580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26581
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26582
f_charbig = CONCAT('===',f_char1,'===');
 
26583
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26584
BEGIN
 
26585
SET new.f_int1 = new.f_int1 + @max_row,
 
26586
new.f_int2 = new.f_int2 - @max_row,
 
26587
new.f_charbig = '####updated per update trigger####';
 
26588
END|
 
26589
UPDATE t1
 
26590
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26591
f_charbig = '####updated per update statement itself####';
 
26592
        
 
26593
# check trigger-10 success:     1
 
26594
DROP TRIGGER trg_2;
 
26595
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26596
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26597
f_charbig = CONCAT('===',f_char1,'===');
 
26598
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26599
BEGIN
 
26600
SET new.f_int1 = @my_max1 + @counter,
 
26601
new.f_int2 = @my_min2 - @counter,
 
26602
new.f_charbig = '####updated per insert trigger####';
 
26603
SET @counter = @counter + 1;
 
26604
END|
 
26605
SET @counter = 1;
 
26606
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26607
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26608
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26609
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26611
ORDER BY f_int1;
 
26612
DROP TRIGGER trg_3;
 
26613
        
 
26614
# check trigger-11 success:     1
 
26615
DELETE FROM t1
 
26616
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26617
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26618
AND f_charbig = '####updated per insert trigger####';
 
26619
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26620
BEGIN
 
26621
SET new.f_int1 = @my_max1 + @counter,
 
26622
new.f_int2 = @my_min2 - @counter,
 
26623
new.f_charbig = '####updated per insert trigger####';
 
26624
SET @counter = @counter + 1;
 
26625
END|
 
26626
SET @counter = 1;
 
26627
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26628
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26629
SELECT CAST(f_int1 AS CHAR),
 
26630
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26632
ORDER BY f_int1;
 
26633
DROP TRIGGER trg_3;
 
26634
        
 
26635
# check trigger-12 success:     1
 
26636
DELETE FROM t1
 
26637
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26638
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26639
AND f_charbig = '####updated per insert trigger####';
 
26640
ANALYZE  TABLE t1;
 
26641
Table   Op      Msg_type        Msg_text
 
26642
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
26643
CHECK    TABLE t1 EXTENDED;
 
26644
Table   Op      Msg_type        Msg_text
 
26645
test.t1 check   note    The storage engine for the table doesn't support check
 
26646
CHECKSUM TABLE t1 EXTENDED;
 
26647
Table   Checksum
 
26648
test.t1 <some_value>
 
26649
OPTIMIZE TABLE t1;
 
26650
Table   Op      Msg_type        Msg_text
 
26651
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
26652
# check layout success:    1
 
26653
REPAIR   TABLE t1 EXTENDED;
 
26654
Table   Op      Msg_type        Msg_text
 
26655
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26656
# check layout success:    1
 
26657
TRUNCATE t1;
 
26658
        
 
26659
# check TRUNCATE success:       1
 
26660
# check layout success:    1
 
26661
# End usability test (inc/partition_check.inc)
 
26662
DROP TABLE t1;
 
26663
CREATE TABLE t1 (
 
26664
f_int1 INTEGER,
 
26665
f_int2 INTEGER,
 
26666
f_char1 CHAR(20),
 
26667
f_char2 CHAR(20),
 
26668
f_charbig VARCHAR(1000)
 
26669
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
26670
)
 
26671
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
26672
(PARTITION parta VALUES LESS THAN (0),
 
26673
PARTITION partb VALUES LESS THAN (5),
 
26674
PARTITION partc VALUES LESS THAN (10),
 
26675
PARTITION partd VALUES LESS THAN (2147483646));
 
26676
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26677
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26678
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26679
ALTER TABLE t1 DROP INDEX uidx1;
 
26680
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26681
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26682
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26683
# Start usability test (inc/partition_check.inc)
 
26684
create_command
 
26685
SHOW CREATE TABLE t1;
 
26686
Table   Create Table
 
26687
t1      CREATE TABLE `t1` (
 
26688
  `f_int1` int(11) DEFAULT NULL,
 
26689
  `f_int2` int(11) DEFAULT NULL,
 
26690
  `f_char1` char(20) DEFAULT NULL,
 
26691
  `f_char2` char(20) DEFAULT NULL,
 
26692
  `f_charbig` varchar(1000) DEFAULT NULL
 
26693
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
26694
 
 
26695
unified filelist
 
26696
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
26697
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
26698
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
26699
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
26700
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
26701
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
26702
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
26703
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
26704
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
26705
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
26706
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
26707
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
26708
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
26709
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
26710
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
26711
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
26712
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
26713
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
26714
 
 
26715
# check prerequisites-1 success:    1
 
26716
# check COUNT(*) success:    1
 
26717
# check MIN/MAX(f_int1) success:    1
 
26718
# check MIN/MAX(f_int2) success:    1
 
26719
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26720
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26721
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26722
WHERE f_int1 IN (2,3);
 
26723
# check prerequisites-3 success:    1
 
26724
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26725
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26726
# check read via f_int1 success: 1
 
26727
# check read via f_int2 success: 1
 
26728
        
 
26729
# check multiple-1 success:     1
 
26730
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26731
        
 
26732
# check multiple-2 success:     1
 
26733
INSERT INTO t1 SELECT * FROM t0_template
 
26734
WHERE MOD(f_int1,3) = 0;
 
26735
        
 
26736
# check multiple-3 success:     1
 
26737
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26738
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26739
AND @max_row_div2 + @max_row_div4;
 
26740
        
 
26741
# check multiple-4 success:     1
 
26742
DELETE FROM t1
 
26743
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26744
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26745
        
 
26746
# check multiple-5 success:     1
 
26747
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26748
INSERT INTO t1
 
26749
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26750
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26751
f_charbig = '#SINGLE#';
 
26752
        
 
26753
# check single-1 success:       1
 
26754
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26755
INSERT INTO t1
 
26756
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26757
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26758
f_charbig = '#SINGLE#';
 
26759
        
 
26760
# check single-2 success:       1
 
26761
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26762
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26763
UPDATE t1 SET f_int1 = @cur_value2
 
26764
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26765
        
 
26766
# check single-3 success:       1
 
26767
SET @cur_value1= -1;
 
26768
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26769
UPDATE t1 SET f_int1 = @cur_value1
 
26770
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26771
        
 
26772
# check single-4 success:       1
 
26773
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26774
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26775
        
 
26776
# check single-5 success:       1
 
26777
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26778
        
 
26779
# check single-6 success:       1
 
26780
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26781
ERROR HY000: Table has no partition for value 2147483647
 
26782
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26783
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26784
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26785
f_charbig = '#NULL#';
 
26786
INSERT INTO t1
 
26787
SET f_int1 = NULL , f_int2 = -@max_row,
 
26788
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26789
f_charbig = '#NULL#';
 
26790
# check null success:    1
 
26791
        
 
26792
# check null-1 success:         1
 
26793
UPDATE t1 SET f_int1 = -@max_row
 
26794
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26795
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26796
        
 
26797
# check null-2 success:         1
 
26798
UPDATE t1 SET f_int1 = NULL
 
26799
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26800
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26801
        
 
26802
# check null-3 success:         1
 
26803
DELETE FROM t1
 
26804
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26805
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26806
        
 
26807
# check null-4 success:         1
 
26808
DELETE FROM t1
 
26809
WHERE f_int1 = 0 AND f_int2 = 0
 
26810
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26811
AND f_charbig = '#NULL#';
 
26812
SET AUTOCOMMIT= 0;
 
26813
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26814
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26815
FROM t0_template source_tab
 
26816
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26817
        
 
26818
# check transactions-1 success:         1
 
26819
COMMIT WORK;
 
26820
        
 
26821
# check transactions-2 success:         1
 
26822
ROLLBACK WORK;
 
26823
        
 
26824
# check transactions-3 success:         1
 
26825
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26826
COMMIT WORK;
 
26827
ROLLBACK WORK;
 
26828
        
 
26829
# check transactions-4 success:         1
 
26830
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26831
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26832
FROM t0_template source_tab
 
26833
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26834
        
 
26835
# check transactions-5 success:         1
 
26836
ROLLBACK WORK;
 
26837
Warnings:
 
26838
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
26839
        
 
26840
# check transactions-6 success:         1
 
26841
# INFO: Storage engine used for t1 seems to be not transactional.
 
26842
COMMIT;
 
26843
        
 
26844
# check transactions-7 success:         1
 
26845
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26846
COMMIT WORK;
 
26847
SET @@session.sql_mode = 'traditional';
 
26848
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26849
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26850
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26851
'', '', 'was inserted' FROM t0_template
 
26852
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26853
ERROR 22012: Division by 0
 
26854
COMMIT;
 
26855
        
 
26856
# check transactions-8 success:         1
 
26857
# INFO: Storage engine used for t1 seems to be unable to revert
 
26858
#       changes made by the failing statement.
 
26859
SET @@session.sql_mode = '';
 
26860
SET AUTOCOMMIT= 1;
 
26861
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26862
COMMIT WORK;
 
26863
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26864
        
 
26865
# check special-1 success:      1
 
26866
UPDATE t1 SET f_charbig = '';
 
26867
        
 
26868
# check special-2 success:      1
 
26869
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26870
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26871
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26874
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26875
'just inserted' FROM t0_template
 
26876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26877
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26878
BEGIN
 
26879
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26880
f_charbig = 'updated by trigger'
 
26881
      WHERE f_int1 = new.f_int1;
 
26882
END|
 
26883
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26884
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26886
        
 
26887
# check trigger-1 success:      1
 
26888
DROP TRIGGER trg_1;
 
26889
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26890
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26891
f_charbig = 'just inserted'
 
26892
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26893
DELETE FROM t0_aux
 
26894
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26895
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26896
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26897
'just inserted' FROM t0_template
 
26898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26899
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26900
BEGIN
 
26901
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26902
f_charbig = 'updated by trigger'
 
26903
      WHERE f_int1 = new.f_int1;
 
26904
END|
 
26905
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26906
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26908
        
 
26909
# check trigger-2 success:      1
 
26910
DROP TRIGGER trg_1;
 
26911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26912
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26913
f_charbig = 'just inserted'
 
26914
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26915
DELETE FROM t0_aux
 
26916
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26917
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26918
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26919
'just inserted' FROM t0_template
 
26920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26921
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26922
BEGIN
 
26923
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26924
f_charbig = 'updated by trigger'
 
26925
      WHERE f_int1 = new.f_int1;
 
26926
END|
 
26927
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26928
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26929
        
 
26930
# check trigger-3 success:      1
 
26931
DROP TRIGGER trg_1;
 
26932
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26933
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26934
f_charbig = 'just inserted'
 
26935
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26936
DELETE FROM t0_aux
 
26937
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26938
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26939
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26940
'just inserted' FROM t0_template
 
26941
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26942
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26943
BEGIN
 
26944
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26945
f_charbig = 'updated by trigger'
 
26946
      WHERE f_int1 = - old.f_int1;
 
26947
END|
 
26948
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26949
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26950
        
 
26951
# check trigger-4 success:      1
 
26952
DROP TRIGGER trg_1;
 
26953
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26954
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26955
f_charbig = 'just inserted'
 
26956
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26957
DELETE FROM t0_aux
 
26958
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26959
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26960
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26961
'just inserted' FROM t0_template
 
26962
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26963
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26964
BEGIN
 
26965
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26966
f_charbig = 'updated by trigger'
 
26967
      WHERE f_int1 = new.f_int1;
 
26968
END|
 
26969
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26970
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26971
        
 
26972
# check trigger-5 success:      1
 
26973
DROP TRIGGER trg_1;
 
26974
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26975
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26976
f_charbig = 'just inserted'
 
26977
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26978
DELETE FROM t0_aux
 
26979
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26980
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26981
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26982
'just inserted' FROM t0_template
 
26983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26984
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26985
BEGIN
 
26986
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26987
f_charbig = 'updated by trigger'
 
26988
      WHERE f_int1 = - old.f_int1;
 
26989
END|
 
26990
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26991
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26992
        
 
26993
# check trigger-6 success:      1
 
26994
DROP TRIGGER trg_1;
 
26995
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26996
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26997
f_charbig = 'just inserted'
 
26998
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26999
DELETE FROM t0_aux
 
27000
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27001
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27002
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27003
'just inserted' FROM t0_template
 
27004
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27005
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27006
BEGIN
 
27007
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27008
f_charbig = 'updated by trigger'
 
27009
      WHERE f_int1 = - old.f_int1;
 
27010
END|
 
27011
DELETE FROM t0_aux
 
27012
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27013
        
 
27014
# check trigger-7 success:      1
 
27015
DROP TRIGGER trg_1;
 
27016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27018
f_charbig = 'just inserted'
 
27019
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27020
DELETE FROM t0_aux
 
27021
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27022
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27023
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27024
'just inserted' FROM t0_template
 
27025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27026
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27027
BEGIN
 
27028
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27029
f_charbig = 'updated by trigger'
 
27030
      WHERE f_int1 = - old.f_int1;
 
27031
END|
 
27032
DELETE FROM t0_aux
 
27033
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27034
        
 
27035
# check trigger-8 success:      1
 
27036
DROP TRIGGER trg_1;
 
27037
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27038
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27039
f_charbig = 'just inserted'
 
27040
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27041
DELETE FROM t0_aux
 
27042
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27043
DELETE FROM t1
 
27044
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27045
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27046
BEGIN
 
27047
SET new.f_int1 = old.f_int1 + @max_row,
 
27048
new.f_int2 = old.f_int2 - @max_row,
 
27049
new.f_charbig = '####updated per update trigger####';
 
27050
END|
 
27051
UPDATE t1
 
27052
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27053
f_charbig = '####updated per update statement itself####';
 
27054
        
 
27055
# check trigger-9 success:      1
 
27056
DROP TRIGGER trg_2;
 
27057
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27058
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27059
f_charbig = CONCAT('===',f_char1,'===');
 
27060
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27061
BEGIN
 
27062
SET new.f_int1 = new.f_int1 + @max_row,
 
27063
new.f_int2 = new.f_int2 - @max_row,
 
27064
new.f_charbig = '####updated per update trigger####';
 
27065
END|
 
27066
UPDATE t1
 
27067
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27068
f_charbig = '####updated per update statement itself####';
 
27069
        
 
27070
# check trigger-10 success:     1
 
27071
DROP TRIGGER trg_2;
 
27072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27074
f_charbig = CONCAT('===',f_char1,'===');
 
27075
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27076
BEGIN
 
27077
SET new.f_int1 = @my_max1 + @counter,
 
27078
new.f_int2 = @my_min2 - @counter,
 
27079
new.f_charbig = '####updated per insert trigger####';
 
27080
SET @counter = @counter + 1;
 
27081
END|
 
27082
SET @counter = 1;
 
27083
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27084
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27085
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27086
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27088
ORDER BY f_int1;
 
27089
DROP TRIGGER trg_3;
 
27090
        
 
27091
# check trigger-11 success:     1
 
27092
DELETE FROM t1
 
27093
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27094
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27095
AND f_charbig = '####updated per insert trigger####';
 
27096
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27097
BEGIN
 
27098
SET new.f_int1 = @my_max1 + @counter,
 
27099
new.f_int2 = @my_min2 - @counter,
 
27100
new.f_charbig = '####updated per insert trigger####';
 
27101
SET @counter = @counter + 1;
 
27102
END|
 
27103
SET @counter = 1;
 
27104
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27105
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27106
SELECT CAST(f_int1 AS CHAR),
 
27107
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27109
ORDER BY f_int1;
 
27110
DROP TRIGGER trg_3;
 
27111
        
 
27112
# check trigger-12 success:     1
 
27113
DELETE FROM t1
 
27114
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27115
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27116
AND f_charbig = '####updated per insert trigger####';
 
27117
ANALYZE  TABLE t1;
 
27118
Table   Op      Msg_type        Msg_text
 
27119
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
27120
CHECK    TABLE t1 EXTENDED;
 
27121
Table   Op      Msg_type        Msg_text
 
27122
test.t1 check   note    The storage engine for the table doesn't support check
 
27123
CHECKSUM TABLE t1 EXTENDED;
 
27124
Table   Checksum
 
27125
test.t1 <some_value>
 
27126
OPTIMIZE TABLE t1;
 
27127
Table   Op      Msg_type        Msg_text
 
27128
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
27129
# check layout success:    1
 
27130
REPAIR   TABLE t1 EXTENDED;
 
27131
Table   Op      Msg_type        Msg_text
 
27132
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27133
# check layout success:    1
 
27134
TRUNCATE t1;
 
27135
        
 
27136
# check TRUNCATE success:       1
 
27137
# check layout success:    1
 
27138
# End usability test (inc/partition_check.inc)
 
27139
DROP TABLE t1;
 
27140
CREATE TABLE t1 (
 
27141
f_int1 INTEGER,
 
27142
f_int2 INTEGER,
 
27143
f_char1 CHAR(20),
 
27144
f_char2 CHAR(20),
 
27145
f_charbig VARCHAR(1000)
 
27146
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
27147
)
 
27148
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
27149
(PARTITION part1 VALUES LESS THAN (0)
 
27150
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
27151
PARTITION part2 VALUES LESS THAN (5)
 
27152
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
27153
PARTITION part3 VALUES LESS THAN (10)
 
27154
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
27155
PARTITION part4 VALUES LESS THAN (2147483646)
 
27156
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
27157
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27158
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27159
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27160
ALTER TABLE t1 DROP INDEX uidx1;
 
27161
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27162
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27163
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27164
# Start usability test (inc/partition_check.inc)
 
27165
create_command
 
27166
SHOW CREATE TABLE t1;
 
27167
Table   Create Table
 
27168
t1      CREATE TABLE `t1` (
 
27169
  `f_int1` int(11) DEFAULT NULL,
 
27170
  `f_int2` int(11) DEFAULT NULL,
 
27171
  `f_char1` char(20) DEFAULT NULL,
 
27172
  `f_char2` char(20) DEFAULT NULL,
 
27173
  `f_charbig` varchar(1000) DEFAULT NULL
 
27174
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
27175
 
 
27176
unified filelist
 
27177
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
27178
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
27179
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
27180
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
27181
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
27182
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
27183
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
27184
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
27185
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
27186
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
27187
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
27188
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
27189
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
27190
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
27191
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
27192
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
27193
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
27194
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
27195
 
 
27196
# check prerequisites-1 success:    1
 
27197
# check COUNT(*) success:    1
 
27198
# check MIN/MAX(f_int1) success:    1
 
27199
# check MIN/MAX(f_int2) success:    1
 
27200
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27201
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27202
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27203
WHERE f_int1 IN (2,3);
 
27204
# check prerequisites-3 success:    1
 
27205
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27206
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27207
# check read via f_int1 success: 1
 
27208
# check read via f_int2 success: 1
 
27209
        
 
27210
# check multiple-1 success:     1
 
27211
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27212
        
 
27213
# check multiple-2 success:     1
 
27214
INSERT INTO t1 SELECT * FROM t0_template
 
27215
WHERE MOD(f_int1,3) = 0;
 
27216
        
 
27217
# check multiple-3 success:     1
 
27218
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27219
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27220
AND @max_row_div2 + @max_row_div4;
 
27221
        
 
27222
# check multiple-4 success:     1
 
27223
DELETE FROM t1
 
27224
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27225
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27226
        
 
27227
# check multiple-5 success:     1
 
27228
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27229
INSERT INTO t1
 
27230
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27231
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27232
f_charbig = '#SINGLE#';
 
27233
        
 
27234
# check single-1 success:       1
 
27235
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27236
INSERT INTO t1
 
27237
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27238
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27239
f_charbig = '#SINGLE#';
 
27240
        
 
27241
# check single-2 success:       1
 
27242
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27243
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27244
UPDATE t1 SET f_int1 = @cur_value2
 
27245
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27246
        
 
27247
# check single-3 success:       1
 
27248
SET @cur_value1= -1;
 
27249
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27250
UPDATE t1 SET f_int1 = @cur_value1
 
27251
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27252
        
 
27253
# check single-4 success:       1
 
27254
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27255
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27256
        
 
27257
# check single-5 success:       1
 
27258
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27259
        
 
27260
# check single-6 success:       1
 
27261
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27262
ERROR HY000: Table has no partition for value 2147483647
 
27263
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27264
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27265
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27266
f_charbig = '#NULL#';
 
27267
INSERT INTO t1
 
27268
SET f_int1 = NULL , f_int2 = -@max_row,
 
27269
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27270
f_charbig = '#NULL#';
 
27271
# check null success:    1
 
27272
        
 
27273
# check null-1 success:         1
 
27274
UPDATE t1 SET f_int1 = -@max_row
 
27275
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27276
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27277
        
 
27278
# check null-2 success:         1
 
27279
UPDATE t1 SET f_int1 = NULL
 
27280
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27281
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27282
        
 
27283
# check null-3 success:         1
 
27284
DELETE FROM t1
 
27285
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27286
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27287
        
 
27288
# check null-4 success:         1
 
27289
DELETE FROM t1
 
27290
WHERE f_int1 = 0 AND f_int2 = 0
 
27291
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27292
AND f_charbig = '#NULL#';
 
27293
SET AUTOCOMMIT= 0;
 
27294
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27295
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27296
FROM t0_template source_tab
 
27297
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27298
        
 
27299
# check transactions-1 success:         1
 
27300
COMMIT WORK;
 
27301
        
 
27302
# check transactions-2 success:         1
 
27303
ROLLBACK WORK;
 
27304
        
 
27305
# check transactions-3 success:         1
 
27306
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27307
COMMIT WORK;
 
27308
ROLLBACK WORK;
 
27309
        
 
27310
# check transactions-4 success:         1
 
27311
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27312
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27313
FROM t0_template source_tab
 
27314
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27315
        
 
27316
# check transactions-5 success:         1
 
27317
ROLLBACK WORK;
 
27318
Warnings:
 
27319
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
27320
        
 
27321
# check transactions-6 success:         1
 
27322
# INFO: Storage engine used for t1 seems to be not transactional.
 
27323
COMMIT;
 
27324
        
 
27325
# check transactions-7 success:         1
 
27326
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27327
COMMIT WORK;
 
27328
SET @@session.sql_mode = 'traditional';
 
27329
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27330
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27331
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27332
'', '', 'was inserted' FROM t0_template
 
27333
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27334
ERROR 22012: Division by 0
 
27335
COMMIT;
 
27336
        
 
27337
# check transactions-8 success:         1
 
27338
# INFO: Storage engine used for t1 seems to be unable to revert
 
27339
#       changes made by the failing statement.
 
27340
SET @@session.sql_mode = '';
 
27341
SET AUTOCOMMIT= 1;
 
27342
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27343
COMMIT WORK;
 
27344
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27345
        
 
27346
# check special-1 success:      1
 
27347
UPDATE t1 SET f_charbig = '';
 
27348
        
 
27349
# check special-2 success:      1
 
27350
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27351
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27352
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27355
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27356
'just inserted' FROM t0_template
 
27357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27358
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27359
BEGIN
 
27360
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27361
f_charbig = 'updated by trigger'
 
27362
      WHERE f_int1 = new.f_int1;
 
27363
END|
 
27364
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27365
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27367
        
 
27368
# check trigger-1 success:      1
 
27369
DROP TRIGGER trg_1;
 
27370
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27371
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27372
f_charbig = 'just inserted'
 
27373
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27374
DELETE FROM t0_aux
 
27375
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27376
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27377
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27378
'just inserted' FROM t0_template
 
27379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27380
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27381
BEGIN
 
27382
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27383
f_charbig = 'updated by trigger'
 
27384
      WHERE f_int1 = new.f_int1;
 
27385
END|
 
27386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27387
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27388
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27389
        
 
27390
# check trigger-2 success:      1
 
27391
DROP TRIGGER trg_1;
 
27392
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27393
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27394
f_charbig = 'just inserted'
 
27395
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27396
DELETE FROM t0_aux
 
27397
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27399
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27400
'just inserted' FROM t0_template
 
27401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27402
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27403
BEGIN
 
27404
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27405
f_charbig = 'updated by trigger'
 
27406
      WHERE f_int1 = new.f_int1;
 
27407
END|
 
27408
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27409
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27410
        
 
27411
# check trigger-3 success:      1
 
27412
DROP TRIGGER trg_1;
 
27413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27415
f_charbig = 'just inserted'
 
27416
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27417
DELETE FROM t0_aux
 
27418
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27419
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27420
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27421
'just inserted' FROM t0_template
 
27422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27423
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27424
BEGIN
 
27425
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27426
f_charbig = 'updated by trigger'
 
27427
      WHERE f_int1 = - old.f_int1;
 
27428
END|
 
27429
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27430
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27431
        
 
27432
# check trigger-4 success:      1
 
27433
DROP TRIGGER trg_1;
 
27434
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27435
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27436
f_charbig = 'just inserted'
 
27437
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27438
DELETE FROM t0_aux
 
27439
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27442
'just inserted' FROM t0_template
 
27443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27444
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27445
BEGIN
 
27446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27447
f_charbig = 'updated by trigger'
 
27448
      WHERE f_int1 = new.f_int1;
 
27449
END|
 
27450
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27451
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27452
        
 
27453
# check trigger-5 success:      1
 
27454
DROP TRIGGER trg_1;
 
27455
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27456
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27457
f_charbig = 'just inserted'
 
27458
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27459
DELETE FROM t0_aux
 
27460
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27463
'just inserted' FROM t0_template
 
27464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27465
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27466
BEGIN
 
27467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27468
f_charbig = 'updated by trigger'
 
27469
      WHERE f_int1 = - old.f_int1;
 
27470
END|
 
27471
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27472
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27473
        
 
27474
# check trigger-6 success:      1
 
27475
DROP TRIGGER trg_1;
 
27476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27478
f_charbig = 'just inserted'
 
27479
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27480
DELETE FROM t0_aux
 
27481
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27483
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27484
'just inserted' FROM t0_template
 
27485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27486
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27487
BEGIN
 
27488
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27489
f_charbig = 'updated by trigger'
 
27490
      WHERE f_int1 = - old.f_int1;
 
27491
END|
 
27492
DELETE FROM t0_aux
 
27493
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27494
        
 
27495
# check trigger-7 success:      1
 
27496
DROP TRIGGER trg_1;
 
27497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27499
f_charbig = 'just inserted'
 
27500
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27501
DELETE FROM t0_aux
 
27502
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27504
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27505
'just inserted' FROM t0_template
 
27506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27507
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27508
BEGIN
 
27509
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27510
f_charbig = 'updated by trigger'
 
27511
      WHERE f_int1 = - old.f_int1;
 
27512
END|
 
27513
DELETE FROM t0_aux
 
27514
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27515
        
 
27516
# check trigger-8 success:      1
 
27517
DROP TRIGGER trg_1;
 
27518
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27519
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27520
f_charbig = 'just inserted'
 
27521
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27522
DELETE FROM t0_aux
 
27523
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27524
DELETE FROM t1
 
27525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27526
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27527
BEGIN
 
27528
SET new.f_int1 = old.f_int1 + @max_row,
 
27529
new.f_int2 = old.f_int2 - @max_row,
 
27530
new.f_charbig = '####updated per update trigger####';
 
27531
END|
 
27532
UPDATE t1
 
27533
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27534
f_charbig = '####updated per update statement itself####';
 
27535
        
 
27536
# check trigger-9 success:      1
 
27537
DROP TRIGGER trg_2;
 
27538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27539
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27540
f_charbig = CONCAT('===',f_char1,'===');
 
27541
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27542
BEGIN
 
27543
SET new.f_int1 = new.f_int1 + @max_row,
 
27544
new.f_int2 = new.f_int2 - @max_row,
 
27545
new.f_charbig = '####updated per update trigger####';
 
27546
END|
 
27547
UPDATE t1
 
27548
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27549
f_charbig = '####updated per update statement itself####';
 
27550
        
 
27551
# check trigger-10 success:     1
 
27552
DROP TRIGGER trg_2;
 
27553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27555
f_charbig = CONCAT('===',f_char1,'===');
 
27556
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27557
BEGIN
 
27558
SET new.f_int1 = @my_max1 + @counter,
 
27559
new.f_int2 = @my_min2 - @counter,
 
27560
new.f_charbig = '####updated per insert trigger####';
 
27561
SET @counter = @counter + 1;
 
27562
END|
 
27563
SET @counter = 1;
 
27564
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27565
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27566
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27567
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27569
ORDER BY f_int1;
 
27570
DROP TRIGGER trg_3;
 
27571
        
 
27572
# check trigger-11 success:     1
 
27573
DELETE FROM t1
 
27574
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27575
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27576
AND f_charbig = '####updated per insert trigger####';
 
27577
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27578
BEGIN
 
27579
SET new.f_int1 = @my_max1 + @counter,
 
27580
new.f_int2 = @my_min2 - @counter,
 
27581
new.f_charbig = '####updated per insert trigger####';
 
27582
SET @counter = @counter + 1;
 
27583
END|
 
27584
SET @counter = 1;
 
27585
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27586
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27587
SELECT CAST(f_int1 AS CHAR),
 
27588
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27590
ORDER BY f_int1;
 
27591
DROP TRIGGER trg_3;
 
27592
        
 
27593
# check trigger-12 success:     1
 
27594
DELETE FROM t1
 
27595
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27596
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27597
AND f_charbig = '####updated per insert trigger####';
 
27598
ANALYZE  TABLE t1;
 
27599
Table   Op      Msg_type        Msg_text
 
27600
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
27601
CHECK    TABLE t1 EXTENDED;
 
27602
Table   Op      Msg_type        Msg_text
 
27603
test.t1 check   note    The storage engine for the table doesn't support check
 
27604
CHECKSUM TABLE t1 EXTENDED;
 
27605
Table   Checksum
 
27606
test.t1 <some_value>
 
27607
OPTIMIZE TABLE t1;
 
27608
Table   Op      Msg_type        Msg_text
 
27609
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
27610
# check layout success:    1
 
27611
REPAIR   TABLE t1 EXTENDED;
 
27612
Table   Op      Msg_type        Msg_text
 
27613
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27614
# check layout success:    1
 
27615
TRUNCATE t1;
 
27616
        
 
27617
# check TRUNCATE success:       1
 
27618
# check layout success:    1
 
27619
# End usability test (inc/partition_check.inc)
 
27620
DROP TABLE t1;
 
27621
CREATE TABLE t1 (
 
27622
f_int1 INTEGER,
 
27623
f_int2 INTEGER,
 
27624
f_char1 CHAR(20),
 
27625
f_char2 CHAR(20),
 
27626
f_charbig VARCHAR(1000)
 
27627
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
27628
)
 
27629
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
27630
(PARTITION part1 VALUES IN (0)
 
27631
(SUBPARTITION sp11, SUBPARTITION sp12),
 
27632
PARTITION part2 VALUES IN (1)
 
27633
(SUBPARTITION sp21, SUBPARTITION sp22),
 
27634
PARTITION part3 VALUES IN (2)
 
27635
(SUBPARTITION sp31, SUBPARTITION sp32),
 
27636
PARTITION part4 VALUES IN (NULL)
 
27637
(SUBPARTITION sp41, SUBPARTITION sp42));
 
27638
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27639
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27640
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27641
ALTER TABLE t1 DROP INDEX uidx1;
 
27642
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27643
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27644
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27645
# Start usability test (inc/partition_check.inc)
 
27646
create_command
 
27647
SHOW CREATE TABLE t1;
 
27648
Table   Create Table
 
27649
t1      CREATE TABLE `t1` (
 
27650
  `f_int1` int(11) DEFAULT NULL,
 
27651
  `f_int2` int(11) DEFAULT NULL,
 
27652
  `f_char1` char(20) DEFAULT NULL,
 
27653
  `f_char2` char(20) DEFAULT NULL,
 
27654
  `f_charbig` varchar(1000) DEFAULT NULL
 
27655
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
27656
 
 
27657
unified filelist
 
27658
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
27659
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
27660
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
27661
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
27662
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
27663
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
27664
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
27665
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
27666
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
27667
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
27668
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
27669
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
27670
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
27671
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
27672
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
27673
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
27674
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
27675
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
27676
 
 
27677
# check prerequisites-1 success:    1
 
27678
# check COUNT(*) success:    1
 
27679
# check MIN/MAX(f_int1) success:    1
 
27680
# check MIN/MAX(f_int2) success:    1
 
27681
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27682
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27683
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27684
WHERE f_int1 IN (2,3);
 
27685
# check prerequisites-3 success:    1
 
27686
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27687
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27688
# check read via f_int1 success: 1
 
27689
# check read via f_int2 success: 1
 
27690
        
 
27691
# check multiple-1 success:     1
 
27692
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27693
        
 
27694
# check multiple-2 success:     1
 
27695
INSERT INTO t1 SELECT * FROM t0_template
 
27696
WHERE MOD(f_int1,3) = 0;
 
27697
        
 
27698
# check multiple-3 success:     1
 
27699
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27700
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27701
AND @max_row_div2 + @max_row_div4;
 
27702
        
 
27703
# check multiple-4 success:     1
 
27704
DELETE FROM t1
 
27705
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27706
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27707
        
 
27708
# check multiple-5 success:     1
 
27709
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27710
INSERT INTO t1
 
27711
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27712
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27713
f_charbig = '#SINGLE#';
 
27714
        
 
27715
# check single-1 success:       1
 
27716
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27717
INSERT INTO t1
 
27718
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27719
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27720
f_charbig = '#SINGLE#';
 
27721
        
 
27722
# check single-2 success:       1
 
27723
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27724
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27725
UPDATE t1 SET f_int1 = @cur_value2
 
27726
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27727
        
 
27728
# check single-3 success:       1
 
27729
SET @cur_value1= -1;
 
27730
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27731
UPDATE t1 SET f_int1 = @cur_value1
 
27732
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27733
        
 
27734
# check single-4 success:       1
 
27735
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27736
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27737
        
 
27738
# check single-5 success:       1
 
27739
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27740
        
 
27741
# check single-6 success:       1
 
27742
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27743
        
 
27744
# check single-7 success:       1
 
27745
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27746
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27747
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27748
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27749
f_charbig = '#NULL#';
 
27750
INSERT INTO t1
 
27751
SET f_int1 = NULL , f_int2 = -@max_row,
 
27752
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27753
f_charbig = '#NULL#';
 
27754
# check null success:    1
 
27755
        
 
27756
# check null-1 success:         1
 
27757
UPDATE t1 SET f_int1 = -@max_row
 
27758
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27759
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27760
        
 
27761
# check null-2 success:         1
 
27762
UPDATE t1 SET f_int1 = NULL
 
27763
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27764
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27765
        
 
27766
# check null-3 success:         1
 
27767
DELETE FROM t1
 
27768
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27769
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27770
        
 
27771
# check null-4 success:         1
 
27772
DELETE FROM t1
 
27773
WHERE f_int1 = 0 AND f_int2 = 0
 
27774
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27775
AND f_charbig = '#NULL#';
 
27776
SET AUTOCOMMIT= 0;
 
27777
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27778
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27779
FROM t0_template source_tab
 
27780
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27781
        
 
27782
# check transactions-1 success:         1
 
27783
COMMIT WORK;
 
27784
        
 
27785
# check transactions-2 success:         1
 
27786
ROLLBACK WORK;
 
27787
        
 
27788
# check transactions-3 success:         1
 
27789
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27790
COMMIT WORK;
 
27791
ROLLBACK WORK;
 
27792
        
 
27793
# check transactions-4 success:         1
 
27794
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27795
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27796
FROM t0_template source_tab
 
27797
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27798
        
 
27799
# check transactions-5 success:         1
 
27800
ROLLBACK WORK;
 
27801
Warnings:
 
27802
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
27803
        
 
27804
# check transactions-6 success:         1
 
27805
# INFO: Storage engine used for t1 seems to be not transactional.
 
27806
COMMIT;
 
27807
        
 
27808
# check transactions-7 success:         1
 
27809
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27810
COMMIT WORK;
 
27811
SET @@session.sql_mode = 'traditional';
 
27812
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27813
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27814
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27815
'', '', 'was inserted' FROM t0_template
 
27816
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27817
ERROR 22012: Division by 0
 
27818
COMMIT;
 
27819
        
 
27820
# check transactions-8 success:         1
 
27821
# INFO: Storage engine used for t1 seems to be unable to revert
 
27822
#       changes made by the failing statement.
 
27823
SET @@session.sql_mode = '';
 
27824
SET AUTOCOMMIT= 1;
 
27825
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27826
COMMIT WORK;
 
27827
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27828
        
 
27829
# check special-1 success:      1
 
27830
UPDATE t1 SET f_charbig = '';
 
27831
        
 
27832
# check special-2 success:      1
 
27833
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27834
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27835
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27839
'just inserted' FROM t0_template
 
27840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27841
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27842
BEGIN
 
27843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27844
f_charbig = 'updated by trigger'
 
27845
      WHERE f_int1 = new.f_int1;
 
27846
END|
 
27847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27848
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27850
        
 
27851
# check trigger-1 success:      1
 
27852
DROP TRIGGER trg_1;
 
27853
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27854
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27855
f_charbig = 'just inserted'
 
27856
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27857
DELETE FROM t0_aux
 
27858
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27859
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27860
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27861
'just inserted' FROM t0_template
 
27862
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27863
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27864
BEGIN
 
27865
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27866
f_charbig = 'updated by trigger'
 
27867
      WHERE f_int1 = new.f_int1;
 
27868
END|
 
27869
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27870
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27872
        
 
27873
# check trigger-2 success:      1
 
27874
DROP TRIGGER trg_1;
 
27875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27877
f_charbig = 'just inserted'
 
27878
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27879
DELETE FROM t0_aux
 
27880
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27881
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27882
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27883
'just inserted' FROM t0_template
 
27884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27885
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27886
BEGIN
 
27887
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27888
f_charbig = 'updated by trigger'
 
27889
      WHERE f_int1 = new.f_int1;
 
27890
END|
 
27891
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27892
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27893
        
 
27894
# check trigger-3 success:      1
 
27895
DROP TRIGGER trg_1;
 
27896
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27897
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27898
f_charbig = 'just inserted'
 
27899
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27900
DELETE FROM t0_aux
 
27901
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27903
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27904
'just inserted' FROM t0_template
 
27905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27906
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27907
BEGIN
 
27908
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27909
f_charbig = 'updated by trigger'
 
27910
      WHERE f_int1 = - old.f_int1;
 
27911
END|
 
27912
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27913
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27914
        
 
27915
# check trigger-4 success:      1
 
27916
DROP TRIGGER trg_1;
 
27917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27918
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27919
f_charbig = 'just inserted'
 
27920
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27921
DELETE FROM t0_aux
 
27922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27925
'just inserted' FROM t0_template
 
27926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27927
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27928
BEGIN
 
27929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27930
f_charbig = 'updated by trigger'
 
27931
      WHERE f_int1 = new.f_int1;
 
27932
END|
 
27933
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27934
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27935
        
 
27936
# check trigger-5 success:      1
 
27937
DROP TRIGGER trg_1;
 
27938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27940
f_charbig = 'just inserted'
 
27941
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27942
DELETE FROM t0_aux
 
27943
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27945
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27946
'just inserted' FROM t0_template
 
27947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27948
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27949
BEGIN
 
27950
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27951
f_charbig = 'updated by trigger'
 
27952
      WHERE f_int1 = - old.f_int1;
 
27953
END|
 
27954
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27955
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27956
        
 
27957
# check trigger-6 success:      1
 
27958
DROP TRIGGER trg_1;
 
27959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27961
f_charbig = 'just inserted'
 
27962
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27963
DELETE FROM t0_aux
 
27964
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27965
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27966
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27967
'just inserted' FROM t0_template
 
27968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27969
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27970
BEGIN
 
27971
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27972
f_charbig = 'updated by trigger'
 
27973
      WHERE f_int1 = - old.f_int1;
 
27974
END|
 
27975
DELETE FROM t0_aux
 
27976
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27977
        
 
27978
# check trigger-7 success:      1
 
27979
DROP TRIGGER trg_1;
 
27980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27982
f_charbig = 'just inserted'
 
27983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27984
DELETE FROM t0_aux
 
27985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27987
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27988
'just inserted' FROM t0_template
 
27989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27990
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27991
BEGIN
 
27992
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27993
f_charbig = 'updated by trigger'
 
27994
      WHERE f_int1 = - old.f_int1;
 
27995
END|
 
27996
DELETE FROM t0_aux
 
27997
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27998
        
 
27999
# check trigger-8 success:      1
 
28000
DROP TRIGGER trg_1;
 
28001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28003
f_charbig = 'just inserted'
 
28004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28005
DELETE FROM t0_aux
 
28006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28007
DELETE FROM t1
 
28008
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28009
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28010
BEGIN
 
28011
SET new.f_int1 = old.f_int1 + @max_row,
 
28012
new.f_int2 = old.f_int2 - @max_row,
 
28013
new.f_charbig = '####updated per update trigger####';
 
28014
END|
 
28015
UPDATE t1
 
28016
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28017
f_charbig = '####updated per update statement itself####';
 
28018
        
 
28019
# check trigger-9 success:      1
 
28020
DROP TRIGGER trg_2;
 
28021
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28022
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28023
f_charbig = CONCAT('===',f_char1,'===');
 
28024
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28025
BEGIN
 
28026
SET new.f_int1 = new.f_int1 + @max_row,
 
28027
new.f_int2 = new.f_int2 - @max_row,
 
28028
new.f_charbig = '####updated per update trigger####';
 
28029
END|
 
28030
UPDATE t1
 
28031
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28032
f_charbig = '####updated per update statement itself####';
 
28033
        
 
28034
# check trigger-10 success:     1
 
28035
DROP TRIGGER trg_2;
 
28036
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28037
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28038
f_charbig = CONCAT('===',f_char1,'===');
 
28039
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28040
BEGIN
 
28041
SET new.f_int1 = @my_max1 + @counter,
 
28042
new.f_int2 = @my_min2 - @counter,
 
28043
new.f_charbig = '####updated per insert trigger####';
 
28044
SET @counter = @counter + 1;
 
28045
END|
 
28046
SET @counter = 1;
 
28047
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28048
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28049
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28050
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28052
ORDER BY f_int1;
 
28053
DROP TRIGGER trg_3;
 
28054
        
 
28055
# check trigger-11 success:     1
 
28056
DELETE FROM t1
 
28057
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28058
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28059
AND f_charbig = '####updated per insert trigger####';
 
28060
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28061
BEGIN
 
28062
SET new.f_int1 = @my_max1 + @counter,
 
28063
new.f_int2 = @my_min2 - @counter,
 
28064
new.f_charbig = '####updated per insert trigger####';
 
28065
SET @counter = @counter + 1;
 
28066
END|
 
28067
SET @counter = 1;
 
28068
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28069
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28070
SELECT CAST(f_int1 AS CHAR),
 
28071
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28073
ORDER BY f_int1;
 
28074
DROP TRIGGER trg_3;
 
28075
        
 
28076
# check trigger-12 success:     1
 
28077
DELETE FROM t1
 
28078
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28079
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28080
AND f_charbig = '####updated per insert trigger####';
 
28081
ANALYZE  TABLE t1;
 
28082
Table   Op      Msg_type        Msg_text
 
28083
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
28084
CHECK    TABLE t1 EXTENDED;
 
28085
Table   Op      Msg_type        Msg_text
 
28086
test.t1 check   note    The storage engine for the table doesn't support check
 
28087
CHECKSUM TABLE t1 EXTENDED;
 
28088
Table   Checksum
 
28089
test.t1 <some_value>
 
28090
OPTIMIZE TABLE t1;
 
28091
Table   Op      Msg_type        Msg_text
 
28092
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
28093
# check layout success:    1
 
28094
REPAIR   TABLE t1 EXTENDED;
 
28095
Table   Op      Msg_type        Msg_text
 
28096
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28097
# check layout success:    1
 
28098
TRUNCATE t1;
 
28099
        
 
28100
# check TRUNCATE success:       1
 
28101
# check layout success:    1
 
28102
# End usability test (inc/partition_check.inc)
 
28103
DROP TABLE t1;
 
28104
CREATE TABLE t1 (
 
28105
f_int1 INTEGER,
 
28106
f_int2 INTEGER,
 
28107
f_char1 CHAR(20),
 
28108
f_char2 CHAR(20),
 
28109
f_charbig VARCHAR(1000)
 
28110
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
28111
)
 
28112
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
28113
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
28114
(PARTITION part1 VALUES IN (0),
 
28115
 PARTITION part2 VALUES IN (1),
 
28116
 PARTITION part3 VALUES IN (NULL));
 
28117
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28118
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28119
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28120
ALTER TABLE t1 DROP INDEX uidx1;
 
28121
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28122
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28123
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28124
# Start usability test (inc/partition_check.inc)
 
28125
create_command
 
28126
SHOW CREATE TABLE t1;
 
28127
Table   Create Table
 
28128
t1      CREATE TABLE `t1` (
 
28129
  `f_int1` int(11) DEFAULT NULL,
 
28130
  `f_int2` int(11) DEFAULT NULL,
 
28131
  `f_char1` char(20) DEFAULT NULL,
 
28132
  `f_char2` char(20) DEFAULT NULL,
 
28133
  `f_charbig` varchar(1000) DEFAULT NULL
 
28134
) ENGINE=MyISAM 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 = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
28135
 
 
28136
unified filelist
 
28137
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
28138
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
28139
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
28140
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
28141
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
28142
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
28143
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
28144
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
28145
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
28146
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
28147
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
28148
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
28149
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
28150
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
28151
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
28152
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
28153
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
28154
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
28155
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
28156
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
28157
 
 
28158
# check prerequisites-1 success:    1
 
28159
# check COUNT(*) success:    1
 
28160
# check MIN/MAX(f_int1) success:    1
 
28161
# check MIN/MAX(f_int2) success:    1
 
28162
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28163
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28164
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28165
WHERE f_int1 IN (2,3);
 
28166
# check prerequisites-3 success:    1
 
28167
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28168
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28169
# check read via f_int1 success: 1
 
28170
# check read via f_int2 success: 1
 
28171
        
 
28172
# check multiple-1 success:     1
 
28173
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28174
        
 
28175
# check multiple-2 success:     1
 
28176
INSERT INTO t1 SELECT * FROM t0_template
 
28177
WHERE MOD(f_int1,3) = 0;
 
28178
        
 
28179
# check multiple-3 success:     1
 
28180
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28181
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28182
AND @max_row_div2 + @max_row_div4;
 
28183
        
 
28184
# check multiple-4 success:     1
 
28185
DELETE FROM t1
 
28186
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28187
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28188
        
 
28189
# check multiple-5 success:     1
 
28190
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28191
INSERT INTO t1
 
28192
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28193
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28194
f_charbig = '#SINGLE#';
 
28195
        
 
28196
# check single-1 success:       1
 
28197
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28198
INSERT INTO t1
 
28199
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28200
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28201
f_charbig = '#SINGLE#';
 
28202
        
 
28203
# check single-2 success:       1
 
28204
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28205
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28206
UPDATE t1 SET f_int1 = @cur_value2
 
28207
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28208
        
 
28209
# check single-3 success:       1
 
28210
SET @cur_value1= -1;
 
28211
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28212
UPDATE t1 SET f_int1 = @cur_value1
 
28213
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28214
        
 
28215
# check single-4 success:       1
 
28216
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28217
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28218
        
 
28219
# check single-5 success:       1
 
28220
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28221
        
 
28222
# check single-6 success:       1
 
28223
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28224
        
 
28225
# check single-7 success:       1
 
28226
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28227
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28228
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28229
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28230
f_charbig = '#NULL#';
 
28231
INSERT INTO t1
 
28232
SET f_int1 = NULL , f_int2 = -@max_row,
 
28233
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28234
f_charbig = '#NULL#';
 
28235
# check null success:    1
 
28236
        
 
28237
# check null-1 success:         1
 
28238
UPDATE t1 SET f_int1 = -@max_row
 
28239
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28240
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28241
        
 
28242
# check null-2 success:         1
 
28243
UPDATE t1 SET f_int1 = NULL
 
28244
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28245
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28246
        
 
28247
# check null-3 success:         1
 
28248
DELETE FROM t1
 
28249
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28250
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28251
        
 
28252
# check null-4 success:         1
 
28253
DELETE FROM t1
 
28254
WHERE f_int1 = 0 AND f_int2 = 0
 
28255
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28256
AND f_charbig = '#NULL#';
 
28257
SET AUTOCOMMIT= 0;
 
28258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28259
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28260
FROM t0_template source_tab
 
28261
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28262
        
 
28263
# check transactions-1 success:         1
 
28264
COMMIT WORK;
 
28265
        
 
28266
# check transactions-2 success:         1
 
28267
ROLLBACK WORK;
 
28268
        
 
28269
# check transactions-3 success:         1
 
28270
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28271
COMMIT WORK;
 
28272
ROLLBACK WORK;
 
28273
        
 
28274
# check transactions-4 success:         1
 
28275
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28276
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28277
FROM t0_template source_tab
 
28278
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28279
        
 
28280
# check transactions-5 success:         1
 
28281
ROLLBACK WORK;
 
28282
Warnings:
 
28283
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
28284
        
 
28285
# check transactions-6 success:         1
 
28286
# INFO: Storage engine used for t1 seems to be not transactional.
 
28287
COMMIT;
 
28288
        
 
28289
# check transactions-7 success:         1
 
28290
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28291
COMMIT WORK;
 
28292
SET @@session.sql_mode = 'traditional';
 
28293
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28294
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28295
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28296
'', '', 'was inserted' FROM t0_template
 
28297
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28298
ERROR 22012: Division by 0
 
28299
COMMIT;
 
28300
        
 
28301
# check transactions-8 success:         1
 
28302
# INFO: Storage engine used for t1 seems to be unable to revert
 
28303
#       changes made by the failing statement.
 
28304
SET @@session.sql_mode = '';
 
28305
SET AUTOCOMMIT= 1;
 
28306
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28307
COMMIT WORK;
 
28308
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28309
        
 
28310
# check special-1 success:      1
 
28311
UPDATE t1 SET f_charbig = '';
 
28312
        
 
28313
# check special-2 success:      1
 
28314
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28315
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28316
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28319
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28320
'just inserted' FROM t0_template
 
28321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28322
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28323
BEGIN
 
28324
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28325
f_charbig = 'updated by trigger'
 
28326
      WHERE f_int1 = new.f_int1;
 
28327
END|
 
28328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28329
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28330
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28331
        
 
28332
# check trigger-1 success:      1
 
28333
DROP TRIGGER trg_1;
 
28334
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28335
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28336
f_charbig = 'just inserted'
 
28337
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28338
DELETE FROM t0_aux
 
28339
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28341
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28342
'just inserted' FROM t0_template
 
28343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28344
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28345
BEGIN
 
28346
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28347
f_charbig = 'updated by trigger'
 
28348
      WHERE f_int1 = new.f_int1;
 
28349
END|
 
28350
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28351
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28353
        
 
28354
# check trigger-2 success:      1
 
28355
DROP TRIGGER trg_1;
 
28356
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28357
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28358
f_charbig = 'just inserted'
 
28359
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28360
DELETE FROM t0_aux
 
28361
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28362
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28363
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28364
'just inserted' FROM t0_template
 
28365
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28366
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28367
BEGIN
 
28368
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28369
f_charbig = 'updated by trigger'
 
28370
      WHERE f_int1 = new.f_int1;
 
28371
END|
 
28372
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28373
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28374
        
 
28375
# check trigger-3 success:      1
 
28376
DROP TRIGGER trg_1;
 
28377
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28378
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28379
f_charbig = 'just inserted'
 
28380
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28381
DELETE FROM t0_aux
 
28382
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28383
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28384
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28385
'just inserted' FROM t0_template
 
28386
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28387
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28388
BEGIN
 
28389
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28390
f_charbig = 'updated by trigger'
 
28391
      WHERE f_int1 = - old.f_int1;
 
28392
END|
 
28393
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28394
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28395
        
 
28396
# check trigger-4 success:      1
 
28397
DROP TRIGGER trg_1;
 
28398
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28399
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28400
f_charbig = 'just inserted'
 
28401
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28402
DELETE FROM t0_aux
 
28403
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28404
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28405
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28406
'just inserted' FROM t0_template
 
28407
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28408
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28409
BEGIN
 
28410
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28411
f_charbig = 'updated by trigger'
 
28412
      WHERE f_int1 = new.f_int1;
 
28413
END|
 
28414
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28415
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28416
        
 
28417
# check trigger-5 success:      1
 
28418
DROP TRIGGER trg_1;
 
28419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28421
f_charbig = 'just inserted'
 
28422
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28423
DELETE FROM t0_aux
 
28424
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28425
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28426
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28427
'just inserted' FROM t0_template
 
28428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28429
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28430
BEGIN
 
28431
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28432
f_charbig = 'updated by trigger'
 
28433
      WHERE f_int1 = - old.f_int1;
 
28434
END|
 
28435
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28436
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28437
        
 
28438
# check trigger-6 success:      1
 
28439
DROP TRIGGER trg_1;
 
28440
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28441
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28442
f_charbig = 'just inserted'
 
28443
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28444
DELETE FROM t0_aux
 
28445
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28446
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28447
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28448
'just inserted' FROM t0_template
 
28449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28450
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28451
BEGIN
 
28452
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28453
f_charbig = 'updated by trigger'
 
28454
      WHERE f_int1 = - old.f_int1;
 
28455
END|
 
28456
DELETE FROM t0_aux
 
28457
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28458
        
 
28459
# check trigger-7 success:      1
 
28460
DROP TRIGGER trg_1;
 
28461
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28462
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28463
f_charbig = 'just inserted'
 
28464
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28465
DELETE FROM t0_aux
 
28466
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28468
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28469
'just inserted' FROM t0_template
 
28470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28471
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28472
BEGIN
 
28473
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28474
f_charbig = 'updated by trigger'
 
28475
      WHERE f_int1 = - old.f_int1;
 
28476
END|
 
28477
DELETE FROM t0_aux
 
28478
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28479
        
 
28480
# check trigger-8 success:      1
 
28481
DROP TRIGGER trg_1;
 
28482
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28483
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28484
f_charbig = 'just inserted'
 
28485
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28486
DELETE FROM t0_aux
 
28487
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28488
DELETE FROM t1
 
28489
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28490
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28491
BEGIN
 
28492
SET new.f_int1 = old.f_int1 + @max_row,
 
28493
new.f_int2 = old.f_int2 - @max_row,
 
28494
new.f_charbig = '####updated per update trigger####';
 
28495
END|
 
28496
UPDATE t1
 
28497
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28498
f_charbig = '####updated per update statement itself####';
 
28499
        
 
28500
# check trigger-9 success:      1
 
28501
DROP TRIGGER trg_2;
 
28502
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28503
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28504
f_charbig = CONCAT('===',f_char1,'===');
 
28505
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28506
BEGIN
 
28507
SET new.f_int1 = new.f_int1 + @max_row,
 
28508
new.f_int2 = new.f_int2 - @max_row,
 
28509
new.f_charbig = '####updated per update trigger####';
 
28510
END|
 
28511
UPDATE t1
 
28512
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28513
f_charbig = '####updated per update statement itself####';
 
28514
        
 
28515
# check trigger-10 success:     1
 
28516
DROP TRIGGER trg_2;
 
28517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28519
f_charbig = CONCAT('===',f_char1,'===');
 
28520
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28521
BEGIN
 
28522
SET new.f_int1 = @my_max1 + @counter,
 
28523
new.f_int2 = @my_min2 - @counter,
 
28524
new.f_charbig = '####updated per insert trigger####';
 
28525
SET @counter = @counter + 1;
 
28526
END|
 
28527
SET @counter = 1;
 
28528
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28529
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28530
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28531
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28533
ORDER BY f_int1;
 
28534
DROP TRIGGER trg_3;
 
28535
        
 
28536
# check trigger-11 success:     1
 
28537
DELETE FROM t1
 
28538
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28539
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28540
AND f_charbig = '####updated per insert trigger####';
 
28541
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28542
BEGIN
 
28543
SET new.f_int1 = @my_max1 + @counter,
 
28544
new.f_int2 = @my_min2 - @counter,
 
28545
new.f_charbig = '####updated per insert trigger####';
 
28546
SET @counter = @counter + 1;
 
28547
END|
 
28548
SET @counter = 1;
 
28549
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28550
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28551
SELECT CAST(f_int1 AS CHAR),
 
28552
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28554
ORDER BY f_int1;
 
28555
DROP TRIGGER trg_3;
 
28556
        
 
28557
# check trigger-12 success:     1
 
28558
DELETE FROM t1
 
28559
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28560
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28561
AND f_charbig = '####updated per insert trigger####';
 
28562
ANALYZE  TABLE t1;
 
28563
Table   Op      Msg_type        Msg_text
 
28564
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
28565
CHECK    TABLE t1 EXTENDED;
 
28566
Table   Op      Msg_type        Msg_text
 
28567
test.t1 check   note    The storage engine for the table doesn't support check
 
28568
CHECKSUM TABLE t1 EXTENDED;
 
28569
Table   Checksum
 
28570
test.t1 <some_value>
 
28571
OPTIMIZE TABLE t1;
 
28572
Table   Op      Msg_type        Msg_text
 
28573
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
28574
# check layout success:    1
 
28575
REPAIR   TABLE t1 EXTENDED;
 
28576
Table   Op      Msg_type        Msg_text
 
28577
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28578
# check layout success:    1
 
28579
TRUNCATE t1;
 
28580
        
 
28581
# check TRUNCATE success:       1
 
28582
# check layout success:    1
 
28583
# End usability test (inc/partition_check.inc)
 
28584
DROP TABLE t1;
 
28585
DROP TABLE IF EXISTS t1;
 
28586
CREATE TABLE t1 (
 
28587
f_int1 INTEGER,
 
28588
f_int2 INTEGER,
 
28589
f_char1 CHAR(20),
 
28590
f_char2 CHAR(20),
 
28591
f_charbig VARCHAR(1000)
 
28592
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
28593
)
 
28594
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
28595
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28596
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28597
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28598
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
28599
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28600
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28601
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28602
# Start usability test (inc/partition_check.inc)
 
28603
create_command
 
28604
SHOW CREATE TABLE t1;
 
28605
Table   Create Table
 
28606
t1      CREATE TABLE `t1` (
 
28607
  `f_int1` int(11) DEFAULT NULL,
 
28608
  `f_int2` int(11) DEFAULT NULL,
 
28609
  `f_char1` char(20) DEFAULT NULL,
 
28610
  `f_char2` char(20) DEFAULT NULL,
 
28611
  `f_charbig` varchar(1000) DEFAULT NULL
 
28612
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
28613
 
 
28614
unified filelist
 
28615
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
28616
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
28617
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
28618
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
28619
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
28620
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
28621
 
 
28622
# check prerequisites-1 success:    1
 
28623
# check COUNT(*) success:    1
 
28624
# check MIN/MAX(f_int1) success:    1
 
28625
# check MIN/MAX(f_int2) success:    1
 
28626
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28627
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28628
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28629
WHERE f_int1 IN (2,3);
 
28630
# check prerequisites-3 success:    1
 
28631
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28632
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28633
# check read via f_int1 success: 1
 
28634
# check read via f_int2 success: 1
 
28635
        
 
28636
# check multiple-1 success:     1
 
28637
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28638
        
 
28639
# check multiple-2 success:     1
 
28640
INSERT INTO t1 SELECT * FROM t0_template
 
28641
WHERE MOD(f_int1,3) = 0;
 
28642
        
 
28643
# check multiple-3 success:     1
 
28644
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28645
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28646
AND @max_row_div2 + @max_row_div4;
 
28647
        
 
28648
# check multiple-4 success:     1
 
28649
DELETE FROM t1
 
28650
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28651
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28652
        
 
28653
# check multiple-5 success:     1
 
28654
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28655
INSERT INTO t1
 
28656
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28657
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28658
f_charbig = '#SINGLE#';
 
28659
        
 
28660
# check single-1 success:       1
 
28661
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28662
INSERT INTO t1
 
28663
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28664
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28665
f_charbig = '#SINGLE#';
 
28666
        
 
28667
# check single-2 success:       1
 
28668
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28669
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28670
UPDATE t1 SET f_int1 = @cur_value2
 
28671
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28672
        
 
28673
# check single-3 success:       1
 
28674
SET @cur_value1= -1;
 
28675
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28676
UPDATE t1 SET f_int1 = @cur_value1
 
28677
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28678
        
 
28679
# check single-4 success:       1
 
28680
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28681
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28682
        
 
28683
# check single-5 success:       1
 
28684
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28685
        
 
28686
# check single-6 success:       1
 
28687
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28688
        
 
28689
# check single-7 success:       1
 
28690
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28691
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28692
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28693
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28694
f_charbig = '#NULL#';
 
28695
INSERT INTO t1
 
28696
SET f_int1 = NULL , f_int2 = -@max_row,
 
28697
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28698
f_charbig = '#NULL#';
 
28699
# check null success:    1
 
28700
        
 
28701
# check null-1 success:         1
 
28702
UPDATE t1 SET f_int1 = -@max_row
 
28703
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28704
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28705
        
 
28706
# check null-2 success:         1
 
28707
UPDATE t1 SET f_int1 = NULL
 
28708
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28709
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28710
        
 
28711
# check null-3 success:         1
 
28712
DELETE FROM t1
 
28713
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28714
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28715
        
 
28716
# check null-4 success:         1
 
28717
DELETE FROM t1
 
28718
WHERE f_int1 = 0 AND f_int2 = 0
 
28719
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28720
AND f_charbig = '#NULL#';
 
28721
SET AUTOCOMMIT= 0;
 
28722
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28723
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28724
FROM t0_template source_tab
 
28725
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28726
        
 
28727
# check transactions-1 success:         1
 
28728
COMMIT WORK;
 
28729
        
 
28730
# check transactions-2 success:         1
 
28731
ROLLBACK WORK;
 
28732
        
 
28733
# check transactions-3 success:         1
 
28734
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28735
COMMIT WORK;
 
28736
ROLLBACK WORK;
 
28737
        
 
28738
# check transactions-4 success:         1
 
28739
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28740
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28741
FROM t0_template source_tab
 
28742
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28743
        
 
28744
# check transactions-5 success:         1
 
28745
ROLLBACK WORK;
 
28746
Warnings:
 
28747
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
28748
        
 
28749
# check transactions-6 success:         1
 
28750
# INFO: Storage engine used for t1 seems to be not transactional.
 
28751
COMMIT;
 
28752
        
 
28753
# check transactions-7 success:         1
 
28754
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28755
COMMIT WORK;
 
28756
SET @@session.sql_mode = 'traditional';
 
28757
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28759
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28760
'', '', 'was inserted' FROM t0_template
 
28761
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28762
ERROR 22012: Division by 0
 
28763
COMMIT;
 
28764
        
 
28765
# check transactions-8 success:         1
 
28766
# INFO: Storage engine used for t1 seems to be unable to revert
 
28767
#       changes made by the failing statement.
 
28768
SET @@session.sql_mode = '';
 
28769
SET AUTOCOMMIT= 1;
 
28770
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28771
COMMIT WORK;
 
28772
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28773
        
 
28774
# check special-1 success:      1
 
28775
UPDATE t1 SET f_charbig = '';
 
28776
        
 
28777
# check special-2 success:      1
 
28778
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28779
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28780
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28782
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28783
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28784
'just inserted' FROM t0_template
 
28785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28786
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28787
BEGIN
 
28788
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28789
f_charbig = 'updated by trigger'
 
28790
      WHERE f_int1 = new.f_int1;
 
28791
END|
 
28792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28793
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28795
        
 
28796
# check trigger-1 success:      1
 
28797
DROP TRIGGER trg_1;
 
28798
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28799
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28800
f_charbig = 'just inserted'
 
28801
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28802
DELETE FROM t0_aux
 
28803
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28804
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28805
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28806
'just inserted' FROM t0_template
 
28807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28808
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28809
BEGIN
 
28810
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28811
f_charbig = 'updated by trigger'
 
28812
      WHERE f_int1 = new.f_int1;
 
28813
END|
 
28814
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28815
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28817
        
 
28818
# check trigger-2 success:      1
 
28819
DROP TRIGGER trg_1;
 
28820
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28821
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28822
f_charbig = 'just inserted'
 
28823
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28824
DELETE FROM t0_aux
 
28825
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28826
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28827
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28828
'just inserted' FROM t0_template
 
28829
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28830
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28831
BEGIN
 
28832
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28833
f_charbig = 'updated by trigger'
 
28834
      WHERE f_int1 = new.f_int1;
 
28835
END|
 
28836
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28837
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28838
        
 
28839
# check trigger-3 success:      1
 
28840
DROP TRIGGER trg_1;
 
28841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28842
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28843
f_charbig = 'just inserted'
 
28844
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28845
DELETE FROM t0_aux
 
28846
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28848
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28849
'just inserted' FROM t0_template
 
28850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28851
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28852
BEGIN
 
28853
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28854
f_charbig = 'updated by trigger'
 
28855
      WHERE f_int1 = - old.f_int1;
 
28856
END|
 
28857
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28858
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28859
        
 
28860
# check trigger-4 success:      1
 
28861
DROP TRIGGER trg_1;
 
28862
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28863
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28864
f_charbig = 'just inserted'
 
28865
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28866
DELETE FROM t0_aux
 
28867
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28868
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28869
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28870
'just inserted' FROM t0_template
 
28871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28872
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28873
BEGIN
 
28874
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28875
f_charbig = 'updated by trigger'
 
28876
      WHERE f_int1 = new.f_int1;
 
28877
END|
 
28878
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28879
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28880
        
 
28881
# check trigger-5 success:      1
 
28882
DROP TRIGGER trg_1;
 
28883
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28884
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28885
f_charbig = 'just inserted'
 
28886
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28887
DELETE FROM t0_aux
 
28888
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28889
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28890
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28891
'just inserted' FROM t0_template
 
28892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28893
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28894
BEGIN
 
28895
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28896
f_charbig = 'updated by trigger'
 
28897
      WHERE f_int1 = - old.f_int1;
 
28898
END|
 
28899
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28900
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28901
        
 
28902
# check trigger-6 success:      1
 
28903
DROP TRIGGER trg_1;
 
28904
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28905
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28906
f_charbig = 'just inserted'
 
28907
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28908
DELETE FROM t0_aux
 
28909
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28911
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28912
'just inserted' FROM t0_template
 
28913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28914
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28915
BEGIN
 
28916
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28917
f_charbig = 'updated by trigger'
 
28918
      WHERE f_int1 = - old.f_int1;
 
28919
END|
 
28920
DELETE FROM t0_aux
 
28921
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28922
        
 
28923
# check trigger-7 success:      1
 
28924
DROP TRIGGER trg_1;
 
28925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28927
f_charbig = 'just inserted'
 
28928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28929
DELETE FROM t0_aux
 
28930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28933
'just inserted' FROM t0_template
 
28934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28935
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28936
BEGIN
 
28937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28938
f_charbig = 'updated by trigger'
 
28939
      WHERE f_int1 = - old.f_int1;
 
28940
END|
 
28941
DELETE FROM t0_aux
 
28942
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28943
        
 
28944
# check trigger-8 success:      1
 
28945
DROP TRIGGER trg_1;
 
28946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28948
f_charbig = 'just inserted'
 
28949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28950
DELETE FROM t0_aux
 
28951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28952
DELETE FROM t1
 
28953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28954
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28955
BEGIN
 
28956
SET new.f_int1 = old.f_int1 + @max_row,
 
28957
new.f_int2 = old.f_int2 - @max_row,
 
28958
new.f_charbig = '####updated per update trigger####';
 
28959
END|
 
28960
UPDATE t1
 
28961
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28962
f_charbig = '####updated per update statement itself####';
 
28963
        
 
28964
# check trigger-9 success:      1
 
28965
DROP TRIGGER trg_2;
 
28966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28967
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28968
f_charbig = CONCAT('===',f_char1,'===');
 
28969
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28970
BEGIN
 
28971
SET new.f_int1 = new.f_int1 + @max_row,
 
28972
new.f_int2 = new.f_int2 - @max_row,
 
28973
new.f_charbig = '####updated per update trigger####';
 
28974
END|
 
28975
UPDATE t1
 
28976
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28977
f_charbig = '####updated per update statement itself####';
 
28978
        
 
28979
# check trigger-10 success:     1
 
28980
DROP TRIGGER trg_2;
 
28981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28982
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28983
f_charbig = CONCAT('===',f_char1,'===');
 
28984
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28985
BEGIN
 
28986
SET new.f_int1 = @my_max1 + @counter,
 
28987
new.f_int2 = @my_min2 - @counter,
 
28988
new.f_charbig = '####updated per insert trigger####';
 
28989
SET @counter = @counter + 1;
 
28990
END|
 
28991
SET @counter = 1;
 
28992
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28993
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28994
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28995
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28997
ORDER BY f_int1;
 
28998
DROP TRIGGER trg_3;
 
28999
        
 
29000
# check trigger-11 success:     1
 
29001
DELETE FROM t1
 
29002
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29003
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29004
AND f_charbig = '####updated per insert trigger####';
 
29005
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29006
BEGIN
 
29007
SET new.f_int1 = @my_max1 + @counter,
 
29008
new.f_int2 = @my_min2 - @counter,
 
29009
new.f_charbig = '####updated per insert trigger####';
 
29010
SET @counter = @counter + 1;
 
29011
END|
 
29012
SET @counter = 1;
 
29013
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29014
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29015
SELECT CAST(f_int1 AS CHAR),
 
29016
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29018
ORDER BY f_int1;
 
29019
DROP TRIGGER trg_3;
 
29020
        
 
29021
# check trigger-12 success:     1
 
29022
DELETE FROM t1
 
29023
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29024
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29025
AND f_charbig = '####updated per insert trigger####';
 
29026
ANALYZE  TABLE t1;
 
29027
Table   Op      Msg_type        Msg_text
 
29028
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
29029
CHECK    TABLE t1 EXTENDED;
 
29030
Table   Op      Msg_type        Msg_text
 
29031
test.t1 check   note    The storage engine for the table doesn't support check
 
29032
CHECKSUM TABLE t1 EXTENDED;
 
29033
Table   Checksum
 
29034
test.t1 <some_value>
 
29035
OPTIMIZE TABLE t1;
 
29036
Table   Op      Msg_type        Msg_text
 
29037
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
29038
# check layout success:    1
 
29039
REPAIR   TABLE t1 EXTENDED;
 
29040
Table   Op      Msg_type        Msg_text
 
29041
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29042
# check layout success:    1
 
29043
TRUNCATE t1;
 
29044
        
 
29045
# check TRUNCATE success:       1
 
29046
# check layout success:    1
 
29047
# End usability test (inc/partition_check.inc)
 
29048
DROP TABLE t1;
 
29049
CREATE TABLE t1 (
 
29050
f_int1 INTEGER,
 
29051
f_int2 INTEGER,
 
29052
f_char1 CHAR(20),
 
29053
f_char2 CHAR(20),
 
29054
f_charbig VARCHAR(1000)
 
29055
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
29056
)
 
29057
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
29058
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29059
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29060
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29061
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
29062
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29063
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29064
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29065
# Start usability test (inc/partition_check.inc)
 
29066
create_command
 
29067
SHOW CREATE TABLE t1;
 
29068
Table   Create Table
 
29069
t1      CREATE TABLE `t1` (
 
29070
  `f_int1` int(11) DEFAULT NULL,
 
29071
  `f_int2` int(11) DEFAULT NULL,
 
29072
  `f_char1` char(20) DEFAULT NULL,
 
29073
  `f_char2` char(20) DEFAULT NULL,
 
29074
  `f_charbig` varchar(1000) DEFAULT NULL
 
29075
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
29076
 
 
29077
unified filelist
 
29078
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
 
29079
$MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
 
29080
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
 
29081
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
 
29082
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD
 
29083
$MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI
 
29084
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD
 
29085
$MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI
 
29086
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD
 
29087
$MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI
 
29088
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
29089
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
29090
 
 
29091
# check prerequisites-1 success:    1
 
29092
# check COUNT(*) success:    1
 
29093
# check MIN/MAX(f_int1) success:    1
 
29094
# check MIN/MAX(f_int2) success:    1
 
29095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29096
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29097
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29098
WHERE f_int1 IN (2,3);
 
29099
# check prerequisites-3 success:    1
 
29100
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29101
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29102
# check read via f_int1 success: 1
 
29103
# check read via f_int2 success: 1
 
29104
        
 
29105
# check multiple-1 success:     1
 
29106
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29107
        
 
29108
# check multiple-2 success:     1
 
29109
INSERT INTO t1 SELECT * FROM t0_template
 
29110
WHERE MOD(f_int1,3) = 0;
 
29111
        
 
29112
# check multiple-3 success:     1
 
29113
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29114
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29115
AND @max_row_div2 + @max_row_div4;
 
29116
        
 
29117
# check multiple-4 success:     1
 
29118
DELETE FROM t1
 
29119
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29120
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29121
        
 
29122
# check multiple-5 success:     1
 
29123
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29124
INSERT INTO t1
 
29125
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29126
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29127
f_charbig = '#SINGLE#';
 
29128
        
 
29129
# check single-1 success:       1
 
29130
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29131
INSERT INTO t1
 
29132
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29133
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29134
f_charbig = '#SINGLE#';
 
29135
        
 
29136
# check single-2 success:       1
 
29137
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29138
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29139
UPDATE t1 SET f_int1 = @cur_value2
 
29140
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29141
        
 
29142
# check single-3 success:       1
 
29143
SET @cur_value1= -1;
 
29144
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29145
UPDATE t1 SET f_int1 = @cur_value1
 
29146
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29147
        
 
29148
# check single-4 success:       1
 
29149
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29150
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29151
        
 
29152
# check single-5 success:       1
 
29153
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29154
        
 
29155
# check single-6 success:       1
 
29156
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29157
        
 
29158
# check single-7 success:       1
 
29159
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29160
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29161
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29162
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29163
f_charbig = '#NULL#';
 
29164
INSERT INTO t1
 
29165
SET f_int1 = NULL , f_int2 = -@max_row,
 
29166
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29167
f_charbig = '#NULL#';
 
29168
# check null success:    1
 
29169
        
 
29170
# check null-1 success:         1
 
29171
UPDATE t1 SET f_int1 = -@max_row
 
29172
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29173
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29174
        
 
29175
# check null-2 success:         1
 
29176
UPDATE t1 SET f_int1 = NULL
 
29177
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29178
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29179
        
 
29180
# check null-3 success:         1
 
29181
DELETE FROM t1
 
29182
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29183
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29184
        
 
29185
# check null-4 success:         1
 
29186
DELETE FROM t1
 
29187
WHERE f_int1 = 0 AND f_int2 = 0
 
29188
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29189
AND f_charbig = '#NULL#';
 
29190
SET AUTOCOMMIT= 0;
 
29191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29192
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29193
FROM t0_template source_tab
 
29194
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29195
        
 
29196
# check transactions-1 success:         1
 
29197
COMMIT WORK;
 
29198
        
 
29199
# check transactions-2 success:         1
 
29200
ROLLBACK WORK;
 
29201
        
 
29202
# check transactions-3 success:         1
 
29203
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29204
COMMIT WORK;
 
29205
ROLLBACK WORK;
 
29206
        
 
29207
# check transactions-4 success:         1
 
29208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29209
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29210
FROM t0_template source_tab
 
29211
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29212
        
 
29213
# check transactions-5 success:         1
 
29214
ROLLBACK WORK;
 
29215
Warnings:
 
29216
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
29217
        
 
29218
# check transactions-6 success:         1
 
29219
# INFO: Storage engine used for t1 seems to be not transactional.
 
29220
COMMIT;
 
29221
        
 
29222
# check transactions-7 success:         1
 
29223
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29224
COMMIT WORK;
 
29225
SET @@session.sql_mode = 'traditional';
 
29226
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29227
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29228
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29229
'', '', 'was inserted' FROM t0_template
 
29230
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29231
ERROR 22012: Division by 0
 
29232
COMMIT;
 
29233
        
 
29234
# check transactions-8 success:         1
 
29235
# INFO: Storage engine used for t1 seems to be unable to revert
 
29236
#       changes made by the failing statement.
 
29237
SET @@session.sql_mode = '';
 
29238
SET AUTOCOMMIT= 1;
 
29239
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29240
COMMIT WORK;
 
29241
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29242
        
 
29243
# check special-1 success:      1
 
29244
UPDATE t1 SET f_charbig = '';
 
29245
        
 
29246
# check special-2 success:      1
 
29247
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29248
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29249
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29253
'just inserted' FROM t0_template
 
29254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29255
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29256
BEGIN
 
29257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29258
f_charbig = 'updated by trigger'
 
29259
      WHERE f_int1 = new.f_int1;
 
29260
END|
 
29261
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29262
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29264
        
 
29265
# check trigger-1 success:      1
 
29266
DROP TRIGGER trg_1;
 
29267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29269
f_charbig = 'just inserted'
 
29270
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29271
DELETE FROM t0_aux
 
29272
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29273
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29274
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29275
'just inserted' FROM t0_template
 
29276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29277
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29278
BEGIN
 
29279
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29280
f_charbig = 'updated by trigger'
 
29281
      WHERE f_int1 = new.f_int1;
 
29282
END|
 
29283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29284
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29286
        
 
29287
# check trigger-2 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
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29297
'just inserted' FROM t0_template
 
29298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29299
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29300
BEGIN
 
29301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29302
f_charbig = 'updated by trigger'
 
29303
      WHERE f_int1 = new.f_int1;
 
29304
END|
 
29305
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29307
        
 
29308
# check trigger-3 success:      1
 
29309
DROP TRIGGER trg_1;
 
29310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29312
f_charbig = 'just inserted'
 
29313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29314
DELETE FROM t0_aux
 
29315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29318
'just inserted' FROM t0_template
 
29319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29320
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29321
BEGIN
 
29322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29323
f_charbig = 'updated by trigger'
 
29324
      WHERE f_int1 = - old.f_int1;
 
29325
END|
 
29326
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29327
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29328
        
 
29329
# check trigger-4 success:      1
 
29330
DROP TRIGGER trg_1;
 
29331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29333
f_charbig = 'just inserted'
 
29334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29335
DELETE FROM t0_aux
 
29336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29339
'just inserted' FROM t0_template
 
29340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29341
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29342
BEGIN
 
29343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29344
f_charbig = 'updated by trigger'
 
29345
      WHERE f_int1 = new.f_int1;
 
29346
END|
 
29347
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29349
        
 
29350
# check trigger-5 success:      1
 
29351
DROP TRIGGER trg_1;
 
29352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29354
f_charbig = 'just inserted'
 
29355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29356
DELETE FROM t0_aux
 
29357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29360
'just inserted' FROM t0_template
 
29361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29362
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29363
BEGIN
 
29364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29365
f_charbig = 'updated by trigger'
 
29366
      WHERE f_int1 = - old.f_int1;
 
29367
END|
 
29368
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29370
        
 
29371
# check trigger-6 success:      1
 
29372
DROP TRIGGER trg_1;
 
29373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29375
f_charbig = 'just inserted'
 
29376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29377
DELETE FROM t0_aux
 
29378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29379
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29380
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29381
'just inserted' FROM t0_template
 
29382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29383
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29384
BEGIN
 
29385
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29386
f_charbig = 'updated by trigger'
 
29387
      WHERE f_int1 = - old.f_int1;
 
29388
END|
 
29389
DELETE FROM t0_aux
 
29390
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29391
        
 
29392
# check trigger-7 success:      1
 
29393
DROP TRIGGER trg_1;
 
29394
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29395
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29396
f_charbig = 'just inserted'
 
29397
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29398
DELETE FROM t0_aux
 
29399
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29400
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29401
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29402
'just inserted' FROM t0_template
 
29403
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29404
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29405
BEGIN
 
29406
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29407
f_charbig = 'updated by trigger'
 
29408
      WHERE f_int1 = - old.f_int1;
 
29409
END|
 
29410
DELETE FROM t0_aux
 
29411
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29412
        
 
29413
# check trigger-8 success:      1
 
29414
DROP TRIGGER trg_1;
 
29415
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29416
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29417
f_charbig = 'just inserted'
 
29418
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29419
DELETE FROM t0_aux
 
29420
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29421
DELETE FROM t1
 
29422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29423
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29424
BEGIN
 
29425
SET new.f_int1 = old.f_int1 + @max_row,
 
29426
new.f_int2 = old.f_int2 - @max_row,
 
29427
new.f_charbig = '####updated per update trigger####';
 
29428
END|
 
29429
UPDATE t1
 
29430
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29431
f_charbig = '####updated per update statement itself####';
 
29432
        
 
29433
# check trigger-9 success:      1
 
29434
DROP TRIGGER trg_2;
 
29435
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29436
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29437
f_charbig = CONCAT('===',f_char1,'===');
 
29438
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29439
BEGIN
 
29440
SET new.f_int1 = new.f_int1 + @max_row,
 
29441
new.f_int2 = new.f_int2 - @max_row,
 
29442
new.f_charbig = '####updated per update trigger####';
 
29443
END|
 
29444
UPDATE t1
 
29445
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29446
f_charbig = '####updated per update statement itself####';
 
29447
        
 
29448
# check trigger-10 success:     1
 
29449
DROP TRIGGER trg_2;
 
29450
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29451
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29452
f_charbig = CONCAT('===',f_char1,'===');
 
29453
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29454
BEGIN
 
29455
SET new.f_int1 = @my_max1 + @counter,
 
29456
new.f_int2 = @my_min2 - @counter,
 
29457
new.f_charbig = '####updated per insert trigger####';
 
29458
SET @counter = @counter + 1;
 
29459
END|
 
29460
SET @counter = 1;
 
29461
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29462
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29463
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29464
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29465
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29466
ORDER BY f_int1;
 
29467
DROP TRIGGER trg_3;
 
29468
        
 
29469
# check trigger-11 success:     1
 
29470
DELETE FROM t1
 
29471
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29472
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29473
AND f_charbig = '####updated per insert trigger####';
 
29474
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29475
BEGIN
 
29476
SET new.f_int1 = @my_max1 + @counter,
 
29477
new.f_int2 = @my_min2 - @counter,
 
29478
new.f_charbig = '####updated per insert trigger####';
 
29479
SET @counter = @counter + 1;
 
29480
END|
 
29481
SET @counter = 1;
 
29482
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29483
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29484
SELECT CAST(f_int1 AS CHAR),
 
29485
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29487
ORDER BY f_int1;
 
29488
DROP TRIGGER trg_3;
 
29489
        
 
29490
# check trigger-12 success:     1
 
29491
DELETE FROM t1
 
29492
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29493
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29494
AND f_charbig = '####updated per insert trigger####';
 
29495
ANALYZE  TABLE t1;
 
29496
Table   Op      Msg_type        Msg_text
 
29497
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
29498
CHECK    TABLE t1 EXTENDED;
 
29499
Table   Op      Msg_type        Msg_text
 
29500
test.t1 check   note    The storage engine for the table doesn't support check
 
29501
CHECKSUM TABLE t1 EXTENDED;
 
29502
Table   Checksum
 
29503
test.t1 <some_value>
 
29504
OPTIMIZE TABLE t1;
 
29505
Table   Op      Msg_type        Msg_text
 
29506
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
29507
# check layout success:    1
 
29508
REPAIR   TABLE t1 EXTENDED;
 
29509
Table   Op      Msg_type        Msg_text
 
29510
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29511
# check layout success:    1
 
29512
TRUNCATE t1;
 
29513
        
 
29514
# check TRUNCATE success:       1
 
29515
# check layout success:    1
 
29516
# End usability test (inc/partition_check.inc)
 
29517
DROP TABLE t1;
 
29518
CREATE TABLE t1 (
 
29519
f_int1 INTEGER,
 
29520
f_int2 INTEGER,
 
29521
f_char1 CHAR(20),
 
29522
f_char2 CHAR(20),
 
29523
f_charbig VARCHAR(1000)
 
29524
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
29525
)
 
29526
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
29527
(PARTITION part_3 VALUES IN (-3),
 
29528
PARTITION part_2 VALUES IN (-2),
 
29529
PARTITION part_1 VALUES IN (-1),
 
29530
PARTITION part_N VALUES IN (NULL),
 
29531
PARTITION part0 VALUES IN (0),
 
29532
PARTITION part1 VALUES IN (1),
 
29533
PARTITION part2 VALUES IN (2),
 
29534
PARTITION part3 VALUES IN (3));
 
29535
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29536
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29537
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29538
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
29539
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29540
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29541
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29542
# Start usability test (inc/partition_check.inc)
 
29543
create_command
 
29544
SHOW CREATE TABLE t1;
 
29545
Table   Create Table
 
29546
t1      CREATE TABLE `t1` (
 
29547
  `f_int1` int(11) DEFAULT NULL,
 
29548
  `f_int2` int(11) DEFAULT NULL,
 
29549
  `f_char1` char(20) DEFAULT NULL,
 
29550
  `f_char2` char(20) DEFAULT NULL,
 
29551
  `f_charbig` varchar(1000) DEFAULT NULL
 
29552
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
29553
 
 
29554
unified filelist
 
29555
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
29556
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
29557
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
29558
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
29559
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
29560
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
29561
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
29562
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
29563
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
29564
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
29565
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
29566
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
29567
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
29568
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
29569
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
29570
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
29571
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
29572
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
29573
 
 
29574
# check prerequisites-1 success:    1
 
29575
# check COUNT(*) success:    1
 
29576
# check MIN/MAX(f_int1) success:    1
 
29577
# check MIN/MAX(f_int2) success:    1
 
29578
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29579
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29580
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29581
WHERE f_int1 IN (2,3);
 
29582
# check prerequisites-3 success:    1
 
29583
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29584
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29585
# check read via f_int1 success: 1
 
29586
# check read via f_int2 success: 1
 
29587
        
 
29588
# check multiple-1 success:     1
 
29589
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29590
        
 
29591
# check multiple-2 success:     1
 
29592
INSERT INTO t1 SELECT * FROM t0_template
 
29593
WHERE MOD(f_int1,3) = 0;
 
29594
        
 
29595
# check multiple-3 success:     1
 
29596
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29597
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29598
AND @max_row_div2 + @max_row_div4;
 
29599
        
 
29600
# check multiple-4 success:     1
 
29601
DELETE FROM t1
 
29602
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29603
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29604
        
 
29605
# check multiple-5 success:     1
 
29606
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29607
INSERT INTO t1
 
29608
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29609
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29610
f_charbig = '#SINGLE#';
 
29611
        
 
29612
# check single-1 success:       1
 
29613
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29614
INSERT INTO t1
 
29615
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29616
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29617
f_charbig = '#SINGLE#';
 
29618
        
 
29619
# check single-2 success:       1
 
29620
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29621
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29622
UPDATE t1 SET f_int1 = @cur_value2
 
29623
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29624
        
 
29625
# check single-3 success:       1
 
29626
SET @cur_value1= -1;
 
29627
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29628
UPDATE t1 SET f_int1 = @cur_value1
 
29629
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29630
        
 
29631
# check single-4 success:       1
 
29632
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29633
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29634
        
 
29635
# check single-5 success:       1
 
29636
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29637
        
 
29638
# check single-6 success:       1
 
29639
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29640
        
 
29641
# check single-7 success:       1
 
29642
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29643
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29644
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29645
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29646
f_charbig = '#NULL#';
 
29647
INSERT INTO t1
 
29648
SET f_int1 = NULL , f_int2 = -@max_row,
 
29649
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29650
f_charbig = '#NULL#';
 
29651
# check null success:    1
 
29652
        
 
29653
# check null-1 success:         1
 
29654
UPDATE t1 SET f_int1 = -@max_row
 
29655
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29656
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29657
        
 
29658
# check null-2 success:         1
 
29659
UPDATE t1 SET f_int1 = NULL
 
29660
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29661
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29662
        
 
29663
# check null-3 success:         1
 
29664
DELETE FROM t1
 
29665
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29666
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29667
        
 
29668
# check null-4 success:         1
 
29669
DELETE FROM t1
 
29670
WHERE f_int1 = 0 AND f_int2 = 0
 
29671
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29672
AND f_charbig = '#NULL#';
 
29673
SET AUTOCOMMIT= 0;
 
29674
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29675
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29676
FROM t0_template source_tab
 
29677
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29678
        
 
29679
# check transactions-1 success:         1
 
29680
COMMIT WORK;
 
29681
        
 
29682
# check transactions-2 success:         1
 
29683
ROLLBACK WORK;
 
29684
        
 
29685
# check transactions-3 success:         1
 
29686
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29687
COMMIT WORK;
 
29688
ROLLBACK WORK;
 
29689
        
 
29690
# check transactions-4 success:         1
 
29691
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29692
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29693
FROM t0_template source_tab
 
29694
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29695
        
 
29696
# check transactions-5 success:         1
 
29697
ROLLBACK WORK;
 
29698
Warnings:
 
29699
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
29700
        
 
29701
# check transactions-6 success:         1
 
29702
# INFO: Storage engine used for t1 seems to be not transactional.
 
29703
COMMIT;
 
29704
        
 
29705
# check transactions-7 success:         1
 
29706
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29707
COMMIT WORK;
 
29708
SET @@session.sql_mode = 'traditional';
 
29709
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29710
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29711
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29712
'', '', 'was inserted' FROM t0_template
 
29713
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29714
ERROR 22012: Division by 0
 
29715
COMMIT;
 
29716
        
 
29717
# check transactions-8 success:         1
 
29718
# INFO: Storage engine used for t1 seems to be unable to revert
 
29719
#       changes made by the failing statement.
 
29720
SET @@session.sql_mode = '';
 
29721
SET AUTOCOMMIT= 1;
 
29722
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29723
COMMIT WORK;
 
29724
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29725
        
 
29726
# check special-1 success:      1
 
29727
UPDATE t1 SET f_charbig = '';
 
29728
        
 
29729
# check special-2 success:      1
 
29730
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29731
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29732
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29736
'just inserted' FROM t0_template
 
29737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29738
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29739
BEGIN
 
29740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29741
f_charbig = 'updated by trigger'
 
29742
      WHERE f_int1 = new.f_int1;
 
29743
END|
 
29744
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29745
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29747
        
 
29748
# check trigger-1 success:      1
 
29749
DROP TRIGGER trg_1;
 
29750
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29751
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29752
f_charbig = 'just inserted'
 
29753
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29754
DELETE FROM t0_aux
 
29755
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29756
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29757
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29758
'just inserted' FROM t0_template
 
29759
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29760
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29761
BEGIN
 
29762
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29763
f_charbig = 'updated by trigger'
 
29764
      WHERE f_int1 = new.f_int1;
 
29765
END|
 
29766
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29767
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29769
        
 
29770
# check trigger-2 success:      1
 
29771
DROP TRIGGER trg_1;
 
29772
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29773
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29774
f_charbig = 'just inserted'
 
29775
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29776
DELETE FROM t0_aux
 
29777
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29779
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29780
'just inserted' FROM t0_template
 
29781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29782
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29783
BEGIN
 
29784
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29785
f_charbig = 'updated by trigger'
 
29786
      WHERE f_int1 = new.f_int1;
 
29787
END|
 
29788
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29789
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29790
        
 
29791
# check trigger-3 success:      1
 
29792
DROP TRIGGER trg_1;
 
29793
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29794
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29795
f_charbig = 'just inserted'
 
29796
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29797
DELETE FROM t0_aux
 
29798
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29799
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29800
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29801
'just inserted' FROM t0_template
 
29802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29803
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29804
BEGIN
 
29805
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29806
f_charbig = 'updated by trigger'
 
29807
      WHERE f_int1 = - old.f_int1;
 
29808
END|
 
29809
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29810
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29811
        
 
29812
# check trigger-4 success:      1
 
29813
DROP TRIGGER trg_1;
 
29814
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29815
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29816
f_charbig = 'just inserted'
 
29817
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29818
DELETE FROM t0_aux
 
29819
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29820
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29821
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29822
'just inserted' FROM t0_template
 
29823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29824
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29825
BEGIN
 
29826
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29827
f_charbig = 'updated by trigger'
 
29828
      WHERE f_int1 = new.f_int1;
 
29829
END|
 
29830
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29831
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29832
        
 
29833
# check trigger-5 success:      1
 
29834
DROP TRIGGER trg_1;
 
29835
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29836
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29837
f_charbig = 'just inserted'
 
29838
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29839
DELETE FROM t0_aux
 
29840
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29842
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29843
'just inserted' FROM t0_template
 
29844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29845
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29846
BEGIN
 
29847
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29848
f_charbig = 'updated by trigger'
 
29849
      WHERE f_int1 = - old.f_int1;
 
29850
END|
 
29851
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29852
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29853
        
 
29854
# check trigger-6 success:      1
 
29855
DROP TRIGGER trg_1;
 
29856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29858
f_charbig = 'just inserted'
 
29859
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29860
DELETE FROM t0_aux
 
29861
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29862
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29863
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29864
'just inserted' FROM t0_template
 
29865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29866
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29867
BEGIN
 
29868
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29869
f_charbig = 'updated by trigger'
 
29870
      WHERE f_int1 = - old.f_int1;
 
29871
END|
 
29872
DELETE FROM t0_aux
 
29873
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29874
        
 
29875
# check trigger-7 success:      1
 
29876
DROP TRIGGER trg_1;
 
29877
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29878
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29879
f_charbig = 'just inserted'
 
29880
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29881
DELETE FROM t0_aux
 
29882
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29883
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29884
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29885
'just inserted' FROM t0_template
 
29886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29887
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29888
BEGIN
 
29889
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29890
f_charbig = 'updated by trigger'
 
29891
      WHERE f_int1 = - old.f_int1;
 
29892
END|
 
29893
DELETE FROM t0_aux
 
29894
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29895
        
 
29896
# check trigger-8 success:      1
 
29897
DROP TRIGGER trg_1;
 
29898
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29899
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29900
f_charbig = 'just inserted'
 
29901
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29902
DELETE FROM t0_aux
 
29903
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29904
DELETE FROM t1
 
29905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29906
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29907
BEGIN
 
29908
SET new.f_int1 = old.f_int1 + @max_row,
 
29909
new.f_int2 = old.f_int2 - @max_row,
 
29910
new.f_charbig = '####updated per update trigger####';
 
29911
END|
 
29912
UPDATE t1
 
29913
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29914
f_charbig = '####updated per update statement itself####';
 
29915
        
 
29916
# check trigger-9 success:      1
 
29917
DROP TRIGGER trg_2;
 
29918
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29919
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29920
f_charbig = CONCAT('===',f_char1,'===');
 
29921
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29922
BEGIN
 
29923
SET new.f_int1 = new.f_int1 + @max_row,
 
29924
new.f_int2 = new.f_int2 - @max_row,
 
29925
new.f_charbig = '####updated per update trigger####';
 
29926
END|
 
29927
UPDATE t1
 
29928
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29929
f_charbig = '####updated per update statement itself####';
 
29930
        
 
29931
# check trigger-10 success:     1
 
29932
DROP TRIGGER trg_2;
 
29933
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29934
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29935
f_charbig = CONCAT('===',f_char1,'===');
 
29936
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29937
BEGIN
 
29938
SET new.f_int1 = @my_max1 + @counter,
 
29939
new.f_int2 = @my_min2 - @counter,
 
29940
new.f_charbig = '####updated per insert trigger####';
 
29941
SET @counter = @counter + 1;
 
29942
END|
 
29943
SET @counter = 1;
 
29944
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29945
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29946
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29947
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29949
ORDER BY f_int1;
 
29950
DROP TRIGGER trg_3;
 
29951
        
 
29952
# check trigger-11 success:     1
 
29953
DELETE FROM t1
 
29954
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29955
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29956
AND f_charbig = '####updated per insert trigger####';
 
29957
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29958
BEGIN
 
29959
SET new.f_int1 = @my_max1 + @counter,
 
29960
new.f_int2 = @my_min2 - @counter,
 
29961
new.f_charbig = '####updated per insert trigger####';
 
29962
SET @counter = @counter + 1;
 
29963
END|
 
29964
SET @counter = 1;
 
29965
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29966
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29967
SELECT CAST(f_int1 AS CHAR),
 
29968
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29970
ORDER BY f_int1;
 
29971
DROP TRIGGER trg_3;
 
29972
        
 
29973
# check trigger-12 success:     1
 
29974
DELETE FROM t1
 
29975
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29976
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29977
AND f_charbig = '####updated per insert trigger####';
 
29978
ANALYZE  TABLE t1;
 
29979
Table   Op      Msg_type        Msg_text
 
29980
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
29981
CHECK    TABLE t1 EXTENDED;
 
29982
Table   Op      Msg_type        Msg_text
 
29983
test.t1 check   note    The storage engine for the table doesn't support check
 
29984
CHECKSUM TABLE t1 EXTENDED;
 
29985
Table   Checksum
 
29986
test.t1 <some_value>
 
29987
OPTIMIZE TABLE t1;
 
29988
Table   Op      Msg_type        Msg_text
 
29989
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
29990
# check layout success:    1
 
29991
REPAIR   TABLE t1 EXTENDED;
 
29992
Table   Op      Msg_type        Msg_text
 
29993
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29994
# check layout success:    1
 
29995
TRUNCATE t1;
 
29996
        
 
29997
# check TRUNCATE success:       1
 
29998
# check layout success:    1
 
29999
# End usability test (inc/partition_check.inc)
 
30000
DROP TABLE t1;
 
30001
CREATE TABLE t1 (
 
30002
f_int1 INTEGER,
 
30003
f_int2 INTEGER,
 
30004
f_char1 CHAR(20),
 
30005
f_char2 CHAR(20),
 
30006
f_charbig VARCHAR(1000)
 
30007
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
30008
)
 
30009
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
30010
(PARTITION parta VALUES LESS THAN (0),
 
30011
PARTITION partb VALUES LESS THAN (5),
 
30012
PARTITION partc VALUES LESS THAN (10),
 
30013
PARTITION partd VALUES LESS THAN (10 + 5),
 
30014
PARTITION parte VALUES LESS THAN (20),
 
30015
PARTITION partf VALUES LESS THAN (2147483646));
 
30016
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30017
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30018
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30019
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
30020
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30021
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30022
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30023
# Start usability test (inc/partition_check.inc)
 
30024
create_command
 
30025
SHOW CREATE TABLE t1;
 
30026
Table   Create Table
 
30027
t1      CREATE TABLE `t1` (
 
30028
  `f_int1` int(11) DEFAULT NULL,
 
30029
  `f_int2` int(11) DEFAULT NULL,
 
30030
  `f_char1` char(20) DEFAULT NULL,
 
30031
  `f_char2` char(20) DEFAULT NULL,
 
30032
  `f_charbig` varchar(1000) DEFAULT NULL
 
30033
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
30034
 
 
30035
unified filelist
 
30036
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
30037
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
30038
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD
 
30039
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI
 
30040
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD
 
30041
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI
 
30042
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD
 
30043
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI
 
30044
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD
 
30045
$MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI
 
30046
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD
 
30047
$MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI
 
30048
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
30049
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
30050
 
 
30051
# check prerequisites-1 success:    1
 
30052
# check COUNT(*) success:    1
 
30053
# check MIN/MAX(f_int1) success:    1
 
30054
# check MIN/MAX(f_int2) success:    1
 
30055
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30056
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30057
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30058
WHERE f_int1 IN (2,3);
 
30059
# check prerequisites-3 success:    1
 
30060
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30061
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30062
# check read via f_int1 success: 1
 
30063
# check read via f_int2 success: 1
 
30064
        
 
30065
# check multiple-1 success:     1
 
30066
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30067
        
 
30068
# check multiple-2 success:     1
 
30069
INSERT INTO t1 SELECT * FROM t0_template
 
30070
WHERE MOD(f_int1,3) = 0;
 
30071
        
 
30072
# check multiple-3 success:     1
 
30073
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30074
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30075
AND @max_row_div2 + @max_row_div4;
 
30076
        
 
30077
# check multiple-4 success:     1
 
30078
DELETE FROM t1
 
30079
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30080
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30081
        
 
30082
# check multiple-5 success:     1
 
30083
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30084
INSERT INTO t1
 
30085
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30086
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30087
f_charbig = '#SINGLE#';
 
30088
        
 
30089
# check single-1 success:       1
 
30090
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30091
INSERT INTO t1
 
30092
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30093
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30094
f_charbig = '#SINGLE#';
 
30095
        
 
30096
# check single-2 success:       1
 
30097
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30098
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30099
UPDATE t1 SET f_int1 = @cur_value2
 
30100
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30101
        
 
30102
# check single-3 success:       1
 
30103
SET @cur_value1= -1;
 
30104
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30105
UPDATE t1 SET f_int1 = @cur_value1
 
30106
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30107
        
 
30108
# check single-4 success:       1
 
30109
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30110
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30111
        
 
30112
# check single-5 success:       1
 
30113
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30114
        
 
30115
# check single-6 success:       1
 
30116
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30117
ERROR HY000: Table has no partition for value 2147483647
 
30118
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30119
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30120
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30121
f_charbig = '#NULL#';
 
30122
INSERT INTO t1
 
30123
SET f_int1 = NULL , f_int2 = -@max_row,
 
30124
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30125
f_charbig = '#NULL#';
 
30126
# check null success:    1
 
30127
        
 
30128
# check null-1 success:         1
 
30129
UPDATE t1 SET f_int1 = -@max_row
 
30130
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30131
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30132
        
 
30133
# check null-2 success:         1
 
30134
UPDATE t1 SET f_int1 = NULL
 
30135
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30136
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30137
        
 
30138
# check null-3 success:         1
 
30139
DELETE FROM t1
 
30140
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30141
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30142
        
 
30143
# check null-4 success:         1
 
30144
DELETE FROM t1
 
30145
WHERE f_int1 = 0 AND f_int2 = 0
 
30146
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30147
AND f_charbig = '#NULL#';
 
30148
SET AUTOCOMMIT= 0;
 
30149
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30150
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30151
FROM t0_template source_tab
 
30152
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30153
        
 
30154
# check transactions-1 success:         1
 
30155
COMMIT WORK;
 
30156
        
 
30157
# check transactions-2 success:         1
 
30158
ROLLBACK WORK;
 
30159
        
 
30160
# check transactions-3 success:         1
 
30161
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30162
COMMIT WORK;
 
30163
ROLLBACK WORK;
 
30164
        
 
30165
# check transactions-4 success:         1
 
30166
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30167
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30168
FROM t0_template source_tab
 
30169
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30170
        
 
30171
# check transactions-5 success:         1
 
30172
ROLLBACK WORK;
 
30173
Warnings:
 
30174
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
30175
        
 
30176
# check transactions-6 success:         1
 
30177
# INFO: Storage engine used for t1 seems to be not transactional.
 
30178
COMMIT;
 
30179
        
 
30180
# check transactions-7 success:         1
 
30181
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30182
COMMIT WORK;
 
30183
SET @@session.sql_mode = 'traditional';
 
30184
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30186
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30187
'', '', 'was inserted' FROM t0_template
 
30188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30189
ERROR 22012: Division by 0
 
30190
COMMIT;
 
30191
        
 
30192
# check transactions-8 success:         1
 
30193
# INFO: Storage engine used for t1 seems to be unable to revert
 
30194
#       changes made by the failing statement.
 
30195
SET @@session.sql_mode = '';
 
30196
SET AUTOCOMMIT= 1;
 
30197
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30198
COMMIT WORK;
 
30199
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30200
        
 
30201
# check special-1 success:      1
 
30202
UPDATE t1 SET f_charbig = '';
 
30203
        
 
30204
# check special-2 success:      1
 
30205
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30206
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30207
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30211
'just inserted' FROM t0_template
 
30212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30213
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30214
BEGIN
 
30215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30216
f_charbig = 'updated by trigger'
 
30217
      WHERE f_int1 = new.f_int1;
 
30218
END|
 
30219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30220
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30222
        
 
30223
# check trigger-1 success:      1
 
30224
DROP TRIGGER trg_1;
 
30225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30227
f_charbig = 'just inserted'
 
30228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30229
DELETE FROM t0_aux
 
30230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30233
'just inserted' FROM t0_template
 
30234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30235
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30236
BEGIN
 
30237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30238
f_charbig = 'updated by trigger'
 
30239
      WHERE f_int1 = new.f_int1;
 
30240
END|
 
30241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30242
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30244
        
 
30245
# check trigger-2 success:      1
 
30246
DROP TRIGGER trg_1;
 
30247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30249
f_charbig = 'just inserted'
 
30250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30251
DELETE FROM t0_aux
 
30252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30255
'just inserted' FROM t0_template
 
30256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30257
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30258
BEGIN
 
30259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30260
f_charbig = 'updated by trigger'
 
30261
      WHERE f_int1 = new.f_int1;
 
30262
END|
 
30263
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30265
        
 
30266
# check trigger-3 success:      1
 
30267
DROP TRIGGER trg_1;
 
30268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30270
f_charbig = 'just inserted'
 
30271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30272
DELETE FROM t0_aux
 
30273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30276
'just inserted' FROM t0_template
 
30277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30278
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30279
BEGIN
 
30280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30281
f_charbig = 'updated by trigger'
 
30282
      WHERE f_int1 = - old.f_int1;
 
30283
END|
 
30284
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30286
        
 
30287
# check trigger-4 success:      1
 
30288
DROP TRIGGER trg_1;
 
30289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30291
f_charbig = 'just inserted'
 
30292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30293
DELETE FROM t0_aux
 
30294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30297
'just inserted' FROM t0_template
 
30298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30299
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30300
BEGIN
 
30301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30302
f_charbig = 'updated by trigger'
 
30303
      WHERE f_int1 = new.f_int1;
 
30304
END|
 
30305
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30307
        
 
30308
# check trigger-5 success:      1
 
30309
DROP TRIGGER trg_1;
 
30310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30312
f_charbig = 'just inserted'
 
30313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30314
DELETE FROM t0_aux
 
30315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30318
'just inserted' FROM t0_template
 
30319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30320
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30321
BEGIN
 
30322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30323
f_charbig = 'updated by trigger'
 
30324
      WHERE f_int1 = - old.f_int1;
 
30325
END|
 
30326
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30327
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30328
        
 
30329
# check trigger-6 success:      1
 
30330
DROP TRIGGER trg_1;
 
30331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30333
f_charbig = 'just inserted'
 
30334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30335
DELETE FROM t0_aux
 
30336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30339
'just inserted' FROM t0_template
 
30340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30341
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30342
BEGIN
 
30343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30344
f_charbig = 'updated by trigger'
 
30345
      WHERE f_int1 = - old.f_int1;
 
30346
END|
 
30347
DELETE FROM t0_aux
 
30348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30349
        
 
30350
# check trigger-7 success:      1
 
30351
DROP TRIGGER trg_1;
 
30352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30354
f_charbig = 'just inserted'
 
30355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30356
DELETE FROM t0_aux
 
30357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30360
'just inserted' FROM t0_template
 
30361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30362
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30363
BEGIN
 
30364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30365
f_charbig = 'updated by trigger'
 
30366
      WHERE f_int1 = - old.f_int1;
 
30367
END|
 
30368
DELETE FROM t0_aux
 
30369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30370
        
 
30371
# check trigger-8 success:      1
 
30372
DROP TRIGGER trg_1;
 
30373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30375
f_charbig = 'just inserted'
 
30376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30377
DELETE FROM t0_aux
 
30378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30379
DELETE FROM t1
 
30380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30381
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30382
BEGIN
 
30383
SET new.f_int1 = old.f_int1 + @max_row,
 
30384
new.f_int2 = old.f_int2 - @max_row,
 
30385
new.f_charbig = '####updated per update trigger####';
 
30386
END|
 
30387
UPDATE t1
 
30388
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30389
f_charbig = '####updated per update statement itself####';
 
30390
        
 
30391
# check trigger-9 success:      1
 
30392
DROP TRIGGER trg_2;
 
30393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30395
f_charbig = CONCAT('===',f_char1,'===');
 
30396
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30397
BEGIN
 
30398
SET new.f_int1 = new.f_int1 + @max_row,
 
30399
new.f_int2 = new.f_int2 - @max_row,
 
30400
new.f_charbig = '####updated per update trigger####';
 
30401
END|
 
30402
UPDATE t1
 
30403
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30404
f_charbig = '####updated per update statement itself####';
 
30405
        
 
30406
# check trigger-10 success:     1
 
30407
DROP TRIGGER trg_2;
 
30408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30410
f_charbig = CONCAT('===',f_char1,'===');
 
30411
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30412
BEGIN
 
30413
SET new.f_int1 = @my_max1 + @counter,
 
30414
new.f_int2 = @my_min2 - @counter,
 
30415
new.f_charbig = '####updated per insert trigger####';
 
30416
SET @counter = @counter + 1;
 
30417
END|
 
30418
SET @counter = 1;
 
30419
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30421
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30422
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30424
ORDER BY f_int1;
 
30425
DROP TRIGGER trg_3;
 
30426
        
 
30427
# check trigger-11 success:     1
 
30428
DELETE FROM t1
 
30429
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30430
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30431
AND f_charbig = '####updated per insert trigger####';
 
30432
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30433
BEGIN
 
30434
SET new.f_int1 = @my_max1 + @counter,
 
30435
new.f_int2 = @my_min2 - @counter,
 
30436
new.f_charbig = '####updated per insert trigger####';
 
30437
SET @counter = @counter + 1;
 
30438
END|
 
30439
SET @counter = 1;
 
30440
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30441
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30442
SELECT CAST(f_int1 AS CHAR),
 
30443
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30445
ORDER BY f_int1;
 
30446
DROP TRIGGER trg_3;
 
30447
        
 
30448
# check trigger-12 success:     1
 
30449
DELETE FROM t1
 
30450
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30451
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30452
AND f_charbig = '####updated per insert trigger####';
 
30453
ANALYZE  TABLE t1;
 
30454
Table   Op      Msg_type        Msg_text
 
30455
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
30456
CHECK    TABLE t1 EXTENDED;
 
30457
Table   Op      Msg_type        Msg_text
 
30458
test.t1 check   note    The storage engine for the table doesn't support check
 
30459
CHECKSUM TABLE t1 EXTENDED;
 
30460
Table   Checksum
 
30461
test.t1 <some_value>
 
30462
OPTIMIZE TABLE t1;
 
30463
Table   Op      Msg_type        Msg_text
 
30464
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
30465
# check layout success:    1
 
30466
REPAIR   TABLE t1 EXTENDED;
 
30467
Table   Op      Msg_type        Msg_text
 
30468
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30469
# check layout success:    1
 
30470
TRUNCATE t1;
 
30471
        
 
30472
# check TRUNCATE success:       1
 
30473
# check layout success:    1
 
30474
# End usability test (inc/partition_check.inc)
 
30475
DROP TABLE t1;
 
30476
CREATE TABLE t1 (
 
30477
f_int1 INTEGER,
 
30478
f_int2 INTEGER,
 
30479
f_char1 CHAR(20),
 
30480
f_char2 CHAR(20),
 
30481
f_charbig VARCHAR(1000)
 
30482
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
30483
)
 
30484
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
30485
(PARTITION parta VALUES LESS THAN (0),
 
30486
PARTITION partb VALUES LESS THAN (5),
 
30487
PARTITION partc VALUES LESS THAN (10),
 
30488
PARTITION partd VALUES LESS THAN (2147483646));
 
30489
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30490
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30491
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30492
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
30493
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30494
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30495
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30496
# Start usability test (inc/partition_check.inc)
 
30497
create_command
 
30498
SHOW CREATE TABLE t1;
 
30499
Table   Create Table
 
30500
t1      CREATE TABLE `t1` (
 
30501
  `f_int1` int(11) DEFAULT NULL,
 
30502
  `f_int2` int(11) DEFAULT NULL,
 
30503
  `f_char1` char(20) DEFAULT NULL,
 
30504
  `f_char2` char(20) DEFAULT NULL,
 
30505
  `f_charbig` varchar(1000) DEFAULT NULL
 
30506
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
30507
 
 
30508
unified filelist
 
30509
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
 
30510
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI
 
30511
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD
 
30512
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI
 
30513
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD
 
30514
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI
 
30515
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD
 
30516
$MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI
 
30517
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD
 
30518
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI
 
30519
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD
 
30520
$MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI
 
30521
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD
 
30522
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI
 
30523
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD
 
30524
$MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI
 
30525
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
30526
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
30527
 
 
30528
# check prerequisites-1 success:    1
 
30529
# check COUNT(*) success:    1
 
30530
# check MIN/MAX(f_int1) success:    1
 
30531
# check MIN/MAX(f_int2) success:    1
 
30532
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30533
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30534
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30535
WHERE f_int1 IN (2,3);
 
30536
# check prerequisites-3 success:    1
 
30537
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30538
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30539
# check read via f_int1 success: 1
 
30540
# check read via f_int2 success: 1
 
30541
        
 
30542
# check multiple-1 success:     1
 
30543
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30544
        
 
30545
# check multiple-2 success:     1
 
30546
INSERT INTO t1 SELECT * FROM t0_template
 
30547
WHERE MOD(f_int1,3) = 0;
 
30548
        
 
30549
# check multiple-3 success:     1
 
30550
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30551
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30552
AND @max_row_div2 + @max_row_div4;
 
30553
        
 
30554
# check multiple-4 success:     1
 
30555
DELETE FROM t1
 
30556
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30557
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30558
        
 
30559
# check multiple-5 success:     1
 
30560
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30561
INSERT INTO t1
 
30562
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30563
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30564
f_charbig = '#SINGLE#';
 
30565
        
 
30566
# check single-1 success:       1
 
30567
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30568
INSERT INTO t1
 
30569
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30570
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30571
f_charbig = '#SINGLE#';
 
30572
        
 
30573
# check single-2 success:       1
 
30574
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30575
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30576
UPDATE t1 SET f_int1 = @cur_value2
 
30577
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30578
        
 
30579
# check single-3 success:       1
 
30580
SET @cur_value1= -1;
 
30581
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30582
UPDATE t1 SET f_int1 = @cur_value1
 
30583
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30584
        
 
30585
# check single-4 success:       1
 
30586
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30587
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30588
        
 
30589
# check single-5 success:       1
 
30590
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30591
        
 
30592
# check single-6 success:       1
 
30593
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30594
ERROR HY000: Table has no partition for value 2147483647
 
30595
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30596
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30597
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30598
f_charbig = '#NULL#';
 
30599
INSERT INTO t1
 
30600
SET f_int1 = NULL , f_int2 = -@max_row,
 
30601
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30602
f_charbig = '#NULL#';
 
30603
# check null success:    1
 
30604
        
 
30605
# check null-1 success:         1
 
30606
UPDATE t1 SET f_int1 = -@max_row
 
30607
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30608
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30609
        
 
30610
# check null-2 success:         1
 
30611
UPDATE t1 SET f_int1 = NULL
 
30612
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30613
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30614
        
 
30615
# check null-3 success:         1
 
30616
DELETE FROM t1
 
30617
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30618
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30619
        
 
30620
# check null-4 success:         1
 
30621
DELETE FROM t1
 
30622
WHERE f_int1 = 0 AND f_int2 = 0
 
30623
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30624
AND f_charbig = '#NULL#';
 
30625
SET AUTOCOMMIT= 0;
 
30626
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30627
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30628
FROM t0_template source_tab
 
30629
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30630
        
 
30631
# check transactions-1 success:         1
 
30632
COMMIT WORK;
 
30633
        
 
30634
# check transactions-2 success:         1
 
30635
ROLLBACK WORK;
 
30636
        
 
30637
# check transactions-3 success:         1
 
30638
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30639
COMMIT WORK;
 
30640
ROLLBACK WORK;
 
30641
        
 
30642
# check transactions-4 success:         1
 
30643
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30644
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30645
FROM t0_template source_tab
 
30646
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30647
        
 
30648
# check transactions-5 success:         1
 
30649
ROLLBACK WORK;
 
30650
Warnings:
 
30651
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
30652
        
 
30653
# check transactions-6 success:         1
 
30654
# INFO: Storage engine used for t1 seems to be not transactional.
 
30655
COMMIT;
 
30656
        
 
30657
# check transactions-7 success:         1
 
30658
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30659
COMMIT WORK;
 
30660
SET @@session.sql_mode = 'traditional';
 
30661
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30662
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30663
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30664
'', '', 'was inserted' FROM t0_template
 
30665
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30666
ERROR 22012: Division by 0
 
30667
COMMIT;
 
30668
        
 
30669
# check transactions-8 success:         1
 
30670
# INFO: Storage engine used for t1 seems to be unable to revert
 
30671
#       changes made by the failing statement.
 
30672
SET @@session.sql_mode = '';
 
30673
SET AUTOCOMMIT= 1;
 
30674
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30675
COMMIT WORK;
 
30676
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30677
        
 
30678
# check special-1 success:      1
 
30679
UPDATE t1 SET f_charbig = '';
 
30680
        
 
30681
# check special-2 success:      1
 
30682
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30683
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30684
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30688
'just inserted' FROM t0_template
 
30689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30690
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30691
BEGIN
 
30692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30693
f_charbig = 'updated by trigger'
 
30694
      WHERE f_int1 = new.f_int1;
 
30695
END|
 
30696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30697
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30698
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30699
        
 
30700
# check trigger-1 success:      1
 
30701
DROP TRIGGER trg_1;
 
30702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30704
f_charbig = 'just inserted'
 
30705
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30706
DELETE FROM t0_aux
 
30707
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30709
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30710
'just inserted' FROM t0_template
 
30711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30712
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30713
BEGIN
 
30714
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30715
f_charbig = 'updated by trigger'
 
30716
      WHERE f_int1 = new.f_int1;
 
30717
END|
 
30718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30719
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30721
        
 
30722
# check trigger-2 success:      1
 
30723
DROP TRIGGER trg_1;
 
30724
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30725
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30726
f_charbig = 'just inserted'
 
30727
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30728
DELETE FROM t0_aux
 
30729
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30730
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30731
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30732
'just inserted' FROM t0_template
 
30733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30734
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30735
BEGIN
 
30736
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30737
f_charbig = 'updated by trigger'
 
30738
      WHERE f_int1 = new.f_int1;
 
30739
END|
 
30740
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30741
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30742
        
 
30743
# check trigger-3 success:      1
 
30744
DROP TRIGGER trg_1;
 
30745
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30746
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30747
f_charbig = 'just inserted'
 
30748
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30749
DELETE FROM t0_aux
 
30750
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30751
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30752
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30753
'just inserted' FROM t0_template
 
30754
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30755
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30756
BEGIN
 
30757
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30758
f_charbig = 'updated by trigger'
 
30759
      WHERE f_int1 = - old.f_int1;
 
30760
END|
 
30761
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30762
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30763
        
 
30764
# check trigger-4 success:      1
 
30765
DROP TRIGGER trg_1;
 
30766
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30767
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30768
f_charbig = 'just inserted'
 
30769
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30770
DELETE FROM t0_aux
 
30771
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30772
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30773
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30774
'just inserted' FROM t0_template
 
30775
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30776
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30777
BEGIN
 
30778
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30779
f_charbig = 'updated by trigger'
 
30780
      WHERE f_int1 = new.f_int1;
 
30781
END|
 
30782
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30783
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30784
        
 
30785
# check trigger-5 success:      1
 
30786
DROP TRIGGER trg_1;
 
30787
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30788
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30789
f_charbig = 'just inserted'
 
30790
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30791
DELETE FROM t0_aux
 
30792
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30793
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30794
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30795
'just inserted' FROM t0_template
 
30796
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30797
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30798
BEGIN
 
30799
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30800
f_charbig = 'updated by trigger'
 
30801
      WHERE f_int1 = - old.f_int1;
 
30802
END|
 
30803
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30804
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30805
        
 
30806
# check trigger-6 success:      1
 
30807
DROP TRIGGER trg_1;
 
30808
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30809
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30810
f_charbig = 'just inserted'
 
30811
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30812
DELETE FROM t0_aux
 
30813
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30814
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30815
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30816
'just inserted' FROM t0_template
 
30817
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30818
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30819
BEGIN
 
30820
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30821
f_charbig = 'updated by trigger'
 
30822
      WHERE f_int1 = - old.f_int1;
 
30823
END|
 
30824
DELETE FROM t0_aux
 
30825
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30826
        
 
30827
# check trigger-7 success:      1
 
30828
DROP TRIGGER trg_1;
 
30829
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30830
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30831
f_charbig = 'just inserted'
 
30832
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30833
DELETE FROM t0_aux
 
30834
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30835
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30836
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30837
'just inserted' FROM t0_template
 
30838
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30839
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30840
BEGIN
 
30841
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30842
f_charbig = 'updated by trigger'
 
30843
      WHERE f_int1 = - old.f_int1;
 
30844
END|
 
30845
DELETE FROM t0_aux
 
30846
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30847
        
 
30848
# check trigger-8 success:      1
 
30849
DROP TRIGGER trg_1;
 
30850
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30851
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30852
f_charbig = 'just inserted'
 
30853
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30854
DELETE FROM t0_aux
 
30855
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30856
DELETE FROM t1
 
30857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30858
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30859
BEGIN
 
30860
SET new.f_int1 = old.f_int1 + @max_row,
 
30861
new.f_int2 = old.f_int2 - @max_row,
 
30862
new.f_charbig = '####updated per update trigger####';
 
30863
END|
 
30864
UPDATE t1
 
30865
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30866
f_charbig = '####updated per update statement itself####';
 
30867
        
 
30868
# check trigger-9 success:      1
 
30869
DROP TRIGGER trg_2;
 
30870
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30871
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30872
f_charbig = CONCAT('===',f_char1,'===');
 
30873
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30874
BEGIN
 
30875
SET new.f_int1 = new.f_int1 + @max_row,
 
30876
new.f_int2 = new.f_int2 - @max_row,
 
30877
new.f_charbig = '####updated per update trigger####';
 
30878
END|
 
30879
UPDATE t1
 
30880
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30881
f_charbig = '####updated per update statement itself####';
 
30882
        
 
30883
# check trigger-10 success:     1
 
30884
DROP TRIGGER trg_2;
 
30885
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30886
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30887
f_charbig = CONCAT('===',f_char1,'===');
 
30888
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30889
BEGIN
 
30890
SET new.f_int1 = @my_max1 + @counter,
 
30891
new.f_int2 = @my_min2 - @counter,
 
30892
new.f_charbig = '####updated per insert trigger####';
 
30893
SET @counter = @counter + 1;
 
30894
END|
 
30895
SET @counter = 1;
 
30896
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30897
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30898
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30899
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30901
ORDER BY f_int1;
 
30902
DROP TRIGGER trg_3;
 
30903
        
 
30904
# check trigger-11 success:     1
 
30905
DELETE FROM t1
 
30906
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30907
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30908
AND f_charbig = '####updated per insert trigger####';
 
30909
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30910
BEGIN
 
30911
SET new.f_int1 = @my_max1 + @counter,
 
30912
new.f_int2 = @my_min2 - @counter,
 
30913
new.f_charbig = '####updated per insert trigger####';
 
30914
SET @counter = @counter + 1;
 
30915
END|
 
30916
SET @counter = 1;
 
30917
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30918
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30919
SELECT CAST(f_int1 AS CHAR),
 
30920
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30922
ORDER BY f_int1;
 
30923
DROP TRIGGER trg_3;
 
30924
        
 
30925
# check trigger-12 success:     1
 
30926
DELETE FROM t1
 
30927
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30928
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30929
AND f_charbig = '####updated per insert trigger####';
 
30930
ANALYZE  TABLE t1;
 
30931
Table   Op      Msg_type        Msg_text
 
30932
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
30933
CHECK    TABLE t1 EXTENDED;
 
30934
Table   Op      Msg_type        Msg_text
 
30935
test.t1 check   note    The storage engine for the table doesn't support check
 
30936
CHECKSUM TABLE t1 EXTENDED;
 
30937
Table   Checksum
 
30938
test.t1 <some_value>
 
30939
OPTIMIZE TABLE t1;
 
30940
Table   Op      Msg_type        Msg_text
 
30941
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
30942
# check layout success:    1
 
30943
REPAIR   TABLE t1 EXTENDED;
 
30944
Table   Op      Msg_type        Msg_text
 
30945
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30946
# check layout success:    1
 
30947
TRUNCATE t1;
 
30948
        
 
30949
# check TRUNCATE success:       1
 
30950
# check layout success:    1
 
30951
# End usability test (inc/partition_check.inc)
 
30952
DROP TABLE t1;
 
30953
CREATE TABLE t1 (
 
30954
f_int1 INTEGER,
 
30955
f_int2 INTEGER,
 
30956
f_char1 CHAR(20),
 
30957
f_char2 CHAR(20),
 
30958
f_charbig VARCHAR(1000)
 
30959
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
30960
)
 
30961
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
30962
(PARTITION part1 VALUES LESS THAN (0)
 
30963
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
30964
PARTITION part2 VALUES LESS THAN (5)
 
30965
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
30966
PARTITION part3 VALUES LESS THAN (10)
 
30967
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
30968
PARTITION part4 VALUES LESS THAN (2147483646)
 
30969
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
30970
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30971
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30972
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30973
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
30974
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30975
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30976
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30977
# Start usability test (inc/partition_check.inc)
 
30978
create_command
 
30979
SHOW CREATE TABLE t1;
 
30980
Table   Create Table
 
30981
t1      CREATE TABLE `t1` (
 
30982
  `f_int1` int(11) DEFAULT NULL,
 
30983
  `f_int2` int(11) DEFAULT NULL,
 
30984
  `f_char1` char(20) DEFAULT NULL,
 
30985
  `f_char2` char(20) DEFAULT NULL,
 
30986
  `f_charbig` varchar(1000) DEFAULT NULL
 
30987
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
30988
 
 
30989
unified filelist
 
30990
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
 
30991
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI
 
30992
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD
 
30993
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI
 
30994
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD
 
30995
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI
 
30996
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD
 
30997
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI
 
30998
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD
 
30999
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI
 
31000
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD
 
31001
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI
 
31002
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD
 
31003
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI
 
31004
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD
 
31005
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI
 
31006
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
31007
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
31008
 
 
31009
# check prerequisites-1 success:    1
 
31010
# check COUNT(*) success:    1
 
31011
# check MIN/MAX(f_int1) success:    1
 
31012
# check MIN/MAX(f_int2) success:    1
 
31013
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31014
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31015
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31016
WHERE f_int1 IN (2,3);
 
31017
# check prerequisites-3 success:    1
 
31018
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31019
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31020
# check read via f_int1 success: 1
 
31021
# check read via f_int2 success: 1
 
31022
        
 
31023
# check multiple-1 success:     1
 
31024
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31025
        
 
31026
# check multiple-2 success:     1
 
31027
INSERT INTO t1 SELECT * FROM t0_template
 
31028
WHERE MOD(f_int1,3) = 0;
 
31029
        
 
31030
# check multiple-3 success:     1
 
31031
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31032
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31033
AND @max_row_div2 + @max_row_div4;
 
31034
        
 
31035
# check multiple-4 success:     1
 
31036
DELETE FROM t1
 
31037
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31038
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31039
        
 
31040
# check multiple-5 success:     1
 
31041
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31042
INSERT INTO t1
 
31043
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31044
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31045
f_charbig = '#SINGLE#';
 
31046
        
 
31047
# check single-1 success:       1
 
31048
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31049
INSERT INTO t1
 
31050
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31051
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31052
f_charbig = '#SINGLE#';
 
31053
        
 
31054
# check single-2 success:       1
 
31055
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31056
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31057
UPDATE t1 SET f_int1 = @cur_value2
 
31058
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31059
        
 
31060
# check single-3 success:       1
 
31061
SET @cur_value1= -1;
 
31062
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31063
UPDATE t1 SET f_int1 = @cur_value1
 
31064
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31065
        
 
31066
# check single-4 success:       1
 
31067
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31068
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31069
        
 
31070
# check single-5 success:       1
 
31071
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31072
        
 
31073
# check single-6 success:       1
 
31074
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31075
ERROR HY000: Table has no partition for value 2147483647
 
31076
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31077
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31078
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31079
f_charbig = '#NULL#';
 
31080
INSERT INTO t1
 
31081
SET f_int1 = NULL , f_int2 = -@max_row,
 
31082
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31083
f_charbig = '#NULL#';
 
31084
# check null success:    1
 
31085
        
 
31086
# check null-1 success:         1
 
31087
UPDATE t1 SET f_int1 = -@max_row
 
31088
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31089
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31090
        
 
31091
# check null-2 success:         1
 
31092
UPDATE t1 SET f_int1 = NULL
 
31093
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31094
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31095
        
 
31096
# check null-3 success:         1
 
31097
DELETE FROM t1
 
31098
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31099
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31100
        
 
31101
# check null-4 success:         1
 
31102
DELETE FROM t1
 
31103
WHERE f_int1 = 0 AND f_int2 = 0
 
31104
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31105
AND f_charbig = '#NULL#';
 
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
Warnings:
 
31132
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
31133
        
 
31134
# check transactions-6 success:         1
 
31135
# INFO: Storage engine used for t1 seems to be not transactional.
 
31136
COMMIT;
 
31137
        
 
31138
# check transactions-7 success:         1
 
31139
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31140
COMMIT WORK;
 
31141
SET @@session.sql_mode = 'traditional';
 
31142
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31143
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31144
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31145
'', '', 'was inserted' FROM t0_template
 
31146
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31147
ERROR 22012: Division by 0
 
31148
COMMIT;
 
31149
        
 
31150
# check transactions-8 success:         1
 
31151
# INFO: Storage engine used for t1 seems to be unable to revert
 
31152
#       changes made by the failing statement.
 
31153
SET @@session.sql_mode = '';
 
31154
SET AUTOCOMMIT= 1;
 
31155
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31156
COMMIT WORK;
 
31157
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31158
        
 
31159
# check special-1 success:      1
 
31160
UPDATE t1 SET f_charbig = '';
 
31161
        
 
31162
# check special-2 success:      1
 
31163
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31164
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31165
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31169
'just inserted' FROM t0_template
 
31170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31171
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31172
BEGIN
 
31173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31174
f_charbig = 'updated by trigger'
 
31175
      WHERE f_int1 = new.f_int1;
 
31176
END|
 
31177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31178
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31180
        
 
31181
# check trigger-1 success:      1
 
31182
DROP TRIGGER trg_1;
 
31183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31185
f_charbig = 'just inserted'
 
31186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31187
DELETE FROM t0_aux
 
31188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31191
'just inserted' FROM t0_template
 
31192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31193
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31194
BEGIN
 
31195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31196
f_charbig = 'updated by trigger'
 
31197
      WHERE f_int1 = new.f_int1;
 
31198
END|
 
31199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31200
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31201
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31202
        
 
31203
# check trigger-2 success:      1
 
31204
DROP TRIGGER trg_1;
 
31205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31207
f_charbig = 'just inserted'
 
31208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31209
DELETE FROM t0_aux
 
31210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31213
'just inserted' FROM t0_template
 
31214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31215
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31216
BEGIN
 
31217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31218
f_charbig = 'updated by trigger'
 
31219
      WHERE f_int1 = new.f_int1;
 
31220
END|
 
31221
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31223
        
 
31224
# check trigger-3 success:      1
 
31225
DROP TRIGGER trg_1;
 
31226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31228
f_charbig = 'just inserted'
 
31229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31230
DELETE FROM t0_aux
 
31231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31234
'just inserted' FROM t0_template
 
31235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31236
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31237
BEGIN
 
31238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31239
f_charbig = 'updated by trigger'
 
31240
      WHERE f_int1 = - old.f_int1;
 
31241
END|
 
31242
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31243
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31244
        
 
31245
# check trigger-4 success:      1
 
31246
DROP TRIGGER trg_1;
 
31247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31249
f_charbig = 'just inserted'
 
31250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31251
DELETE FROM t0_aux
 
31252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31255
'just inserted' FROM t0_template
 
31256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31257
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31258
BEGIN
 
31259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31260
f_charbig = 'updated by trigger'
 
31261
      WHERE f_int1 = new.f_int1;
 
31262
END|
 
31263
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31265
        
 
31266
# check trigger-5 success:      1
 
31267
DROP TRIGGER trg_1;
 
31268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31270
f_charbig = 'just inserted'
 
31271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31272
DELETE FROM t0_aux
 
31273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31276
'just inserted' FROM t0_template
 
31277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31278
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31279
BEGIN
 
31280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31281
f_charbig = 'updated by trigger'
 
31282
      WHERE f_int1 = - old.f_int1;
 
31283
END|
 
31284
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31286
        
 
31287
# check trigger-6 success:      1
 
31288
DROP TRIGGER trg_1;
 
31289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31291
f_charbig = 'just inserted'
 
31292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31293
DELETE FROM t0_aux
 
31294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31297
'just inserted' FROM t0_template
 
31298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31299
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31300
BEGIN
 
31301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31302
f_charbig = 'updated by trigger'
 
31303
      WHERE f_int1 = - old.f_int1;
 
31304
END|
 
31305
DELETE FROM t0_aux
 
31306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31307
        
 
31308
# check trigger-7 success:      1
 
31309
DROP TRIGGER trg_1;
 
31310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31312
f_charbig = 'just inserted'
 
31313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31314
DELETE FROM t0_aux
 
31315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31318
'just inserted' FROM t0_template
 
31319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31320
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31321
BEGIN
 
31322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31323
f_charbig = 'updated by trigger'
 
31324
      WHERE f_int1 = - old.f_int1;
 
31325
END|
 
31326
DELETE FROM t0_aux
 
31327
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31328
        
 
31329
# check trigger-8 success:      1
 
31330
DROP TRIGGER trg_1;
 
31331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31333
f_charbig = 'just inserted'
 
31334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31335
DELETE FROM t0_aux
 
31336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31337
DELETE FROM t1
 
31338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31339
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31340
BEGIN
 
31341
SET new.f_int1 = old.f_int1 + @max_row,
 
31342
new.f_int2 = old.f_int2 - @max_row,
 
31343
new.f_charbig = '####updated per update trigger####';
 
31344
END|
 
31345
UPDATE t1
 
31346
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31347
f_charbig = '####updated per update statement itself####';
 
31348
        
 
31349
# check trigger-9 success:      1
 
31350
DROP TRIGGER trg_2;
 
31351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31353
f_charbig = CONCAT('===',f_char1,'===');
 
31354
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31355
BEGIN
 
31356
SET new.f_int1 = new.f_int1 + @max_row,
 
31357
new.f_int2 = new.f_int2 - @max_row,
 
31358
new.f_charbig = '####updated per update trigger####';
 
31359
END|
 
31360
UPDATE t1
 
31361
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31362
f_charbig = '####updated per update statement itself####';
 
31363
        
 
31364
# check trigger-10 success:     1
 
31365
DROP TRIGGER trg_2;
 
31366
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31367
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31368
f_charbig = CONCAT('===',f_char1,'===');
 
31369
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31370
BEGIN
 
31371
SET new.f_int1 = @my_max1 + @counter,
 
31372
new.f_int2 = @my_min2 - @counter,
 
31373
new.f_charbig = '####updated per insert trigger####';
 
31374
SET @counter = @counter + 1;
 
31375
END|
 
31376
SET @counter = 1;
 
31377
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31379
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31380
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31382
ORDER BY f_int1;
 
31383
DROP TRIGGER trg_3;
 
31384
        
 
31385
# check trigger-11 success:     1
 
31386
DELETE FROM t1
 
31387
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31388
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31389
AND f_charbig = '####updated per insert trigger####';
 
31390
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31391
BEGIN
 
31392
SET new.f_int1 = @my_max1 + @counter,
 
31393
new.f_int2 = @my_min2 - @counter,
 
31394
new.f_charbig = '####updated per insert trigger####';
 
31395
SET @counter = @counter + 1;
 
31396
END|
 
31397
SET @counter = 1;
 
31398
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31399
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31400
SELECT CAST(f_int1 AS CHAR),
 
31401
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31403
ORDER BY f_int1;
 
31404
DROP TRIGGER trg_3;
 
31405
        
 
31406
# check trigger-12 success:     1
 
31407
DELETE FROM t1
 
31408
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31409
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31410
AND f_charbig = '####updated per insert trigger####';
 
31411
ANALYZE  TABLE t1;
 
31412
Table   Op      Msg_type        Msg_text
 
31413
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
31414
CHECK    TABLE t1 EXTENDED;
 
31415
Table   Op      Msg_type        Msg_text
 
31416
test.t1 check   note    The storage engine for the table doesn't support check
 
31417
CHECKSUM TABLE t1 EXTENDED;
 
31418
Table   Checksum
 
31419
test.t1 <some_value>
 
31420
OPTIMIZE TABLE t1;
 
31421
Table   Op      Msg_type        Msg_text
 
31422
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
31423
# check layout success:    1
 
31424
REPAIR   TABLE t1 EXTENDED;
 
31425
Table   Op      Msg_type        Msg_text
 
31426
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31427
# check layout success:    1
 
31428
TRUNCATE t1;
 
31429
        
 
31430
# check TRUNCATE success:       1
 
31431
# check layout success:    1
 
31432
# End usability test (inc/partition_check.inc)
 
31433
DROP TABLE t1;
 
31434
CREATE TABLE t1 (
 
31435
f_int1 INTEGER,
 
31436
f_int2 INTEGER,
 
31437
f_char1 CHAR(20),
 
31438
f_char2 CHAR(20),
 
31439
f_charbig VARCHAR(1000)
 
31440
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
31441
)
 
31442
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
31443
(PARTITION part1 VALUES IN (0)
 
31444
(SUBPARTITION sp11, SUBPARTITION sp12),
 
31445
PARTITION part2 VALUES IN (1)
 
31446
(SUBPARTITION sp21, SUBPARTITION sp22),
 
31447
PARTITION part3 VALUES IN (2)
 
31448
(SUBPARTITION sp31, SUBPARTITION sp32),
 
31449
PARTITION part4 VALUES IN (NULL)
 
31450
(SUBPARTITION sp41, SUBPARTITION sp42));
 
31451
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31452
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31453
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31454
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
31455
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31456
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31457
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31458
# Start usability test (inc/partition_check.inc)
 
31459
create_command
 
31460
SHOW CREATE TABLE t1;
 
31461
Table   Create Table
 
31462
t1      CREATE TABLE `t1` (
 
31463
  `f_int1` int(11) DEFAULT NULL,
 
31464
  `f_int2` int(11) DEFAULT NULL,
 
31465
  `f_char1` char(20) DEFAULT NULL,
 
31466
  `f_char2` char(20) DEFAULT NULL,
 
31467
  `f_charbig` varchar(1000) DEFAULT NULL
 
31468
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
31469
 
 
31470
unified filelist
 
31471
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
 
31472
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI
 
31473
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD
 
31474
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI
 
31475
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD
 
31476
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI
 
31477
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD
 
31478
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI
 
31479
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD
 
31480
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI
 
31481
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD
 
31482
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI
 
31483
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD
 
31484
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI
 
31485
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD
 
31486
$MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI
 
31487
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
31488
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
31489
 
 
31490
# check prerequisites-1 success:    1
 
31491
# check COUNT(*) success:    1
 
31492
# check MIN/MAX(f_int1) success:    1
 
31493
# check MIN/MAX(f_int2) success:    1
 
31494
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31495
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31496
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31497
WHERE f_int1 IN (2,3);
 
31498
# check prerequisites-3 success:    1
 
31499
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31500
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31501
# check read via f_int1 success: 1
 
31502
# check read via f_int2 success: 1
 
31503
        
 
31504
# check multiple-1 success:     1
 
31505
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31506
        
 
31507
# check multiple-2 success:     1
 
31508
INSERT INTO t1 SELECT * FROM t0_template
 
31509
WHERE MOD(f_int1,3) = 0;
 
31510
        
 
31511
# check multiple-3 success:     1
 
31512
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31513
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31514
AND @max_row_div2 + @max_row_div4;
 
31515
        
 
31516
# check multiple-4 success:     1
 
31517
DELETE FROM t1
 
31518
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31519
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31520
        
 
31521
# check multiple-5 success:     1
 
31522
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31523
INSERT INTO t1
 
31524
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31525
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31526
f_charbig = '#SINGLE#';
 
31527
        
 
31528
# check single-1 success:       1
 
31529
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31530
INSERT INTO t1
 
31531
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31532
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31533
f_charbig = '#SINGLE#';
 
31534
        
 
31535
# check single-2 success:       1
 
31536
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31537
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31538
UPDATE t1 SET f_int1 = @cur_value2
 
31539
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31540
        
 
31541
# check single-3 success:       1
 
31542
SET @cur_value1= -1;
 
31543
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31544
UPDATE t1 SET f_int1 = @cur_value1
 
31545
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31546
        
 
31547
# check single-4 success:       1
 
31548
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31549
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31550
        
 
31551
# check single-5 success:       1
 
31552
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31553
        
 
31554
# check single-6 success:       1
 
31555
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31556
        
 
31557
# check single-7 success:       1
 
31558
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
31559
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31560
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31561
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31562
f_charbig = '#NULL#';
 
31563
INSERT INTO t1
 
31564
SET f_int1 = NULL , f_int2 = -@max_row,
 
31565
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31566
f_charbig = '#NULL#';
 
31567
# check null success:    1
 
31568
        
 
31569
# check null-1 success:         1
 
31570
UPDATE t1 SET f_int1 = -@max_row
 
31571
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31572
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31573
        
 
31574
# check null-2 success:         1
 
31575
UPDATE t1 SET f_int1 = NULL
 
31576
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31577
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31578
        
 
31579
# check null-3 success:         1
 
31580
DELETE FROM t1
 
31581
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31582
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31583
        
 
31584
# check null-4 success:         1
 
31585
DELETE FROM t1
 
31586
WHERE f_int1 = 0 AND f_int2 = 0
 
31587
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31588
AND f_charbig = '#NULL#';
 
31589
SET AUTOCOMMIT= 0;
 
31590
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31591
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31592
FROM t0_template source_tab
 
31593
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31594
        
 
31595
# check transactions-1 success:         1
 
31596
COMMIT WORK;
 
31597
        
 
31598
# check transactions-2 success:         1
 
31599
ROLLBACK WORK;
 
31600
        
 
31601
# check transactions-3 success:         1
 
31602
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31603
COMMIT WORK;
 
31604
ROLLBACK WORK;
 
31605
        
 
31606
# check transactions-4 success:         1
 
31607
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31608
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31609
FROM t0_template source_tab
 
31610
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31611
        
 
31612
# check transactions-5 success:         1
 
31613
ROLLBACK WORK;
 
31614
Warnings:
 
31615
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
31616
        
 
31617
# check transactions-6 success:         1
 
31618
# INFO: Storage engine used for t1 seems to be not transactional.
 
31619
COMMIT;
 
31620
        
 
31621
# check transactions-7 success:         1
 
31622
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31623
COMMIT WORK;
 
31624
SET @@session.sql_mode = 'traditional';
 
31625
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31626
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31627
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31628
'', '', 'was inserted' FROM t0_template
 
31629
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31630
ERROR 22012: Division by 0
 
31631
COMMIT;
 
31632
        
 
31633
# check transactions-8 success:         1
 
31634
# INFO: Storage engine used for t1 seems to be unable to revert
 
31635
#       changes made by the failing statement.
 
31636
SET @@session.sql_mode = '';
 
31637
SET AUTOCOMMIT= 1;
 
31638
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31639
COMMIT WORK;
 
31640
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31641
        
 
31642
# check special-1 success:      1
 
31643
UPDATE t1 SET f_charbig = '';
 
31644
        
 
31645
# check special-2 success:      1
 
31646
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31647
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31648
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31652
'just inserted' FROM t0_template
 
31653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31654
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31655
BEGIN
 
31656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31657
f_charbig = 'updated by trigger'
 
31658
      WHERE f_int1 = new.f_int1;
 
31659
END|
 
31660
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31661
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31663
        
 
31664
# check trigger-1 success:      1
 
31665
DROP TRIGGER trg_1;
 
31666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31668
f_charbig = 'just inserted'
 
31669
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31670
DELETE FROM t0_aux
 
31671
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31674
'just inserted' FROM t0_template
 
31675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31676
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31677
BEGIN
 
31678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31679
f_charbig = 'updated by trigger'
 
31680
      WHERE f_int1 = new.f_int1;
 
31681
END|
 
31682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31683
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31685
        
 
31686
# check trigger-2 success:      1
 
31687
DROP TRIGGER trg_1;
 
31688
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31689
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31690
f_charbig = 'just inserted'
 
31691
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31692
DELETE FROM t0_aux
 
31693
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31694
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31695
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31696
'just inserted' FROM t0_template
 
31697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31698
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31699
BEGIN
 
31700
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31701
f_charbig = 'updated by trigger'
 
31702
      WHERE f_int1 = new.f_int1;
 
31703
END|
 
31704
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31705
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31706
        
 
31707
# check trigger-3 success:      1
 
31708
DROP TRIGGER trg_1;
 
31709
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31710
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31711
f_charbig = 'just inserted'
 
31712
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31713
DELETE FROM t0_aux
 
31714
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31715
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31716
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31717
'just inserted' FROM t0_template
 
31718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31719
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31720
BEGIN
 
31721
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31722
f_charbig = 'updated by trigger'
 
31723
      WHERE f_int1 = - old.f_int1;
 
31724
END|
 
31725
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31726
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31727
        
 
31728
# check trigger-4 success:      1
 
31729
DROP TRIGGER trg_1;
 
31730
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31731
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31732
f_charbig = 'just inserted'
 
31733
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31734
DELETE FROM t0_aux
 
31735
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31736
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31737
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31738
'just inserted' FROM t0_template
 
31739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31740
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31741
BEGIN
 
31742
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31743
f_charbig = 'updated by trigger'
 
31744
      WHERE f_int1 = new.f_int1;
 
31745
END|
 
31746
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31747
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31748
        
 
31749
# check trigger-5 success:      1
 
31750
DROP TRIGGER trg_1;
 
31751
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31752
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31753
f_charbig = 'just inserted'
 
31754
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31755
DELETE FROM t0_aux
 
31756
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31757
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31758
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31759
'just inserted' FROM t0_template
 
31760
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31761
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31762
BEGIN
 
31763
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31764
f_charbig = 'updated by trigger'
 
31765
      WHERE f_int1 = - old.f_int1;
 
31766
END|
 
31767
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31768
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31769
        
 
31770
# check trigger-6 success:      1
 
31771
DROP TRIGGER trg_1;
 
31772
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31773
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31774
f_charbig = 'just inserted'
 
31775
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31776
DELETE FROM t0_aux
 
31777
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31779
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31780
'just inserted' FROM t0_template
 
31781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31782
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31783
BEGIN
 
31784
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31785
f_charbig = 'updated by trigger'
 
31786
      WHERE f_int1 = - old.f_int1;
 
31787
END|
 
31788
DELETE FROM t0_aux
 
31789
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31790
        
 
31791
# check trigger-7 success:      1
 
31792
DROP TRIGGER trg_1;
 
31793
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31794
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31795
f_charbig = 'just inserted'
 
31796
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31797
DELETE FROM t0_aux
 
31798
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31799
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31800
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31801
'just inserted' FROM t0_template
 
31802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31803
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31804
BEGIN
 
31805
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31806
f_charbig = 'updated by trigger'
 
31807
      WHERE f_int1 = - old.f_int1;
 
31808
END|
 
31809
DELETE FROM t0_aux
 
31810
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31811
        
 
31812
# check trigger-8 success:      1
 
31813
DROP TRIGGER trg_1;
 
31814
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31815
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31816
f_charbig = 'just inserted'
 
31817
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31818
DELETE FROM t0_aux
 
31819
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31820
DELETE FROM t1
 
31821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31822
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31823
BEGIN
 
31824
SET new.f_int1 = old.f_int1 + @max_row,
 
31825
new.f_int2 = old.f_int2 - @max_row,
 
31826
new.f_charbig = '####updated per update trigger####';
 
31827
END|
 
31828
UPDATE t1
 
31829
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31830
f_charbig = '####updated per update statement itself####';
 
31831
        
 
31832
# check trigger-9 success:      1
 
31833
DROP TRIGGER trg_2;
 
31834
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31835
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31836
f_charbig = CONCAT('===',f_char1,'===');
 
31837
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31838
BEGIN
 
31839
SET new.f_int1 = new.f_int1 + @max_row,
 
31840
new.f_int2 = new.f_int2 - @max_row,
 
31841
new.f_charbig = '####updated per update trigger####';
 
31842
END|
 
31843
UPDATE t1
 
31844
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31845
f_charbig = '####updated per update statement itself####';
 
31846
        
 
31847
# check trigger-10 success:     1
 
31848
DROP TRIGGER trg_2;
 
31849
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31850
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31851
f_charbig = CONCAT('===',f_char1,'===');
 
31852
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31853
BEGIN
 
31854
SET new.f_int1 = @my_max1 + @counter,
 
31855
new.f_int2 = @my_min2 - @counter,
 
31856
new.f_charbig = '####updated per insert trigger####';
 
31857
SET @counter = @counter + 1;
 
31858
END|
 
31859
SET @counter = 1;
 
31860
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31862
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31863
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31864
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31865
ORDER BY f_int1;
 
31866
DROP TRIGGER trg_3;
 
31867
        
 
31868
# check trigger-11 success:     1
 
31869
DELETE FROM t1
 
31870
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31871
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31872
AND f_charbig = '####updated per insert trigger####';
 
31873
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31874
BEGIN
 
31875
SET new.f_int1 = @my_max1 + @counter,
 
31876
new.f_int2 = @my_min2 - @counter,
 
31877
new.f_charbig = '####updated per insert trigger####';
 
31878
SET @counter = @counter + 1;
 
31879
END|
 
31880
SET @counter = 1;
 
31881
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31882
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31883
SELECT CAST(f_int1 AS CHAR),
 
31884
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31886
ORDER BY f_int1;
 
31887
DROP TRIGGER trg_3;
 
31888
        
 
31889
# check trigger-12 success:     1
 
31890
DELETE FROM t1
 
31891
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31892
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31893
AND f_charbig = '####updated per insert trigger####';
 
31894
ANALYZE  TABLE t1;
 
31895
Table   Op      Msg_type        Msg_text
 
31896
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
31897
CHECK    TABLE t1 EXTENDED;
 
31898
Table   Op      Msg_type        Msg_text
 
31899
test.t1 check   note    The storage engine for the table doesn't support check
 
31900
CHECKSUM TABLE t1 EXTENDED;
 
31901
Table   Checksum
 
31902
test.t1 <some_value>
 
31903
OPTIMIZE TABLE t1;
 
31904
Table   Op      Msg_type        Msg_text
 
31905
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
31906
# check layout success:    1
 
31907
REPAIR   TABLE t1 EXTENDED;
 
31908
Table   Op      Msg_type        Msg_text
 
31909
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31910
# check layout success:    1
 
31911
TRUNCATE t1;
 
31912
        
 
31913
# check TRUNCATE success:       1
 
31914
# check layout success:    1
 
31915
# End usability test (inc/partition_check.inc)
 
31916
DROP TABLE t1;
 
31917
CREATE TABLE t1 (
 
31918
f_int1 INTEGER,
 
31919
f_int2 INTEGER,
 
31920
f_char1 CHAR(20),
 
31921
f_char2 CHAR(20),
 
31922
f_charbig VARCHAR(1000)
 
31923
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
31924
)
 
31925
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31926
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
31927
(PARTITION part1 VALUES IN (0),
 
31928
 PARTITION part2 VALUES IN (1),
 
31929
 PARTITION part3 VALUES IN (NULL));
 
31930
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31931
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31932
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31933
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
31934
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31935
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31936
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31937
# Start usability test (inc/partition_check.inc)
 
31938
create_command
 
31939
SHOW CREATE TABLE t1;
 
31940
Table   Create Table
 
31941
t1      CREATE TABLE `t1` (
 
31942
  `f_int1` int(11) DEFAULT NULL,
 
31943
  `f_int2` int(11) DEFAULT NULL,
 
31944
  `f_char1` char(20) DEFAULT NULL,
 
31945
  `f_char2` char(20) DEFAULT NULL,
 
31946
  `f_charbig` varchar(1000) DEFAULT NULL
 
31947
) ENGINE=MyISAM 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 = MyISAM, PARTITION part2 VALUES IN (1) ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
31948
 
 
31949
unified filelist
 
31950
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
 
31951
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI
 
31952
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD
 
31953
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI
 
31954
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD
 
31955
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI
 
31956
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD
 
31957
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI
 
31958
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD
 
31959
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI
 
31960
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD
 
31961
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI
 
31962
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD
 
31963
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI
 
31964
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD
 
31965
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI
 
31966
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD
 
31967
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI
 
31968
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
31969
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
31970
 
 
31971
# check prerequisites-1 success:    1
 
31972
# check COUNT(*) success:    1
 
31973
# check MIN/MAX(f_int1) success:    1
 
31974
# check MIN/MAX(f_int2) success:    1
 
31975
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31976
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31977
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31978
WHERE f_int1 IN (2,3);
 
31979
# check prerequisites-3 success:    1
 
31980
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31981
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31982
# check read via f_int1 success: 1
 
31983
# check read via f_int2 success: 1
 
31984
        
 
31985
# check multiple-1 success:     1
 
31986
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31987
        
 
31988
# check multiple-2 success:     1
 
31989
INSERT INTO t1 SELECT * FROM t0_template
 
31990
WHERE MOD(f_int1,3) = 0;
 
31991
        
 
31992
# check multiple-3 success:     1
 
31993
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31994
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31995
AND @max_row_div2 + @max_row_div4;
 
31996
        
 
31997
# check multiple-4 success:     1
 
31998
DELETE FROM t1
 
31999
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32000
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32001
        
 
32002
# check multiple-5 success:     1
 
32003
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32004
INSERT INTO t1
 
32005
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32006
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32007
f_charbig = '#SINGLE#';
 
32008
        
 
32009
# check single-1 success:       1
 
32010
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32011
INSERT INTO t1
 
32012
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32013
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32014
f_charbig = '#SINGLE#';
 
32015
        
 
32016
# check single-2 success:       1
 
32017
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32018
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32019
UPDATE t1 SET f_int1 = @cur_value2
 
32020
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32021
        
 
32022
# check single-3 success:       1
 
32023
SET @cur_value1= -1;
 
32024
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32025
UPDATE t1 SET f_int1 = @cur_value1
 
32026
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32027
        
 
32028
# check single-4 success:       1
 
32029
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32030
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32031
        
 
32032
# check single-5 success:       1
 
32033
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32034
        
 
32035
# check single-6 success:       1
 
32036
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32037
        
 
32038
# check single-7 success:       1
 
32039
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32040
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32041
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32042
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32043
f_charbig = '#NULL#';
 
32044
INSERT INTO t1
 
32045
SET f_int1 = NULL , f_int2 = -@max_row,
 
32046
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32047
f_charbig = '#NULL#';
 
32048
# check null success:    1
 
32049
        
 
32050
# check null-1 success:         1
 
32051
UPDATE t1 SET f_int1 = -@max_row
 
32052
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32053
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32054
        
 
32055
# check null-2 success:         1
 
32056
UPDATE t1 SET f_int1 = NULL
 
32057
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32058
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32059
        
 
32060
# check null-3 success:         1
 
32061
DELETE FROM t1
 
32062
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32063
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32064
        
 
32065
# check null-4 success:         1
 
32066
DELETE FROM t1
 
32067
WHERE f_int1 = 0 AND f_int2 = 0
 
32068
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32069
AND f_charbig = '#NULL#';
 
32070
SET AUTOCOMMIT= 0;
 
32071
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32072
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32073
FROM t0_template source_tab
 
32074
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32075
        
 
32076
# check transactions-1 success:         1
 
32077
COMMIT WORK;
 
32078
        
 
32079
# check transactions-2 success:         1
 
32080
ROLLBACK WORK;
 
32081
        
 
32082
# check transactions-3 success:         1
 
32083
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32084
COMMIT WORK;
 
32085
ROLLBACK WORK;
 
32086
        
 
32087
# check transactions-4 success:         1
 
32088
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32089
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32090
FROM t0_template source_tab
 
32091
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32092
        
 
32093
# check transactions-5 success:         1
 
32094
ROLLBACK WORK;
 
32095
Warnings:
 
32096
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
32097
        
 
32098
# check transactions-6 success:         1
 
32099
# INFO: Storage engine used for t1 seems to be not transactional.
 
32100
COMMIT;
 
32101
        
 
32102
# check transactions-7 success:         1
 
32103
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32104
COMMIT WORK;
 
32105
SET @@session.sql_mode = 'traditional';
 
32106
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32107
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32108
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32109
'', '', 'was inserted' FROM t0_template
 
32110
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32111
ERROR 22012: Division by 0
 
32112
COMMIT;
 
32113
        
 
32114
# check transactions-8 success:         1
 
32115
# INFO: Storage engine used for t1 seems to be unable to revert
 
32116
#       changes made by the failing statement.
 
32117
SET @@session.sql_mode = '';
 
32118
SET AUTOCOMMIT= 1;
 
32119
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32120
COMMIT WORK;
 
32121
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32122
        
 
32123
# check special-1 success:      1
 
32124
UPDATE t1 SET f_charbig = '';
 
32125
        
 
32126
# check special-2 success:      1
 
32127
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32128
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32129
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32131
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32132
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32133
'just inserted' FROM t0_template
 
32134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32135
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32136
BEGIN
 
32137
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32138
f_charbig = 'updated by trigger'
 
32139
      WHERE f_int1 = new.f_int1;
 
32140
END|
 
32141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32142
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32143
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32144
        
 
32145
# check trigger-1 success:      1
 
32146
DROP TRIGGER trg_1;
 
32147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32149
f_charbig = 'just inserted'
 
32150
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32151
DELETE FROM t0_aux
 
32152
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32155
'just inserted' FROM t0_template
 
32156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32157
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32158
BEGIN
 
32159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32160
f_charbig = 'updated by trigger'
 
32161
      WHERE f_int1 = new.f_int1;
 
32162
END|
 
32163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32164
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32166
        
 
32167
# check trigger-2 success:      1
 
32168
DROP TRIGGER trg_1;
 
32169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32171
f_charbig = 'just inserted'
 
32172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32173
DELETE FROM t0_aux
 
32174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32177
'just inserted' FROM t0_template
 
32178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32179
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32180
BEGIN
 
32181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32182
f_charbig = 'updated by trigger'
 
32183
      WHERE f_int1 = new.f_int1;
 
32184
END|
 
32185
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32187
        
 
32188
# check trigger-3 success:      1
 
32189
DROP TRIGGER trg_1;
 
32190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32192
f_charbig = 'just inserted'
 
32193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32194
DELETE FROM t0_aux
 
32195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32198
'just inserted' FROM t0_template
 
32199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32200
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32201
BEGIN
 
32202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32203
f_charbig = 'updated by trigger'
 
32204
      WHERE f_int1 = - old.f_int1;
 
32205
END|
 
32206
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32208
        
 
32209
# check trigger-4 success:      1
 
32210
DROP TRIGGER trg_1;
 
32211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32213
f_charbig = 'just inserted'
 
32214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32215
DELETE FROM t0_aux
 
32216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32218
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32219
'just inserted' FROM t0_template
 
32220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32221
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32222
BEGIN
 
32223
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32224
f_charbig = 'updated by trigger'
 
32225
      WHERE f_int1 = new.f_int1;
 
32226
END|
 
32227
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32228
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32229
        
 
32230
# check trigger-5 success:      1
 
32231
DROP TRIGGER trg_1;
 
32232
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32233
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32234
f_charbig = 'just inserted'
 
32235
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32236
DELETE FROM t0_aux
 
32237
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32238
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32239
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32240
'just inserted' FROM t0_template
 
32241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32242
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32243
BEGIN
 
32244
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32245
f_charbig = 'updated by trigger'
 
32246
      WHERE f_int1 = - old.f_int1;
 
32247
END|
 
32248
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32249
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32250
        
 
32251
# check trigger-6 success:      1
 
32252
DROP TRIGGER trg_1;
 
32253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32255
f_charbig = 'just inserted'
 
32256
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32257
DELETE FROM t0_aux
 
32258
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32260
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32261
'just inserted' FROM t0_template
 
32262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32263
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32264
BEGIN
 
32265
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32266
f_charbig = 'updated by trigger'
 
32267
      WHERE f_int1 = - old.f_int1;
 
32268
END|
 
32269
DELETE FROM t0_aux
 
32270
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32271
        
 
32272
# check trigger-7 success:      1
 
32273
DROP TRIGGER trg_1;
 
32274
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32275
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32276
f_charbig = 'just inserted'
 
32277
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32278
DELETE FROM t0_aux
 
32279
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32280
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32281
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32282
'just inserted' FROM t0_template
 
32283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32284
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32285
BEGIN
 
32286
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32287
f_charbig = 'updated by trigger'
 
32288
      WHERE f_int1 = - old.f_int1;
 
32289
END|
 
32290
DELETE FROM t0_aux
 
32291
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32292
        
 
32293
# check trigger-8 success:      1
 
32294
DROP TRIGGER trg_1;
 
32295
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32296
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32297
f_charbig = 'just inserted'
 
32298
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32299
DELETE FROM t0_aux
 
32300
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32301
DELETE FROM t1
 
32302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32303
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32304
BEGIN
 
32305
SET new.f_int1 = old.f_int1 + @max_row,
 
32306
new.f_int2 = old.f_int2 - @max_row,
 
32307
new.f_charbig = '####updated per update trigger####';
 
32308
END|
 
32309
UPDATE t1
 
32310
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32311
f_charbig = '####updated per update statement itself####';
 
32312
        
 
32313
# check trigger-9 success:      1
 
32314
DROP TRIGGER trg_2;
 
32315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32317
f_charbig = CONCAT('===',f_char1,'===');
 
32318
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32319
BEGIN
 
32320
SET new.f_int1 = new.f_int1 + @max_row,
 
32321
new.f_int2 = new.f_int2 - @max_row,
 
32322
new.f_charbig = '####updated per update trigger####';
 
32323
END|
 
32324
UPDATE t1
 
32325
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32326
f_charbig = '####updated per update statement itself####';
 
32327
        
 
32328
# check trigger-10 success:     1
 
32329
DROP TRIGGER trg_2;
 
32330
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32331
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32332
f_charbig = CONCAT('===',f_char1,'===');
 
32333
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32334
BEGIN
 
32335
SET new.f_int1 = @my_max1 + @counter,
 
32336
new.f_int2 = @my_min2 - @counter,
 
32337
new.f_charbig = '####updated per insert trigger####';
 
32338
SET @counter = @counter + 1;
 
32339
END|
 
32340
SET @counter = 1;
 
32341
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32342
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32343
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32344
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32346
ORDER BY f_int1;
 
32347
DROP TRIGGER trg_3;
 
32348
        
 
32349
# check trigger-11 success:     1
 
32350
DELETE FROM t1
 
32351
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32352
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32353
AND f_charbig = '####updated per insert trigger####';
 
32354
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32355
BEGIN
 
32356
SET new.f_int1 = @my_max1 + @counter,
 
32357
new.f_int2 = @my_min2 - @counter,
 
32358
new.f_charbig = '####updated per insert trigger####';
 
32359
SET @counter = @counter + 1;
 
32360
END|
 
32361
SET @counter = 1;
 
32362
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32363
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32364
SELECT CAST(f_int1 AS CHAR),
 
32365
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32367
ORDER BY f_int1;
 
32368
DROP TRIGGER trg_3;
 
32369
        
 
32370
# check trigger-12 success:     1
 
32371
DELETE FROM t1
 
32372
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32373
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32374
AND f_charbig = '####updated per insert trigger####';
 
32375
ANALYZE  TABLE t1;
 
32376
Table   Op      Msg_type        Msg_text
 
32377
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
32378
CHECK    TABLE t1 EXTENDED;
 
32379
Table   Op      Msg_type        Msg_text
 
32380
test.t1 check   note    The storage engine for the table doesn't support check
 
32381
CHECKSUM TABLE t1 EXTENDED;
 
32382
Table   Checksum
 
32383
test.t1 <some_value>
 
32384
OPTIMIZE TABLE t1;
 
32385
Table   Op      Msg_type        Msg_text
 
32386
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
32387
# check layout success:    1
 
32388
REPAIR   TABLE t1 EXTENDED;
 
32389
Table   Op      Msg_type        Msg_text
 
32390
test.t1 repair  note    The storage engine for the table doesn't support repair
 
32391
# check layout success:    1
 
32392
TRUNCATE t1;
 
32393
        
 
32394
# check TRUNCATE success:       1
 
32395
# check layout success:    1
 
32396
# End usability test (inc/partition_check.inc)
 
32397
DROP TABLE t1;
 
32398
DROP VIEW  IF EXISTS v1;
 
32399
DROP TABLE IF EXISTS t1;
 
32400
DROP TABLE IF EXISTS t0_aux;
 
32401
DROP TABLE IF EXISTS t0_definition;
 
32402
DROP TABLE IF EXISTS t0_template;