~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

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
#  2     DROP PRIMARY KEY or UNIQUE INDEX
 
43
#========================================================================
 
44
#------------------------------------------------------------------------
 
45
#  2.1   Partitioning function contains one column(f_int1)
 
46
#------------------------------------------------------------------------
 
47
DROP TABLE IF EXISTS t1;
 
48
CREATE TABLE t1 (
 
49
f_int1 INTEGER,
 
50
f_int2 INTEGER,
 
51
f_char1 CHAR(20),
 
52
f_char2 CHAR(20),
 
53
f_charbig VARCHAR(1000)
 
54
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
55
)
 
56
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
57
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
58
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
59
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
60
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
61
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
62
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
63
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
64
# Start usability test (inc/partition_check.inc)
 
65
create_command
 
66
SHOW CREATE TABLE t1;
 
67
Table   Create Table
 
68
t1      CREATE TABLE `t1` (
 
69
  `f_int1` int(11) DEFAULT NULL,
 
70
  `f_int2` int(11) DEFAULT NULL,
 
71
  `f_char1` char(20) DEFAULT NULL,
 
72
  `f_char2` char(20) DEFAULT NULL,
 
73
  `f_charbig` varchar(1000) DEFAULT NULL
 
74
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
75
/*!50100 PARTITION BY HASH (f_int1)
 
76
PARTITIONS 2 */
 
77
 
 
78
unified filelist
 
79
t1#P#p0.MYD
 
80
t1#P#p0.MYI
 
81
t1#P#p1.MYD
 
82
t1#P#p1.MYI
 
83
t1.frm
 
84
t1.par
 
85
 
 
86
# check prerequisites-1 success:    1
 
87
# check COUNT(*) success:    1
 
88
# check MIN/MAX(f_int1) success:    1
 
89
# check MIN/MAX(f_int2) success:    1
 
90
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
91
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
92
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
93
WHERE f_int1 IN (2,3);
 
94
# check prerequisites-3 success:    1
 
95
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
96
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
97
# check read via f_int1 success: 1
 
98
# check read via f_int2 success: 1
 
99
        
 
100
# check multiple-1 success:     1
 
101
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
102
        
 
103
# check multiple-2 success:     1
 
104
INSERT INTO t1 SELECT * FROM t0_template
 
105
WHERE MOD(f_int1,3) = 0;
 
106
        
 
107
# check multiple-3 success:     1
 
108
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
109
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
110
AND @max_row_div2 + @max_row_div4;
 
111
        
 
112
# check multiple-4 success:     1
 
113
DELETE FROM t1
 
114
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
115
AND @max_row_div2 + @max_row_div4 + @max_row;
 
116
        
 
117
# check multiple-5 success:     1
 
118
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
119
INSERT INTO t1
 
120
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
121
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
122
f_charbig = '#SINGLE#';
 
123
        
 
124
# check single-1 success:       1
 
125
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
126
INSERT INTO t1
 
127
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
128
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
129
f_charbig = '#SINGLE#';
 
130
        
 
131
# check single-2 success:       1
 
132
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
133
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
134
UPDATE t1 SET f_int1 = @cur_value2
 
135
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
136
        
 
137
# check single-3 success:       1
 
138
SET @cur_value1= -1;
 
139
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
140
UPDATE t1 SET f_int1 = @cur_value1
 
141
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
142
        
 
143
# check single-4 success:       1
 
144
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
145
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
146
        
 
147
# check single-5 success:       1
 
148
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
149
        
 
150
# check single-6 success:       1
 
151
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
152
        
 
153
# check single-7 success:       1
 
154
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
155
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
156
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
157
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
158
f_charbig = '#NULL#';
 
159
INSERT INTO t1
 
160
SET f_int1 = NULL , f_int2 = -@max_row,
 
161
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
162
f_charbig = '#NULL#';
 
163
# check null success:    1
 
164
        
 
165
# check null-1 success:         1
 
166
UPDATE t1 SET f_int1 = -@max_row
 
167
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
168
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
169
        
 
170
# check null-2 success:         1
 
171
UPDATE t1 SET f_int1 = NULL
 
172
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
173
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
174
        
 
175
# check null-3 success:         1
 
176
DELETE FROM t1
 
177
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
178
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
179
        
 
180
# check null-4 success:         1
 
181
DELETE FROM t1
 
182
WHERE f_int1 = 0 AND f_int2 = 0
 
183
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
184
AND f_charbig = '#NULL#';
 
185
SET AUTOCOMMIT= 0;
 
186
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
187
SELECT f_int1, f_int1, '', '', 'was inserted'
 
188
FROM t0_template source_tab
 
189
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
190
        
 
191
# check transactions-1 success:         1
 
192
COMMIT WORK;
 
193
        
 
194
# check transactions-2 success:         1
 
195
ROLLBACK WORK;
 
196
        
 
197
# check transactions-3 success:         1
 
198
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
199
COMMIT WORK;
 
200
ROLLBACK WORK;
 
201
        
 
202
# check transactions-4 success:         1
 
203
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
204
SELECT f_int1, f_int1, '', '', 'was inserted'
 
205
FROM t0_template source_tab
 
206
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
207
        
 
208
# check transactions-5 success:         1
 
209
ROLLBACK WORK;
 
210
Warnings:
 
211
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
212
        
 
213
# check transactions-6 success:         1
 
214
# INFO: Storage engine used for t1 seems to be not transactional.
 
215
COMMIT;
 
216
        
 
217
# check transactions-7 success:         1
 
218
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
219
COMMIT WORK;
 
220
SET @@session.sql_mode = 'traditional';
 
221
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
222
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
223
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
224
'', '', 'was inserted' FROM t0_template
 
225
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
226
ERROR 22012: Division by 0
 
227
COMMIT;
 
228
        
 
229
# check transactions-8 success:         1
 
230
# INFO: Storage engine used for t1 seems to be unable to revert
 
231
#       changes made by the failing statement.
 
232
SET @@session.sql_mode = '';
 
233
SET AUTOCOMMIT= 1;
 
234
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
235
COMMIT WORK;
 
236
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
237
        
 
238
# check special-1 success:      1
 
239
UPDATE t1 SET f_charbig = '';
 
240
        
 
241
# check special-2 success:      1
 
242
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
243
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
244
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
246
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
247
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
248
'just inserted' FROM t0_template
 
249
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
250
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
251
BEGIN
 
252
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
253
f_charbig = 'updated by trigger'
 
254
      WHERE f_int1 = new.f_int1;
 
255
END|
 
256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
257
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
258
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
259
        
 
260
# check trigger-1 success:      1
 
261
DROP TRIGGER trg_1;
 
262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
264
f_charbig = 'just inserted'
 
265
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
266
DELETE FROM t0_aux
 
267
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
270
'just inserted' FROM t0_template
 
271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
272
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
273
BEGIN
 
274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
275
f_charbig = 'updated by trigger'
 
276
      WHERE f_int1 = new.f_int1;
 
277
END|
 
278
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
279
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
281
        
 
282
# check trigger-2 success:      1
 
283
DROP TRIGGER trg_1;
 
284
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
285
f_int2 = CAST(f_char1 AS SIGNED INT),
 
286
f_charbig = 'just inserted'
 
287
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
288
DELETE FROM t0_aux
 
289
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
290
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
291
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
292
'just inserted' FROM t0_template
 
293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
294
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
295
BEGIN
 
296
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
297
f_charbig = 'updated by trigger'
 
298
      WHERE f_int1 = new.f_int1;
 
299
END|
 
300
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
301
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
302
        
 
303
# check trigger-3 success:      1
 
304
DROP TRIGGER trg_1;
 
305
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
306
f_int2 = CAST(f_char1 AS SIGNED INT),
 
307
f_charbig = 'just inserted'
 
308
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
309
DELETE FROM t0_aux
 
310
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
311
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
312
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
313
'just inserted' FROM t0_template
 
314
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
315
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
316
BEGIN
 
317
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
318
f_charbig = 'updated by trigger'
 
319
      WHERE f_int1 = - old.f_int1;
 
320
END|
 
321
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
322
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
323
        
 
324
# check trigger-4 success:      1
 
325
DROP TRIGGER trg_1;
 
326
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
327
f_int2 = CAST(f_char1 AS SIGNED INT),
 
328
f_charbig = 'just inserted'
 
329
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
330
DELETE FROM t0_aux
 
331
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
332
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
333
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
334
'just inserted' FROM t0_template
 
335
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
336
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
337
BEGIN
 
338
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
339
f_charbig = 'updated by trigger'
 
340
      WHERE f_int1 = new.f_int1;
 
341
END|
 
342
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
343
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
344
        
 
345
# check trigger-5 success:      1
 
346
DROP TRIGGER trg_1;
 
347
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
348
f_int2 = CAST(f_char1 AS SIGNED INT),
 
349
f_charbig = 'just inserted'
 
350
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
351
DELETE FROM t0_aux
 
352
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
354
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
355
'just inserted' FROM t0_template
 
356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
357
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
358
BEGIN
 
359
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
360
f_charbig = 'updated by trigger'
 
361
      WHERE f_int1 = - old.f_int1;
 
362
END|
 
363
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
364
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
365
        
 
366
# check trigger-6 success:      1
 
367
DROP TRIGGER trg_1;
 
368
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
369
f_int2 = CAST(f_char1 AS SIGNED INT),
 
370
f_charbig = 'just inserted'
 
371
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
372
DELETE FROM t0_aux
 
373
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
374
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
375
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
376
'just inserted' FROM t0_template
 
377
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
378
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
379
BEGIN
 
380
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
381
f_charbig = 'updated by trigger'
 
382
      WHERE f_int1 = - old.f_int1;
 
383
END|
 
384
DELETE FROM t0_aux
 
385
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
386
        
 
387
# check trigger-7 success:      1
 
388
DROP TRIGGER trg_1;
 
389
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
390
f_int2 = CAST(f_char1 AS SIGNED INT),
 
391
f_charbig = 'just inserted'
 
392
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
393
DELETE FROM t0_aux
 
394
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
395
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
396
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
397
'just inserted' FROM t0_template
 
398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
399
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
400
BEGIN
 
401
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
402
f_charbig = 'updated by trigger'
 
403
      WHERE f_int1 = - old.f_int1;
 
404
END|
 
405
DELETE FROM t0_aux
 
406
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
407
        
 
408
# check trigger-8 success:      1
 
409
DROP TRIGGER trg_1;
 
410
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
411
f_int2 = CAST(f_char1 AS SIGNED INT),
 
412
f_charbig = 'just inserted'
 
413
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
414
DELETE FROM t0_aux
 
415
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
416
DELETE FROM t1
 
417
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
418
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
419
BEGIN
 
420
SET new.f_int1 = old.f_int1 + @max_row,
 
421
new.f_int2 = old.f_int2 - @max_row,
 
422
new.f_charbig = '####updated per update trigger####';
 
423
END|
 
424
UPDATE t1
 
425
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
426
f_charbig = '####updated per update statement itself####';
 
427
        
 
428
# check trigger-9 success:      1
 
429
DROP TRIGGER trg_2;
 
430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
432
f_charbig = CONCAT('===',f_char1,'===');
 
433
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
434
BEGIN
 
435
SET new.f_int1 = new.f_int1 + @max_row,
 
436
new.f_int2 = new.f_int2 - @max_row,
 
437
new.f_charbig = '####updated per update trigger####';
 
438
END|
 
439
UPDATE t1
 
440
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
441
f_charbig = '####updated per update statement itself####';
 
442
        
 
443
# check trigger-10 success:     1
 
444
DROP TRIGGER trg_2;
 
445
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
446
f_int2 = CAST(f_char1 AS SIGNED INT),
 
447
f_charbig = CONCAT('===',f_char1,'===');
 
448
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
449
BEGIN
 
450
SET new.f_int1 = @my_max1 + @counter,
 
451
new.f_int2 = @my_min2 - @counter,
 
452
new.f_charbig = '####updated per insert trigger####';
 
453
SET @counter = @counter + 1;
 
454
END|
 
455
SET @counter = 1;
 
456
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
457
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
458
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
459
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
461
ORDER BY f_int1;
 
462
DROP TRIGGER trg_3;
 
463
        
 
464
# check trigger-11 success:     1
 
465
DELETE FROM t1
 
466
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
467
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
468
AND f_charbig = '####updated per insert trigger####';
 
469
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
470
BEGIN
 
471
SET new.f_int1 = @my_max1 + @counter,
 
472
new.f_int2 = @my_min2 - @counter,
 
473
new.f_charbig = '####updated per insert trigger####';
 
474
SET @counter = @counter + 1;
 
475
END|
 
476
SET @counter = 1;
 
477
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
478
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
479
SELECT CAST(f_int1 AS CHAR),
 
480
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
481
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
482
ORDER BY f_int1;
 
483
DROP TRIGGER trg_3;
 
484
        
 
485
# check trigger-12 success:     1
 
486
DELETE FROM t1
 
487
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
488
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
489
AND f_charbig = '####updated per insert trigger####';
 
490
ANALYZE  TABLE t1;
 
491
Table   Op      Msg_type        Msg_text
 
492
test.t1 analyze status  OK
 
493
CHECK    TABLE t1 EXTENDED;
 
494
Table   Op      Msg_type        Msg_text
 
495
test.t1 check   status  OK
 
496
CHECKSUM TABLE t1 EXTENDED;
 
497
Table   Checksum
 
498
test.t1 <some_value>
 
499
OPTIMIZE TABLE t1;
 
500
Table   Op      Msg_type        Msg_text
 
501
test.t1 optimize        status  OK
 
502
# check layout success:    1
 
503
REPAIR   TABLE t1 EXTENDED;
 
504
Table   Op      Msg_type        Msg_text
 
505
test.t1 repair  status  OK
 
506
# check layout success:    1
 
507
TRUNCATE t1;
 
508
        
 
509
# check TRUNCATE success:       1
 
510
# check layout success:    1
 
511
# End usability test (inc/partition_check.inc)
 
512
DROP TABLE t1;
 
513
CREATE TABLE t1 (
 
514
f_int1 INTEGER,
 
515
f_int2 INTEGER,
 
516
f_char1 CHAR(20),
 
517
f_char2 CHAR(20),
 
518
f_charbig VARCHAR(1000)
 
519
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
520
)
 
521
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
522
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
523
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
524
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
525
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
526
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
527
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
528
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
529
# Start usability test (inc/partition_check.inc)
 
530
create_command
 
531
SHOW CREATE TABLE t1;
 
532
Table   Create Table
 
533
t1      CREATE TABLE `t1` (
 
534
  `f_int1` int(11) DEFAULT NULL,
 
535
  `f_int2` int(11) DEFAULT NULL,
 
536
  `f_char1` char(20) DEFAULT NULL,
 
537
  `f_char2` char(20) DEFAULT NULL,
 
538
  `f_charbig` varchar(1000) DEFAULT NULL
 
539
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
540
/*!50100 PARTITION BY KEY (f_int1)
 
541
PARTITIONS 5 */
 
542
 
 
543
unified filelist
 
544
t1#P#p0.MYD
 
545
t1#P#p0.MYI
 
546
t1#P#p1.MYD
 
547
t1#P#p1.MYI
 
548
t1#P#p2.MYD
 
549
t1#P#p2.MYI
 
550
t1#P#p3.MYD
 
551
t1#P#p3.MYI
 
552
t1#P#p4.MYD
 
553
t1#P#p4.MYI
 
554
t1.frm
 
555
t1.par
 
556
 
 
557
# check prerequisites-1 success:    1
 
558
# check COUNT(*) success:    1
 
559
# check MIN/MAX(f_int1) success:    1
 
560
# check MIN/MAX(f_int2) success:    1
 
561
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
562
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
563
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
564
WHERE f_int1 IN (2,3);
 
565
# check prerequisites-3 success:    1
 
566
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
567
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
568
# check read via f_int1 success: 1
 
569
# check read via f_int2 success: 1
 
570
        
 
571
# check multiple-1 success:     1
 
572
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
573
        
 
574
# check multiple-2 success:     1
 
575
INSERT INTO t1 SELECT * FROM t0_template
 
576
WHERE MOD(f_int1,3) = 0;
 
577
        
 
578
# check multiple-3 success:     1
 
579
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
580
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
581
AND @max_row_div2 + @max_row_div4;
 
582
        
 
583
# check multiple-4 success:     1
 
584
DELETE FROM t1
 
585
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
586
AND @max_row_div2 + @max_row_div4 + @max_row;
 
587
        
 
588
# check multiple-5 success:     1
 
589
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
590
INSERT INTO t1
 
591
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
592
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
593
f_charbig = '#SINGLE#';
 
594
        
 
595
# check single-1 success:       1
 
596
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
597
INSERT INTO t1
 
598
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
599
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
600
f_charbig = '#SINGLE#';
 
601
        
 
602
# check single-2 success:       1
 
603
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
604
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
605
UPDATE t1 SET f_int1 = @cur_value2
 
606
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
607
        
 
608
# check single-3 success:       1
 
609
SET @cur_value1= -1;
 
610
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
611
UPDATE t1 SET f_int1 = @cur_value1
 
612
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
613
        
 
614
# check single-4 success:       1
 
615
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
616
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
617
        
 
618
# check single-5 success:       1
 
619
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
620
        
 
621
# check single-6 success:       1
 
622
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
623
        
 
624
# check single-7 success:       1
 
625
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
626
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
627
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
628
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
629
f_charbig = '#NULL#';
 
630
INSERT INTO t1
 
631
SET f_int1 = NULL , f_int2 = -@max_row,
 
632
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
633
f_charbig = '#NULL#';
 
634
# check null success:    1
 
635
        
 
636
# check null-1 success:         1
 
637
UPDATE t1 SET f_int1 = -@max_row
 
638
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
639
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
640
        
 
641
# check null-2 success:         1
 
642
UPDATE t1 SET f_int1 = NULL
 
643
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
644
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
645
        
 
646
# check null-3 success:         1
 
647
DELETE FROM t1
 
648
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
649
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
650
        
 
651
# check null-4 success:         1
 
652
DELETE FROM t1
 
653
WHERE f_int1 = 0 AND f_int2 = 0
 
654
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
655
AND f_charbig = '#NULL#';
 
656
SET AUTOCOMMIT= 0;
 
657
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
658
SELECT f_int1, f_int1, '', '', 'was inserted'
 
659
FROM t0_template source_tab
 
660
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
661
        
 
662
# check transactions-1 success:         1
 
663
COMMIT WORK;
 
664
        
 
665
# check transactions-2 success:         1
 
666
ROLLBACK WORK;
 
667
        
 
668
# check transactions-3 success:         1
 
669
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
670
COMMIT WORK;
 
671
ROLLBACK WORK;
 
672
        
 
673
# check transactions-4 success:         1
 
674
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
675
SELECT f_int1, f_int1, '', '', 'was inserted'
 
676
FROM t0_template source_tab
 
677
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
678
        
 
679
# check transactions-5 success:         1
 
680
ROLLBACK WORK;
 
681
Warnings:
 
682
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
683
        
 
684
# check transactions-6 success:         1
 
685
# INFO: Storage engine used for t1 seems to be not transactional.
 
686
COMMIT;
 
687
        
 
688
# check transactions-7 success:         1
 
689
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
690
COMMIT WORK;
 
691
SET @@session.sql_mode = 'traditional';
 
692
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
693
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
694
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
695
'', '', 'was inserted' FROM t0_template
 
696
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
697
ERROR 22012: Division by 0
 
698
COMMIT;
 
699
        
 
700
# check transactions-8 success:         1
 
701
# INFO: Storage engine used for t1 seems to be unable to revert
 
702
#       changes made by the failing statement.
 
703
SET @@session.sql_mode = '';
 
704
SET AUTOCOMMIT= 1;
 
705
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
706
COMMIT WORK;
 
707
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
708
        
 
709
# check special-1 success:      1
 
710
UPDATE t1 SET f_charbig = '';
 
711
        
 
712
# check special-2 success:      1
 
713
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
714
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
715
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
717
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
718
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
719
'just inserted' FROM t0_template
 
720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
721
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
722
BEGIN
 
723
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
724
f_charbig = 'updated by trigger'
 
725
      WHERE f_int1 = new.f_int1;
 
726
END|
 
727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
728
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
730
        
 
731
# check trigger-1 success:      1
 
732
DROP TRIGGER trg_1;
 
733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
735
f_charbig = 'just inserted'
 
736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
737
DELETE FROM t0_aux
 
738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
741
'just inserted' FROM t0_template
 
742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
743
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
744
BEGIN
 
745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
746
f_charbig = 'updated by trigger'
 
747
      WHERE f_int1 = new.f_int1;
 
748
END|
 
749
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
750
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
752
        
 
753
# check trigger-2 success:      1
 
754
DROP TRIGGER trg_1;
 
755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
757
f_charbig = 'just inserted'
 
758
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
759
DELETE FROM t0_aux
 
760
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
761
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
762
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
763
'just inserted' FROM t0_template
 
764
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
765
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
766
BEGIN
 
767
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
768
f_charbig = 'updated by trigger'
 
769
      WHERE f_int1 = new.f_int1;
 
770
END|
 
771
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
772
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
773
        
 
774
# check trigger-3 success:      1
 
775
DROP TRIGGER trg_1;
 
776
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
777
f_int2 = CAST(f_char1 AS SIGNED INT),
 
778
f_charbig = 'just inserted'
 
779
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
780
DELETE FROM t0_aux
 
781
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
782
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
783
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
784
'just inserted' FROM t0_template
 
785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
786
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
787
BEGIN
 
788
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
789
f_charbig = 'updated by trigger'
 
790
      WHERE f_int1 = - old.f_int1;
 
791
END|
 
792
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
793
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
794
        
 
795
# check trigger-4 success:      1
 
796
DROP TRIGGER trg_1;
 
797
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
798
f_int2 = CAST(f_char1 AS SIGNED INT),
 
799
f_charbig = 'just inserted'
 
800
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
801
DELETE FROM t0_aux
 
802
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
803
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
804
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
805
'just inserted' FROM t0_template
 
806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
807
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
808
BEGIN
 
809
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
810
f_charbig = 'updated by trigger'
 
811
      WHERE f_int1 = new.f_int1;
 
812
END|
 
813
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
814
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
815
        
 
816
# check trigger-5 success:      1
 
817
DROP TRIGGER trg_1;
 
818
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
819
f_int2 = CAST(f_char1 AS SIGNED INT),
 
820
f_charbig = 'just inserted'
 
821
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
822
DELETE FROM t0_aux
 
823
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
824
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
825
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
826
'just inserted' FROM t0_template
 
827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
828
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
829
BEGIN
 
830
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
831
f_charbig = 'updated by trigger'
 
832
      WHERE f_int1 = - old.f_int1;
 
833
END|
 
834
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
835
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
836
        
 
837
# check trigger-6 success:      1
 
838
DROP TRIGGER trg_1;
 
839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
841
f_charbig = 'just inserted'
 
842
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
843
DELETE FROM t0_aux
 
844
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
845
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
846
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
847
'just inserted' FROM t0_template
 
848
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
849
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
850
BEGIN
 
851
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
852
f_charbig = 'updated by trigger'
 
853
      WHERE f_int1 = - old.f_int1;
 
854
END|
 
855
DELETE FROM t0_aux
 
856
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
857
        
 
858
# check trigger-7 success:      1
 
859
DROP TRIGGER trg_1;
 
860
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
861
f_int2 = CAST(f_char1 AS SIGNED INT),
 
862
f_charbig = 'just inserted'
 
863
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
864
DELETE FROM t0_aux
 
865
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
866
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
867
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
868
'just inserted' FROM t0_template
 
869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
870
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
871
BEGIN
 
872
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
873
f_charbig = 'updated by trigger'
 
874
      WHERE f_int1 = - old.f_int1;
 
875
END|
 
876
DELETE FROM t0_aux
 
877
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
878
        
 
879
# check trigger-8 success:      1
 
880
DROP TRIGGER trg_1;
 
881
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
882
f_int2 = CAST(f_char1 AS SIGNED INT),
 
883
f_charbig = 'just inserted'
 
884
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
885
DELETE FROM t0_aux
 
886
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
887
DELETE FROM t1
 
888
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
889
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
890
BEGIN
 
891
SET new.f_int1 = old.f_int1 + @max_row,
 
892
new.f_int2 = old.f_int2 - @max_row,
 
893
new.f_charbig = '####updated per update trigger####';
 
894
END|
 
895
UPDATE t1
 
896
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
897
f_charbig = '####updated per update statement itself####';
 
898
        
 
899
# check trigger-9 success:      1
 
900
DROP TRIGGER trg_2;
 
901
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
902
f_int2 = CAST(f_char1 AS SIGNED INT),
 
903
f_charbig = CONCAT('===',f_char1,'===');
 
904
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
905
BEGIN
 
906
SET new.f_int1 = new.f_int1 + @max_row,
 
907
new.f_int2 = new.f_int2 - @max_row,
 
908
new.f_charbig = '####updated per update trigger####';
 
909
END|
 
910
UPDATE t1
 
911
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
912
f_charbig = '####updated per update statement itself####';
 
913
        
 
914
# check trigger-10 success:     1
 
915
DROP TRIGGER trg_2;
 
916
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
917
f_int2 = CAST(f_char1 AS SIGNED INT),
 
918
f_charbig = CONCAT('===',f_char1,'===');
 
919
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
920
BEGIN
 
921
SET new.f_int1 = @my_max1 + @counter,
 
922
new.f_int2 = @my_min2 - @counter,
 
923
new.f_charbig = '####updated per insert trigger####';
 
924
SET @counter = @counter + 1;
 
925
END|
 
926
SET @counter = 1;
 
927
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
928
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
929
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
930
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
932
ORDER BY f_int1;
 
933
DROP TRIGGER trg_3;
 
934
        
 
935
# check trigger-11 success:     1
 
936
DELETE FROM t1
 
937
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
938
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
939
AND f_charbig = '####updated per insert trigger####';
 
940
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
941
BEGIN
 
942
SET new.f_int1 = @my_max1 + @counter,
 
943
new.f_int2 = @my_min2 - @counter,
 
944
new.f_charbig = '####updated per insert trigger####';
 
945
SET @counter = @counter + 1;
 
946
END|
 
947
SET @counter = 1;
 
948
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
949
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
950
SELECT CAST(f_int1 AS CHAR),
 
951
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
952
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
953
ORDER BY f_int1;
 
954
DROP TRIGGER trg_3;
 
955
        
 
956
# check trigger-12 success:     1
 
957
DELETE FROM t1
 
958
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
959
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
960
AND f_charbig = '####updated per insert trigger####';
 
961
ANALYZE  TABLE t1;
 
962
Table   Op      Msg_type        Msg_text
 
963
test.t1 analyze status  OK
 
964
CHECK    TABLE t1 EXTENDED;
 
965
Table   Op      Msg_type        Msg_text
 
966
test.t1 check   status  OK
 
967
CHECKSUM TABLE t1 EXTENDED;
 
968
Table   Checksum
 
969
test.t1 <some_value>
 
970
OPTIMIZE TABLE t1;
 
971
Table   Op      Msg_type        Msg_text
 
972
test.t1 optimize        status  OK
 
973
# check layout success:    1
 
974
REPAIR   TABLE t1 EXTENDED;
 
975
Table   Op      Msg_type        Msg_text
 
976
test.t1 repair  status  OK
 
977
# check layout success:    1
 
978
TRUNCATE t1;
 
979
        
 
980
# check TRUNCATE success:       1
 
981
# check layout success:    1
 
982
# End usability test (inc/partition_check.inc)
 
983
DROP TABLE t1;
 
984
CREATE TABLE t1 (
 
985
f_int1 INTEGER,
 
986
f_int2 INTEGER,
 
987
f_char1 CHAR(20),
 
988
f_char2 CHAR(20),
 
989
f_charbig VARCHAR(1000)
 
990
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
991
)
 
992
PARTITION BY LIST(MOD(f_int1,4))
 
993
(PARTITION part_3 VALUES IN (-3),
 
994
PARTITION part_2 VALUES IN (-2),
 
995
PARTITION part_1 VALUES IN (-1),
 
996
PARTITION part_N VALUES IN (NULL),
 
997
PARTITION part0 VALUES IN (0),
 
998
PARTITION part1 VALUES IN (1),
 
999
PARTITION part2 VALUES IN (2),
 
1000
PARTITION part3 VALUES IN (3));
 
1001
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1002
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1003
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1004
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
1005
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1006
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1007
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1008
# Start usability test (inc/partition_check.inc)
 
1009
create_command
 
1010
SHOW CREATE TABLE t1;
 
1011
Table   Create Table
 
1012
t1      CREATE TABLE `t1` (
 
1013
  `f_int1` int(11) DEFAULT NULL,
 
1014
  `f_int2` int(11) DEFAULT NULL,
 
1015
  `f_char1` char(20) DEFAULT NULL,
 
1016
  `f_char2` char(20) DEFAULT NULL,
 
1017
  `f_charbig` varchar(1000) DEFAULT NULL
 
1018
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1019
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
1020
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
1021
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
1022
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
1023
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
1024
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
1025
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
1026
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
1027
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
1028
 
 
1029
unified filelist
 
1030
t1#P#part0.MYD
 
1031
t1#P#part0.MYI
 
1032
t1#P#part1.MYD
 
1033
t1#P#part1.MYI
 
1034
t1#P#part2.MYD
 
1035
t1#P#part2.MYI
 
1036
t1#P#part3.MYD
 
1037
t1#P#part3.MYI
 
1038
t1#P#part_1.MYD
 
1039
t1#P#part_1.MYI
 
1040
t1#P#part_2.MYD
 
1041
t1#P#part_2.MYI
 
1042
t1#P#part_3.MYD
 
1043
t1#P#part_3.MYI
 
1044
t1#P#part_N.MYD
 
1045
t1#P#part_N.MYI
 
1046
t1.frm
 
1047
t1.par
 
1048
 
 
1049
# check prerequisites-1 success:    1
 
1050
# check COUNT(*) success:    1
 
1051
# check MIN/MAX(f_int1) success:    1
 
1052
# check MIN/MAX(f_int2) success:    1
 
1053
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1054
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1055
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1056
WHERE f_int1 IN (2,3);
 
1057
# check prerequisites-3 success:    1
 
1058
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1059
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1060
# check read via f_int1 success: 1
 
1061
# check read via f_int2 success: 1
 
1062
        
 
1063
# check multiple-1 success:     1
 
1064
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1065
        
 
1066
# check multiple-2 success:     1
 
1067
INSERT INTO t1 SELECT * FROM t0_template
 
1068
WHERE MOD(f_int1,3) = 0;
 
1069
        
 
1070
# check multiple-3 success:     1
 
1071
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1072
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1073
AND @max_row_div2 + @max_row_div4;
 
1074
        
 
1075
# check multiple-4 success:     1
 
1076
DELETE FROM t1
 
1077
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1078
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1079
        
 
1080
# check multiple-5 success:     1
 
1081
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1082
INSERT INTO t1
 
1083
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1084
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1085
f_charbig = '#SINGLE#';
 
1086
        
 
1087
# check single-1 success:       1
 
1088
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1089
INSERT INTO t1
 
1090
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1091
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1092
f_charbig = '#SINGLE#';
 
1093
        
 
1094
# check single-2 success:       1
 
1095
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1096
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1097
UPDATE t1 SET f_int1 = @cur_value2
 
1098
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1099
        
 
1100
# check single-3 success:       1
 
1101
SET @cur_value1= -1;
 
1102
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1103
UPDATE t1 SET f_int1 = @cur_value1
 
1104
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1105
        
 
1106
# check single-4 success:       1
 
1107
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1108
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1109
        
 
1110
# check single-5 success:       1
 
1111
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1112
        
 
1113
# check single-6 success:       1
 
1114
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1115
        
 
1116
# check single-7 success:       1
 
1117
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1118
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1119
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1120
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1121
f_charbig = '#NULL#';
 
1122
INSERT INTO t1
 
1123
SET f_int1 = NULL , f_int2 = -@max_row,
 
1124
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1125
f_charbig = '#NULL#';
 
1126
# check null success:    1
 
1127
        
 
1128
# check null-1 success:         1
 
1129
UPDATE t1 SET f_int1 = -@max_row
 
1130
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1131
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1132
        
 
1133
# check null-2 success:         1
 
1134
UPDATE t1 SET f_int1 = NULL
 
1135
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1136
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1137
        
 
1138
# check null-3 success:         1
 
1139
DELETE FROM t1
 
1140
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1141
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1142
        
 
1143
# check null-4 success:         1
 
1144
DELETE FROM t1
 
1145
WHERE f_int1 = 0 AND f_int2 = 0
 
1146
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1147
AND f_charbig = '#NULL#';
 
1148
SET AUTOCOMMIT= 0;
 
1149
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1150
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1151
FROM t0_template source_tab
 
1152
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1153
        
 
1154
# check transactions-1 success:         1
 
1155
COMMIT WORK;
 
1156
        
 
1157
# check transactions-2 success:         1
 
1158
ROLLBACK WORK;
 
1159
        
 
1160
# check transactions-3 success:         1
 
1161
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1162
COMMIT WORK;
 
1163
ROLLBACK WORK;
 
1164
        
 
1165
# check transactions-4 success:         1
 
1166
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1167
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1168
FROM t0_template source_tab
 
1169
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1170
        
 
1171
# check transactions-5 success:         1
 
1172
ROLLBACK WORK;
 
1173
Warnings:
 
1174
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1175
        
 
1176
# check transactions-6 success:         1
 
1177
# INFO: Storage engine used for t1 seems to be not transactional.
 
1178
COMMIT;
 
1179
        
 
1180
# check transactions-7 success:         1
 
1181
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1182
COMMIT WORK;
 
1183
SET @@session.sql_mode = 'traditional';
 
1184
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1186
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1187
'', '', 'was inserted' FROM t0_template
 
1188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1189
ERROR 22012: Division by 0
 
1190
COMMIT;
 
1191
        
 
1192
# check transactions-8 success:         1
 
1193
# INFO: Storage engine used for t1 seems to be unable to revert
 
1194
#       changes made by the failing statement.
 
1195
SET @@session.sql_mode = '';
 
1196
SET AUTOCOMMIT= 1;
 
1197
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1198
COMMIT WORK;
 
1199
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1200
        
 
1201
# check special-1 success:      1
 
1202
UPDATE t1 SET f_charbig = '';
 
1203
        
 
1204
# check special-2 success:      1
 
1205
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1206
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1207
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1211
'just inserted' FROM t0_template
 
1212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1213
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1214
BEGIN
 
1215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1216
f_charbig = 'updated by trigger'
 
1217
      WHERE f_int1 = new.f_int1;
 
1218
END|
 
1219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1220
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1222
        
 
1223
# check trigger-1 success:      1
 
1224
DROP TRIGGER trg_1;
 
1225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1227
f_charbig = 'just inserted'
 
1228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1229
DELETE FROM t0_aux
 
1230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1233
'just inserted' FROM t0_template
 
1234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1235
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1236
BEGIN
 
1237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1238
f_charbig = 'updated by trigger'
 
1239
      WHERE f_int1 = new.f_int1;
 
1240
END|
 
1241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1242
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1244
        
 
1245
# check trigger-2 success:      1
 
1246
DROP TRIGGER trg_1;
 
1247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1249
f_charbig = 'just inserted'
 
1250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1251
DELETE FROM t0_aux
 
1252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1255
'just inserted' FROM t0_template
 
1256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1257
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1258
BEGIN
 
1259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1260
f_charbig = 'updated by trigger'
 
1261
      WHERE f_int1 = new.f_int1;
 
1262
END|
 
1263
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1265
        
 
1266
# check trigger-3 success:      1
 
1267
DROP TRIGGER trg_1;
 
1268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1270
f_charbig = 'just inserted'
 
1271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1272
DELETE FROM t0_aux
 
1273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1276
'just inserted' FROM t0_template
 
1277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1278
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1279
BEGIN
 
1280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1281
f_charbig = 'updated by trigger'
 
1282
      WHERE f_int1 = - old.f_int1;
 
1283
END|
 
1284
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1286
        
 
1287
# check trigger-4 success:      1
 
1288
DROP TRIGGER trg_1;
 
1289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1291
f_charbig = 'just inserted'
 
1292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1293
DELETE FROM t0_aux
 
1294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1297
'just inserted' FROM t0_template
 
1298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1299
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1300
BEGIN
 
1301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1302
f_charbig = 'updated by trigger'
 
1303
      WHERE f_int1 = new.f_int1;
 
1304
END|
 
1305
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1307
        
 
1308
# check trigger-5 success:      1
 
1309
DROP TRIGGER trg_1;
 
1310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1312
f_charbig = 'just inserted'
 
1313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1314
DELETE FROM t0_aux
 
1315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1318
'just inserted' FROM t0_template
 
1319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1320
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1321
BEGIN
 
1322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1323
f_charbig = 'updated by trigger'
 
1324
      WHERE f_int1 = - old.f_int1;
 
1325
END|
 
1326
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1327
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1328
        
 
1329
# check trigger-6 success:      1
 
1330
DROP TRIGGER trg_1;
 
1331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1333
f_charbig = 'just inserted'
 
1334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1335
DELETE FROM t0_aux
 
1336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1339
'just inserted' FROM t0_template
 
1340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1341
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1342
BEGIN
 
1343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1344
f_charbig = 'updated by trigger'
 
1345
      WHERE f_int1 = - old.f_int1;
 
1346
END|
 
1347
DELETE FROM t0_aux
 
1348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1349
        
 
1350
# check trigger-7 success:      1
 
1351
DROP TRIGGER trg_1;
 
1352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1354
f_charbig = 'just inserted'
 
1355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1356
DELETE FROM t0_aux
 
1357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1360
'just inserted' FROM t0_template
 
1361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1362
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1363
BEGIN
 
1364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1365
f_charbig = 'updated by trigger'
 
1366
      WHERE f_int1 = - old.f_int1;
 
1367
END|
 
1368
DELETE FROM t0_aux
 
1369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1370
        
 
1371
# check trigger-8 success:      1
 
1372
DROP TRIGGER trg_1;
 
1373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1375
f_charbig = 'just inserted'
 
1376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1377
DELETE FROM t0_aux
 
1378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1379
DELETE FROM t1
 
1380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1381
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1382
BEGIN
 
1383
SET new.f_int1 = old.f_int1 + @max_row,
 
1384
new.f_int2 = old.f_int2 - @max_row,
 
1385
new.f_charbig = '####updated per update trigger####';
 
1386
END|
 
1387
UPDATE t1
 
1388
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1389
f_charbig = '####updated per update statement itself####';
 
1390
        
 
1391
# check trigger-9 success:      1
 
1392
DROP TRIGGER trg_2;
 
1393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1395
f_charbig = CONCAT('===',f_char1,'===');
 
1396
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1397
BEGIN
 
1398
SET new.f_int1 = new.f_int1 + @max_row,
 
1399
new.f_int2 = new.f_int2 - @max_row,
 
1400
new.f_charbig = '####updated per update trigger####';
 
1401
END|
 
1402
UPDATE t1
 
1403
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1404
f_charbig = '####updated per update statement itself####';
 
1405
        
 
1406
# check trigger-10 success:     1
 
1407
DROP TRIGGER trg_2;
 
1408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1410
f_charbig = CONCAT('===',f_char1,'===');
 
1411
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1412
BEGIN
 
1413
SET new.f_int1 = @my_max1 + @counter,
 
1414
new.f_int2 = @my_min2 - @counter,
 
1415
new.f_charbig = '####updated per insert trigger####';
 
1416
SET @counter = @counter + 1;
 
1417
END|
 
1418
SET @counter = 1;
 
1419
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1421
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1422
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1424
ORDER BY f_int1;
 
1425
DROP TRIGGER trg_3;
 
1426
        
 
1427
# check trigger-11 success:     1
 
1428
DELETE FROM t1
 
1429
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1430
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1431
AND f_charbig = '####updated per insert trigger####';
 
1432
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1433
BEGIN
 
1434
SET new.f_int1 = @my_max1 + @counter,
 
1435
new.f_int2 = @my_min2 - @counter,
 
1436
new.f_charbig = '####updated per insert trigger####';
 
1437
SET @counter = @counter + 1;
 
1438
END|
 
1439
SET @counter = 1;
 
1440
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1441
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1442
SELECT CAST(f_int1 AS CHAR),
 
1443
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1445
ORDER BY f_int1;
 
1446
DROP TRIGGER trg_3;
 
1447
        
 
1448
# check trigger-12 success:     1
 
1449
DELETE FROM t1
 
1450
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1451
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1452
AND f_charbig = '####updated per insert trigger####';
 
1453
ANALYZE  TABLE t1;
 
1454
Table   Op      Msg_type        Msg_text
 
1455
test.t1 analyze status  OK
 
1456
CHECK    TABLE t1 EXTENDED;
 
1457
Table   Op      Msg_type        Msg_text
 
1458
test.t1 check   status  OK
 
1459
CHECKSUM TABLE t1 EXTENDED;
 
1460
Table   Checksum
 
1461
test.t1 <some_value>
 
1462
OPTIMIZE TABLE t1;
 
1463
Table   Op      Msg_type        Msg_text
 
1464
test.t1 optimize        status  OK
 
1465
# check layout success:    1
 
1466
REPAIR   TABLE t1 EXTENDED;
 
1467
Table   Op      Msg_type        Msg_text
 
1468
test.t1 repair  status  OK
 
1469
# check layout success:    1
 
1470
TRUNCATE t1;
 
1471
        
 
1472
# check TRUNCATE success:       1
 
1473
# check layout success:    1
 
1474
# End usability test (inc/partition_check.inc)
 
1475
DROP TABLE t1;
 
1476
CREATE TABLE t1 (
 
1477
f_int1 INTEGER,
 
1478
f_int2 INTEGER,
 
1479
f_char1 CHAR(20),
 
1480
f_char2 CHAR(20),
 
1481
f_charbig VARCHAR(1000)
 
1482
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
1483
)
 
1484
PARTITION BY RANGE(f_int1)
 
1485
(PARTITION parta VALUES LESS THAN (0),
 
1486
PARTITION partb VALUES LESS THAN (5),
 
1487
PARTITION partc VALUES LESS THAN (10),
 
1488
PARTITION partd VALUES LESS THAN (10 + 5),
 
1489
PARTITION parte VALUES LESS THAN (20),
 
1490
PARTITION partf VALUES LESS THAN (2147483646));
 
1491
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1492
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1493
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1494
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
1495
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1496
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1497
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1498
# Start usability test (inc/partition_check.inc)
 
1499
create_command
 
1500
SHOW CREATE TABLE t1;
 
1501
Table   Create Table
 
1502
t1      CREATE TABLE `t1` (
 
1503
  `f_int1` int(11) DEFAULT NULL,
 
1504
  `f_int2` int(11) DEFAULT NULL,
 
1505
  `f_char1` char(20) DEFAULT NULL,
 
1506
  `f_char2` char(20) DEFAULT NULL,
 
1507
  `f_charbig` varchar(1000) DEFAULT NULL
 
1508
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1509
/*!50100 PARTITION BY RANGE (f_int1)
 
1510
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
1511
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
1512
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
1513
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
1514
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
1515
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1516
 
 
1517
unified filelist
 
1518
t1#P#parta.MYD
 
1519
t1#P#parta.MYI
 
1520
t1#P#partb.MYD
 
1521
t1#P#partb.MYI
 
1522
t1#P#partc.MYD
 
1523
t1#P#partc.MYI
 
1524
t1#P#partd.MYD
 
1525
t1#P#partd.MYI
 
1526
t1#P#parte.MYD
 
1527
t1#P#parte.MYI
 
1528
t1#P#partf.MYD
 
1529
t1#P#partf.MYI
 
1530
t1.frm
 
1531
t1.par
 
1532
 
 
1533
# check prerequisites-1 success:    1
 
1534
# check COUNT(*) success:    1
 
1535
# check MIN/MAX(f_int1) success:    1
 
1536
# check MIN/MAX(f_int2) success:    1
 
1537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1538
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1539
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1540
WHERE f_int1 IN (2,3);
 
1541
# check prerequisites-3 success:    1
 
1542
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1543
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1544
# check read via f_int1 success: 1
 
1545
# check read via f_int2 success: 1
 
1546
        
 
1547
# check multiple-1 success:     1
 
1548
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1549
        
 
1550
# check multiple-2 success:     1
 
1551
INSERT INTO t1 SELECT * FROM t0_template
 
1552
WHERE MOD(f_int1,3) = 0;
 
1553
        
 
1554
# check multiple-3 success:     1
 
1555
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1556
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1557
AND @max_row_div2 + @max_row_div4;
 
1558
        
 
1559
# check multiple-4 success:     1
 
1560
DELETE FROM t1
 
1561
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1562
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1563
        
 
1564
# check multiple-5 success:     1
 
1565
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1566
INSERT INTO t1
 
1567
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1568
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1569
f_charbig = '#SINGLE#';
 
1570
        
 
1571
# check single-1 success:       1
 
1572
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1573
INSERT INTO t1
 
1574
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1575
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1576
f_charbig = '#SINGLE#';
 
1577
        
 
1578
# check single-2 success:       1
 
1579
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1580
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1581
UPDATE t1 SET f_int1 = @cur_value2
 
1582
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1583
        
 
1584
# check single-3 success:       1
 
1585
SET @cur_value1= -1;
 
1586
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1587
UPDATE t1 SET f_int1 = @cur_value1
 
1588
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1589
        
 
1590
# check single-4 success:       1
 
1591
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1592
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1593
        
 
1594
# check single-5 success:       1
 
1595
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1596
        
 
1597
# check single-6 success:       1
 
1598
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1599
ERROR HY000: Table has no partition for value 2147483647
 
1600
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1601
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1602
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1603
f_charbig = '#NULL#';
 
1604
INSERT INTO t1
 
1605
SET f_int1 = NULL , f_int2 = -@max_row,
 
1606
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1607
f_charbig = '#NULL#';
 
1608
# check null success:    1
 
1609
        
 
1610
# check null-1 success:         1
 
1611
UPDATE t1 SET f_int1 = -@max_row
 
1612
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1613
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1614
        
 
1615
# check null-2 success:         1
 
1616
UPDATE t1 SET f_int1 = NULL
 
1617
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1618
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1619
        
 
1620
# check null-3 success:         1
 
1621
DELETE FROM t1
 
1622
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1623
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1624
        
 
1625
# check null-4 success:         1
 
1626
DELETE FROM t1
 
1627
WHERE f_int1 = 0 AND f_int2 = 0
 
1628
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1629
AND f_charbig = '#NULL#';
 
1630
SET AUTOCOMMIT= 0;
 
1631
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1632
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1633
FROM t0_template source_tab
 
1634
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1635
        
 
1636
# check transactions-1 success:         1
 
1637
COMMIT WORK;
 
1638
        
 
1639
# check transactions-2 success:         1
 
1640
ROLLBACK WORK;
 
1641
        
 
1642
# check transactions-3 success:         1
 
1643
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1644
COMMIT WORK;
 
1645
ROLLBACK WORK;
 
1646
        
 
1647
# check transactions-4 success:         1
 
1648
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1649
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1650
FROM t0_template source_tab
 
1651
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1652
        
 
1653
# check transactions-5 success:         1
 
1654
ROLLBACK WORK;
 
1655
Warnings:
 
1656
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1657
        
 
1658
# check transactions-6 success:         1
 
1659
# INFO: Storage engine used for t1 seems to be not transactional.
 
1660
COMMIT;
 
1661
        
 
1662
# check transactions-7 success:         1
 
1663
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1664
COMMIT WORK;
 
1665
SET @@session.sql_mode = 'traditional';
 
1666
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1667
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1668
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1669
'', '', 'was inserted' FROM t0_template
 
1670
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1671
ERROR 22012: Division by 0
 
1672
COMMIT;
 
1673
        
 
1674
# check transactions-8 success:         1
 
1675
# INFO: Storage engine used for t1 seems to be unable to revert
 
1676
#       changes made by the failing statement.
 
1677
SET @@session.sql_mode = '';
 
1678
SET AUTOCOMMIT= 1;
 
1679
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1680
COMMIT WORK;
 
1681
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1682
        
 
1683
# check special-1 success:      1
 
1684
UPDATE t1 SET f_charbig = '';
 
1685
        
 
1686
# check special-2 success:      1
 
1687
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1688
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1689
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1693
'just inserted' FROM t0_template
 
1694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1695
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1696
BEGIN
 
1697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1698
f_charbig = 'updated by trigger'
 
1699
      WHERE f_int1 = new.f_int1;
 
1700
END|
 
1701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1702
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1704
        
 
1705
# check trigger-1 success:      1
 
1706
DROP TRIGGER trg_1;
 
1707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1709
f_charbig = 'just inserted'
 
1710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1711
DELETE FROM t0_aux
 
1712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1715
'just inserted' FROM t0_template
 
1716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1717
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1718
BEGIN
 
1719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1720
f_charbig = 'updated by trigger'
 
1721
      WHERE f_int1 = new.f_int1;
 
1722
END|
 
1723
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1724
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1726
        
 
1727
# check trigger-2 success:      1
 
1728
DROP TRIGGER trg_1;
 
1729
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1730
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1731
f_charbig = 'just inserted'
 
1732
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1733
DELETE FROM t0_aux
 
1734
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1735
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1736
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1737
'just inserted' FROM t0_template
 
1738
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1739
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1740
BEGIN
 
1741
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1742
f_charbig = 'updated by trigger'
 
1743
      WHERE f_int1 = new.f_int1;
 
1744
END|
 
1745
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1746
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1747
        
 
1748
# check trigger-3 success:      1
 
1749
DROP TRIGGER trg_1;
 
1750
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1751
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1752
f_charbig = 'just inserted'
 
1753
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1754
DELETE FROM t0_aux
 
1755
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1756
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1757
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1758
'just inserted' FROM t0_template
 
1759
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1760
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1761
BEGIN
 
1762
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1763
f_charbig = 'updated by trigger'
 
1764
      WHERE f_int1 = - old.f_int1;
 
1765
END|
 
1766
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1767
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1768
        
 
1769
# check trigger-4 success:      1
 
1770
DROP TRIGGER trg_1;
 
1771
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1772
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1773
f_charbig = 'just inserted'
 
1774
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1775
DELETE FROM t0_aux
 
1776
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1777
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1778
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1779
'just inserted' FROM t0_template
 
1780
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1781
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1782
BEGIN
 
1783
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1784
f_charbig = 'updated by trigger'
 
1785
      WHERE f_int1 = new.f_int1;
 
1786
END|
 
1787
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1788
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1789
        
 
1790
# check trigger-5 success:      1
 
1791
DROP TRIGGER trg_1;
 
1792
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1793
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1794
f_charbig = 'just inserted'
 
1795
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1796
DELETE FROM t0_aux
 
1797
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1798
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1799
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1800
'just inserted' FROM t0_template
 
1801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1802
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1803
BEGIN
 
1804
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1805
f_charbig = 'updated by trigger'
 
1806
      WHERE f_int1 = - old.f_int1;
 
1807
END|
 
1808
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1809
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1810
        
 
1811
# check trigger-6 success:      1
 
1812
DROP TRIGGER trg_1;
 
1813
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1814
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1815
f_charbig = 'just inserted'
 
1816
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1817
DELETE FROM t0_aux
 
1818
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1819
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1820
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1821
'just inserted' FROM t0_template
 
1822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1823
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1824
BEGIN
 
1825
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1826
f_charbig = 'updated by trigger'
 
1827
      WHERE f_int1 = - old.f_int1;
 
1828
END|
 
1829
DELETE FROM t0_aux
 
1830
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1831
        
 
1832
# check trigger-7 success:      1
 
1833
DROP TRIGGER trg_1;
 
1834
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1835
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1836
f_charbig = 'just inserted'
 
1837
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1838
DELETE FROM t0_aux
 
1839
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1840
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1841
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1842
'just inserted' FROM t0_template
 
1843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1844
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1845
BEGIN
 
1846
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1847
f_charbig = 'updated by trigger'
 
1848
      WHERE f_int1 = - old.f_int1;
 
1849
END|
 
1850
DELETE FROM t0_aux
 
1851
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1852
        
 
1853
# check trigger-8 success:      1
 
1854
DROP TRIGGER trg_1;
 
1855
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1856
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1857
f_charbig = 'just inserted'
 
1858
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1859
DELETE FROM t0_aux
 
1860
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1861
DELETE FROM t1
 
1862
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1863
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1864
BEGIN
 
1865
SET new.f_int1 = old.f_int1 + @max_row,
 
1866
new.f_int2 = old.f_int2 - @max_row,
 
1867
new.f_charbig = '####updated per update trigger####';
 
1868
END|
 
1869
UPDATE t1
 
1870
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1871
f_charbig = '####updated per update statement itself####';
 
1872
        
 
1873
# check trigger-9 success:      1
 
1874
DROP TRIGGER trg_2;
 
1875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1877
f_charbig = CONCAT('===',f_char1,'===');
 
1878
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1879
BEGIN
 
1880
SET new.f_int1 = new.f_int1 + @max_row,
 
1881
new.f_int2 = new.f_int2 - @max_row,
 
1882
new.f_charbig = '####updated per update trigger####';
 
1883
END|
 
1884
UPDATE t1
 
1885
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1886
f_charbig = '####updated per update statement itself####';
 
1887
        
 
1888
# check trigger-10 success:     1
 
1889
DROP TRIGGER trg_2;
 
1890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1892
f_charbig = CONCAT('===',f_char1,'===');
 
1893
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1894
BEGIN
 
1895
SET new.f_int1 = @my_max1 + @counter,
 
1896
new.f_int2 = @my_min2 - @counter,
 
1897
new.f_charbig = '####updated per insert trigger####';
 
1898
SET @counter = @counter + 1;
 
1899
END|
 
1900
SET @counter = 1;
 
1901
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1902
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1903
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1904
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1906
ORDER BY f_int1;
 
1907
DROP TRIGGER trg_3;
 
1908
        
 
1909
# check trigger-11 success:     1
 
1910
DELETE FROM t1
 
1911
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1912
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1913
AND f_charbig = '####updated per insert trigger####';
 
1914
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1915
BEGIN
 
1916
SET new.f_int1 = @my_max1 + @counter,
 
1917
new.f_int2 = @my_min2 - @counter,
 
1918
new.f_charbig = '####updated per insert trigger####';
 
1919
SET @counter = @counter + 1;
 
1920
END|
 
1921
SET @counter = 1;
 
1922
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1923
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1924
SELECT CAST(f_int1 AS CHAR),
 
1925
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1927
ORDER BY f_int1;
 
1928
DROP TRIGGER trg_3;
 
1929
        
 
1930
# check trigger-12 success:     1
 
1931
DELETE FROM t1
 
1932
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1933
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1934
AND f_charbig = '####updated per insert trigger####';
 
1935
ANALYZE  TABLE t1;
 
1936
Table   Op      Msg_type        Msg_text
 
1937
test.t1 analyze status  OK
 
1938
CHECK    TABLE t1 EXTENDED;
 
1939
Table   Op      Msg_type        Msg_text
 
1940
test.t1 check   status  OK
 
1941
CHECKSUM TABLE t1 EXTENDED;
 
1942
Table   Checksum
 
1943
test.t1 <some_value>
 
1944
OPTIMIZE TABLE t1;
 
1945
Table   Op      Msg_type        Msg_text
 
1946
test.t1 optimize        status  OK
 
1947
# check layout success:    1
 
1948
REPAIR   TABLE t1 EXTENDED;
 
1949
Table   Op      Msg_type        Msg_text
 
1950
test.t1 repair  status  OK
 
1951
# check layout success:    1
 
1952
TRUNCATE t1;
 
1953
        
 
1954
# check TRUNCATE success:       1
 
1955
# check layout success:    1
 
1956
# End usability test (inc/partition_check.inc)
 
1957
DROP TABLE t1;
 
1958
CREATE TABLE t1 (
 
1959
f_int1 INTEGER,
 
1960
f_int2 INTEGER,
 
1961
f_char1 CHAR(20),
 
1962
f_char2 CHAR(20),
 
1963
f_charbig VARCHAR(1000)
 
1964
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
1965
)
 
1966
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
1967
(PARTITION parta VALUES LESS THAN (0),
 
1968
PARTITION partb VALUES LESS THAN (5),
 
1969
PARTITION partc VALUES LESS THAN (10),
 
1970
PARTITION partd VALUES LESS THAN (2147483646));
 
1971
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1972
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1973
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1974
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
1975
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1976
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1977
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1978
# Start usability test (inc/partition_check.inc)
 
1979
create_command
 
1980
SHOW CREATE TABLE t1;
 
1981
Table   Create Table
 
1982
t1      CREATE TABLE `t1` (
 
1983
  `f_int1` int(11) DEFAULT NULL,
 
1984
  `f_int2` int(11) DEFAULT NULL,
 
1985
  `f_char1` char(20) DEFAULT NULL,
 
1986
  `f_char2` char(20) DEFAULT NULL,
 
1987
  `f_charbig` varchar(1000) DEFAULT NULL
 
1988
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1989
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
1990
SUBPARTITION BY HASH (f_int1)
 
1991
SUBPARTITIONS 2
 
1992
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
1993
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
1994
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
1995
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1996
 
 
1997
unified filelist
 
1998
t1#P#parta#SP#partasp0.MYD
 
1999
t1#P#parta#SP#partasp0.MYI
 
2000
t1#P#parta#SP#partasp1.MYD
 
2001
t1#P#parta#SP#partasp1.MYI
 
2002
t1#P#partb#SP#partbsp0.MYD
 
2003
t1#P#partb#SP#partbsp0.MYI
 
2004
t1#P#partb#SP#partbsp1.MYD
 
2005
t1#P#partb#SP#partbsp1.MYI
 
2006
t1#P#partc#SP#partcsp0.MYD
 
2007
t1#P#partc#SP#partcsp0.MYI
 
2008
t1#P#partc#SP#partcsp1.MYD
 
2009
t1#P#partc#SP#partcsp1.MYI
 
2010
t1#P#partd#SP#partdsp0.MYD
 
2011
t1#P#partd#SP#partdsp0.MYI
 
2012
t1#P#partd#SP#partdsp1.MYD
 
2013
t1#P#partd#SP#partdsp1.MYI
 
2014
t1.frm
 
2015
t1.par
 
2016
 
 
2017
# check prerequisites-1 success:    1
 
2018
# check COUNT(*) success:    1
 
2019
# check MIN/MAX(f_int1) success:    1
 
2020
# check MIN/MAX(f_int2) success:    1
 
2021
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2022
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2023
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2024
WHERE f_int1 IN (2,3);
 
2025
# check prerequisites-3 success:    1
 
2026
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2027
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2028
# check read via f_int1 success: 1
 
2029
# check read via f_int2 success: 1
 
2030
        
 
2031
# check multiple-1 success:     1
 
2032
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2033
        
 
2034
# check multiple-2 success:     1
 
2035
INSERT INTO t1 SELECT * FROM t0_template
 
2036
WHERE MOD(f_int1,3) = 0;
 
2037
        
 
2038
# check multiple-3 success:     1
 
2039
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2040
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2041
AND @max_row_div2 + @max_row_div4;
 
2042
        
 
2043
# check multiple-4 success:     1
 
2044
DELETE FROM t1
 
2045
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2046
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2047
        
 
2048
# check multiple-5 success:     1
 
2049
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2050
INSERT INTO t1
 
2051
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2052
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2053
f_charbig = '#SINGLE#';
 
2054
        
 
2055
# check single-1 success:       1
 
2056
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2057
INSERT INTO t1
 
2058
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2059
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2060
f_charbig = '#SINGLE#';
 
2061
        
 
2062
# check single-2 success:       1
 
2063
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2064
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2065
UPDATE t1 SET f_int1 = @cur_value2
 
2066
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2067
        
 
2068
# check single-3 success:       1
 
2069
SET @cur_value1= -1;
 
2070
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2071
UPDATE t1 SET f_int1 = @cur_value1
 
2072
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2073
        
 
2074
# check single-4 success:       1
 
2075
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2076
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2077
        
 
2078
# check single-5 success:       1
 
2079
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2080
        
 
2081
# check single-6 success:       1
 
2082
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2083
        
 
2084
# check single-7 success:       1
 
2085
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
2086
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2087
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2088
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2089
f_charbig = '#NULL#';
 
2090
INSERT INTO t1
 
2091
SET f_int1 = NULL , f_int2 = -@max_row,
 
2092
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2093
f_charbig = '#NULL#';
 
2094
# check null success:    1
 
2095
        
 
2096
# check null-1 success:         1
 
2097
UPDATE t1 SET f_int1 = -@max_row
 
2098
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2099
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2100
        
 
2101
# check null-2 success:         1
 
2102
UPDATE t1 SET f_int1 = NULL
 
2103
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2104
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2105
        
 
2106
# check null-3 success:         1
 
2107
DELETE FROM t1
 
2108
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2109
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2110
        
 
2111
# check null-4 success:         1
 
2112
DELETE FROM t1
 
2113
WHERE f_int1 = 0 AND f_int2 = 0
 
2114
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2115
AND f_charbig = '#NULL#';
 
2116
SET AUTOCOMMIT= 0;
 
2117
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2118
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2119
FROM t0_template source_tab
 
2120
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2121
        
 
2122
# check transactions-1 success:         1
 
2123
COMMIT WORK;
 
2124
        
 
2125
# check transactions-2 success:         1
 
2126
ROLLBACK WORK;
 
2127
        
 
2128
# check transactions-3 success:         1
 
2129
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2130
COMMIT WORK;
 
2131
ROLLBACK WORK;
 
2132
        
 
2133
# check transactions-4 success:         1
 
2134
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2135
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2136
FROM t0_template source_tab
 
2137
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2138
        
 
2139
# check transactions-5 success:         1
 
2140
ROLLBACK WORK;
 
2141
Warnings:
 
2142
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2143
        
 
2144
# check transactions-6 success:         1
 
2145
# INFO: Storage engine used for t1 seems to be not transactional.
 
2146
COMMIT;
 
2147
        
 
2148
# check transactions-7 success:         1
 
2149
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2150
COMMIT WORK;
 
2151
SET @@session.sql_mode = 'traditional';
 
2152
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2153
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2154
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2155
'', '', 'was inserted' FROM t0_template
 
2156
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2157
ERROR 22012: Division by 0
 
2158
COMMIT;
 
2159
        
 
2160
# check transactions-8 success:         1
 
2161
# INFO: Storage engine used for t1 seems to be unable to revert
 
2162
#       changes made by the failing statement.
 
2163
SET @@session.sql_mode = '';
 
2164
SET AUTOCOMMIT= 1;
 
2165
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2166
COMMIT WORK;
 
2167
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2168
        
 
2169
# check special-1 success:      1
 
2170
UPDATE t1 SET f_charbig = '';
 
2171
        
 
2172
# check special-2 success:      1
 
2173
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2174
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2175
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2178
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2179
'just inserted' FROM t0_template
 
2180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2181
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2182
BEGIN
 
2183
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2184
f_charbig = 'updated by trigger'
 
2185
      WHERE f_int1 = new.f_int1;
 
2186
END|
 
2187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2188
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2190
        
 
2191
# check trigger-1 success:      1
 
2192
DROP TRIGGER trg_1;
 
2193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2195
f_charbig = 'just inserted'
 
2196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2197
DELETE FROM t0_aux
 
2198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2200
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2201
'just inserted' FROM t0_template
 
2202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2203
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2204
BEGIN
 
2205
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2206
f_charbig = 'updated by trigger'
 
2207
      WHERE f_int1 = new.f_int1;
 
2208
END|
 
2209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2210
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2212
        
 
2213
# check trigger-2 success:      1
 
2214
DROP TRIGGER trg_1;
 
2215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2217
f_charbig = 'just inserted'
 
2218
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2219
DELETE FROM t0_aux
 
2220
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2223
'just inserted' FROM t0_template
 
2224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2225
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2226
BEGIN
 
2227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2228
f_charbig = 'updated by trigger'
 
2229
      WHERE f_int1 = new.f_int1;
 
2230
END|
 
2231
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2232
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2233
        
 
2234
# check trigger-3 success:      1
 
2235
DROP TRIGGER trg_1;
 
2236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2238
f_charbig = 'just inserted'
 
2239
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2240
DELETE FROM t0_aux
 
2241
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2242
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2243
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2244
'just inserted' FROM t0_template
 
2245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2246
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2247
BEGIN
 
2248
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2249
f_charbig = 'updated by trigger'
 
2250
      WHERE f_int1 = - old.f_int1;
 
2251
END|
 
2252
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2253
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2254
        
 
2255
# check trigger-4 success:      1
 
2256
DROP TRIGGER trg_1;
 
2257
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2258
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2259
f_charbig = 'just inserted'
 
2260
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2261
DELETE FROM t0_aux
 
2262
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2263
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2264
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2265
'just inserted' FROM t0_template
 
2266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2267
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2268
BEGIN
 
2269
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2270
f_charbig = 'updated by trigger'
 
2271
      WHERE f_int1 = new.f_int1;
 
2272
END|
 
2273
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2274
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2275
        
 
2276
# check trigger-5 success:      1
 
2277
DROP TRIGGER trg_1;
 
2278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2280
f_charbig = 'just inserted'
 
2281
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2282
DELETE FROM t0_aux
 
2283
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2284
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2285
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2286
'just inserted' FROM t0_template
 
2287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2288
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2289
BEGIN
 
2290
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2291
f_charbig = 'updated by trigger'
 
2292
      WHERE f_int1 = - old.f_int1;
 
2293
END|
 
2294
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2295
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2296
        
 
2297
# check trigger-6 success:      1
 
2298
DROP TRIGGER trg_1;
 
2299
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2300
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2301
f_charbig = 'just inserted'
 
2302
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2303
DELETE FROM t0_aux
 
2304
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2305
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2306
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2307
'just inserted' FROM t0_template
 
2308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2309
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2310
BEGIN
 
2311
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2312
f_charbig = 'updated by trigger'
 
2313
      WHERE f_int1 = - old.f_int1;
 
2314
END|
 
2315
DELETE FROM t0_aux
 
2316
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2317
        
 
2318
# check trigger-7 success:      1
 
2319
DROP TRIGGER trg_1;
 
2320
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2321
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2322
f_charbig = 'just inserted'
 
2323
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2324
DELETE FROM t0_aux
 
2325
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2326
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2327
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2328
'just inserted' FROM t0_template
 
2329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2330
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2331
BEGIN
 
2332
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2333
f_charbig = 'updated by trigger'
 
2334
      WHERE f_int1 = - old.f_int1;
 
2335
END|
 
2336
DELETE FROM t0_aux
 
2337
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2338
        
 
2339
# check trigger-8 success:      1
 
2340
DROP TRIGGER trg_1;
 
2341
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2342
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2343
f_charbig = 'just inserted'
 
2344
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2345
DELETE FROM t0_aux
 
2346
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2347
DELETE FROM t1
 
2348
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2349
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2350
BEGIN
 
2351
SET new.f_int1 = old.f_int1 + @max_row,
 
2352
new.f_int2 = old.f_int2 - @max_row,
 
2353
new.f_charbig = '####updated per update trigger####';
 
2354
END|
 
2355
UPDATE t1
 
2356
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2357
f_charbig = '####updated per update statement itself####';
 
2358
        
 
2359
# check trigger-9 success:      1
 
2360
DROP TRIGGER trg_2;
 
2361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2363
f_charbig = CONCAT('===',f_char1,'===');
 
2364
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2365
BEGIN
 
2366
SET new.f_int1 = new.f_int1 + @max_row,
 
2367
new.f_int2 = new.f_int2 - @max_row,
 
2368
new.f_charbig = '####updated per update trigger####';
 
2369
END|
 
2370
UPDATE t1
 
2371
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2372
f_charbig = '####updated per update statement itself####';
 
2373
        
 
2374
# check trigger-10 success:     1
 
2375
DROP TRIGGER trg_2;
 
2376
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2377
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2378
f_charbig = CONCAT('===',f_char1,'===');
 
2379
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2380
BEGIN
 
2381
SET new.f_int1 = @my_max1 + @counter,
 
2382
new.f_int2 = @my_min2 - @counter,
 
2383
new.f_charbig = '####updated per insert trigger####';
 
2384
SET @counter = @counter + 1;
 
2385
END|
 
2386
SET @counter = 1;
 
2387
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2388
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2389
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2390
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2391
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2392
ORDER BY f_int1;
 
2393
DROP TRIGGER trg_3;
 
2394
        
 
2395
# check trigger-11 success:     1
 
2396
DELETE FROM t1
 
2397
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2398
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2399
AND f_charbig = '####updated per insert trigger####';
 
2400
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2401
BEGIN
 
2402
SET new.f_int1 = @my_max1 + @counter,
 
2403
new.f_int2 = @my_min2 - @counter,
 
2404
new.f_charbig = '####updated per insert trigger####';
 
2405
SET @counter = @counter + 1;
 
2406
END|
 
2407
SET @counter = 1;
 
2408
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2409
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2410
SELECT CAST(f_int1 AS CHAR),
 
2411
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2412
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2413
ORDER BY f_int1;
 
2414
DROP TRIGGER trg_3;
 
2415
        
 
2416
# check trigger-12 success:     1
 
2417
DELETE FROM t1
 
2418
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2419
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2420
AND f_charbig = '####updated per insert trigger####';
 
2421
ANALYZE  TABLE t1;
 
2422
Table   Op      Msg_type        Msg_text
 
2423
test.t1 analyze status  OK
 
2424
CHECK    TABLE t1 EXTENDED;
 
2425
Table   Op      Msg_type        Msg_text
 
2426
test.t1 check   status  OK
 
2427
CHECKSUM TABLE t1 EXTENDED;
 
2428
Table   Checksum
 
2429
test.t1 <some_value>
 
2430
OPTIMIZE TABLE t1;
 
2431
Table   Op      Msg_type        Msg_text
 
2432
test.t1 optimize        status  OK
 
2433
# check layout success:    1
 
2434
REPAIR   TABLE t1 EXTENDED;
 
2435
Table   Op      Msg_type        Msg_text
 
2436
test.t1 repair  status  OK
 
2437
# check layout success:    1
 
2438
TRUNCATE t1;
 
2439
        
 
2440
# check TRUNCATE success:       1
 
2441
# check layout success:    1
 
2442
# End usability test (inc/partition_check.inc)
 
2443
DROP TABLE t1;
 
2444
CREATE TABLE t1 (
 
2445
f_int1 INTEGER,
 
2446
f_int2 INTEGER,
 
2447
f_char1 CHAR(20),
 
2448
f_char2 CHAR(20),
 
2449
f_charbig VARCHAR(1000)
 
2450
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
2451
)
 
2452
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2453
(PARTITION part1 VALUES LESS THAN (0)
 
2454
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2455
PARTITION part2 VALUES LESS THAN (5)
 
2456
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2457
PARTITION part3 VALUES LESS THAN (10)
 
2458
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2459
PARTITION part4 VALUES LESS THAN (2147483646)
 
2460
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2461
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2462
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2463
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2464
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
2465
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2466
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2467
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2468
# Start usability test (inc/partition_check.inc)
 
2469
create_command
 
2470
SHOW CREATE TABLE t1;
 
2471
Table   Create Table
 
2472
t1      CREATE TABLE `t1` (
 
2473
  `f_int1` int(11) DEFAULT NULL,
 
2474
  `f_int2` int(11) DEFAULT NULL,
 
2475
  `f_char1` char(20) DEFAULT NULL,
 
2476
  `f_char2` char(20) DEFAULT NULL,
 
2477
  `f_charbig` varchar(1000) DEFAULT NULL
 
2478
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
2479
/*!50100 PARTITION BY RANGE (f_int1)
 
2480
SUBPARTITION BY KEY (f_int1)
 
2481
(PARTITION part1 VALUES LESS THAN (0)
 
2482
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
2483
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
2484
 PARTITION part2 VALUES LESS THAN (5)
 
2485
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
2486
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
2487
 PARTITION part3 VALUES LESS THAN (10)
 
2488
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
2489
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
2490
 PARTITION part4 VALUES LESS THAN (2147483646)
 
2491
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
2492
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
2493
 
 
2494
unified filelist
 
2495
t1#P#part1#SP#subpart11.MYD
 
2496
t1#P#part1#SP#subpart11.MYI
 
2497
t1#P#part1#SP#subpart12.MYD
 
2498
t1#P#part1#SP#subpart12.MYI
 
2499
t1#P#part2#SP#subpart21.MYD
 
2500
t1#P#part2#SP#subpart21.MYI
 
2501
t1#P#part2#SP#subpart22.MYD
 
2502
t1#P#part2#SP#subpart22.MYI
 
2503
t1#P#part3#SP#subpart31.MYD
 
2504
t1#P#part3#SP#subpart31.MYI
 
2505
t1#P#part3#SP#subpart32.MYD
 
2506
t1#P#part3#SP#subpart32.MYI
 
2507
t1#P#part4#SP#subpart41.MYD
 
2508
t1#P#part4#SP#subpart41.MYI
 
2509
t1#P#part4#SP#subpart42.MYD
 
2510
t1#P#part4#SP#subpart42.MYI
 
2511
t1.frm
 
2512
t1.par
 
2513
 
 
2514
# check prerequisites-1 success:    1
 
2515
# check COUNT(*) success:    1
 
2516
# check MIN/MAX(f_int1) success:    1
 
2517
# check MIN/MAX(f_int2) success:    1
 
2518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2519
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2520
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2521
WHERE f_int1 IN (2,3);
 
2522
# check prerequisites-3 success:    1
 
2523
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2524
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2525
# check read via f_int1 success: 1
 
2526
# check read via f_int2 success: 1
 
2527
        
 
2528
# check multiple-1 success:     1
 
2529
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2530
        
 
2531
# check multiple-2 success:     1
 
2532
INSERT INTO t1 SELECT * FROM t0_template
 
2533
WHERE MOD(f_int1,3) = 0;
 
2534
        
 
2535
# check multiple-3 success:     1
 
2536
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2537
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2538
AND @max_row_div2 + @max_row_div4;
 
2539
        
 
2540
# check multiple-4 success:     1
 
2541
DELETE FROM t1
 
2542
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2543
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2544
        
 
2545
# check multiple-5 success:     1
 
2546
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2547
INSERT INTO t1
 
2548
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2549
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2550
f_charbig = '#SINGLE#';
 
2551
        
 
2552
# check single-1 success:       1
 
2553
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2554
INSERT INTO t1
 
2555
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2556
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2557
f_charbig = '#SINGLE#';
 
2558
        
 
2559
# check single-2 success:       1
 
2560
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2561
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2562
UPDATE t1 SET f_int1 = @cur_value2
 
2563
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2564
        
 
2565
# check single-3 success:       1
 
2566
SET @cur_value1= -1;
 
2567
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2568
UPDATE t1 SET f_int1 = @cur_value1
 
2569
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2570
        
 
2571
# check single-4 success:       1
 
2572
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2573
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2574
        
 
2575
# check single-5 success:       1
 
2576
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2577
        
 
2578
# check single-6 success:       1
 
2579
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2580
ERROR HY000: Table has no partition for value 2147483647
 
2581
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2582
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2583
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2584
f_charbig = '#NULL#';
 
2585
INSERT INTO t1
 
2586
SET f_int1 = NULL , f_int2 = -@max_row,
 
2587
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2588
f_charbig = '#NULL#';
 
2589
# check null success:    1
 
2590
        
 
2591
# check null-1 success:         1
 
2592
UPDATE t1 SET f_int1 = -@max_row
 
2593
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2594
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2595
        
 
2596
# check null-2 success:         1
 
2597
UPDATE t1 SET f_int1 = NULL
 
2598
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2599
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2600
        
 
2601
# check null-3 success:         1
 
2602
DELETE FROM t1
 
2603
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2604
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2605
        
 
2606
# check null-4 success:         1
 
2607
DELETE FROM t1
 
2608
WHERE f_int1 = 0 AND f_int2 = 0
 
2609
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2610
AND f_charbig = '#NULL#';
 
2611
SET AUTOCOMMIT= 0;
 
2612
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2613
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2614
FROM t0_template source_tab
 
2615
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2616
        
 
2617
# check transactions-1 success:         1
 
2618
COMMIT WORK;
 
2619
        
 
2620
# check transactions-2 success:         1
 
2621
ROLLBACK WORK;
 
2622
        
 
2623
# check transactions-3 success:         1
 
2624
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2625
COMMIT WORK;
 
2626
ROLLBACK WORK;
 
2627
        
 
2628
# check transactions-4 success:         1
 
2629
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2630
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2631
FROM t0_template source_tab
 
2632
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2633
        
 
2634
# check transactions-5 success:         1
 
2635
ROLLBACK WORK;
 
2636
Warnings:
 
2637
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2638
        
 
2639
# check transactions-6 success:         1
 
2640
# INFO: Storage engine used for t1 seems to be not transactional.
 
2641
COMMIT;
 
2642
        
 
2643
# check transactions-7 success:         1
 
2644
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2645
COMMIT WORK;
 
2646
SET @@session.sql_mode = 'traditional';
 
2647
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2648
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2649
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2650
'', '', 'was inserted' FROM t0_template
 
2651
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2652
ERROR 22012: Division by 0
 
2653
COMMIT;
 
2654
        
 
2655
# check transactions-8 success:         1
 
2656
# INFO: Storage engine used for t1 seems to be unable to revert
 
2657
#       changes made by the failing statement.
 
2658
SET @@session.sql_mode = '';
 
2659
SET AUTOCOMMIT= 1;
 
2660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2661
COMMIT WORK;
 
2662
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2663
        
 
2664
# check special-1 success:      1
 
2665
UPDATE t1 SET f_charbig = '';
 
2666
        
 
2667
# check special-2 success:      1
 
2668
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2669
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2670
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2674
'just inserted' FROM t0_template
 
2675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2676
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2677
BEGIN
 
2678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2679
f_charbig = 'updated by trigger'
 
2680
      WHERE f_int1 = new.f_int1;
 
2681
END|
 
2682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2683
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2685
        
 
2686
# check trigger-1 success:      1
 
2687
DROP TRIGGER trg_1;
 
2688
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2689
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2690
f_charbig = 'just inserted'
 
2691
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2692
DELETE FROM t0_aux
 
2693
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2694
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2695
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2696
'just inserted' FROM t0_template
 
2697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2698
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2699
BEGIN
 
2700
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2701
f_charbig = 'updated by trigger'
 
2702
      WHERE f_int1 = new.f_int1;
 
2703
END|
 
2704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2705
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2707
        
 
2708
# check trigger-2 success:      1
 
2709
DROP TRIGGER trg_1;
 
2710
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2711
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2712
f_charbig = 'just inserted'
 
2713
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2714
DELETE FROM t0_aux
 
2715
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2716
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2717
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2718
'just inserted' FROM t0_template
 
2719
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2720
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2721
BEGIN
 
2722
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2723
f_charbig = 'updated by trigger'
 
2724
      WHERE f_int1 = new.f_int1;
 
2725
END|
 
2726
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2727
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2728
        
 
2729
# check trigger-3 success:      1
 
2730
DROP TRIGGER trg_1;
 
2731
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2732
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2733
f_charbig = 'just inserted'
 
2734
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2735
DELETE FROM t0_aux
 
2736
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2737
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2738
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2739
'just inserted' FROM t0_template
 
2740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2741
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2742
BEGIN
 
2743
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2744
f_charbig = 'updated by trigger'
 
2745
      WHERE f_int1 = - old.f_int1;
 
2746
END|
 
2747
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2748
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2749
        
 
2750
# check trigger-4 success:      1
 
2751
DROP TRIGGER trg_1;
 
2752
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2753
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2754
f_charbig = 'just inserted'
 
2755
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2756
DELETE FROM t0_aux
 
2757
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2758
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2759
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2760
'just inserted' FROM t0_template
 
2761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2762
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2763
BEGIN
 
2764
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2765
f_charbig = 'updated by trigger'
 
2766
      WHERE f_int1 = new.f_int1;
 
2767
END|
 
2768
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2769
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2770
        
 
2771
# check trigger-5 success:      1
 
2772
DROP TRIGGER trg_1;
 
2773
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2774
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2775
f_charbig = 'just inserted'
 
2776
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2777
DELETE FROM t0_aux
 
2778
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2779
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2780
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2781
'just inserted' FROM t0_template
 
2782
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2783
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2784
BEGIN
 
2785
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2786
f_charbig = 'updated by trigger'
 
2787
      WHERE f_int1 = - old.f_int1;
 
2788
END|
 
2789
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2790
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2791
        
 
2792
# check trigger-6 success:      1
 
2793
DROP TRIGGER trg_1;
 
2794
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2795
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2796
f_charbig = 'just inserted'
 
2797
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2798
DELETE FROM t0_aux
 
2799
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2800
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2801
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2802
'just inserted' FROM t0_template
 
2803
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2804
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2805
BEGIN
 
2806
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2807
f_charbig = 'updated by trigger'
 
2808
      WHERE f_int1 = - old.f_int1;
 
2809
END|
 
2810
DELETE FROM t0_aux
 
2811
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2812
        
 
2813
# check trigger-7 success:      1
 
2814
DROP TRIGGER trg_1;
 
2815
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2816
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2817
f_charbig = 'just inserted'
 
2818
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2819
DELETE FROM t0_aux
 
2820
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2821
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2822
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2823
'just inserted' FROM t0_template
 
2824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2825
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2826
BEGIN
 
2827
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2828
f_charbig = 'updated by trigger'
 
2829
      WHERE f_int1 = - old.f_int1;
 
2830
END|
 
2831
DELETE FROM t0_aux
 
2832
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2833
        
 
2834
# check trigger-8 success:      1
 
2835
DROP TRIGGER trg_1;
 
2836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2838
f_charbig = 'just inserted'
 
2839
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2840
DELETE FROM t0_aux
 
2841
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2842
DELETE FROM t1
 
2843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2844
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2845
BEGIN
 
2846
SET new.f_int1 = old.f_int1 + @max_row,
 
2847
new.f_int2 = old.f_int2 - @max_row,
 
2848
new.f_charbig = '####updated per update trigger####';
 
2849
END|
 
2850
UPDATE t1
 
2851
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2852
f_charbig = '####updated per update statement itself####';
 
2853
        
 
2854
# check trigger-9 success:      1
 
2855
DROP TRIGGER trg_2;
 
2856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2858
f_charbig = CONCAT('===',f_char1,'===');
 
2859
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2860
BEGIN
 
2861
SET new.f_int1 = new.f_int1 + @max_row,
 
2862
new.f_int2 = new.f_int2 - @max_row,
 
2863
new.f_charbig = '####updated per update trigger####';
 
2864
END|
 
2865
UPDATE t1
 
2866
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2867
f_charbig = '####updated per update statement itself####';
 
2868
        
 
2869
# check trigger-10 success:     1
 
2870
DROP TRIGGER trg_2;
 
2871
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2872
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2873
f_charbig = CONCAT('===',f_char1,'===');
 
2874
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2875
BEGIN
 
2876
SET new.f_int1 = @my_max1 + @counter,
 
2877
new.f_int2 = @my_min2 - @counter,
 
2878
new.f_charbig = '####updated per insert trigger####';
 
2879
SET @counter = @counter + 1;
 
2880
END|
 
2881
SET @counter = 1;
 
2882
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2884
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2885
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2887
ORDER BY f_int1;
 
2888
DROP TRIGGER trg_3;
 
2889
        
 
2890
# check trigger-11 success:     1
 
2891
DELETE FROM t1
 
2892
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2893
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2894
AND f_charbig = '####updated per insert trigger####';
 
2895
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2896
BEGIN
 
2897
SET new.f_int1 = @my_max1 + @counter,
 
2898
new.f_int2 = @my_min2 - @counter,
 
2899
new.f_charbig = '####updated per insert trigger####';
 
2900
SET @counter = @counter + 1;
 
2901
END|
 
2902
SET @counter = 1;
 
2903
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2904
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2905
SELECT CAST(f_int1 AS CHAR),
 
2906
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2908
ORDER BY f_int1;
 
2909
DROP TRIGGER trg_3;
 
2910
        
 
2911
# check trigger-12 success:     1
 
2912
DELETE FROM t1
 
2913
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2914
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2915
AND f_charbig = '####updated per insert trigger####';
 
2916
ANALYZE  TABLE t1;
 
2917
Table   Op      Msg_type        Msg_text
 
2918
test.t1 analyze status  OK
 
2919
CHECK    TABLE t1 EXTENDED;
 
2920
Table   Op      Msg_type        Msg_text
 
2921
test.t1 check   status  OK
 
2922
CHECKSUM TABLE t1 EXTENDED;
 
2923
Table   Checksum
 
2924
test.t1 <some_value>
 
2925
OPTIMIZE TABLE t1;
 
2926
Table   Op      Msg_type        Msg_text
 
2927
test.t1 optimize        status  OK
 
2928
# check layout success:    1
 
2929
REPAIR   TABLE t1 EXTENDED;
 
2930
Table   Op      Msg_type        Msg_text
 
2931
test.t1 repair  status  OK
 
2932
# check layout success:    1
 
2933
TRUNCATE t1;
 
2934
        
 
2935
# check TRUNCATE success:       1
 
2936
# check layout success:    1
 
2937
# End usability test (inc/partition_check.inc)
 
2938
DROP TABLE t1;
 
2939
CREATE TABLE t1 (
 
2940
f_int1 INTEGER,
 
2941
f_int2 INTEGER,
 
2942
f_char1 CHAR(20),
 
2943
f_char2 CHAR(20),
 
2944
f_charbig VARCHAR(1000)
 
2945
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
2946
)
 
2947
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
2948
(PARTITION part1 VALUES IN (0)
 
2949
(SUBPARTITION sp11, SUBPARTITION sp12),
 
2950
PARTITION part2 VALUES IN (1)
 
2951
(SUBPARTITION sp21, SUBPARTITION sp22),
 
2952
PARTITION part3 VALUES IN (2)
 
2953
(SUBPARTITION sp31, SUBPARTITION sp32),
 
2954
PARTITION part4 VALUES IN (NULL)
 
2955
(SUBPARTITION sp41, SUBPARTITION sp42));
 
2956
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2957
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2958
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2959
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
2960
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2961
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2962
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2963
# Start usability test (inc/partition_check.inc)
 
2964
create_command
 
2965
SHOW CREATE TABLE t1;
 
2966
Table   Create Table
 
2967
t1      CREATE TABLE `t1` (
 
2968
  `f_int1` int(11) DEFAULT NULL,
 
2969
  `f_int2` int(11) DEFAULT NULL,
 
2970
  `f_char1` char(20) DEFAULT NULL,
 
2971
  `f_char2` char(20) DEFAULT NULL,
 
2972
  `f_charbig` varchar(1000) DEFAULT NULL
 
2973
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
2974
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
2975
SUBPARTITION BY HASH (f_int1 + 1)
 
2976
(PARTITION part1 VALUES IN (0)
 
2977
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
2978
  SUBPARTITION sp12 ENGINE = MyISAM),
 
2979
 PARTITION part2 VALUES IN (1)
 
2980
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
2981
  SUBPARTITION sp22 ENGINE = MyISAM),
 
2982
 PARTITION part3 VALUES IN (2)
 
2983
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
2984
  SUBPARTITION sp32 ENGINE = MyISAM),
 
2985
 PARTITION part4 VALUES IN (NULL)
 
2986
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
2987
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
2988
 
 
2989
unified filelist
 
2990
t1#P#part1#SP#sp11.MYD
 
2991
t1#P#part1#SP#sp11.MYI
 
2992
t1#P#part1#SP#sp12.MYD
 
2993
t1#P#part1#SP#sp12.MYI
 
2994
t1#P#part2#SP#sp21.MYD
 
2995
t1#P#part2#SP#sp21.MYI
 
2996
t1#P#part2#SP#sp22.MYD
 
2997
t1#P#part2#SP#sp22.MYI
 
2998
t1#P#part3#SP#sp31.MYD
 
2999
t1#P#part3#SP#sp31.MYI
 
3000
t1#P#part3#SP#sp32.MYD
 
3001
t1#P#part3#SP#sp32.MYI
 
3002
t1#P#part4#SP#sp41.MYD
 
3003
t1#P#part4#SP#sp41.MYI
 
3004
t1#P#part4#SP#sp42.MYD
 
3005
t1#P#part4#SP#sp42.MYI
 
3006
t1.frm
 
3007
t1.par
 
3008
 
 
3009
# check prerequisites-1 success:    1
 
3010
# check COUNT(*) success:    1
 
3011
# check MIN/MAX(f_int1) success:    1
 
3012
# check MIN/MAX(f_int2) success:    1
 
3013
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3014
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3015
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3016
WHERE f_int1 IN (2,3);
 
3017
# check prerequisites-3 success:    1
 
3018
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3019
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3020
# check read via f_int1 success: 1
 
3021
# check read via f_int2 success: 1
 
3022
        
 
3023
# check multiple-1 success:     1
 
3024
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3025
        
 
3026
# check multiple-2 success:     1
 
3027
INSERT INTO t1 SELECT * FROM t0_template
 
3028
WHERE MOD(f_int1,3) = 0;
 
3029
        
 
3030
# check multiple-3 success:     1
 
3031
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3032
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3033
AND @max_row_div2 + @max_row_div4;
 
3034
        
 
3035
# check multiple-4 success:     1
 
3036
DELETE FROM t1
 
3037
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3038
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3039
        
 
3040
# check multiple-5 success:     1
 
3041
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3042
INSERT INTO t1
 
3043
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3044
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3045
f_charbig = '#SINGLE#';
 
3046
        
 
3047
# check single-1 success:       1
 
3048
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3049
INSERT INTO t1
 
3050
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3051
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3052
f_charbig = '#SINGLE#';
 
3053
        
 
3054
# check single-2 success:       1
 
3055
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3056
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3057
UPDATE t1 SET f_int1 = @cur_value2
 
3058
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3059
        
 
3060
# check single-3 success:       1
 
3061
SET @cur_value1= -1;
 
3062
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3063
UPDATE t1 SET f_int1 = @cur_value1
 
3064
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3065
        
 
3066
# check single-4 success:       1
 
3067
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3068
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3069
        
 
3070
# check single-5 success:       1
 
3071
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3072
        
 
3073
# check single-6 success:       1
 
3074
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3075
        
 
3076
# check single-7 success:       1
 
3077
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3078
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3079
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3080
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3081
f_charbig = '#NULL#';
 
3082
INSERT INTO t1
 
3083
SET f_int1 = NULL , f_int2 = -@max_row,
 
3084
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3085
f_charbig = '#NULL#';
 
3086
# check null success:    1
 
3087
        
 
3088
# check null-1 success:         1
 
3089
UPDATE t1 SET f_int1 = -@max_row
 
3090
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3091
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3092
        
 
3093
# check null-2 success:         1
 
3094
UPDATE t1 SET f_int1 = NULL
 
3095
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3096
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3097
        
 
3098
# check null-3 success:         1
 
3099
DELETE FROM t1
 
3100
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3101
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3102
        
 
3103
# check null-4 success:         1
 
3104
DELETE FROM t1
 
3105
WHERE f_int1 = 0 AND f_int2 = 0
 
3106
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3107
AND f_charbig = '#NULL#';
 
3108
SET AUTOCOMMIT= 0;
 
3109
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3110
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3111
FROM t0_template source_tab
 
3112
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3113
        
 
3114
# check transactions-1 success:         1
 
3115
COMMIT WORK;
 
3116
        
 
3117
# check transactions-2 success:         1
 
3118
ROLLBACK WORK;
 
3119
        
 
3120
# check transactions-3 success:         1
 
3121
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3122
COMMIT WORK;
 
3123
ROLLBACK WORK;
 
3124
        
 
3125
# check transactions-4 success:         1
 
3126
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3127
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3128
FROM t0_template source_tab
 
3129
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3130
        
 
3131
# check transactions-5 success:         1
 
3132
ROLLBACK WORK;
 
3133
Warnings:
 
3134
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3135
        
 
3136
# check transactions-6 success:         1
 
3137
# INFO: Storage engine used for t1 seems to be not transactional.
 
3138
COMMIT;
 
3139
        
 
3140
# check transactions-7 success:         1
 
3141
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3142
COMMIT WORK;
 
3143
SET @@session.sql_mode = 'traditional';
 
3144
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3145
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3146
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3147
'', '', 'was inserted' FROM t0_template
 
3148
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3149
ERROR 22012: Division by 0
 
3150
COMMIT;
 
3151
        
 
3152
# check transactions-8 success:         1
 
3153
# INFO: Storage engine used for t1 seems to be unable to revert
 
3154
#       changes made by the failing statement.
 
3155
SET @@session.sql_mode = '';
 
3156
SET AUTOCOMMIT= 1;
 
3157
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3158
COMMIT WORK;
 
3159
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3160
        
 
3161
# check special-1 success:      1
 
3162
UPDATE t1 SET f_charbig = '';
 
3163
        
 
3164
# check special-2 success:      1
 
3165
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3166
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3167
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3168
WHERE 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 INSERT 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 = new.f_int1;
 
3178
END|
 
3179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3180
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3182
        
 
3183
# check trigger-1 success:      1
 
3184
DROP TRIGGER trg_1;
 
3185
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3186
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3187
f_charbig = 'just inserted'
 
3188
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3189
DELETE FROM t0_aux
 
3190
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3193
'just inserted' FROM t0_template
 
3194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3195
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3196
BEGIN
 
3197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3198
f_charbig = 'updated by trigger'
 
3199
      WHERE f_int1 = new.f_int1;
 
3200
END|
 
3201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3202
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3204
        
 
3205
# check trigger-2 success:      1
 
3206
DROP TRIGGER trg_1;
 
3207
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3208
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3209
f_charbig = 'just inserted'
 
3210
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3211
DELETE FROM t0_aux
 
3212
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3213
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3214
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3215
'just inserted' FROM t0_template
 
3216
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3217
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3218
BEGIN
 
3219
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3220
f_charbig = 'updated by trigger'
 
3221
      WHERE f_int1 = new.f_int1;
 
3222
END|
 
3223
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3224
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3225
        
 
3226
# check trigger-3 success:      1
 
3227
DROP TRIGGER trg_1;
 
3228
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3229
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3230
f_charbig = 'just inserted'
 
3231
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3232
DELETE FROM t0_aux
 
3233
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3234
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3235
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3236
'just inserted' FROM t0_template
 
3237
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3238
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3239
BEGIN
 
3240
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3241
f_charbig = 'updated by trigger'
 
3242
      WHERE f_int1 = - old.f_int1;
 
3243
END|
 
3244
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3245
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3246
        
 
3247
# check trigger-4 success:      1
 
3248
DROP TRIGGER trg_1;
 
3249
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3250
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3251
f_charbig = 'just inserted'
 
3252
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3253
DELETE FROM t0_aux
 
3254
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3255
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3256
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3257
'just inserted' FROM t0_template
 
3258
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3259
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3260
BEGIN
 
3261
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3262
f_charbig = 'updated by trigger'
 
3263
      WHERE f_int1 = new.f_int1;
 
3264
END|
 
3265
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3266
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3267
        
 
3268
# check trigger-5 success:      1
 
3269
DROP TRIGGER trg_1;
 
3270
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3271
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3272
f_charbig = 'just inserted'
 
3273
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3274
DELETE FROM t0_aux
 
3275
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3276
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3277
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3278
'just inserted' FROM t0_template
 
3279
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3280
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3281
BEGIN
 
3282
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3283
f_charbig = 'updated by trigger'
 
3284
      WHERE f_int1 = - old.f_int1;
 
3285
END|
 
3286
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3287
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3288
        
 
3289
# check trigger-6 success:      1
 
3290
DROP TRIGGER trg_1;
 
3291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3293
f_charbig = 'just inserted'
 
3294
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3295
DELETE FROM t0_aux
 
3296
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3297
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3298
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3299
'just inserted' FROM t0_template
 
3300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3301
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3302
BEGIN
 
3303
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3304
f_charbig = 'updated by trigger'
 
3305
      WHERE f_int1 = - old.f_int1;
 
3306
END|
 
3307
DELETE FROM t0_aux
 
3308
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3309
        
 
3310
# check trigger-7 success:      1
 
3311
DROP TRIGGER trg_1;
 
3312
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3313
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3314
f_charbig = 'just inserted'
 
3315
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3316
DELETE FROM t0_aux
 
3317
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3319
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3320
'just inserted' FROM t0_template
 
3321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3322
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3323
BEGIN
 
3324
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3325
f_charbig = 'updated by trigger'
 
3326
      WHERE f_int1 = - old.f_int1;
 
3327
END|
 
3328
DELETE FROM t0_aux
 
3329
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3330
        
 
3331
# check trigger-8 success:      1
 
3332
DROP TRIGGER trg_1;
 
3333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3334
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3335
f_charbig = 'just inserted'
 
3336
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3337
DELETE FROM t0_aux
 
3338
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3339
DELETE FROM t1
 
3340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3341
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3342
BEGIN
 
3343
SET new.f_int1 = old.f_int1 + @max_row,
 
3344
new.f_int2 = old.f_int2 - @max_row,
 
3345
new.f_charbig = '####updated per update trigger####';
 
3346
END|
 
3347
UPDATE t1
 
3348
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3349
f_charbig = '####updated per update statement itself####';
 
3350
        
 
3351
# check trigger-9 success:      1
 
3352
DROP TRIGGER trg_2;
 
3353
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3354
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3355
f_charbig = CONCAT('===',f_char1,'===');
 
3356
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3357
BEGIN
 
3358
SET new.f_int1 = new.f_int1 + @max_row,
 
3359
new.f_int2 = new.f_int2 - @max_row,
 
3360
new.f_charbig = '####updated per update trigger####';
 
3361
END|
 
3362
UPDATE t1
 
3363
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3364
f_charbig = '####updated per update statement itself####';
 
3365
        
 
3366
# check trigger-10 success:     1
 
3367
DROP TRIGGER trg_2;
 
3368
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3369
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3370
f_charbig = CONCAT('===',f_char1,'===');
 
3371
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3372
BEGIN
 
3373
SET new.f_int1 = @my_max1 + @counter,
 
3374
new.f_int2 = @my_min2 - @counter,
 
3375
new.f_charbig = '####updated per insert trigger####';
 
3376
SET @counter = @counter + 1;
 
3377
END|
 
3378
SET @counter = 1;
 
3379
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3380
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3381
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3382
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3384
ORDER BY f_int1;
 
3385
DROP TRIGGER trg_3;
 
3386
        
 
3387
# check trigger-11 success:     1
 
3388
DELETE FROM t1
 
3389
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3390
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3391
AND f_charbig = '####updated per insert trigger####';
 
3392
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3393
BEGIN
 
3394
SET new.f_int1 = @my_max1 + @counter,
 
3395
new.f_int2 = @my_min2 - @counter,
 
3396
new.f_charbig = '####updated per insert trigger####';
 
3397
SET @counter = @counter + 1;
 
3398
END|
 
3399
SET @counter = 1;
 
3400
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3401
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3402
SELECT CAST(f_int1 AS CHAR),
 
3403
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3404
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3405
ORDER BY f_int1;
 
3406
DROP TRIGGER trg_3;
 
3407
        
 
3408
# check trigger-12 success:     1
 
3409
DELETE FROM t1
 
3410
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3411
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3412
AND f_charbig = '####updated per insert trigger####';
 
3413
ANALYZE  TABLE t1;
 
3414
Table   Op      Msg_type        Msg_text
 
3415
test.t1 analyze status  OK
 
3416
CHECK    TABLE t1 EXTENDED;
 
3417
Table   Op      Msg_type        Msg_text
 
3418
test.t1 check   status  OK
 
3419
CHECKSUM TABLE t1 EXTENDED;
 
3420
Table   Checksum
 
3421
test.t1 <some_value>
 
3422
OPTIMIZE TABLE t1;
 
3423
Table   Op      Msg_type        Msg_text
 
3424
test.t1 optimize        status  OK
 
3425
# check layout success:    1
 
3426
REPAIR   TABLE t1 EXTENDED;
 
3427
Table   Op      Msg_type        Msg_text
 
3428
test.t1 repair  status  OK
 
3429
# check layout success:    1
 
3430
TRUNCATE t1;
 
3431
        
 
3432
# check TRUNCATE success:       1
 
3433
# check layout success:    1
 
3434
# End usability test (inc/partition_check.inc)
 
3435
DROP TABLE t1;
 
3436
CREATE TABLE t1 (
 
3437
f_int1 INTEGER,
 
3438
f_int2 INTEGER,
 
3439
f_char1 CHAR(20),
 
3440
f_char2 CHAR(20),
 
3441
f_charbig VARCHAR(1000)
 
3442
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
3443
)
 
3444
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3445
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3446
(PARTITION part1 VALUES IN (0),
 
3447
PARTITION part2 VALUES IN (1),
 
3448
PARTITION part3 VALUES IN (NULL));
 
3449
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3450
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3451
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3452
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
3453
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3454
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3455
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3456
# Start usability test (inc/partition_check.inc)
 
3457
create_command
 
3458
SHOW CREATE TABLE t1;
 
3459
Table   Create Table
 
3460
t1      CREATE TABLE `t1` (
 
3461
  `f_int1` int(11) DEFAULT NULL,
 
3462
  `f_int2` int(11) DEFAULT NULL,
 
3463
  `f_char1` char(20) DEFAULT NULL,
 
3464
  `f_char2` char(20) DEFAULT NULL,
 
3465
  `f_charbig` varchar(1000) DEFAULT NULL
 
3466
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
3467
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
3468
SUBPARTITION BY KEY (f_int1)
 
3469
SUBPARTITIONS 3
 
3470
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
3471
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
3472
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
3473
 
 
3474
unified filelist
 
3475
t1#P#part1#SP#part1sp0.MYD
 
3476
t1#P#part1#SP#part1sp0.MYI
 
3477
t1#P#part1#SP#part1sp1.MYD
 
3478
t1#P#part1#SP#part1sp1.MYI
 
3479
t1#P#part1#SP#part1sp2.MYD
 
3480
t1#P#part1#SP#part1sp2.MYI
 
3481
t1#P#part2#SP#part2sp0.MYD
 
3482
t1#P#part2#SP#part2sp0.MYI
 
3483
t1#P#part2#SP#part2sp1.MYD
 
3484
t1#P#part2#SP#part2sp1.MYI
 
3485
t1#P#part2#SP#part2sp2.MYD
 
3486
t1#P#part2#SP#part2sp2.MYI
 
3487
t1#P#part3#SP#part3sp0.MYD
 
3488
t1#P#part3#SP#part3sp0.MYI
 
3489
t1#P#part3#SP#part3sp1.MYD
 
3490
t1#P#part3#SP#part3sp1.MYI
 
3491
t1#P#part3#SP#part3sp2.MYD
 
3492
t1#P#part3#SP#part3sp2.MYI
 
3493
t1.frm
 
3494
t1.par
 
3495
 
 
3496
# check prerequisites-1 success:    1
 
3497
# check COUNT(*) success:    1
 
3498
# check MIN/MAX(f_int1) success:    1
 
3499
# check MIN/MAX(f_int2) success:    1
 
3500
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3501
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3502
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3503
WHERE f_int1 IN (2,3);
 
3504
# check prerequisites-3 success:    1
 
3505
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3506
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3507
# check read via f_int1 success: 1
 
3508
# check read via f_int2 success: 1
 
3509
        
 
3510
# check multiple-1 success:     1
 
3511
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3512
        
 
3513
# check multiple-2 success:     1
 
3514
INSERT INTO t1 SELECT * FROM t0_template
 
3515
WHERE MOD(f_int1,3) = 0;
 
3516
        
 
3517
# check multiple-3 success:     1
 
3518
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3519
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3520
AND @max_row_div2 + @max_row_div4;
 
3521
        
 
3522
# check multiple-4 success:     1
 
3523
DELETE FROM t1
 
3524
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3525
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3526
        
 
3527
# check multiple-5 success:     1
 
3528
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3529
INSERT INTO t1
 
3530
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3531
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3532
f_charbig = '#SINGLE#';
 
3533
        
 
3534
# check single-1 success:       1
 
3535
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3536
INSERT INTO t1
 
3537
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3538
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3539
f_charbig = '#SINGLE#';
 
3540
        
 
3541
# check single-2 success:       1
 
3542
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3543
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3544
UPDATE t1 SET f_int1 = @cur_value2
 
3545
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3546
        
 
3547
# check single-3 success:       1
 
3548
SET @cur_value1= -1;
 
3549
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3550
UPDATE t1 SET f_int1 = @cur_value1
 
3551
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3552
        
 
3553
# check single-4 success:       1
 
3554
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3555
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3556
        
 
3557
# check single-5 success:       1
 
3558
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3559
        
 
3560
# check single-6 success:       1
 
3561
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3562
        
 
3563
# check single-7 success:       1
 
3564
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3565
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3566
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3567
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3568
f_charbig = '#NULL#';
 
3569
INSERT INTO t1
 
3570
SET f_int1 = NULL , f_int2 = -@max_row,
 
3571
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3572
f_charbig = '#NULL#';
 
3573
# check null success:    1
 
3574
        
 
3575
# check null-1 success:         1
 
3576
UPDATE t1 SET f_int1 = -@max_row
 
3577
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3578
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3579
        
 
3580
# check null-2 success:         1
 
3581
UPDATE t1 SET f_int1 = NULL
 
3582
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3583
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3584
        
 
3585
# check null-3 success:         1
 
3586
DELETE FROM t1
 
3587
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3588
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3589
        
 
3590
# check null-4 success:         1
 
3591
DELETE FROM t1
 
3592
WHERE f_int1 = 0 AND f_int2 = 0
 
3593
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3594
AND f_charbig = '#NULL#';
 
3595
SET AUTOCOMMIT= 0;
 
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-1 success:         1
 
3602
COMMIT WORK;
 
3603
        
 
3604
# check transactions-2 success:         1
 
3605
ROLLBACK WORK;
 
3606
        
 
3607
# check transactions-3 success:         1
 
3608
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3609
COMMIT WORK;
 
3610
ROLLBACK WORK;
 
3611
        
 
3612
# check transactions-4 success:         1
 
3613
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3614
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3615
FROM t0_template source_tab
 
3616
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3617
        
 
3618
# check transactions-5 success:         1
 
3619
ROLLBACK WORK;
 
3620
Warnings:
 
3621
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3622
        
 
3623
# check transactions-6 success:         1
 
3624
# INFO: Storage engine used for t1 seems to be not transactional.
 
3625
COMMIT;
 
3626
        
 
3627
# check transactions-7 success:         1
 
3628
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3629
COMMIT WORK;
 
3630
SET @@session.sql_mode = 'traditional';
 
3631
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3632
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3633
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3634
'', '', 'was inserted' FROM t0_template
 
3635
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3636
ERROR 22012: Division by 0
 
3637
COMMIT;
 
3638
        
 
3639
# check transactions-8 success:         1
 
3640
# INFO: Storage engine used for t1 seems to be unable to revert
 
3641
#       changes made by the failing statement.
 
3642
SET @@session.sql_mode = '';
 
3643
SET AUTOCOMMIT= 1;
 
3644
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3645
COMMIT WORK;
 
3646
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3647
        
 
3648
# check special-1 success:      1
 
3649
UPDATE t1 SET f_charbig = '';
 
3650
        
 
3651
# check special-2 success:      1
 
3652
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3653
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3654
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3655
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3656
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3657
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3658
'just inserted' FROM t0_template
 
3659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3660
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3661
BEGIN
 
3662
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3663
f_charbig = 'updated by trigger'
 
3664
      WHERE f_int1 = new.f_int1;
 
3665
END|
 
3666
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3667
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3669
        
 
3670
# check trigger-1 success:      1
 
3671
DROP TRIGGER trg_1;
 
3672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3674
f_charbig = 'just inserted'
 
3675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3676
DELETE FROM t0_aux
 
3677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3680
'just inserted' FROM t0_template
 
3681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3682
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3683
BEGIN
 
3684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3685
f_charbig = 'updated by trigger'
 
3686
      WHERE f_int1 = new.f_int1;
 
3687
END|
 
3688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3689
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3691
        
 
3692
# check trigger-2 success:      1
 
3693
DROP TRIGGER trg_1;
 
3694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3696
f_charbig = 'just inserted'
 
3697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3698
DELETE FROM t0_aux
 
3699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3702
'just inserted' FROM t0_template
 
3703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3704
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3705
BEGIN
 
3706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3707
f_charbig = 'updated by trigger'
 
3708
      WHERE f_int1 = new.f_int1;
 
3709
END|
 
3710
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3711
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3712
        
 
3713
# check trigger-3 success:      1
 
3714
DROP TRIGGER trg_1;
 
3715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3717
f_charbig = 'just inserted'
 
3718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3719
DELETE FROM t0_aux
 
3720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3723
'just inserted' FROM t0_template
 
3724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3725
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3726
BEGIN
 
3727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3728
f_charbig = 'updated by trigger'
 
3729
      WHERE f_int1 = - old.f_int1;
 
3730
END|
 
3731
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3732
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3733
        
 
3734
# check trigger-4 success:      1
 
3735
DROP TRIGGER trg_1;
 
3736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3738
f_charbig = 'just inserted'
 
3739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3740
DELETE FROM t0_aux
 
3741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3742
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3743
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3744
'just inserted' FROM t0_template
 
3745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3746
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3747
BEGIN
 
3748
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3749
f_charbig = 'updated by trigger'
 
3750
      WHERE f_int1 = new.f_int1;
 
3751
END|
 
3752
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3753
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3754
        
 
3755
# check trigger-5 success:      1
 
3756
DROP TRIGGER trg_1;
 
3757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3759
f_charbig = 'just inserted'
 
3760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3761
DELETE FROM t0_aux
 
3762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3764
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3765
'just inserted' FROM t0_template
 
3766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3767
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3768
BEGIN
 
3769
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3770
f_charbig = 'updated by trigger'
 
3771
      WHERE f_int1 = - old.f_int1;
 
3772
END|
 
3773
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3774
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3775
        
 
3776
# check trigger-6 success:      1
 
3777
DROP TRIGGER trg_1;
 
3778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3780
f_charbig = 'just inserted'
 
3781
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3782
DELETE FROM t0_aux
 
3783
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3784
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3785
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3786
'just inserted' FROM t0_template
 
3787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3788
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3789
BEGIN
 
3790
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3791
f_charbig = 'updated by trigger'
 
3792
      WHERE f_int1 = - old.f_int1;
 
3793
END|
 
3794
DELETE FROM t0_aux
 
3795
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3796
        
 
3797
# check trigger-7 success:      1
 
3798
DROP TRIGGER trg_1;
 
3799
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3800
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3801
f_charbig = 'just inserted'
 
3802
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3803
DELETE FROM t0_aux
 
3804
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3805
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3806
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3807
'just inserted' FROM t0_template
 
3808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3809
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3810
BEGIN
 
3811
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3812
f_charbig = 'updated by trigger'
 
3813
      WHERE f_int1 = - old.f_int1;
 
3814
END|
 
3815
DELETE FROM t0_aux
 
3816
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3817
        
 
3818
# check trigger-8 success:      1
 
3819
DROP TRIGGER trg_1;
 
3820
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3821
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3822
f_charbig = 'just inserted'
 
3823
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3824
DELETE FROM t0_aux
 
3825
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3826
DELETE FROM t1
 
3827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3828
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3829
BEGIN
 
3830
SET new.f_int1 = old.f_int1 + @max_row,
 
3831
new.f_int2 = old.f_int2 - @max_row,
 
3832
new.f_charbig = '####updated per update trigger####';
 
3833
END|
 
3834
UPDATE t1
 
3835
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3836
f_charbig = '####updated per update statement itself####';
 
3837
        
 
3838
# check trigger-9 success:      1
 
3839
DROP TRIGGER trg_2;
 
3840
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3841
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3842
f_charbig = CONCAT('===',f_char1,'===');
 
3843
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3844
BEGIN
 
3845
SET new.f_int1 = new.f_int1 + @max_row,
 
3846
new.f_int2 = new.f_int2 - @max_row,
 
3847
new.f_charbig = '####updated per update trigger####';
 
3848
END|
 
3849
UPDATE t1
 
3850
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3851
f_charbig = '####updated per update statement itself####';
 
3852
        
 
3853
# check trigger-10 success:     1
 
3854
DROP TRIGGER trg_2;
 
3855
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3856
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3857
f_charbig = CONCAT('===',f_char1,'===');
 
3858
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3859
BEGIN
 
3860
SET new.f_int1 = @my_max1 + @counter,
 
3861
new.f_int2 = @my_min2 - @counter,
 
3862
new.f_charbig = '####updated per insert trigger####';
 
3863
SET @counter = @counter + 1;
 
3864
END|
 
3865
SET @counter = 1;
 
3866
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3867
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3868
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3869
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3871
ORDER BY f_int1;
 
3872
DROP TRIGGER trg_3;
 
3873
        
 
3874
# check trigger-11 success:     1
 
3875
DELETE FROM t1
 
3876
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3877
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3878
AND f_charbig = '####updated per insert trigger####';
 
3879
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3880
BEGIN
 
3881
SET new.f_int1 = @my_max1 + @counter,
 
3882
new.f_int2 = @my_min2 - @counter,
 
3883
new.f_charbig = '####updated per insert trigger####';
 
3884
SET @counter = @counter + 1;
 
3885
END|
 
3886
SET @counter = 1;
 
3887
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3888
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3889
SELECT CAST(f_int1 AS CHAR),
 
3890
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3892
ORDER BY f_int1;
 
3893
DROP TRIGGER trg_3;
 
3894
        
 
3895
# check trigger-12 success:     1
 
3896
DELETE FROM t1
 
3897
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3898
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3899
AND f_charbig = '####updated per insert trigger####';
 
3900
ANALYZE  TABLE t1;
 
3901
Table   Op      Msg_type        Msg_text
 
3902
test.t1 analyze status  OK
 
3903
CHECK    TABLE t1 EXTENDED;
 
3904
Table   Op      Msg_type        Msg_text
 
3905
test.t1 check   status  OK
 
3906
CHECKSUM TABLE t1 EXTENDED;
 
3907
Table   Checksum
 
3908
test.t1 <some_value>
 
3909
OPTIMIZE TABLE t1;
 
3910
Table   Op      Msg_type        Msg_text
 
3911
test.t1 optimize        status  OK
 
3912
# check layout success:    1
 
3913
REPAIR   TABLE t1 EXTENDED;
 
3914
Table   Op      Msg_type        Msg_text
 
3915
test.t1 repair  status  OK
 
3916
# check layout success:    1
 
3917
TRUNCATE t1;
 
3918
        
 
3919
# check TRUNCATE success:       1
 
3920
# check layout success:    1
 
3921
# End usability test (inc/partition_check.inc)
 
3922
DROP TABLE t1;
 
3923
#------------------------------------------------------------------------
 
3924
#  2.2   Partitioning function contains two columns (f_int1,f_int2)
 
3925
#------------------------------------------------------------------------
 
3926
#  2.2.2 DROP UNIQUE INDEX consisting of two columns
 
3927
DROP TABLE IF EXISTS t1;
 
3928
CREATE TABLE t1 (
 
3929
f_int1 INTEGER,
 
3930
f_int2 INTEGER,
 
3931
f_char1 CHAR(20),
 
3932
f_char2 CHAR(20),
 
3933
f_charbig VARCHAR(1000)
 
3934
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
3935
)
 
3936
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
3937
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3938
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3939
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3940
ALTER TABLE t1 DROP INDEX uidx1;
 
3941
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3942
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3943
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3944
# Start usability test (inc/partition_check.inc)
 
3945
create_command
 
3946
SHOW CREATE TABLE t1;
 
3947
Table   Create Table
 
3948
t1      CREATE TABLE `t1` (
 
3949
  `f_int1` int(11) DEFAULT NULL,
 
3950
  `f_int2` int(11) DEFAULT NULL,
 
3951
  `f_char1` char(20) DEFAULT NULL,
 
3952
  `f_char2` char(20) DEFAULT NULL,
 
3953
  `f_charbig` varchar(1000) DEFAULT NULL
 
3954
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
3955
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
3956
PARTITIONS 2 */
 
3957
 
 
3958
unified filelist
 
3959
t1#P#p0.MYD
 
3960
t1#P#p0.MYI
 
3961
t1#P#p1.MYD
 
3962
t1#P#p1.MYI
 
3963
t1.frm
 
3964
t1.par
 
3965
 
 
3966
# check prerequisites-1 success:    1
 
3967
# check COUNT(*) success:    1
 
3968
# check MIN/MAX(f_int1) success:    1
 
3969
# check MIN/MAX(f_int2) success:    1
 
3970
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3971
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3972
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3973
WHERE f_int1 IN (2,3);
 
3974
# check prerequisites-3 success:    1
 
3975
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3976
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3977
# check read via f_int1 success: 1
 
3978
# check read via f_int2 success: 1
 
3979
        
 
3980
# check multiple-1 success:     1
 
3981
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3982
        
 
3983
# check multiple-2 success:     1
 
3984
INSERT INTO t1 SELECT * FROM t0_template
 
3985
WHERE MOD(f_int1,3) = 0;
 
3986
        
 
3987
# check multiple-3 success:     1
 
3988
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3989
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3990
AND @max_row_div2 + @max_row_div4;
 
3991
        
 
3992
# check multiple-4 success:     1
 
3993
DELETE FROM t1
 
3994
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3995
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3996
        
 
3997
# check multiple-5 success:     1
 
3998
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3999
INSERT INTO t1
 
4000
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4001
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4002
f_charbig = '#SINGLE#';
 
4003
        
 
4004
# check single-1 success:       1
 
4005
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4006
INSERT INTO t1
 
4007
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4008
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4009
f_charbig = '#SINGLE#';
 
4010
        
 
4011
# check single-2 success:       1
 
4012
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4013
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4014
UPDATE t1 SET f_int1 = @cur_value2
 
4015
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4016
        
 
4017
# check single-3 success:       1
 
4018
SET @cur_value1= -1;
 
4019
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4020
UPDATE t1 SET f_int1 = @cur_value1
 
4021
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4022
        
 
4023
# check single-4 success:       1
 
4024
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4025
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4026
        
 
4027
# check single-5 success:       1
 
4028
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4029
        
 
4030
# check single-6 success:       1
 
4031
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4032
        
 
4033
# check single-7 success:       1
 
4034
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4035
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4036
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4037
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4038
f_charbig = '#NULL#';
 
4039
INSERT INTO t1
 
4040
SET f_int1 = NULL , f_int2 = -@max_row,
 
4041
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4042
f_charbig = '#NULL#';
 
4043
# check null success:    1
 
4044
        
 
4045
# check null-1 success:         1
 
4046
UPDATE t1 SET f_int1 = -@max_row
 
4047
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4048
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4049
        
 
4050
# check null-2 success:         1
 
4051
UPDATE t1 SET f_int1 = NULL
 
4052
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4053
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4054
        
 
4055
# check null-3 success:         1
 
4056
DELETE FROM t1
 
4057
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4058
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4059
        
 
4060
# check null-4 success:         1
 
4061
DELETE FROM t1
 
4062
WHERE f_int1 = 0 AND f_int2 = 0
 
4063
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4064
AND f_charbig = '#NULL#';
 
4065
SET AUTOCOMMIT= 0;
 
4066
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4067
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4068
FROM t0_template source_tab
 
4069
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4070
        
 
4071
# check transactions-1 success:         1
 
4072
COMMIT WORK;
 
4073
        
 
4074
# check transactions-2 success:         1
 
4075
ROLLBACK WORK;
 
4076
        
 
4077
# check transactions-3 success:         1
 
4078
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4079
COMMIT WORK;
 
4080
ROLLBACK WORK;
 
4081
        
 
4082
# check transactions-4 success:         1
 
4083
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4084
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4085
FROM t0_template source_tab
 
4086
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4087
        
 
4088
# check transactions-5 success:         1
 
4089
ROLLBACK WORK;
 
4090
Warnings:
 
4091
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4092
        
 
4093
# check transactions-6 success:         1
 
4094
# INFO: Storage engine used for t1 seems to be not transactional.
 
4095
COMMIT;
 
4096
        
 
4097
# check transactions-7 success:         1
 
4098
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4099
COMMIT WORK;
 
4100
SET @@session.sql_mode = 'traditional';
 
4101
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4102
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4103
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4104
'', '', 'was inserted' FROM t0_template
 
4105
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4106
ERROR 22012: Division by 0
 
4107
COMMIT;
 
4108
        
 
4109
# check transactions-8 success:         1
 
4110
# INFO: Storage engine used for t1 seems to be unable to revert
 
4111
#       changes made by the failing statement.
 
4112
SET @@session.sql_mode = '';
 
4113
SET AUTOCOMMIT= 1;
 
4114
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4115
COMMIT WORK;
 
4116
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4117
        
 
4118
# check special-1 success:      1
 
4119
UPDATE t1 SET f_charbig = '';
 
4120
        
 
4121
# check special-2 success:      1
 
4122
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4123
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4124
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4128
'just inserted' FROM t0_template
 
4129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4130
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4131
BEGIN
 
4132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4133
f_charbig = 'updated by trigger'
 
4134
      WHERE f_int1 = new.f_int1;
 
4135
END|
 
4136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4137
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4139
        
 
4140
# check trigger-1 success:      1
 
4141
DROP TRIGGER trg_1;
 
4142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4144
f_charbig = 'just inserted'
 
4145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4146
DELETE FROM t0_aux
 
4147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4149
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4150
'just inserted' FROM t0_template
 
4151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4152
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4153
BEGIN
 
4154
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4155
f_charbig = 'updated by trigger'
 
4156
      WHERE f_int1 = new.f_int1;
 
4157
END|
 
4158
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4159
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4161
        
 
4162
# check trigger-2 success:      1
 
4163
DROP TRIGGER trg_1;
 
4164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4166
f_charbig = 'just inserted'
 
4167
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4168
DELETE FROM t0_aux
 
4169
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4170
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4171
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4172
'just inserted' FROM t0_template
 
4173
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4174
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4175
BEGIN
 
4176
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4177
f_charbig = 'updated by trigger'
 
4178
      WHERE f_int1 = new.f_int1;
 
4179
END|
 
4180
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4181
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4182
        
 
4183
# check trigger-3 success:      1
 
4184
DROP TRIGGER trg_1;
 
4185
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4186
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4187
f_charbig = 'just inserted'
 
4188
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4189
DELETE FROM t0_aux
 
4190
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4193
'just inserted' FROM t0_template
 
4194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4195
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4196
BEGIN
 
4197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4198
f_charbig = 'updated by trigger'
 
4199
      WHERE f_int1 = - old.f_int1;
 
4200
END|
 
4201
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4202
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4203
        
 
4204
# check trigger-4 success:      1
 
4205
DROP TRIGGER trg_1;
 
4206
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4207
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4208
f_charbig = 'just inserted'
 
4209
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4210
DELETE FROM t0_aux
 
4211
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4212
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4213
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4214
'just inserted' FROM t0_template
 
4215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4216
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4217
BEGIN
 
4218
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4219
f_charbig = 'updated by trigger'
 
4220
      WHERE f_int1 = new.f_int1;
 
4221
END|
 
4222
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4223
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4224
        
 
4225
# check trigger-5 success:      1
 
4226
DROP TRIGGER trg_1;
 
4227
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4228
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4229
f_charbig = 'just inserted'
 
4230
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4231
DELETE FROM t0_aux
 
4232
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4233
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4234
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4235
'just inserted' FROM t0_template
 
4236
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4237
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4238
BEGIN
 
4239
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4240
f_charbig = 'updated by trigger'
 
4241
      WHERE f_int1 = - old.f_int1;
 
4242
END|
 
4243
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4244
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4245
        
 
4246
# check trigger-6 success:      1
 
4247
DROP TRIGGER trg_1;
 
4248
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4249
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4250
f_charbig = 'just inserted'
 
4251
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4252
DELETE FROM t0_aux
 
4253
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4254
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4255
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4256
'just inserted' FROM t0_template
 
4257
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4258
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4259
BEGIN
 
4260
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4261
f_charbig = 'updated by trigger'
 
4262
      WHERE f_int1 = - old.f_int1;
 
4263
END|
 
4264
DELETE FROM t0_aux
 
4265
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4266
        
 
4267
# check trigger-7 success:      1
 
4268
DROP TRIGGER trg_1;
 
4269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4271
f_charbig = 'just inserted'
 
4272
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4273
DELETE FROM t0_aux
 
4274
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4276
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4277
'just inserted' FROM t0_template
 
4278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4279
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4280
BEGIN
 
4281
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4282
f_charbig = 'updated by trigger'
 
4283
      WHERE f_int1 = - old.f_int1;
 
4284
END|
 
4285
DELETE FROM t0_aux
 
4286
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4287
        
 
4288
# check trigger-8 success:      1
 
4289
DROP TRIGGER trg_1;
 
4290
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4291
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4292
f_charbig = 'just inserted'
 
4293
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4294
DELETE FROM t0_aux
 
4295
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4296
DELETE FROM t1
 
4297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4298
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4299
BEGIN
 
4300
SET new.f_int1 = old.f_int1 + @max_row,
 
4301
new.f_int2 = old.f_int2 - @max_row,
 
4302
new.f_charbig = '####updated per update trigger####';
 
4303
END|
 
4304
UPDATE t1
 
4305
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4306
f_charbig = '####updated per update statement itself####';
 
4307
        
 
4308
# check trigger-9 success:      1
 
4309
DROP TRIGGER trg_2;
 
4310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4312
f_charbig = CONCAT('===',f_char1,'===');
 
4313
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4314
BEGIN
 
4315
SET new.f_int1 = new.f_int1 + @max_row,
 
4316
new.f_int2 = new.f_int2 - @max_row,
 
4317
new.f_charbig = '####updated per update trigger####';
 
4318
END|
 
4319
UPDATE t1
 
4320
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4321
f_charbig = '####updated per update statement itself####';
 
4322
        
 
4323
# check trigger-10 success:     1
 
4324
DROP TRIGGER trg_2;
 
4325
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4326
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4327
f_charbig = CONCAT('===',f_char1,'===');
 
4328
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4329
BEGIN
 
4330
SET new.f_int1 = @my_max1 + @counter,
 
4331
new.f_int2 = @my_min2 - @counter,
 
4332
new.f_charbig = '####updated per insert trigger####';
 
4333
SET @counter = @counter + 1;
 
4334
END|
 
4335
SET @counter = 1;
 
4336
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4337
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4338
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4339
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4341
ORDER BY f_int1;
 
4342
DROP TRIGGER trg_3;
 
4343
        
 
4344
# check trigger-11 success:     1
 
4345
DELETE FROM t1
 
4346
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4347
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4348
AND f_charbig = '####updated per insert trigger####';
 
4349
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4350
BEGIN
 
4351
SET new.f_int1 = @my_max1 + @counter,
 
4352
new.f_int2 = @my_min2 - @counter,
 
4353
new.f_charbig = '####updated per insert trigger####';
 
4354
SET @counter = @counter + 1;
 
4355
END|
 
4356
SET @counter = 1;
 
4357
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4358
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4359
SELECT CAST(f_int1 AS CHAR),
 
4360
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4362
ORDER BY f_int1;
 
4363
DROP TRIGGER trg_3;
 
4364
        
 
4365
# check trigger-12 success:     1
 
4366
DELETE FROM t1
 
4367
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4368
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4369
AND f_charbig = '####updated per insert trigger####';
 
4370
ANALYZE  TABLE t1;
 
4371
Table   Op      Msg_type        Msg_text
 
4372
test.t1 analyze status  OK
 
4373
CHECK    TABLE t1 EXTENDED;
 
4374
Table   Op      Msg_type        Msg_text
 
4375
test.t1 check   status  OK
 
4376
CHECKSUM TABLE t1 EXTENDED;
 
4377
Table   Checksum
 
4378
test.t1 <some_value>
 
4379
OPTIMIZE TABLE t1;
 
4380
Table   Op      Msg_type        Msg_text
 
4381
test.t1 optimize        status  OK
 
4382
# check layout success:    1
 
4383
REPAIR   TABLE t1 EXTENDED;
 
4384
Table   Op      Msg_type        Msg_text
 
4385
test.t1 repair  status  OK
 
4386
# check layout success:    1
 
4387
TRUNCATE t1;
 
4388
        
 
4389
# check TRUNCATE success:       1
 
4390
# check layout success:    1
 
4391
# End usability test (inc/partition_check.inc)
 
4392
DROP TABLE t1;
 
4393
CREATE TABLE t1 (
 
4394
f_int1 INTEGER,
 
4395
f_int2 INTEGER,
 
4396
f_char1 CHAR(20),
 
4397
f_char2 CHAR(20),
 
4398
f_charbig VARCHAR(1000)
 
4399
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
4400
)
 
4401
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
4402
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4403
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4404
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4405
ALTER TABLE t1 DROP INDEX uidx1;
 
4406
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4407
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4408
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4409
# Start usability test (inc/partition_check.inc)
 
4410
create_command
 
4411
SHOW CREATE TABLE t1;
 
4412
Table   Create Table
 
4413
t1      CREATE TABLE `t1` (
 
4414
  `f_int1` int(11) DEFAULT NULL,
 
4415
  `f_int2` int(11) DEFAULT NULL,
 
4416
  `f_char1` char(20) DEFAULT NULL,
 
4417
  `f_char2` char(20) DEFAULT NULL,
 
4418
  `f_charbig` varchar(1000) DEFAULT NULL
 
4419
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
4420
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
4421
PARTITIONS 5 */
 
4422
 
 
4423
unified filelist
 
4424
t1#P#p0.MYD
 
4425
t1#P#p0.MYI
 
4426
t1#P#p1.MYD
 
4427
t1#P#p1.MYI
 
4428
t1#P#p2.MYD
 
4429
t1#P#p2.MYI
 
4430
t1#P#p3.MYD
 
4431
t1#P#p3.MYI
 
4432
t1#P#p4.MYD
 
4433
t1#P#p4.MYI
 
4434
t1.frm
 
4435
t1.par
 
4436
 
 
4437
# check prerequisites-1 success:    1
 
4438
# check COUNT(*) success:    1
 
4439
# check MIN/MAX(f_int1) success:    1
 
4440
# check MIN/MAX(f_int2) success:    1
 
4441
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4442
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4443
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4444
WHERE f_int1 IN (2,3);
 
4445
# check prerequisites-3 success:    1
 
4446
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4447
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4448
# check read via f_int1 success: 1
 
4449
# check read via f_int2 success: 1
 
4450
        
 
4451
# check multiple-1 success:     1
 
4452
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4453
        
 
4454
# check multiple-2 success:     1
 
4455
INSERT INTO t1 SELECT * FROM t0_template
 
4456
WHERE MOD(f_int1,3) = 0;
 
4457
        
 
4458
# check multiple-3 success:     1
 
4459
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4460
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4461
AND @max_row_div2 + @max_row_div4;
 
4462
        
 
4463
# check multiple-4 success:     1
 
4464
DELETE FROM t1
 
4465
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4466
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4467
        
 
4468
# check multiple-5 success:     1
 
4469
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4470
INSERT INTO t1
 
4471
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4472
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4473
f_charbig = '#SINGLE#';
 
4474
        
 
4475
# check single-1 success:       1
 
4476
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4477
INSERT INTO t1
 
4478
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4479
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4480
f_charbig = '#SINGLE#';
 
4481
        
 
4482
# check single-2 success:       1
 
4483
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4484
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4485
UPDATE t1 SET f_int1 = @cur_value2
 
4486
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4487
        
 
4488
# check single-3 success:       1
 
4489
SET @cur_value1= -1;
 
4490
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4491
UPDATE t1 SET f_int1 = @cur_value1
 
4492
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4493
        
 
4494
# check single-4 success:       1
 
4495
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4496
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4497
        
 
4498
# check single-5 success:       1
 
4499
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4500
        
 
4501
# check single-6 success:       1
 
4502
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4503
        
 
4504
# check single-7 success:       1
 
4505
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4506
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4507
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4508
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4509
f_charbig = '#NULL#';
 
4510
INSERT INTO t1
 
4511
SET f_int1 = NULL , f_int2 = -@max_row,
 
4512
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4513
f_charbig = '#NULL#';
 
4514
# check null success:    1
 
4515
        
 
4516
# check null-1 success:         1
 
4517
UPDATE t1 SET f_int1 = -@max_row
 
4518
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4519
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4520
        
 
4521
# check null-2 success:         1
 
4522
UPDATE t1 SET f_int1 = NULL
 
4523
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4524
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4525
        
 
4526
# check null-3 success:         1
 
4527
DELETE FROM t1
 
4528
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4529
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4530
        
 
4531
# check null-4 success:         1
 
4532
DELETE FROM t1
 
4533
WHERE f_int1 = 0 AND f_int2 = 0
 
4534
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4535
AND f_charbig = '#NULL#';
 
4536
SET AUTOCOMMIT= 0;
 
4537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4538
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4539
FROM t0_template source_tab
 
4540
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4541
        
 
4542
# check transactions-1 success:         1
 
4543
COMMIT WORK;
 
4544
        
 
4545
# check transactions-2 success:         1
 
4546
ROLLBACK WORK;
 
4547
        
 
4548
# check transactions-3 success:         1
 
4549
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4550
COMMIT WORK;
 
4551
ROLLBACK WORK;
 
4552
        
 
4553
# check transactions-4 success:         1
 
4554
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4555
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4556
FROM t0_template source_tab
 
4557
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4558
        
 
4559
# check transactions-5 success:         1
 
4560
ROLLBACK WORK;
 
4561
Warnings:
 
4562
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4563
        
 
4564
# check transactions-6 success:         1
 
4565
# INFO: Storage engine used for t1 seems to be not transactional.
 
4566
COMMIT;
 
4567
        
 
4568
# check transactions-7 success:         1
 
4569
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4570
COMMIT WORK;
 
4571
SET @@session.sql_mode = 'traditional';
 
4572
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4573
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4574
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4575
'', '', 'was inserted' FROM t0_template
 
4576
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4577
ERROR 22012: Division by 0
 
4578
COMMIT;
 
4579
        
 
4580
# check transactions-8 success:         1
 
4581
# INFO: Storage engine used for t1 seems to be unable to revert
 
4582
#       changes made by the failing statement.
 
4583
SET @@session.sql_mode = '';
 
4584
SET AUTOCOMMIT= 1;
 
4585
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4586
COMMIT WORK;
 
4587
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4588
        
 
4589
# check special-1 success:      1
 
4590
UPDATE t1 SET f_charbig = '';
 
4591
        
 
4592
# check special-2 success:      1
 
4593
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4594
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4595
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4598
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4599
'just inserted' FROM t0_template
 
4600
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4601
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4602
BEGIN
 
4603
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4604
f_charbig = 'updated by trigger'
 
4605
      WHERE f_int1 = new.f_int1;
 
4606
END|
 
4607
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4608
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4610
        
 
4611
# check trigger-1 success:      1
 
4612
DROP TRIGGER trg_1;
 
4613
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4614
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4615
f_charbig = 'just inserted'
 
4616
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4617
DELETE FROM t0_aux
 
4618
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4619
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4620
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4621
'just inserted' FROM t0_template
 
4622
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4623
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4624
BEGIN
 
4625
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4626
f_charbig = 'updated by trigger'
 
4627
      WHERE f_int1 = new.f_int1;
 
4628
END|
 
4629
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4630
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4632
        
 
4633
# check trigger-2 success:      1
 
4634
DROP TRIGGER trg_1;
 
4635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4637
f_charbig = 'just inserted'
 
4638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4639
DELETE FROM t0_aux
 
4640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4643
'just inserted' FROM t0_template
 
4644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4645
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4646
BEGIN
 
4647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4648
f_charbig = 'updated by trigger'
 
4649
      WHERE f_int1 = new.f_int1;
 
4650
END|
 
4651
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4653
        
 
4654
# check trigger-3 success:      1
 
4655
DROP TRIGGER trg_1;
 
4656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4658
f_charbig = 'just inserted'
 
4659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4660
DELETE FROM t0_aux
 
4661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4664
'just inserted' FROM t0_template
 
4665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4666
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4667
BEGIN
 
4668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4669
f_charbig = 'updated by trigger'
 
4670
      WHERE f_int1 = - old.f_int1;
 
4671
END|
 
4672
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4674
        
 
4675
# check trigger-4 success:      1
 
4676
DROP TRIGGER trg_1;
 
4677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4679
f_charbig = 'just inserted'
 
4680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4681
DELETE FROM t0_aux
 
4682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4685
'just inserted' FROM t0_template
 
4686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4687
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4688
BEGIN
 
4689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4690
f_charbig = 'updated by trigger'
 
4691
      WHERE f_int1 = new.f_int1;
 
4692
END|
 
4693
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4695
        
 
4696
# check trigger-5 success:      1
 
4697
DROP TRIGGER trg_1;
 
4698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4700
f_charbig = 'just inserted'
 
4701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4702
DELETE FROM t0_aux
 
4703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4706
'just inserted' FROM t0_template
 
4707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4708
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4709
BEGIN
 
4710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4711
f_charbig = 'updated by trigger'
 
4712
      WHERE f_int1 = - old.f_int1;
 
4713
END|
 
4714
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4715
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4716
        
 
4717
# check trigger-6 success:      1
 
4718
DROP TRIGGER trg_1;
 
4719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4721
f_charbig = 'just inserted'
 
4722
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4723
DELETE FROM t0_aux
 
4724
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4725
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4726
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4727
'just inserted' FROM t0_template
 
4728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4729
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4730
BEGIN
 
4731
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4732
f_charbig = 'updated by trigger'
 
4733
      WHERE f_int1 = - old.f_int1;
 
4734
END|
 
4735
DELETE FROM t0_aux
 
4736
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4737
        
 
4738
# check trigger-7 success:      1
 
4739
DROP TRIGGER trg_1;
 
4740
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4741
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4742
f_charbig = 'just inserted'
 
4743
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4744
DELETE FROM t0_aux
 
4745
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4747
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4748
'just inserted' FROM t0_template
 
4749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4750
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4751
BEGIN
 
4752
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4753
f_charbig = 'updated by trigger'
 
4754
      WHERE f_int1 = - old.f_int1;
 
4755
END|
 
4756
DELETE FROM t0_aux
 
4757
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4758
        
 
4759
# check trigger-8 success:      1
 
4760
DROP TRIGGER trg_1;
 
4761
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4762
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4763
f_charbig = 'just inserted'
 
4764
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4765
DELETE FROM t0_aux
 
4766
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4767
DELETE FROM t1
 
4768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4769
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4770
BEGIN
 
4771
SET new.f_int1 = old.f_int1 + @max_row,
 
4772
new.f_int2 = old.f_int2 - @max_row,
 
4773
new.f_charbig = '####updated per update trigger####';
 
4774
END|
 
4775
UPDATE t1
 
4776
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4777
f_charbig = '####updated per update statement itself####';
 
4778
        
 
4779
# check trigger-9 success:      1
 
4780
DROP TRIGGER trg_2;
 
4781
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4782
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4783
f_charbig = CONCAT('===',f_char1,'===');
 
4784
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4785
BEGIN
 
4786
SET new.f_int1 = new.f_int1 + @max_row,
 
4787
new.f_int2 = new.f_int2 - @max_row,
 
4788
new.f_charbig = '####updated per update trigger####';
 
4789
END|
 
4790
UPDATE t1
 
4791
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4792
f_charbig = '####updated per update statement itself####';
 
4793
        
 
4794
# check trigger-10 success:     1
 
4795
DROP TRIGGER trg_2;
 
4796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4798
f_charbig = CONCAT('===',f_char1,'===');
 
4799
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4800
BEGIN
 
4801
SET new.f_int1 = @my_max1 + @counter,
 
4802
new.f_int2 = @my_min2 - @counter,
 
4803
new.f_charbig = '####updated per insert trigger####';
 
4804
SET @counter = @counter + 1;
 
4805
END|
 
4806
SET @counter = 1;
 
4807
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4808
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4809
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4810
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4811
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4812
ORDER BY f_int1;
 
4813
DROP TRIGGER trg_3;
 
4814
        
 
4815
# check trigger-11 success:     1
 
4816
DELETE FROM t1
 
4817
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4818
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4819
AND f_charbig = '####updated per insert trigger####';
 
4820
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4821
BEGIN
 
4822
SET new.f_int1 = @my_max1 + @counter,
 
4823
new.f_int2 = @my_min2 - @counter,
 
4824
new.f_charbig = '####updated per insert trigger####';
 
4825
SET @counter = @counter + 1;
 
4826
END|
 
4827
SET @counter = 1;
 
4828
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4829
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4830
SELECT CAST(f_int1 AS CHAR),
 
4831
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4833
ORDER BY f_int1;
 
4834
DROP TRIGGER trg_3;
 
4835
        
 
4836
# check trigger-12 success:     1
 
4837
DELETE FROM t1
 
4838
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4839
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4840
AND f_charbig = '####updated per insert trigger####';
 
4841
ANALYZE  TABLE t1;
 
4842
Table   Op      Msg_type        Msg_text
 
4843
test.t1 analyze status  OK
 
4844
CHECK    TABLE t1 EXTENDED;
 
4845
Table   Op      Msg_type        Msg_text
 
4846
test.t1 check   status  OK
 
4847
CHECKSUM TABLE t1 EXTENDED;
 
4848
Table   Checksum
 
4849
test.t1 <some_value>
 
4850
OPTIMIZE TABLE t1;
 
4851
Table   Op      Msg_type        Msg_text
 
4852
test.t1 optimize        status  OK
 
4853
# check layout success:    1
 
4854
REPAIR   TABLE t1 EXTENDED;
 
4855
Table   Op      Msg_type        Msg_text
 
4856
test.t1 repair  status  OK
 
4857
# check layout success:    1
 
4858
TRUNCATE t1;
 
4859
        
 
4860
# check TRUNCATE success:       1
 
4861
# check layout success:    1
 
4862
# End usability test (inc/partition_check.inc)
 
4863
DROP TABLE t1;
 
4864
CREATE TABLE t1 (
 
4865
f_int1 INTEGER,
 
4866
f_int2 INTEGER,
 
4867
f_char1 CHAR(20),
 
4868
f_char2 CHAR(20),
 
4869
f_charbig VARCHAR(1000)
 
4870
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
4871
)
 
4872
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
4873
(PARTITION part_3 VALUES IN (-3),
 
4874
PARTITION part_2 VALUES IN (-2),
 
4875
PARTITION part_1 VALUES IN (-1),
 
4876
PARTITION part_N VALUES IN (NULL),
 
4877
PARTITION part0 VALUES IN (0),
 
4878
PARTITION part1 VALUES IN (1),
 
4879
PARTITION part2 VALUES IN (2),
 
4880
PARTITION part3 VALUES IN (3));
 
4881
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4882
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4883
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4884
ALTER TABLE t1 DROP INDEX uidx1;
 
4885
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4886
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4887
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4888
# Start usability test (inc/partition_check.inc)
 
4889
create_command
 
4890
SHOW CREATE TABLE t1;
 
4891
Table   Create Table
 
4892
t1      CREATE TABLE `t1` (
 
4893
  `f_int1` int(11) DEFAULT NULL,
 
4894
  `f_int2` int(11) DEFAULT NULL,
 
4895
  `f_char1` char(20) DEFAULT NULL,
 
4896
  `f_char2` char(20) DEFAULT NULL,
 
4897
  `f_charbig` varchar(1000) DEFAULT NULL
 
4898
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
4899
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
4900
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
4901
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
4902
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
4903
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
4904
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
4905
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
4906
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
4907
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
4908
 
 
4909
unified filelist
 
4910
t1#P#part0.MYD
 
4911
t1#P#part0.MYI
 
4912
t1#P#part1.MYD
 
4913
t1#P#part1.MYI
 
4914
t1#P#part2.MYD
 
4915
t1#P#part2.MYI
 
4916
t1#P#part3.MYD
 
4917
t1#P#part3.MYI
 
4918
t1#P#part_1.MYD
 
4919
t1#P#part_1.MYI
 
4920
t1#P#part_2.MYD
 
4921
t1#P#part_2.MYI
 
4922
t1#P#part_3.MYD
 
4923
t1#P#part_3.MYI
 
4924
t1#P#part_N.MYD
 
4925
t1#P#part_N.MYI
 
4926
t1.frm
 
4927
t1.par
 
4928
 
 
4929
# check prerequisites-1 success:    1
 
4930
# check COUNT(*) success:    1
 
4931
# check MIN/MAX(f_int1) success:    1
 
4932
# check MIN/MAX(f_int2) success:    1
 
4933
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4934
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4935
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4936
WHERE f_int1 IN (2,3);
 
4937
# check prerequisites-3 success:    1
 
4938
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4939
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4940
# check read via f_int1 success: 1
 
4941
# check read via f_int2 success: 1
 
4942
        
 
4943
# check multiple-1 success:     1
 
4944
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4945
        
 
4946
# check multiple-2 success:     1
 
4947
INSERT INTO t1 SELECT * FROM t0_template
 
4948
WHERE MOD(f_int1,3) = 0;
 
4949
        
 
4950
# check multiple-3 success:     1
 
4951
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4952
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4953
AND @max_row_div2 + @max_row_div4;
 
4954
        
 
4955
# check multiple-4 success:     1
 
4956
DELETE FROM t1
 
4957
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4958
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4959
        
 
4960
# check multiple-5 success:     1
 
4961
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4962
INSERT INTO t1
 
4963
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4964
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4965
f_charbig = '#SINGLE#';
 
4966
        
 
4967
# check single-1 success:       1
 
4968
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4969
INSERT INTO t1
 
4970
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4971
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4972
f_charbig = '#SINGLE#';
 
4973
        
 
4974
# check single-2 success:       1
 
4975
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4976
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4977
UPDATE t1 SET f_int1 = @cur_value2
 
4978
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4979
        
 
4980
# check single-3 success:       1
 
4981
SET @cur_value1= -1;
 
4982
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4983
UPDATE t1 SET f_int1 = @cur_value1
 
4984
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4985
        
 
4986
# check single-4 success:       1
 
4987
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4988
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4989
        
 
4990
# check single-5 success:       1
 
4991
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4992
        
 
4993
# check single-6 success:       1
 
4994
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4995
        
 
4996
# check single-7 success:       1
 
4997
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4998
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4999
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5000
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5001
f_charbig = '#NULL#';
 
5002
INSERT INTO t1
 
5003
SET f_int1 = NULL , f_int2 = -@max_row,
 
5004
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5005
f_charbig = '#NULL#';
 
5006
# check null success:    1
 
5007
        
 
5008
# check null-1 success:         1
 
5009
UPDATE t1 SET f_int1 = -@max_row
 
5010
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5011
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5012
        
 
5013
# check null-2 success:         1
 
5014
UPDATE t1 SET f_int1 = NULL
 
5015
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5016
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5017
        
 
5018
# check null-3 success:         1
 
5019
DELETE FROM t1
 
5020
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5021
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5022
        
 
5023
# check null-4 success:         1
 
5024
DELETE FROM t1
 
5025
WHERE f_int1 = 0 AND f_int2 = 0
 
5026
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5027
AND f_charbig = '#NULL#';
 
5028
SET AUTOCOMMIT= 0;
 
5029
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5030
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5031
FROM t0_template source_tab
 
5032
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5033
        
 
5034
# check transactions-1 success:         1
 
5035
COMMIT WORK;
 
5036
        
 
5037
# check transactions-2 success:         1
 
5038
ROLLBACK WORK;
 
5039
        
 
5040
# check transactions-3 success:         1
 
5041
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5042
COMMIT WORK;
 
5043
ROLLBACK WORK;
 
5044
        
 
5045
# check transactions-4 success:         1
 
5046
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5047
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5048
FROM t0_template source_tab
 
5049
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5050
        
 
5051
# check transactions-5 success:         1
 
5052
ROLLBACK WORK;
 
5053
Warnings:
 
5054
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5055
        
 
5056
# check transactions-6 success:         1
 
5057
# INFO: Storage engine used for t1 seems to be not transactional.
 
5058
COMMIT;
 
5059
        
 
5060
# check transactions-7 success:         1
 
5061
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5062
COMMIT WORK;
 
5063
SET @@session.sql_mode = 'traditional';
 
5064
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5065
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5066
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5067
'', '', 'was inserted' FROM t0_template
 
5068
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5069
ERROR 22012: Division by 0
 
5070
COMMIT;
 
5071
        
 
5072
# check transactions-8 success:         1
 
5073
# INFO: Storage engine used for t1 seems to be unable to revert
 
5074
#       changes made by the failing statement.
 
5075
SET @@session.sql_mode = '';
 
5076
SET AUTOCOMMIT= 1;
 
5077
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5078
COMMIT WORK;
 
5079
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5080
        
 
5081
# check special-1 success:      1
 
5082
UPDATE t1 SET f_charbig = '';
 
5083
        
 
5084
# check special-2 success:      1
 
5085
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5086
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5087
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5088
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5090
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5091
'just inserted' FROM t0_template
 
5092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5093
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5094
BEGIN
 
5095
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5096
f_charbig = 'updated by trigger'
 
5097
      WHERE f_int1 = new.f_int1;
 
5098
END|
 
5099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5100
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5102
        
 
5103
# check trigger-1 success:      1
 
5104
DROP TRIGGER trg_1;
 
5105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5107
f_charbig = 'just inserted'
 
5108
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5109
DELETE FROM t0_aux
 
5110
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5111
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5112
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5113
'just inserted' FROM t0_template
 
5114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5115
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5116
BEGIN
 
5117
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5118
f_charbig = 'updated by trigger'
 
5119
      WHERE f_int1 = new.f_int1;
 
5120
END|
 
5121
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5122
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5124
        
 
5125
# check trigger-2 success:      1
 
5126
DROP TRIGGER trg_1;
 
5127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5129
f_charbig = 'just inserted'
 
5130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5131
DELETE FROM t0_aux
 
5132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5135
'just inserted' FROM t0_template
 
5136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5137
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5138
BEGIN
 
5139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5140
f_charbig = 'updated by trigger'
 
5141
      WHERE f_int1 = new.f_int1;
 
5142
END|
 
5143
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5144
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5145
        
 
5146
# check trigger-3 success:      1
 
5147
DROP TRIGGER trg_1;
 
5148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5150
f_charbig = 'just inserted'
 
5151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5152
DELETE FROM t0_aux
 
5153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5156
'just inserted' FROM t0_template
 
5157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5158
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5159
BEGIN
 
5160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5161
f_charbig = 'updated by trigger'
 
5162
      WHERE f_int1 = - old.f_int1;
 
5163
END|
 
5164
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5166
        
 
5167
# check trigger-4 success:      1
 
5168
DROP TRIGGER trg_1;
 
5169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5171
f_charbig = 'just inserted'
 
5172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5173
DELETE FROM t0_aux
 
5174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5177
'just inserted' FROM t0_template
 
5178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5179
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5180
BEGIN
 
5181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5182
f_charbig = 'updated by trigger'
 
5183
      WHERE f_int1 = new.f_int1;
 
5184
END|
 
5185
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5187
        
 
5188
# check trigger-5 success:      1
 
5189
DROP TRIGGER trg_1;
 
5190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5192
f_charbig = 'just inserted'
 
5193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5194
DELETE FROM t0_aux
 
5195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5198
'just inserted' FROM t0_template
 
5199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5200
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5201
BEGIN
 
5202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5203
f_charbig = 'updated by trigger'
 
5204
      WHERE f_int1 = - old.f_int1;
 
5205
END|
 
5206
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5208
        
 
5209
# check trigger-6 success:      1
 
5210
DROP TRIGGER trg_1;
 
5211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5213
f_charbig = 'just inserted'
 
5214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5215
DELETE FROM t0_aux
 
5216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5218
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5219
'just inserted' FROM t0_template
 
5220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5221
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5222
BEGIN
 
5223
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5224
f_charbig = 'updated by trigger'
 
5225
      WHERE f_int1 = - old.f_int1;
 
5226
END|
 
5227
DELETE FROM t0_aux
 
5228
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5229
        
 
5230
# check trigger-7 success:      1
 
5231
DROP TRIGGER trg_1;
 
5232
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5233
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5234
f_charbig = 'just inserted'
 
5235
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5236
DELETE FROM t0_aux
 
5237
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5238
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5239
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5240
'just inserted' FROM t0_template
 
5241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5242
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5243
BEGIN
 
5244
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5245
f_charbig = 'updated by trigger'
 
5246
      WHERE f_int1 = - old.f_int1;
 
5247
END|
 
5248
DELETE FROM t0_aux
 
5249
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5250
        
 
5251
# check trigger-8 success:      1
 
5252
DROP TRIGGER trg_1;
 
5253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5255
f_charbig = 'just inserted'
 
5256
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5257
DELETE FROM t0_aux
 
5258
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5259
DELETE FROM t1
 
5260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5261
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5262
BEGIN
 
5263
SET new.f_int1 = old.f_int1 + @max_row,
 
5264
new.f_int2 = old.f_int2 - @max_row,
 
5265
new.f_charbig = '####updated per update trigger####';
 
5266
END|
 
5267
UPDATE t1
 
5268
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5269
f_charbig = '####updated per update statement itself####';
 
5270
        
 
5271
# check trigger-9 success:      1
 
5272
DROP TRIGGER trg_2;
 
5273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5275
f_charbig = CONCAT('===',f_char1,'===');
 
5276
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5277
BEGIN
 
5278
SET new.f_int1 = new.f_int1 + @max_row,
 
5279
new.f_int2 = new.f_int2 - @max_row,
 
5280
new.f_charbig = '####updated per update trigger####';
 
5281
END|
 
5282
UPDATE t1
 
5283
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5284
f_charbig = '####updated per update statement itself####';
 
5285
        
 
5286
# check trigger-10 success:     1
 
5287
DROP TRIGGER trg_2;
 
5288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5290
f_charbig = CONCAT('===',f_char1,'===');
 
5291
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5292
BEGIN
 
5293
SET new.f_int1 = @my_max1 + @counter,
 
5294
new.f_int2 = @my_min2 - @counter,
 
5295
new.f_charbig = '####updated per insert trigger####';
 
5296
SET @counter = @counter + 1;
 
5297
END|
 
5298
SET @counter = 1;
 
5299
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5300
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5301
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5302
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5303
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5304
ORDER BY f_int1;
 
5305
DROP TRIGGER trg_3;
 
5306
        
 
5307
# check trigger-11 success:     1
 
5308
DELETE FROM t1
 
5309
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5310
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5311
AND f_charbig = '####updated per insert trigger####';
 
5312
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5313
BEGIN
 
5314
SET new.f_int1 = @my_max1 + @counter,
 
5315
new.f_int2 = @my_min2 - @counter,
 
5316
new.f_charbig = '####updated per insert trigger####';
 
5317
SET @counter = @counter + 1;
 
5318
END|
 
5319
SET @counter = 1;
 
5320
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5321
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5322
SELECT CAST(f_int1 AS CHAR),
 
5323
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5325
ORDER BY f_int1;
 
5326
DROP TRIGGER trg_3;
 
5327
        
 
5328
# check trigger-12 success:     1
 
5329
DELETE FROM t1
 
5330
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5331
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5332
AND f_charbig = '####updated per insert trigger####';
 
5333
ANALYZE  TABLE t1;
 
5334
Table   Op      Msg_type        Msg_text
 
5335
test.t1 analyze status  OK
 
5336
CHECK    TABLE t1 EXTENDED;
 
5337
Table   Op      Msg_type        Msg_text
 
5338
test.t1 check   status  OK
 
5339
CHECKSUM TABLE t1 EXTENDED;
 
5340
Table   Checksum
 
5341
test.t1 <some_value>
 
5342
OPTIMIZE TABLE t1;
 
5343
Table   Op      Msg_type        Msg_text
 
5344
test.t1 optimize        status  OK
 
5345
# check layout success:    1
 
5346
REPAIR   TABLE t1 EXTENDED;
 
5347
Table   Op      Msg_type        Msg_text
 
5348
test.t1 repair  status  OK
 
5349
# check layout success:    1
 
5350
TRUNCATE t1;
 
5351
        
 
5352
# check TRUNCATE success:       1
 
5353
# check layout success:    1
 
5354
# End usability test (inc/partition_check.inc)
 
5355
DROP TABLE t1;
 
5356
CREATE TABLE t1 (
 
5357
f_int1 INTEGER,
 
5358
f_int2 INTEGER,
 
5359
f_char1 CHAR(20),
 
5360
f_char2 CHAR(20),
 
5361
f_charbig VARCHAR(1000)
 
5362
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
5363
)
 
5364
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
5365
(PARTITION parta VALUES LESS THAN (0),
 
5366
PARTITION partb VALUES LESS THAN (5),
 
5367
PARTITION partc VALUES LESS THAN (10),
 
5368
PARTITION partd VALUES LESS THAN (10 + 5),
 
5369
PARTITION parte VALUES LESS THAN (20),
 
5370
PARTITION partf VALUES LESS THAN (2147483646));
 
5371
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5372
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5373
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5374
ALTER TABLE t1 DROP INDEX uidx1;
 
5375
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5376
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5377
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5378
# Start usability test (inc/partition_check.inc)
 
5379
create_command
 
5380
SHOW CREATE TABLE t1;
 
5381
Table   Create Table
 
5382
t1      CREATE TABLE `t1` (
 
5383
  `f_int1` int(11) DEFAULT NULL,
 
5384
  `f_int2` int(11) DEFAULT NULL,
 
5385
  `f_char1` char(20) DEFAULT NULL,
 
5386
  `f_char2` char(20) DEFAULT NULL,
 
5387
  `f_charbig` varchar(1000) DEFAULT NULL
 
5388
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
5389
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
5390
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
5391
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
5392
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
5393
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
5394
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
5395
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
5396
 
 
5397
unified filelist
 
5398
t1#P#parta.MYD
 
5399
t1#P#parta.MYI
 
5400
t1#P#partb.MYD
 
5401
t1#P#partb.MYI
 
5402
t1#P#partc.MYD
 
5403
t1#P#partc.MYI
 
5404
t1#P#partd.MYD
 
5405
t1#P#partd.MYI
 
5406
t1#P#parte.MYD
 
5407
t1#P#parte.MYI
 
5408
t1#P#partf.MYD
 
5409
t1#P#partf.MYI
 
5410
t1.frm
 
5411
t1.par
 
5412
 
 
5413
# check prerequisites-1 success:    1
 
5414
# check COUNT(*) success:    1
 
5415
# check MIN/MAX(f_int1) success:    1
 
5416
# check MIN/MAX(f_int2) success:    1
 
5417
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5418
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5419
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5420
WHERE f_int1 IN (2,3);
 
5421
# check prerequisites-3 success:    1
 
5422
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5423
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5424
# check read via f_int1 success: 1
 
5425
# check read via f_int2 success: 1
 
5426
        
 
5427
# check multiple-1 success:     1
 
5428
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5429
        
 
5430
# check multiple-2 success:     1
 
5431
INSERT INTO t1 SELECT * FROM t0_template
 
5432
WHERE MOD(f_int1,3) = 0;
 
5433
        
 
5434
# check multiple-3 success:     1
 
5435
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5436
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5437
AND @max_row_div2 + @max_row_div4;
 
5438
        
 
5439
# check multiple-4 success:     1
 
5440
DELETE FROM t1
 
5441
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5442
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5443
        
 
5444
# check multiple-5 success:     1
 
5445
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5446
INSERT INTO t1
 
5447
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5448
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5449
f_charbig = '#SINGLE#';
 
5450
        
 
5451
# check single-1 success:       1
 
5452
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5453
INSERT INTO t1
 
5454
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5455
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5456
f_charbig = '#SINGLE#';
 
5457
        
 
5458
# check single-2 success:       1
 
5459
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5460
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5461
UPDATE t1 SET f_int1 = @cur_value2
 
5462
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5463
        
 
5464
# check single-3 success:       1
 
5465
SET @cur_value1= -1;
 
5466
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5467
UPDATE t1 SET f_int1 = @cur_value1
 
5468
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5469
        
 
5470
# check single-4 success:       1
 
5471
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5472
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5473
        
 
5474
# check single-5 success:       1
 
5475
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5476
        
 
5477
# check single-6 success:       1
 
5478
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5479
ERROR HY000: Table has no partition for value 2147483647
 
5480
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5481
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5482
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5483
f_charbig = '#NULL#';
 
5484
INSERT INTO t1
 
5485
SET f_int1 = NULL , f_int2 = -@max_row,
 
5486
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5487
f_charbig = '#NULL#';
 
5488
# check null success:    1
 
5489
        
 
5490
# check null-1 success:         1
 
5491
UPDATE t1 SET f_int1 = -@max_row
 
5492
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5493
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5494
        
 
5495
# check null-2 success:         1
 
5496
UPDATE t1 SET f_int1 = NULL
 
5497
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5498
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5499
        
 
5500
# check null-3 success:         1
 
5501
DELETE FROM t1
 
5502
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5503
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5504
        
 
5505
# check null-4 success:         1
 
5506
DELETE FROM t1
 
5507
WHERE f_int1 = 0 AND f_int2 = 0
 
5508
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5509
AND f_charbig = '#NULL#';
 
5510
SET AUTOCOMMIT= 0;
 
5511
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5512
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5513
FROM t0_template source_tab
 
5514
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5515
        
 
5516
# check transactions-1 success:         1
 
5517
COMMIT WORK;
 
5518
        
 
5519
# check transactions-2 success:         1
 
5520
ROLLBACK WORK;
 
5521
        
 
5522
# check transactions-3 success:         1
 
5523
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5524
COMMIT WORK;
 
5525
ROLLBACK WORK;
 
5526
        
 
5527
# check transactions-4 success:         1
 
5528
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5529
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5530
FROM t0_template source_tab
 
5531
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5532
        
 
5533
# check transactions-5 success:         1
 
5534
ROLLBACK WORK;
 
5535
Warnings:
 
5536
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5537
        
 
5538
# check transactions-6 success:         1
 
5539
# INFO: Storage engine used for t1 seems to be not transactional.
 
5540
COMMIT;
 
5541
        
 
5542
# check transactions-7 success:         1
 
5543
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5544
COMMIT WORK;
 
5545
SET @@session.sql_mode = 'traditional';
 
5546
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5547
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5548
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5549
'', '', 'was inserted' FROM t0_template
 
5550
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5551
ERROR 22012: Division by 0
 
5552
COMMIT;
 
5553
        
 
5554
# check transactions-8 success:         1
 
5555
# INFO: Storage engine used for t1 seems to be unable to revert
 
5556
#       changes made by the failing statement.
 
5557
SET @@session.sql_mode = '';
 
5558
SET AUTOCOMMIT= 1;
 
5559
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5560
COMMIT WORK;
 
5561
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5562
        
 
5563
# check special-1 success:      1
 
5564
UPDATE t1 SET f_charbig = '';
 
5565
        
 
5566
# check special-2 success:      1
 
5567
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5568
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5569
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5573
'just inserted' FROM t0_template
 
5574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5575
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5576
BEGIN
 
5577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5578
f_charbig = 'updated by trigger'
 
5579
      WHERE f_int1 = new.f_int1;
 
5580
END|
 
5581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5582
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5584
        
 
5585
# check trigger-1 success:      1
 
5586
DROP TRIGGER trg_1;
 
5587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5589
f_charbig = 'just inserted'
 
5590
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5591
DELETE FROM t0_aux
 
5592
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5595
'just inserted' FROM t0_template
 
5596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5597
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5598
BEGIN
 
5599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5600
f_charbig = 'updated by trigger'
 
5601
      WHERE f_int1 = new.f_int1;
 
5602
END|
 
5603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5604
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5606
        
 
5607
# check trigger-2 success:      1
 
5608
DROP TRIGGER trg_1;
 
5609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5611
f_charbig = 'just inserted'
 
5612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5613
DELETE FROM t0_aux
 
5614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5616
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5617
'just inserted' FROM t0_template
 
5618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5619
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5620
BEGIN
 
5621
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5622
f_charbig = 'updated by trigger'
 
5623
      WHERE f_int1 = new.f_int1;
 
5624
END|
 
5625
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5626
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5627
        
 
5628
# check trigger-3 success:      1
 
5629
DROP TRIGGER trg_1;
 
5630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5632
f_charbig = 'just inserted'
 
5633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5634
DELETE FROM t0_aux
 
5635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5638
'just inserted' FROM t0_template
 
5639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5640
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5641
BEGIN
 
5642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5643
f_charbig = 'updated by trigger'
 
5644
      WHERE f_int1 = - old.f_int1;
 
5645
END|
 
5646
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5648
        
 
5649
# check trigger-4 success:      1
 
5650
DROP TRIGGER trg_1;
 
5651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5653
f_charbig = 'just inserted'
 
5654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5655
DELETE FROM t0_aux
 
5656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5659
'just inserted' FROM t0_template
 
5660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5661
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5662
BEGIN
 
5663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5664
f_charbig = 'updated by trigger'
 
5665
      WHERE f_int1 = new.f_int1;
 
5666
END|
 
5667
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5668
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5669
        
 
5670
# check trigger-5 success:      1
 
5671
DROP TRIGGER trg_1;
 
5672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5674
f_charbig = 'just inserted'
 
5675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5676
DELETE FROM t0_aux
 
5677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5680
'just inserted' FROM t0_template
 
5681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5682
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5683
BEGIN
 
5684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5685
f_charbig = 'updated by trigger'
 
5686
      WHERE f_int1 = - old.f_int1;
 
5687
END|
 
5688
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5689
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5690
        
 
5691
# check trigger-6 success:      1
 
5692
DROP TRIGGER trg_1;
 
5693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5695
f_charbig = 'just inserted'
 
5696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5697
DELETE FROM t0_aux
 
5698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5701
'just inserted' FROM t0_template
 
5702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5703
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5704
BEGIN
 
5705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5706
f_charbig = 'updated by trigger'
 
5707
      WHERE f_int1 = - old.f_int1;
 
5708
END|
 
5709
DELETE FROM t0_aux
 
5710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5711
        
 
5712
# check trigger-7 success:      1
 
5713
DROP TRIGGER trg_1;
 
5714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5716
f_charbig = 'just inserted'
 
5717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5718
DELETE FROM t0_aux
 
5719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5722
'just inserted' FROM t0_template
 
5723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5724
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5725
BEGIN
 
5726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5727
f_charbig = 'updated by trigger'
 
5728
      WHERE f_int1 = - old.f_int1;
 
5729
END|
 
5730
DELETE FROM t0_aux
 
5731
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5732
        
 
5733
# check trigger-8 success:      1
 
5734
DROP TRIGGER trg_1;
 
5735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5737
f_charbig = 'just inserted'
 
5738
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5739
DELETE FROM t0_aux
 
5740
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5741
DELETE FROM t1
 
5742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5743
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5744
BEGIN
 
5745
SET new.f_int1 = old.f_int1 + @max_row,
 
5746
new.f_int2 = old.f_int2 - @max_row,
 
5747
new.f_charbig = '####updated per update trigger####';
 
5748
END|
 
5749
UPDATE t1
 
5750
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5751
f_charbig = '####updated per update statement itself####';
 
5752
        
 
5753
# check trigger-9 success:      1
 
5754
DROP TRIGGER trg_2;
 
5755
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5756
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5757
f_charbig = CONCAT('===',f_char1,'===');
 
5758
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5759
BEGIN
 
5760
SET new.f_int1 = new.f_int1 + @max_row,
 
5761
new.f_int2 = new.f_int2 - @max_row,
 
5762
new.f_charbig = '####updated per update trigger####';
 
5763
END|
 
5764
UPDATE t1
 
5765
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5766
f_charbig = '####updated per update statement itself####';
 
5767
        
 
5768
# check trigger-10 success:     1
 
5769
DROP TRIGGER trg_2;
 
5770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5772
f_charbig = CONCAT('===',f_char1,'===');
 
5773
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5774
BEGIN
 
5775
SET new.f_int1 = @my_max1 + @counter,
 
5776
new.f_int2 = @my_min2 - @counter,
 
5777
new.f_charbig = '####updated per insert trigger####';
 
5778
SET @counter = @counter + 1;
 
5779
END|
 
5780
SET @counter = 1;
 
5781
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5782
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5783
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5784
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5786
ORDER BY f_int1;
 
5787
DROP TRIGGER trg_3;
 
5788
        
 
5789
# check trigger-11 success:     1
 
5790
DELETE FROM t1
 
5791
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5792
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5793
AND f_charbig = '####updated per insert trigger####';
 
5794
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5795
BEGIN
 
5796
SET new.f_int1 = @my_max1 + @counter,
 
5797
new.f_int2 = @my_min2 - @counter,
 
5798
new.f_charbig = '####updated per insert trigger####';
 
5799
SET @counter = @counter + 1;
 
5800
END|
 
5801
SET @counter = 1;
 
5802
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5803
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5804
SELECT CAST(f_int1 AS CHAR),
 
5805
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5807
ORDER BY f_int1;
 
5808
DROP TRIGGER trg_3;
 
5809
        
 
5810
# check trigger-12 success:     1
 
5811
DELETE FROM t1
 
5812
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5813
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5814
AND f_charbig = '####updated per insert trigger####';
 
5815
ANALYZE  TABLE t1;
 
5816
Table   Op      Msg_type        Msg_text
 
5817
test.t1 analyze status  OK
 
5818
CHECK    TABLE t1 EXTENDED;
 
5819
Table   Op      Msg_type        Msg_text
 
5820
test.t1 check   status  OK
 
5821
CHECKSUM TABLE t1 EXTENDED;
 
5822
Table   Checksum
 
5823
test.t1 <some_value>
 
5824
OPTIMIZE TABLE t1;
 
5825
Table   Op      Msg_type        Msg_text
 
5826
test.t1 optimize        status  OK
 
5827
# check layout success:    1
 
5828
REPAIR   TABLE t1 EXTENDED;
 
5829
Table   Op      Msg_type        Msg_text
 
5830
test.t1 repair  status  OK
 
5831
# check layout success:    1
 
5832
TRUNCATE t1;
 
5833
        
 
5834
# check TRUNCATE success:       1
 
5835
# check layout success:    1
 
5836
# End usability test (inc/partition_check.inc)
 
5837
DROP TABLE t1;
 
5838
CREATE TABLE t1 (
 
5839
f_int1 INTEGER,
 
5840
f_int2 INTEGER,
 
5841
f_char1 CHAR(20),
 
5842
f_char2 CHAR(20),
 
5843
f_charbig VARCHAR(1000)
 
5844
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
5845
)
 
5846
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
5847
(PARTITION parta VALUES LESS THAN (0),
 
5848
PARTITION partb VALUES LESS THAN (5),
 
5849
PARTITION partc VALUES LESS THAN (10),
 
5850
PARTITION partd VALUES LESS THAN (2147483646));
 
5851
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5852
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5853
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5854
ALTER TABLE t1 DROP INDEX uidx1;
 
5855
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5856
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5857
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5858
# Start usability test (inc/partition_check.inc)
 
5859
create_command
 
5860
SHOW CREATE TABLE t1;
 
5861
Table   Create Table
 
5862
t1      CREATE TABLE `t1` (
 
5863
  `f_int1` int(11) DEFAULT NULL,
 
5864
  `f_int2` int(11) DEFAULT NULL,
 
5865
  `f_char1` char(20) DEFAULT NULL,
 
5866
  `f_char2` char(20) DEFAULT NULL,
 
5867
  `f_charbig` varchar(1000) DEFAULT NULL
 
5868
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
5869
/*!50100 PARTITION BY RANGE (f_int1)
 
5870
SUBPARTITION BY HASH (f_int2)
 
5871
SUBPARTITIONS 2
 
5872
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
5873
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
5874
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
5875
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
5876
 
 
5877
unified filelist
 
5878
t1#P#parta#SP#partasp0.MYD
 
5879
t1#P#parta#SP#partasp0.MYI
 
5880
t1#P#parta#SP#partasp1.MYD
 
5881
t1#P#parta#SP#partasp1.MYI
 
5882
t1#P#partb#SP#partbsp0.MYD
 
5883
t1#P#partb#SP#partbsp0.MYI
 
5884
t1#P#partb#SP#partbsp1.MYD
 
5885
t1#P#partb#SP#partbsp1.MYI
 
5886
t1#P#partc#SP#partcsp0.MYD
 
5887
t1#P#partc#SP#partcsp0.MYI
 
5888
t1#P#partc#SP#partcsp1.MYD
 
5889
t1#P#partc#SP#partcsp1.MYI
 
5890
t1#P#partd#SP#partdsp0.MYD
 
5891
t1#P#partd#SP#partdsp0.MYI
 
5892
t1#P#partd#SP#partdsp1.MYD
 
5893
t1#P#partd#SP#partdsp1.MYI
 
5894
t1.frm
 
5895
t1.par
 
5896
 
 
5897
# check prerequisites-1 success:    1
 
5898
# check COUNT(*) success:    1
 
5899
# check MIN/MAX(f_int1) success:    1
 
5900
# check MIN/MAX(f_int2) success:    1
 
5901
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5902
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5903
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5904
WHERE f_int1 IN (2,3);
 
5905
# check prerequisites-3 success:    1
 
5906
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5907
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5908
# check read via f_int1 success: 1
 
5909
# check read via f_int2 success: 1
 
5910
        
 
5911
# check multiple-1 success:     1
 
5912
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5913
        
 
5914
# check multiple-2 success:     1
 
5915
INSERT INTO t1 SELECT * FROM t0_template
 
5916
WHERE MOD(f_int1,3) = 0;
 
5917
        
 
5918
# check multiple-3 success:     1
 
5919
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5920
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5921
AND @max_row_div2 + @max_row_div4;
 
5922
        
 
5923
# check multiple-4 success:     1
 
5924
DELETE FROM t1
 
5925
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5926
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5927
        
 
5928
# check multiple-5 success:     1
 
5929
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5930
INSERT INTO t1
 
5931
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5932
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5933
f_charbig = '#SINGLE#';
 
5934
        
 
5935
# check single-1 success:       1
 
5936
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5937
INSERT INTO t1
 
5938
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5939
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5940
f_charbig = '#SINGLE#';
 
5941
        
 
5942
# check single-2 success:       1
 
5943
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5944
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5945
UPDATE t1 SET f_int1 = @cur_value2
 
5946
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5947
        
 
5948
# check single-3 success:       1
 
5949
SET @cur_value1= -1;
 
5950
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5951
UPDATE t1 SET f_int1 = @cur_value1
 
5952
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5953
        
 
5954
# check single-4 success:       1
 
5955
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5956
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5957
        
 
5958
# check single-5 success:       1
 
5959
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5960
        
 
5961
# check single-6 success:       1
 
5962
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5963
ERROR HY000: Table has no partition for value 2147483647
 
5964
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5965
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5966
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5967
f_charbig = '#NULL#';
 
5968
INSERT INTO t1
 
5969
SET f_int1 = NULL , f_int2 = -@max_row,
 
5970
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5971
f_charbig = '#NULL#';
 
5972
# check null success:    1
 
5973
        
 
5974
# check null-1 success:         1
 
5975
UPDATE t1 SET f_int1 = -@max_row
 
5976
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5977
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5978
        
 
5979
# check null-2 success:         1
 
5980
UPDATE t1 SET f_int1 = NULL
 
5981
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5982
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5983
        
 
5984
# check null-3 success:         1
 
5985
DELETE FROM t1
 
5986
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5987
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5988
        
 
5989
# check null-4 success:         1
 
5990
DELETE FROM t1
 
5991
WHERE f_int1 = 0 AND f_int2 = 0
 
5992
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5993
AND f_charbig = '#NULL#';
 
5994
SET AUTOCOMMIT= 0;
 
5995
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5996
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5997
FROM t0_template source_tab
 
5998
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5999
        
 
6000
# check transactions-1 success:         1
 
6001
COMMIT WORK;
 
6002
        
 
6003
# check transactions-2 success:         1
 
6004
ROLLBACK WORK;
 
6005
        
 
6006
# check transactions-3 success:         1
 
6007
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6008
COMMIT WORK;
 
6009
ROLLBACK WORK;
 
6010
        
 
6011
# check transactions-4 success:         1
 
6012
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6013
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6014
FROM t0_template source_tab
 
6015
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6016
        
 
6017
# check transactions-5 success:         1
 
6018
ROLLBACK WORK;
 
6019
Warnings:
 
6020
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6021
        
 
6022
# check transactions-6 success:         1
 
6023
# INFO: Storage engine used for t1 seems to be not transactional.
 
6024
COMMIT;
 
6025
        
 
6026
# check transactions-7 success:         1
 
6027
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6028
COMMIT WORK;
 
6029
SET @@session.sql_mode = 'traditional';
 
6030
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6031
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6032
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6033
'', '', 'was inserted' FROM t0_template
 
6034
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6035
ERROR 22012: Division by 0
 
6036
COMMIT;
 
6037
        
 
6038
# check transactions-8 success:         1
 
6039
# INFO: Storage engine used for t1 seems to be unable to revert
 
6040
#       changes made by the failing statement.
 
6041
SET @@session.sql_mode = '';
 
6042
SET AUTOCOMMIT= 1;
 
6043
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6044
COMMIT WORK;
 
6045
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6046
        
 
6047
# check special-1 success:      1
 
6048
UPDATE t1 SET f_charbig = '';
 
6049
        
 
6050
# check special-2 success:      1
 
6051
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6052
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6053
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6054
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6055
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6056
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6057
'just inserted' FROM t0_template
 
6058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6059
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6060
BEGIN
 
6061
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6062
f_charbig = 'updated by trigger'
 
6063
      WHERE f_int1 = new.f_int1;
 
6064
END|
 
6065
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6066
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6067
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6068
        
 
6069
# check trigger-1 success:      1
 
6070
DROP TRIGGER trg_1;
 
6071
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6072
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6073
f_charbig = 'just inserted'
 
6074
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6075
DELETE FROM t0_aux
 
6076
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6077
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6078
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6079
'just inserted' FROM t0_template
 
6080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6081
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6082
BEGIN
 
6083
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6084
f_charbig = 'updated by trigger'
 
6085
      WHERE f_int1 = new.f_int1;
 
6086
END|
 
6087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6088
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6090
        
 
6091
# check trigger-2 success:      1
 
6092
DROP TRIGGER trg_1;
 
6093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6095
f_charbig = 'just inserted'
 
6096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6097
DELETE FROM t0_aux
 
6098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6100
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6101
'just inserted' FROM t0_template
 
6102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6103
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6104
BEGIN
 
6105
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6106
f_charbig = 'updated by trigger'
 
6107
      WHERE f_int1 = new.f_int1;
 
6108
END|
 
6109
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6110
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6111
        
 
6112
# check trigger-3 success:      1
 
6113
DROP TRIGGER trg_1;
 
6114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6116
f_charbig = 'just inserted'
 
6117
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6118
DELETE FROM t0_aux
 
6119
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6121
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6122
'just inserted' FROM t0_template
 
6123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6124
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6125
BEGIN
 
6126
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6127
f_charbig = 'updated by trigger'
 
6128
      WHERE f_int1 = - old.f_int1;
 
6129
END|
 
6130
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6131
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6132
        
 
6133
# check trigger-4 success:      1
 
6134
DROP TRIGGER trg_1;
 
6135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6137
f_charbig = 'just inserted'
 
6138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6139
DELETE FROM t0_aux
 
6140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6143
'just inserted' FROM t0_template
 
6144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6145
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6146
BEGIN
 
6147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6148
f_charbig = 'updated by trigger'
 
6149
      WHERE f_int1 = new.f_int1;
 
6150
END|
 
6151
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6152
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6153
        
 
6154
# check trigger-5 success:      1
 
6155
DROP TRIGGER trg_1;
 
6156
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6157
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6158
f_charbig = 'just inserted'
 
6159
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6160
DELETE FROM t0_aux
 
6161
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6162
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6163
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6164
'just inserted' FROM t0_template
 
6165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6166
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6167
BEGIN
 
6168
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6169
f_charbig = 'updated by trigger'
 
6170
      WHERE f_int1 = - old.f_int1;
 
6171
END|
 
6172
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6173
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6174
        
 
6175
# check trigger-6 success:      1
 
6176
DROP TRIGGER trg_1;
 
6177
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6178
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6179
f_charbig = 'just inserted'
 
6180
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6181
DELETE FROM t0_aux
 
6182
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6183
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6184
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6185
'just inserted' FROM t0_template
 
6186
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6187
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6188
BEGIN
 
6189
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6190
f_charbig = 'updated by trigger'
 
6191
      WHERE f_int1 = - old.f_int1;
 
6192
END|
 
6193
DELETE FROM t0_aux
 
6194
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6195
        
 
6196
# check trigger-7 success:      1
 
6197
DROP TRIGGER trg_1;
 
6198
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6199
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6200
f_charbig = 'just inserted'
 
6201
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6202
DELETE FROM t0_aux
 
6203
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6204
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6205
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6206
'just inserted' FROM t0_template
 
6207
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6208
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6209
BEGIN
 
6210
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6211
f_charbig = 'updated by trigger'
 
6212
      WHERE f_int1 = - old.f_int1;
 
6213
END|
 
6214
DELETE FROM t0_aux
 
6215
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6216
        
 
6217
# check trigger-8 success:      1
 
6218
DROP TRIGGER trg_1;
 
6219
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6220
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6221
f_charbig = 'just inserted'
 
6222
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6223
DELETE FROM t0_aux
 
6224
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6225
DELETE FROM t1
 
6226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6227
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6228
BEGIN
 
6229
SET new.f_int1 = old.f_int1 + @max_row,
 
6230
new.f_int2 = old.f_int2 - @max_row,
 
6231
new.f_charbig = '####updated per update trigger####';
 
6232
END|
 
6233
UPDATE t1
 
6234
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6235
f_charbig = '####updated per update statement itself####';
 
6236
        
 
6237
# check trigger-9 success:      1
 
6238
DROP TRIGGER trg_2;
 
6239
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6240
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6241
f_charbig = CONCAT('===',f_char1,'===');
 
6242
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6243
BEGIN
 
6244
SET new.f_int1 = new.f_int1 + @max_row,
 
6245
new.f_int2 = new.f_int2 - @max_row,
 
6246
new.f_charbig = '####updated per update trigger####';
 
6247
END|
 
6248
UPDATE t1
 
6249
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6250
f_charbig = '####updated per update statement itself####';
 
6251
        
 
6252
# check trigger-10 success:     1
 
6253
DROP TRIGGER trg_2;
 
6254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6256
f_charbig = CONCAT('===',f_char1,'===');
 
6257
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6258
BEGIN
 
6259
SET new.f_int1 = @my_max1 + @counter,
 
6260
new.f_int2 = @my_min2 - @counter,
 
6261
new.f_charbig = '####updated per insert trigger####';
 
6262
SET @counter = @counter + 1;
 
6263
END|
 
6264
SET @counter = 1;
 
6265
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6266
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6267
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6268
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6270
ORDER BY f_int1;
 
6271
DROP TRIGGER trg_3;
 
6272
        
 
6273
# check trigger-11 success:     1
 
6274
DELETE FROM t1
 
6275
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6276
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6277
AND f_charbig = '####updated per insert trigger####';
 
6278
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6279
BEGIN
 
6280
SET new.f_int1 = @my_max1 + @counter,
 
6281
new.f_int2 = @my_min2 - @counter,
 
6282
new.f_charbig = '####updated per insert trigger####';
 
6283
SET @counter = @counter + 1;
 
6284
END|
 
6285
SET @counter = 1;
 
6286
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6287
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6288
SELECT CAST(f_int1 AS CHAR),
 
6289
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6291
ORDER BY f_int1;
 
6292
DROP TRIGGER trg_3;
 
6293
        
 
6294
# check trigger-12 success:     1
 
6295
DELETE FROM t1
 
6296
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6297
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6298
AND f_charbig = '####updated per insert trigger####';
 
6299
ANALYZE  TABLE t1;
 
6300
Table   Op      Msg_type        Msg_text
 
6301
test.t1 analyze status  OK
 
6302
CHECK    TABLE t1 EXTENDED;
 
6303
Table   Op      Msg_type        Msg_text
 
6304
test.t1 check   status  OK
 
6305
CHECKSUM TABLE t1 EXTENDED;
 
6306
Table   Checksum
 
6307
test.t1 <some_value>
 
6308
OPTIMIZE TABLE t1;
 
6309
Table   Op      Msg_type        Msg_text
 
6310
test.t1 optimize        status  OK
 
6311
# check layout success:    1
 
6312
REPAIR   TABLE t1 EXTENDED;
 
6313
Table   Op      Msg_type        Msg_text
 
6314
test.t1 repair  status  OK
 
6315
# check layout success:    1
 
6316
TRUNCATE t1;
 
6317
        
 
6318
# check TRUNCATE success:       1
 
6319
# check layout success:    1
 
6320
# End usability test (inc/partition_check.inc)
 
6321
DROP TABLE t1;
 
6322
CREATE TABLE t1 (
 
6323
f_int1 INTEGER,
 
6324
f_int2 INTEGER,
 
6325
f_char1 CHAR(20),
 
6326
f_char2 CHAR(20),
 
6327
f_charbig VARCHAR(1000)
 
6328
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
6329
)
 
6330
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
6331
(PARTITION part1 VALUES LESS THAN (0)
 
6332
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
6333
PARTITION part2 VALUES LESS THAN (5)
 
6334
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
6335
PARTITION part3 VALUES LESS THAN (10)
 
6336
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
6337
PARTITION part4 VALUES LESS THAN (2147483646)
 
6338
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
6339
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6340
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6341
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6342
ALTER TABLE t1 DROP INDEX uidx1;
 
6343
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6344
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6345
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6346
# Start usability test (inc/partition_check.inc)
 
6347
create_command
 
6348
SHOW CREATE TABLE t1;
 
6349
Table   Create Table
 
6350
t1      CREATE TABLE `t1` (
 
6351
  `f_int1` int(11) DEFAULT NULL,
 
6352
  `f_int2` int(11) DEFAULT NULL,
 
6353
  `f_char1` char(20) DEFAULT NULL,
 
6354
  `f_char2` char(20) DEFAULT NULL,
 
6355
  `f_charbig` varchar(1000) DEFAULT NULL
 
6356
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
6357
/*!50100 PARTITION BY RANGE (f_int1)
 
6358
SUBPARTITION BY KEY (f_int2)
 
6359
(PARTITION part1 VALUES LESS THAN (0)
 
6360
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
6361
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
6362
 PARTITION part2 VALUES LESS THAN (5)
 
6363
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
6364
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
6365
 PARTITION part3 VALUES LESS THAN (10)
 
6366
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
6367
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
6368
 PARTITION part4 VALUES LESS THAN (2147483646)
 
6369
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
6370
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
6371
 
 
6372
unified filelist
 
6373
t1#P#part1#SP#subpart11.MYD
 
6374
t1#P#part1#SP#subpart11.MYI
 
6375
t1#P#part1#SP#subpart12.MYD
 
6376
t1#P#part1#SP#subpart12.MYI
 
6377
t1#P#part2#SP#subpart21.MYD
 
6378
t1#P#part2#SP#subpart21.MYI
 
6379
t1#P#part2#SP#subpart22.MYD
 
6380
t1#P#part2#SP#subpart22.MYI
 
6381
t1#P#part3#SP#subpart31.MYD
 
6382
t1#P#part3#SP#subpart31.MYI
 
6383
t1#P#part3#SP#subpart32.MYD
 
6384
t1#P#part3#SP#subpart32.MYI
 
6385
t1#P#part4#SP#subpart41.MYD
 
6386
t1#P#part4#SP#subpart41.MYI
 
6387
t1#P#part4#SP#subpart42.MYD
 
6388
t1#P#part4#SP#subpart42.MYI
 
6389
t1.frm
 
6390
t1.par
 
6391
 
 
6392
# check prerequisites-1 success:    1
 
6393
# check COUNT(*) success:    1
 
6394
# check MIN/MAX(f_int1) success:    1
 
6395
# check MIN/MAX(f_int2) success:    1
 
6396
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6397
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6398
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6399
WHERE f_int1 IN (2,3);
 
6400
# check prerequisites-3 success:    1
 
6401
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6402
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6403
# check read via f_int1 success: 1
 
6404
# check read via f_int2 success: 1
 
6405
        
 
6406
# check multiple-1 success:     1
 
6407
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6408
        
 
6409
# check multiple-2 success:     1
 
6410
INSERT INTO t1 SELECT * FROM t0_template
 
6411
WHERE MOD(f_int1,3) = 0;
 
6412
        
 
6413
# check multiple-3 success:     1
 
6414
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6415
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6416
AND @max_row_div2 + @max_row_div4;
 
6417
        
 
6418
# check multiple-4 success:     1
 
6419
DELETE FROM t1
 
6420
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6421
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6422
        
 
6423
# check multiple-5 success:     1
 
6424
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6425
INSERT INTO t1
 
6426
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6427
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6428
f_charbig = '#SINGLE#';
 
6429
        
 
6430
# check single-1 success:       1
 
6431
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6432
INSERT INTO t1
 
6433
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6434
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6435
f_charbig = '#SINGLE#';
 
6436
        
 
6437
# check single-2 success:       1
 
6438
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6439
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6440
UPDATE t1 SET f_int1 = @cur_value2
 
6441
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6442
        
 
6443
# check single-3 success:       1
 
6444
SET @cur_value1= -1;
 
6445
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6446
UPDATE t1 SET f_int1 = @cur_value1
 
6447
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6448
        
 
6449
# check single-4 success:       1
 
6450
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6451
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6452
        
 
6453
# check single-5 success:       1
 
6454
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6455
        
 
6456
# check single-6 success:       1
 
6457
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6458
ERROR HY000: Table has no partition for value 2147483647
 
6459
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6460
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6461
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6462
f_charbig = '#NULL#';
 
6463
INSERT INTO t1
 
6464
SET f_int1 = NULL , f_int2 = -@max_row,
 
6465
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6466
f_charbig = '#NULL#';
 
6467
# check null success:    1
 
6468
        
 
6469
# check null-1 success:         1
 
6470
UPDATE t1 SET f_int1 = -@max_row
 
6471
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6472
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6473
        
 
6474
# check null-2 success:         1
 
6475
UPDATE t1 SET f_int1 = NULL
 
6476
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6477
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6478
        
 
6479
# check null-3 success:         1
 
6480
DELETE FROM t1
 
6481
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6482
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6483
        
 
6484
# check null-4 success:         1
 
6485
DELETE FROM t1
 
6486
WHERE f_int1 = 0 AND f_int2 = 0
 
6487
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6488
AND f_charbig = '#NULL#';
 
6489
SET AUTOCOMMIT= 0;
 
6490
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6491
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6492
FROM t0_template source_tab
 
6493
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6494
        
 
6495
# check transactions-1 success:         1
 
6496
COMMIT WORK;
 
6497
        
 
6498
# check transactions-2 success:         1
 
6499
ROLLBACK WORK;
 
6500
        
 
6501
# check transactions-3 success:         1
 
6502
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6503
COMMIT WORK;
 
6504
ROLLBACK WORK;
 
6505
        
 
6506
# check transactions-4 success:         1
 
6507
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6508
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6509
FROM t0_template source_tab
 
6510
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6511
        
 
6512
# check transactions-5 success:         1
 
6513
ROLLBACK WORK;
 
6514
Warnings:
 
6515
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6516
        
 
6517
# check transactions-6 success:         1
 
6518
# INFO: Storage engine used for t1 seems to be not transactional.
 
6519
COMMIT;
 
6520
        
 
6521
# check transactions-7 success:         1
 
6522
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6523
COMMIT WORK;
 
6524
SET @@session.sql_mode = 'traditional';
 
6525
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6526
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6527
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6528
'', '', 'was inserted' FROM t0_template
 
6529
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6530
ERROR 22012: Division by 0
 
6531
COMMIT;
 
6532
        
 
6533
# check transactions-8 success:         1
 
6534
# INFO: Storage engine used for t1 seems to be unable to revert
 
6535
#       changes made by the failing statement.
 
6536
SET @@session.sql_mode = '';
 
6537
SET AUTOCOMMIT= 1;
 
6538
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6539
COMMIT WORK;
 
6540
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6541
        
 
6542
# check special-1 success:      1
 
6543
UPDATE t1 SET f_charbig = '';
 
6544
        
 
6545
# check special-2 success:      1
 
6546
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6547
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6548
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6550
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6551
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6552
'just inserted' FROM t0_template
 
6553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6554
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6555
BEGIN
 
6556
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6557
f_charbig = 'updated by trigger'
 
6558
      WHERE f_int1 = new.f_int1;
 
6559
END|
 
6560
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6561
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6563
        
 
6564
# check trigger-1 success:      1
 
6565
DROP TRIGGER trg_1;
 
6566
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6567
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6568
f_charbig = 'just inserted'
 
6569
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6570
DELETE FROM t0_aux
 
6571
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6572
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6573
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6574
'just inserted' FROM t0_template
 
6575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6576
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6577
BEGIN
 
6578
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6579
f_charbig = 'updated by trigger'
 
6580
      WHERE f_int1 = new.f_int1;
 
6581
END|
 
6582
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6583
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6585
        
 
6586
# check trigger-2 success:      1
 
6587
DROP TRIGGER trg_1;
 
6588
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6589
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6590
f_charbig = 'just inserted'
 
6591
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6592
DELETE FROM t0_aux
 
6593
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6594
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6595
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6596
'just inserted' FROM t0_template
 
6597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6598
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6599
BEGIN
 
6600
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6601
f_charbig = 'updated by trigger'
 
6602
      WHERE f_int1 = new.f_int1;
 
6603
END|
 
6604
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6605
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6606
        
 
6607
# check trigger-3 success:      1
 
6608
DROP TRIGGER trg_1;
 
6609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6611
f_charbig = 'just inserted'
 
6612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6613
DELETE FROM t0_aux
 
6614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6616
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6617
'just inserted' FROM t0_template
 
6618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6619
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6620
BEGIN
 
6621
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6622
f_charbig = 'updated by trigger'
 
6623
      WHERE f_int1 = - old.f_int1;
 
6624
END|
 
6625
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6626
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6627
        
 
6628
# check trigger-4 success:      1
 
6629
DROP TRIGGER trg_1;
 
6630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6632
f_charbig = 'just inserted'
 
6633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6634
DELETE FROM t0_aux
 
6635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6638
'just inserted' FROM t0_template
 
6639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6640
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6641
BEGIN
 
6642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6643
f_charbig = 'updated by trigger'
 
6644
      WHERE f_int1 = new.f_int1;
 
6645
END|
 
6646
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6648
        
 
6649
# check trigger-5 success:      1
 
6650
DROP TRIGGER trg_1;
 
6651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6653
f_charbig = 'just inserted'
 
6654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6655
DELETE FROM t0_aux
 
6656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6659
'just inserted' FROM t0_template
 
6660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6661
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6662
BEGIN
 
6663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6664
f_charbig = 'updated by trigger'
 
6665
      WHERE f_int1 = - old.f_int1;
 
6666
END|
 
6667
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6668
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6669
        
 
6670
# check trigger-6 success:      1
 
6671
DROP TRIGGER trg_1;
 
6672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6674
f_charbig = 'just inserted'
 
6675
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6676
DELETE FROM t0_aux
 
6677
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6679
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6680
'just inserted' FROM t0_template
 
6681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6682
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6683
BEGIN
 
6684
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6685
f_charbig = 'updated by trigger'
 
6686
      WHERE f_int1 = - old.f_int1;
 
6687
END|
 
6688
DELETE FROM t0_aux
 
6689
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6690
        
 
6691
# check trigger-7 success:      1
 
6692
DROP TRIGGER trg_1;
 
6693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6695
f_charbig = 'just inserted'
 
6696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6697
DELETE FROM t0_aux
 
6698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6701
'just inserted' FROM t0_template
 
6702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6703
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6704
BEGIN
 
6705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6706
f_charbig = 'updated by trigger'
 
6707
      WHERE f_int1 = - old.f_int1;
 
6708
END|
 
6709
DELETE FROM t0_aux
 
6710
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6711
        
 
6712
# check trigger-8 success:      1
 
6713
DROP TRIGGER trg_1;
 
6714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6716
f_charbig = 'just inserted'
 
6717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6718
DELETE FROM t0_aux
 
6719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6720
DELETE FROM t1
 
6721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6722
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6723
BEGIN
 
6724
SET new.f_int1 = old.f_int1 + @max_row,
 
6725
new.f_int2 = old.f_int2 - @max_row,
 
6726
new.f_charbig = '####updated per update trigger####';
 
6727
END|
 
6728
UPDATE t1
 
6729
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6730
f_charbig = '####updated per update statement itself####';
 
6731
        
 
6732
# check trigger-9 success:      1
 
6733
DROP TRIGGER trg_2;
 
6734
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6735
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6736
f_charbig = CONCAT('===',f_char1,'===');
 
6737
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6738
BEGIN
 
6739
SET new.f_int1 = new.f_int1 + @max_row,
 
6740
new.f_int2 = new.f_int2 - @max_row,
 
6741
new.f_charbig = '####updated per update trigger####';
 
6742
END|
 
6743
UPDATE t1
 
6744
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6745
f_charbig = '####updated per update statement itself####';
 
6746
        
 
6747
# check trigger-10 success:     1
 
6748
DROP TRIGGER trg_2;
 
6749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6751
f_charbig = CONCAT('===',f_char1,'===');
 
6752
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6753
BEGIN
 
6754
SET new.f_int1 = @my_max1 + @counter,
 
6755
new.f_int2 = @my_min2 - @counter,
 
6756
new.f_charbig = '####updated per insert trigger####';
 
6757
SET @counter = @counter + 1;
 
6758
END|
 
6759
SET @counter = 1;
 
6760
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6761
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6762
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6763
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6764
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6765
ORDER BY f_int1;
 
6766
DROP TRIGGER trg_3;
 
6767
        
 
6768
# check trigger-11 success:     1
 
6769
DELETE FROM t1
 
6770
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6771
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6772
AND f_charbig = '####updated per insert trigger####';
 
6773
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6774
BEGIN
 
6775
SET new.f_int1 = @my_max1 + @counter,
 
6776
new.f_int2 = @my_min2 - @counter,
 
6777
new.f_charbig = '####updated per insert trigger####';
 
6778
SET @counter = @counter + 1;
 
6779
END|
 
6780
SET @counter = 1;
 
6781
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6782
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6783
SELECT CAST(f_int1 AS CHAR),
 
6784
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6786
ORDER BY f_int1;
 
6787
DROP TRIGGER trg_3;
 
6788
        
 
6789
# check trigger-12 success:     1
 
6790
DELETE FROM t1
 
6791
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6792
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6793
AND f_charbig = '####updated per insert trigger####';
 
6794
ANALYZE  TABLE t1;
 
6795
Table   Op      Msg_type        Msg_text
 
6796
test.t1 analyze status  OK
 
6797
CHECK    TABLE t1 EXTENDED;
 
6798
Table   Op      Msg_type        Msg_text
 
6799
test.t1 check   status  OK
 
6800
CHECKSUM TABLE t1 EXTENDED;
 
6801
Table   Checksum
 
6802
test.t1 <some_value>
 
6803
OPTIMIZE TABLE t1;
 
6804
Table   Op      Msg_type        Msg_text
 
6805
test.t1 optimize        status  OK
 
6806
# check layout success:    1
 
6807
REPAIR   TABLE t1 EXTENDED;
 
6808
Table   Op      Msg_type        Msg_text
 
6809
test.t1 repair  status  OK
 
6810
# check layout success:    1
 
6811
TRUNCATE t1;
 
6812
        
 
6813
# check TRUNCATE success:       1
 
6814
# check layout success:    1
 
6815
# End usability test (inc/partition_check.inc)
 
6816
DROP TABLE t1;
 
6817
CREATE TABLE t1 (
 
6818
f_int1 INTEGER,
 
6819
f_int2 INTEGER,
 
6820
f_char1 CHAR(20),
 
6821
f_char2 CHAR(20),
 
6822
f_charbig VARCHAR(1000)
 
6823
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
6824
)
 
6825
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
6826
(PARTITION part1 VALUES IN (0)
 
6827
(SUBPARTITION sp11, SUBPARTITION sp12),
 
6828
PARTITION part2 VALUES IN (1)
 
6829
(SUBPARTITION sp21, SUBPARTITION sp22),
 
6830
PARTITION part3 VALUES IN (2)
 
6831
(SUBPARTITION sp31, SUBPARTITION sp32),
 
6832
PARTITION part4 VALUES IN (NULL)
 
6833
(SUBPARTITION sp41, SUBPARTITION sp42));
 
6834
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6835
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6836
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6837
ALTER TABLE t1 DROP INDEX uidx1;
 
6838
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6839
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6840
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6841
# Start usability test (inc/partition_check.inc)
 
6842
create_command
 
6843
SHOW CREATE TABLE t1;
 
6844
Table   Create Table
 
6845
t1      CREATE TABLE `t1` (
 
6846
  `f_int1` int(11) DEFAULT NULL,
 
6847
  `f_int2` int(11) DEFAULT NULL,
 
6848
  `f_char1` char(20) DEFAULT NULL,
 
6849
  `f_char2` char(20) DEFAULT NULL,
 
6850
  `f_charbig` varchar(1000) DEFAULT NULL
 
6851
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
6852
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
6853
SUBPARTITION BY HASH (f_int2 + 1)
 
6854
(PARTITION part1 VALUES IN (0)
 
6855
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
6856
  SUBPARTITION sp12 ENGINE = MyISAM),
 
6857
 PARTITION part2 VALUES IN (1)
 
6858
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
6859
  SUBPARTITION sp22 ENGINE = MyISAM),
 
6860
 PARTITION part3 VALUES IN (2)
 
6861
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
6862
  SUBPARTITION sp32 ENGINE = MyISAM),
 
6863
 PARTITION part4 VALUES IN (NULL)
 
6864
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
6865
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
6866
 
 
6867
unified filelist
 
6868
t1#P#part1#SP#sp11.MYD
 
6869
t1#P#part1#SP#sp11.MYI
 
6870
t1#P#part1#SP#sp12.MYD
 
6871
t1#P#part1#SP#sp12.MYI
 
6872
t1#P#part2#SP#sp21.MYD
 
6873
t1#P#part2#SP#sp21.MYI
 
6874
t1#P#part2#SP#sp22.MYD
 
6875
t1#P#part2#SP#sp22.MYI
 
6876
t1#P#part3#SP#sp31.MYD
 
6877
t1#P#part3#SP#sp31.MYI
 
6878
t1#P#part3#SP#sp32.MYD
 
6879
t1#P#part3#SP#sp32.MYI
 
6880
t1#P#part4#SP#sp41.MYD
 
6881
t1#P#part4#SP#sp41.MYI
 
6882
t1#P#part4#SP#sp42.MYD
 
6883
t1#P#part4#SP#sp42.MYI
 
6884
t1.frm
 
6885
t1.par
 
6886
 
 
6887
# check prerequisites-1 success:    1
 
6888
# check COUNT(*) success:    1
 
6889
# check MIN/MAX(f_int1) success:    1
 
6890
# check MIN/MAX(f_int2) success:    1
 
6891
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6892
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6893
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6894
WHERE f_int1 IN (2,3);
 
6895
# check prerequisites-3 success:    1
 
6896
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6897
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6898
# check read via f_int1 success: 1
 
6899
# check read via f_int2 success: 1
 
6900
        
 
6901
# check multiple-1 success:     1
 
6902
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6903
        
 
6904
# check multiple-2 success:     1
 
6905
INSERT INTO t1 SELECT * FROM t0_template
 
6906
WHERE MOD(f_int1,3) = 0;
 
6907
        
 
6908
# check multiple-3 success:     1
 
6909
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6910
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6911
AND @max_row_div2 + @max_row_div4;
 
6912
        
 
6913
# check multiple-4 success:     1
 
6914
DELETE FROM t1
 
6915
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6916
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6917
        
 
6918
# check multiple-5 success:     1
 
6919
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6920
INSERT INTO t1
 
6921
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6922
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6923
f_charbig = '#SINGLE#';
 
6924
        
 
6925
# check single-1 success:       1
 
6926
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6927
INSERT INTO t1
 
6928
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6929
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6930
f_charbig = '#SINGLE#';
 
6931
        
 
6932
# check single-2 success:       1
 
6933
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6934
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6935
UPDATE t1 SET f_int1 = @cur_value2
 
6936
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6937
        
 
6938
# check single-3 success:       1
 
6939
SET @cur_value1= -1;
 
6940
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6941
UPDATE t1 SET f_int1 = @cur_value1
 
6942
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6943
        
 
6944
# check single-4 success:       1
 
6945
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6946
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6947
        
 
6948
# check single-5 success:       1
 
6949
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6950
        
 
6951
# check single-6 success:       1
 
6952
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6953
        
 
6954
# check single-7 success:       1
 
6955
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6956
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6957
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6958
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6959
f_charbig = '#NULL#';
 
6960
INSERT INTO t1
 
6961
SET f_int1 = NULL , f_int2 = -@max_row,
 
6962
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6963
f_charbig = '#NULL#';
 
6964
# check null success:    1
 
6965
        
 
6966
# check null-1 success:         1
 
6967
UPDATE t1 SET f_int1 = -@max_row
 
6968
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6969
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6970
        
 
6971
# check null-2 success:         1
 
6972
UPDATE t1 SET f_int1 = NULL
 
6973
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6974
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6975
        
 
6976
# check null-3 success:         1
 
6977
DELETE FROM t1
 
6978
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6979
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6980
        
 
6981
# check null-4 success:         1
 
6982
DELETE FROM t1
 
6983
WHERE f_int1 = 0 AND f_int2 = 0
 
6984
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6985
AND f_charbig = '#NULL#';
 
6986
SET AUTOCOMMIT= 0;
 
6987
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6988
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6989
FROM t0_template source_tab
 
6990
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6991
        
 
6992
# check transactions-1 success:         1
 
6993
COMMIT WORK;
 
6994
        
 
6995
# check transactions-2 success:         1
 
6996
ROLLBACK WORK;
 
6997
        
 
6998
# check transactions-3 success:         1
 
6999
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7000
COMMIT WORK;
 
7001
ROLLBACK WORK;
 
7002
        
 
7003
# check transactions-4 success:         1
 
7004
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7005
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7006
FROM t0_template source_tab
 
7007
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7008
        
 
7009
# check transactions-5 success:         1
 
7010
ROLLBACK WORK;
 
7011
Warnings:
 
7012
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7013
        
 
7014
# check transactions-6 success:         1
 
7015
# INFO: Storage engine used for t1 seems to be not transactional.
 
7016
COMMIT;
 
7017
        
 
7018
# check transactions-7 success:         1
 
7019
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7020
COMMIT WORK;
 
7021
SET @@session.sql_mode = 'traditional';
 
7022
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7023
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7024
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7025
'', '', 'was inserted' FROM t0_template
 
7026
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7027
ERROR 22012: Division by 0
 
7028
COMMIT;
 
7029
        
 
7030
# check transactions-8 success:         1
 
7031
# INFO: Storage engine used for t1 seems to be unable to revert
 
7032
#       changes made by the failing statement.
 
7033
SET @@session.sql_mode = '';
 
7034
SET AUTOCOMMIT= 1;
 
7035
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7036
COMMIT WORK;
 
7037
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7038
        
 
7039
# check special-1 success:      1
 
7040
UPDATE t1 SET f_charbig = '';
 
7041
        
 
7042
# check special-2 success:      1
 
7043
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7044
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7045
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7048
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7049
'just inserted' FROM t0_template
 
7050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7051
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7052
BEGIN
 
7053
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7054
f_charbig = 'updated by trigger'
 
7055
      WHERE f_int1 = new.f_int1;
 
7056
END|
 
7057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7058
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7060
        
 
7061
# check trigger-1 success:      1
 
7062
DROP TRIGGER trg_1;
 
7063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7065
f_charbig = 'just inserted'
 
7066
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7067
DELETE FROM t0_aux
 
7068
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7071
'just inserted' FROM t0_template
 
7072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7073
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7074
BEGIN
 
7075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7076
f_charbig = 'updated by trigger'
 
7077
      WHERE f_int1 = new.f_int1;
 
7078
END|
 
7079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7080
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7082
        
 
7083
# check trigger-2 success:      1
 
7084
DROP TRIGGER trg_1;
 
7085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7087
f_charbig = 'just inserted'
 
7088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7089
DELETE FROM t0_aux
 
7090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7093
'just inserted' FROM t0_template
 
7094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7095
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7096
BEGIN
 
7097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7098
f_charbig = 'updated by trigger'
 
7099
      WHERE f_int1 = new.f_int1;
 
7100
END|
 
7101
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7103
        
 
7104
# check trigger-3 success:      1
 
7105
DROP TRIGGER trg_1;
 
7106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7108
f_charbig = 'just inserted'
 
7109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7110
DELETE FROM t0_aux
 
7111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7114
'just inserted' FROM t0_template
 
7115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7116
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7117
BEGIN
 
7118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7119
f_charbig = 'updated by trigger'
 
7120
      WHERE f_int1 = - old.f_int1;
 
7121
END|
 
7122
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7124
        
 
7125
# check trigger-4 success:      1
 
7126
DROP TRIGGER trg_1;
 
7127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7129
f_charbig = 'just inserted'
 
7130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7131
DELETE FROM t0_aux
 
7132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7135
'just inserted' FROM t0_template
 
7136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7137
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7138
BEGIN
 
7139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7140
f_charbig = 'updated by trigger'
 
7141
      WHERE f_int1 = new.f_int1;
 
7142
END|
 
7143
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7144
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7145
        
 
7146
# check trigger-5 success:      1
 
7147
DROP TRIGGER trg_1;
 
7148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7150
f_charbig = 'just inserted'
 
7151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7152
DELETE FROM t0_aux
 
7153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7156
'just inserted' FROM t0_template
 
7157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7158
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7159
BEGIN
 
7160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7161
f_charbig = 'updated by trigger'
 
7162
      WHERE f_int1 = - old.f_int1;
 
7163
END|
 
7164
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7166
        
 
7167
# check trigger-6 success:      1
 
7168
DROP TRIGGER trg_1;
 
7169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7171
f_charbig = 'just inserted'
 
7172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7173
DELETE FROM t0_aux
 
7174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7177
'just inserted' FROM t0_template
 
7178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7179
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7180
BEGIN
 
7181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7182
f_charbig = 'updated by trigger'
 
7183
      WHERE f_int1 = - old.f_int1;
 
7184
END|
 
7185
DELETE FROM t0_aux
 
7186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7187
        
 
7188
# check trigger-7 success:      1
 
7189
DROP TRIGGER trg_1;
 
7190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7192
f_charbig = 'just inserted'
 
7193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7194
DELETE FROM t0_aux
 
7195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7198
'just inserted' FROM t0_template
 
7199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7200
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7201
BEGIN
 
7202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7203
f_charbig = 'updated by trigger'
 
7204
      WHERE f_int1 = - old.f_int1;
 
7205
END|
 
7206
DELETE FROM t0_aux
 
7207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7208
        
 
7209
# check trigger-8 success:      1
 
7210
DROP TRIGGER trg_1;
 
7211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7213
f_charbig = 'just inserted'
 
7214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7215
DELETE FROM t0_aux
 
7216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7217
DELETE FROM t1
 
7218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7219
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7220
BEGIN
 
7221
SET new.f_int1 = old.f_int1 + @max_row,
 
7222
new.f_int2 = old.f_int2 - @max_row,
 
7223
new.f_charbig = '####updated per update trigger####';
 
7224
END|
 
7225
UPDATE t1
 
7226
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7227
f_charbig = '####updated per update statement itself####';
 
7228
        
 
7229
# check trigger-9 success:      1
 
7230
DROP TRIGGER trg_2;
 
7231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7233
f_charbig = CONCAT('===',f_char1,'===');
 
7234
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7235
BEGIN
 
7236
SET new.f_int1 = new.f_int1 + @max_row,
 
7237
new.f_int2 = new.f_int2 - @max_row,
 
7238
new.f_charbig = '####updated per update trigger####';
 
7239
END|
 
7240
UPDATE t1
 
7241
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7242
f_charbig = '####updated per update statement itself####';
 
7243
        
 
7244
# check trigger-10 success:     1
 
7245
DROP TRIGGER trg_2;
 
7246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7248
f_charbig = CONCAT('===',f_char1,'===');
 
7249
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7250
BEGIN
 
7251
SET new.f_int1 = @my_max1 + @counter,
 
7252
new.f_int2 = @my_min2 - @counter,
 
7253
new.f_charbig = '####updated per insert trigger####';
 
7254
SET @counter = @counter + 1;
 
7255
END|
 
7256
SET @counter = 1;
 
7257
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7259
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7260
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7262
ORDER BY f_int1;
 
7263
DROP TRIGGER trg_3;
 
7264
        
 
7265
# check trigger-11 success:     1
 
7266
DELETE FROM t1
 
7267
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7268
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7269
AND f_charbig = '####updated per insert trigger####';
 
7270
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7271
BEGIN
 
7272
SET new.f_int1 = @my_max1 + @counter,
 
7273
new.f_int2 = @my_min2 - @counter,
 
7274
new.f_charbig = '####updated per insert trigger####';
 
7275
SET @counter = @counter + 1;
 
7276
END|
 
7277
SET @counter = 1;
 
7278
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7279
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7280
SELECT CAST(f_int1 AS CHAR),
 
7281
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7283
ORDER BY f_int1;
 
7284
DROP TRIGGER trg_3;
 
7285
        
 
7286
# check trigger-12 success:     1
 
7287
DELETE FROM t1
 
7288
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7289
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7290
AND f_charbig = '####updated per insert trigger####';
 
7291
ANALYZE  TABLE t1;
 
7292
Table   Op      Msg_type        Msg_text
 
7293
test.t1 analyze status  OK
 
7294
CHECK    TABLE t1 EXTENDED;
 
7295
Table   Op      Msg_type        Msg_text
 
7296
test.t1 check   status  OK
 
7297
CHECKSUM TABLE t1 EXTENDED;
 
7298
Table   Checksum
 
7299
test.t1 <some_value>
 
7300
OPTIMIZE TABLE t1;
 
7301
Table   Op      Msg_type        Msg_text
 
7302
test.t1 optimize        status  OK
 
7303
# check layout success:    1
 
7304
REPAIR   TABLE t1 EXTENDED;
 
7305
Table   Op      Msg_type        Msg_text
 
7306
test.t1 repair  status  OK
 
7307
# check layout success:    1
 
7308
TRUNCATE t1;
 
7309
        
 
7310
# check TRUNCATE success:       1
 
7311
# check layout success:    1
 
7312
# End usability test (inc/partition_check.inc)
 
7313
DROP TABLE t1;
 
7314
CREATE TABLE t1 (
 
7315
f_int1 INTEGER,
 
7316
f_int2 INTEGER,
 
7317
f_char1 CHAR(20),
 
7318
f_char2 CHAR(20),
 
7319
f_charbig VARCHAR(1000)
 
7320
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
7321
)
 
7322
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7323
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
7324
(PARTITION part1 VALUES IN (0),
 
7325
 PARTITION part2 VALUES IN (1),
 
7326
 PARTITION part3 VALUES IN (NULL));
 
7327
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7328
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7329
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7330
ALTER TABLE t1 DROP INDEX uidx1;
 
7331
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7332
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7333
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7334
# Start usability test (inc/partition_check.inc)
 
7335
create_command
 
7336
SHOW CREATE TABLE t1;
 
7337
Table   Create Table
 
7338
t1      CREATE TABLE `t1` (
 
7339
  `f_int1` int(11) DEFAULT NULL,
 
7340
  `f_int2` int(11) DEFAULT NULL,
 
7341
  `f_char1` char(20) DEFAULT NULL,
 
7342
  `f_char2` char(20) DEFAULT NULL,
 
7343
  `f_charbig` varchar(1000) DEFAULT NULL
 
7344
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
7345
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
7346
SUBPARTITION BY KEY (f_int2)
 
7347
SUBPARTITIONS 3
 
7348
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
7349
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
7350
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
7351
 
 
7352
unified filelist
 
7353
t1#P#part1#SP#part1sp0.MYD
 
7354
t1#P#part1#SP#part1sp0.MYI
 
7355
t1#P#part1#SP#part1sp1.MYD
 
7356
t1#P#part1#SP#part1sp1.MYI
 
7357
t1#P#part1#SP#part1sp2.MYD
 
7358
t1#P#part1#SP#part1sp2.MYI
 
7359
t1#P#part2#SP#part2sp0.MYD
 
7360
t1#P#part2#SP#part2sp0.MYI
 
7361
t1#P#part2#SP#part2sp1.MYD
 
7362
t1#P#part2#SP#part2sp1.MYI
 
7363
t1#P#part2#SP#part2sp2.MYD
 
7364
t1#P#part2#SP#part2sp2.MYI
 
7365
t1#P#part3#SP#part3sp0.MYD
 
7366
t1#P#part3#SP#part3sp0.MYI
 
7367
t1#P#part3#SP#part3sp1.MYD
 
7368
t1#P#part3#SP#part3sp1.MYI
 
7369
t1#P#part3#SP#part3sp2.MYD
 
7370
t1#P#part3#SP#part3sp2.MYI
 
7371
t1.frm
 
7372
t1.par
 
7373
 
 
7374
# check prerequisites-1 success:    1
 
7375
# check COUNT(*) success:    1
 
7376
# check MIN/MAX(f_int1) success:    1
 
7377
# check MIN/MAX(f_int2) success:    1
 
7378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7379
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7380
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7381
WHERE f_int1 IN (2,3);
 
7382
# check prerequisites-3 success:    1
 
7383
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7384
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
7385
# check read via f_int1 success: 1
 
7386
# check read via f_int2 success: 1
 
7387
        
 
7388
# check multiple-1 success:     1
 
7389
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7390
        
 
7391
# check multiple-2 success:     1
 
7392
INSERT INTO t1 SELECT * FROM t0_template
 
7393
WHERE MOD(f_int1,3) = 0;
 
7394
        
 
7395
# check multiple-3 success:     1
 
7396
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7397
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7398
AND @max_row_div2 + @max_row_div4;
 
7399
        
 
7400
# check multiple-4 success:     1
 
7401
DELETE FROM t1
 
7402
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7403
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7404
        
 
7405
# check multiple-5 success:     1
 
7406
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7407
INSERT INTO t1
 
7408
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7409
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7410
f_charbig = '#SINGLE#';
 
7411
        
 
7412
# check single-1 success:       1
 
7413
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7414
INSERT INTO t1
 
7415
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7416
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7417
f_charbig = '#SINGLE#';
 
7418
        
 
7419
# check single-2 success:       1
 
7420
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7421
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7422
UPDATE t1 SET f_int1 = @cur_value2
 
7423
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7424
        
 
7425
# check single-3 success:       1
 
7426
SET @cur_value1= -1;
 
7427
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7428
UPDATE t1 SET f_int1 = @cur_value1
 
7429
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7430
        
 
7431
# check single-4 success:       1
 
7432
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7433
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7434
        
 
7435
# check single-5 success:       1
 
7436
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7437
        
 
7438
# check single-6 success:       1
 
7439
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7440
        
 
7441
# check single-7 success:       1
 
7442
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7443
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7444
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7445
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7446
f_charbig = '#NULL#';
 
7447
INSERT INTO t1
 
7448
SET f_int1 = NULL , f_int2 = -@max_row,
 
7449
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7450
f_charbig = '#NULL#';
 
7451
# check null success:    1
 
7452
        
 
7453
# check null-1 success:         1
 
7454
UPDATE t1 SET f_int1 = -@max_row
 
7455
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7456
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7457
        
 
7458
# check null-2 success:         1
 
7459
UPDATE t1 SET f_int1 = NULL
 
7460
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7461
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7462
        
 
7463
# check null-3 success:         1
 
7464
DELETE FROM t1
 
7465
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7466
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7467
        
 
7468
# check null-4 success:         1
 
7469
DELETE FROM t1
 
7470
WHERE f_int1 = 0 AND f_int2 = 0
 
7471
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7472
AND f_charbig = '#NULL#';
 
7473
SET AUTOCOMMIT= 0;
 
7474
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7475
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7476
FROM t0_template source_tab
 
7477
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7478
        
 
7479
# check transactions-1 success:         1
 
7480
COMMIT WORK;
 
7481
        
 
7482
# check transactions-2 success:         1
 
7483
ROLLBACK WORK;
 
7484
        
 
7485
# check transactions-3 success:         1
 
7486
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7487
COMMIT WORK;
 
7488
ROLLBACK WORK;
 
7489
        
 
7490
# check transactions-4 success:         1
 
7491
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7492
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7493
FROM t0_template source_tab
 
7494
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7495
        
 
7496
# check transactions-5 success:         1
 
7497
ROLLBACK WORK;
 
7498
Warnings:
 
7499
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7500
        
 
7501
# check transactions-6 success:         1
 
7502
# INFO: Storage engine used for t1 seems to be not transactional.
 
7503
COMMIT;
 
7504
        
 
7505
# check transactions-7 success:         1
 
7506
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7507
COMMIT WORK;
 
7508
SET @@session.sql_mode = 'traditional';
 
7509
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7510
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7511
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7512
'', '', 'was inserted' FROM t0_template
 
7513
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7514
ERROR 22012: Division by 0
 
7515
COMMIT;
 
7516
        
 
7517
# check transactions-8 success:         1
 
7518
# INFO: Storage engine used for t1 seems to be unable to revert
 
7519
#       changes made by the failing statement.
 
7520
SET @@session.sql_mode = '';
 
7521
SET AUTOCOMMIT= 1;
 
7522
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7523
COMMIT WORK;
 
7524
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7525
        
 
7526
# check special-1 success:      1
 
7527
UPDATE t1 SET f_charbig = '';
 
7528
        
 
7529
# check special-2 success:      1
 
7530
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7531
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7532
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7534
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7535
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7536
'just inserted' FROM t0_template
 
7537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7538
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7539
BEGIN
 
7540
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7541
f_charbig = 'updated by trigger'
 
7542
      WHERE f_int1 = new.f_int1;
 
7543
END|
 
7544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7545
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7547
        
 
7548
# check trigger-1 success:      1
 
7549
DROP TRIGGER trg_1;
 
7550
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7551
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7552
f_charbig = 'just inserted'
 
7553
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7554
DELETE FROM t0_aux
 
7555
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7556
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7557
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7558
'just inserted' FROM t0_template
 
7559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7560
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7561
BEGIN
 
7562
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7563
f_charbig = 'updated by trigger'
 
7564
      WHERE f_int1 = new.f_int1;
 
7565
END|
 
7566
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7567
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7569
        
 
7570
# check trigger-2 success:      1
 
7571
DROP TRIGGER trg_1;
 
7572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7574
f_charbig = 'just inserted'
 
7575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7576
DELETE FROM t0_aux
 
7577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7580
'just inserted' FROM t0_template
 
7581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7582
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7583
BEGIN
 
7584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7585
f_charbig = 'updated by trigger'
 
7586
      WHERE f_int1 = new.f_int1;
 
7587
END|
 
7588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7590
        
 
7591
# check trigger-3 success:      1
 
7592
DROP TRIGGER trg_1;
 
7593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7595
f_charbig = 'just inserted'
 
7596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7597
DELETE FROM t0_aux
 
7598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7601
'just inserted' FROM t0_template
 
7602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7603
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7604
BEGIN
 
7605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7606
f_charbig = 'updated by trigger'
 
7607
      WHERE f_int1 = - old.f_int1;
 
7608
END|
 
7609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7611
        
 
7612
# check trigger-4 success:      1
 
7613
DROP TRIGGER trg_1;
 
7614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7616
f_charbig = 'just inserted'
 
7617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7618
DELETE FROM t0_aux
 
7619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7622
'just inserted' FROM t0_template
 
7623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7624
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7625
BEGIN
 
7626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7627
f_charbig = 'updated by trigger'
 
7628
      WHERE f_int1 = new.f_int1;
 
7629
END|
 
7630
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7632
        
 
7633
# check trigger-5 success:      1
 
7634
DROP TRIGGER trg_1;
 
7635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7637
f_charbig = 'just inserted'
 
7638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7639
DELETE FROM t0_aux
 
7640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7643
'just inserted' FROM t0_template
 
7644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7645
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7646
BEGIN
 
7647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7648
f_charbig = 'updated by trigger'
 
7649
      WHERE f_int1 = - old.f_int1;
 
7650
END|
 
7651
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7653
        
 
7654
# check trigger-6 success:      1
 
7655
DROP TRIGGER trg_1;
 
7656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7658
f_charbig = 'just inserted'
 
7659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7660
DELETE FROM t0_aux
 
7661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7664
'just inserted' FROM t0_template
 
7665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7666
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7667
BEGIN
 
7668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7669
f_charbig = 'updated by trigger'
 
7670
      WHERE f_int1 = - old.f_int1;
 
7671
END|
 
7672
DELETE FROM t0_aux
 
7673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7674
        
 
7675
# check trigger-7 success:      1
 
7676
DROP TRIGGER trg_1;
 
7677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7679
f_charbig = 'just inserted'
 
7680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7681
DELETE FROM t0_aux
 
7682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7685
'just inserted' FROM t0_template
 
7686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7687
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7688
BEGIN
 
7689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7690
f_charbig = 'updated by trigger'
 
7691
      WHERE f_int1 = - old.f_int1;
 
7692
END|
 
7693
DELETE FROM t0_aux
 
7694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7695
        
 
7696
# check trigger-8 success:      1
 
7697
DROP TRIGGER trg_1;
 
7698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7700
f_charbig = 'just inserted'
 
7701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7702
DELETE FROM t0_aux
 
7703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7704
DELETE FROM t1
 
7705
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7706
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7707
BEGIN
 
7708
SET new.f_int1 = old.f_int1 + @max_row,
 
7709
new.f_int2 = old.f_int2 - @max_row,
 
7710
new.f_charbig = '####updated per update trigger####';
 
7711
END|
 
7712
UPDATE t1
 
7713
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7714
f_charbig = '####updated per update statement itself####';
 
7715
        
 
7716
# check trigger-9 success:      1
 
7717
DROP TRIGGER trg_2;
 
7718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7720
f_charbig = CONCAT('===',f_char1,'===');
 
7721
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7722
BEGIN
 
7723
SET new.f_int1 = new.f_int1 + @max_row,
 
7724
new.f_int2 = new.f_int2 - @max_row,
 
7725
new.f_charbig = '####updated per update trigger####';
 
7726
END|
 
7727
UPDATE t1
 
7728
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7729
f_charbig = '####updated per update statement itself####';
 
7730
        
 
7731
# check trigger-10 success:     1
 
7732
DROP TRIGGER trg_2;
 
7733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7735
f_charbig = CONCAT('===',f_char1,'===');
 
7736
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7737
BEGIN
 
7738
SET new.f_int1 = @my_max1 + @counter,
 
7739
new.f_int2 = @my_min2 - @counter,
 
7740
new.f_charbig = '####updated per insert trigger####';
 
7741
SET @counter = @counter + 1;
 
7742
END|
 
7743
SET @counter = 1;
 
7744
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7745
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7746
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7747
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7749
ORDER BY f_int1;
 
7750
DROP TRIGGER trg_3;
 
7751
        
 
7752
# check trigger-11 success:     1
 
7753
DELETE FROM t1
 
7754
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7755
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7756
AND f_charbig = '####updated per insert trigger####';
 
7757
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7758
BEGIN
 
7759
SET new.f_int1 = @my_max1 + @counter,
 
7760
new.f_int2 = @my_min2 - @counter,
 
7761
new.f_charbig = '####updated per insert trigger####';
 
7762
SET @counter = @counter + 1;
 
7763
END|
 
7764
SET @counter = 1;
 
7765
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7766
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7767
SELECT CAST(f_int1 AS CHAR),
 
7768
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7770
ORDER BY f_int1;
 
7771
DROP TRIGGER trg_3;
 
7772
        
 
7773
# check trigger-12 success:     1
 
7774
DELETE FROM t1
 
7775
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7776
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7777
AND f_charbig = '####updated per insert trigger####';
 
7778
ANALYZE  TABLE t1;
 
7779
Table   Op      Msg_type        Msg_text
 
7780
test.t1 analyze status  OK
 
7781
CHECK    TABLE t1 EXTENDED;
 
7782
Table   Op      Msg_type        Msg_text
 
7783
test.t1 check   status  OK
 
7784
CHECKSUM TABLE t1 EXTENDED;
 
7785
Table   Checksum
 
7786
test.t1 <some_value>
 
7787
OPTIMIZE TABLE t1;
 
7788
Table   Op      Msg_type        Msg_text
 
7789
test.t1 optimize        status  OK
 
7790
# check layout success:    1
 
7791
REPAIR   TABLE t1 EXTENDED;
 
7792
Table   Op      Msg_type        Msg_text
 
7793
test.t1 repair  status  OK
 
7794
# check layout success:    1
 
7795
TRUNCATE t1;
 
7796
        
 
7797
# check TRUNCATE success:       1
 
7798
# check layout success:    1
 
7799
# End usability test (inc/partition_check.inc)
 
7800
DROP TABLE t1;
 
7801
DROP TABLE IF EXISTS t1;
 
7802
CREATE TABLE t1 (
 
7803
f_int1 INTEGER,
 
7804
f_int2 INTEGER,
 
7805
f_char1 CHAR(20),
 
7806
f_char2 CHAR(20),
 
7807
f_charbig VARCHAR(1000)
 
7808
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
7809
)
 
7810
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
7811
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7812
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7813
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7814
ALTER TABLE t1 DROP INDEX uidx1;
 
7815
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7816
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7817
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7818
# Start usability test (inc/partition_check.inc)
 
7819
create_command
 
7820
SHOW CREATE TABLE t1;
 
7821
Table   Create Table
 
7822
t1      CREATE TABLE `t1` (
 
7823
  `f_int1` int(11) DEFAULT NULL,
 
7824
  `f_int2` int(11) DEFAULT NULL,
 
7825
  `f_char1` char(20) DEFAULT NULL,
 
7826
  `f_char2` char(20) DEFAULT NULL,
 
7827
  `f_charbig` varchar(1000) DEFAULT NULL
 
7828
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
7829
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
7830
PARTITIONS 2 */
 
7831
 
 
7832
unified filelist
 
7833
t1#P#p0.MYD
 
7834
t1#P#p0.MYI
 
7835
t1#P#p1.MYD
 
7836
t1#P#p1.MYI
 
7837
t1.frm
 
7838
t1.par
 
7839
 
 
7840
# check prerequisites-1 success:    1
 
7841
# check COUNT(*) success:    1
 
7842
# check MIN/MAX(f_int1) success:    1
 
7843
# check MIN/MAX(f_int2) success:    1
 
7844
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7845
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7846
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7847
WHERE f_int1 IN (2,3);
 
7848
# check prerequisites-3 success:    1
 
7849
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7850
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
7851
# check read via f_int1 success: 1
 
7852
# check read via f_int2 success: 1
 
7853
        
 
7854
# check multiple-1 success:     1
 
7855
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7856
        
 
7857
# check multiple-2 success:     1
 
7858
INSERT INTO t1 SELECT * FROM t0_template
 
7859
WHERE MOD(f_int1,3) = 0;
 
7860
        
 
7861
# check multiple-3 success:     1
 
7862
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7863
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7864
AND @max_row_div2 + @max_row_div4;
 
7865
        
 
7866
# check multiple-4 success:     1
 
7867
DELETE FROM t1
 
7868
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7869
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7870
        
 
7871
# check multiple-5 success:     1
 
7872
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7873
INSERT INTO t1
 
7874
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7875
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7876
f_charbig = '#SINGLE#';
 
7877
        
 
7878
# check single-1 success:       1
 
7879
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7880
INSERT INTO t1
 
7881
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7882
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7883
f_charbig = '#SINGLE#';
 
7884
        
 
7885
# check single-2 success:       1
 
7886
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7887
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7888
UPDATE t1 SET f_int1 = @cur_value2
 
7889
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7890
        
 
7891
# check single-3 success:       1
 
7892
SET @cur_value1= -1;
 
7893
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7894
UPDATE t1 SET f_int1 = @cur_value1
 
7895
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7896
        
 
7897
# check single-4 success:       1
 
7898
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7899
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7900
        
 
7901
# check single-5 success:       1
 
7902
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7903
        
 
7904
# check single-6 success:       1
 
7905
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7906
        
 
7907
# check single-7 success:       1
 
7908
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7909
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7910
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7911
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7912
f_charbig = '#NULL#';
 
7913
INSERT INTO t1
 
7914
SET f_int1 = NULL , f_int2 = -@max_row,
 
7915
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7916
f_charbig = '#NULL#';
 
7917
# check null success:    1
 
7918
        
 
7919
# check null-1 success:         1
 
7920
UPDATE t1 SET f_int1 = -@max_row
 
7921
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7922
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7923
        
 
7924
# check null-2 success:         1
 
7925
UPDATE t1 SET f_int1 = NULL
 
7926
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7927
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7928
        
 
7929
# check null-3 success:         1
 
7930
DELETE FROM t1
 
7931
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7932
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7933
        
 
7934
# check null-4 success:         1
 
7935
DELETE FROM t1
 
7936
WHERE f_int1 = 0 AND f_int2 = 0
 
7937
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7938
AND f_charbig = '#NULL#';
 
7939
SET AUTOCOMMIT= 0;
 
7940
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7941
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7942
FROM t0_template source_tab
 
7943
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7944
        
 
7945
# check transactions-1 success:         1
 
7946
COMMIT WORK;
 
7947
        
 
7948
# check transactions-2 success:         1
 
7949
ROLLBACK WORK;
 
7950
        
 
7951
# check transactions-3 success:         1
 
7952
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7953
COMMIT WORK;
 
7954
ROLLBACK WORK;
 
7955
        
 
7956
# check transactions-4 success:         1
 
7957
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7958
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7959
FROM t0_template source_tab
 
7960
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7961
        
 
7962
# check transactions-5 success:         1
 
7963
ROLLBACK WORK;
 
7964
Warnings:
 
7965
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7966
        
 
7967
# check transactions-6 success:         1
 
7968
# INFO: Storage engine used for t1 seems to be not transactional.
 
7969
COMMIT;
 
7970
        
 
7971
# check transactions-7 success:         1
 
7972
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7973
COMMIT WORK;
 
7974
SET @@session.sql_mode = 'traditional';
 
7975
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7976
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7977
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7978
'', '', 'was inserted' FROM t0_template
 
7979
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7980
ERROR 22012: Division by 0
 
7981
COMMIT;
 
7982
        
 
7983
# check transactions-8 success:         1
 
7984
# INFO: Storage engine used for t1 seems to be unable to revert
 
7985
#       changes made by the failing statement.
 
7986
SET @@session.sql_mode = '';
 
7987
SET AUTOCOMMIT= 1;
 
7988
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7989
COMMIT WORK;
 
7990
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7991
        
 
7992
# check special-1 success:      1
 
7993
UPDATE t1 SET f_charbig = '';
 
7994
        
 
7995
# check special-2 success:      1
 
7996
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7997
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7998
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7999
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8001
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8002
'just inserted' FROM t0_template
 
8003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8004
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8005
BEGIN
 
8006
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8007
f_charbig = 'updated by trigger'
 
8008
      WHERE f_int1 = new.f_int1;
 
8009
END|
 
8010
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8011
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8013
        
 
8014
# check trigger-1 success:      1
 
8015
DROP TRIGGER trg_1;
 
8016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8018
f_charbig = 'just inserted'
 
8019
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8020
DELETE FROM t0_aux
 
8021
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8022
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8023
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8024
'just inserted' FROM t0_template
 
8025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8026
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8027
BEGIN
 
8028
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8029
f_charbig = 'updated by trigger'
 
8030
      WHERE f_int1 = new.f_int1;
 
8031
END|
 
8032
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8033
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8034
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8035
        
 
8036
# check trigger-2 success:      1
 
8037
DROP TRIGGER trg_1;
 
8038
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8039
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8040
f_charbig = 'just inserted'
 
8041
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8042
DELETE FROM t0_aux
 
8043
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8044
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8045
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8046
'just inserted' FROM t0_template
 
8047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8048
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8049
BEGIN
 
8050
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8051
f_charbig = 'updated by trigger'
 
8052
      WHERE f_int1 = new.f_int1;
 
8053
END|
 
8054
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8055
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8056
        
 
8057
# check trigger-3 success:      1
 
8058
DROP TRIGGER trg_1;
 
8059
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8060
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8061
f_charbig = 'just inserted'
 
8062
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8063
DELETE FROM t0_aux
 
8064
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8065
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8066
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8067
'just inserted' FROM t0_template
 
8068
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8069
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8070
BEGIN
 
8071
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8072
f_charbig = 'updated by trigger'
 
8073
      WHERE f_int1 = - old.f_int1;
 
8074
END|
 
8075
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8076
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8077
        
 
8078
# check trigger-4 success:      1
 
8079
DROP TRIGGER trg_1;
 
8080
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8081
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8082
f_charbig = 'just inserted'
 
8083
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8084
DELETE FROM t0_aux
 
8085
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8086
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8087
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8088
'just inserted' FROM t0_template
 
8089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8090
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8091
BEGIN
 
8092
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8093
f_charbig = 'updated by trigger'
 
8094
      WHERE f_int1 = new.f_int1;
 
8095
END|
 
8096
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8097
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8098
        
 
8099
# check trigger-5 success:      1
 
8100
DROP TRIGGER trg_1;
 
8101
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8102
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8103
f_charbig = 'just inserted'
 
8104
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8105
DELETE FROM t0_aux
 
8106
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8107
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8108
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8109
'just inserted' FROM t0_template
 
8110
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8111
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8112
BEGIN
 
8113
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8114
f_charbig = 'updated by trigger'
 
8115
      WHERE f_int1 = - old.f_int1;
 
8116
END|
 
8117
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8118
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8119
        
 
8120
# check trigger-6 success:      1
 
8121
DROP TRIGGER trg_1;
 
8122
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8123
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8124
f_charbig = 'just inserted'
 
8125
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8126
DELETE FROM t0_aux
 
8127
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8128
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8129
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8130
'just inserted' FROM t0_template
 
8131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8132
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8133
BEGIN
 
8134
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8135
f_charbig = 'updated by trigger'
 
8136
      WHERE f_int1 = - old.f_int1;
 
8137
END|
 
8138
DELETE FROM t0_aux
 
8139
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8140
        
 
8141
# check trigger-7 success:      1
 
8142
DROP TRIGGER trg_1;
 
8143
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8144
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8145
f_charbig = 'just inserted'
 
8146
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8147
DELETE FROM t0_aux
 
8148
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8149
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8150
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8151
'just inserted' FROM t0_template
 
8152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8153
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8154
BEGIN
 
8155
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8156
f_charbig = 'updated by trigger'
 
8157
      WHERE f_int1 = - old.f_int1;
 
8158
END|
 
8159
DELETE FROM t0_aux
 
8160
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8161
        
 
8162
# check trigger-8 success:      1
 
8163
DROP TRIGGER trg_1;
 
8164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8166
f_charbig = 'just inserted'
 
8167
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8168
DELETE FROM t0_aux
 
8169
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8170
DELETE FROM t1
 
8171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8172
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8173
BEGIN
 
8174
SET new.f_int1 = old.f_int1 + @max_row,
 
8175
new.f_int2 = old.f_int2 - @max_row,
 
8176
new.f_charbig = '####updated per update trigger####';
 
8177
END|
 
8178
UPDATE t1
 
8179
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8180
f_charbig = '####updated per update statement itself####';
 
8181
        
 
8182
# check trigger-9 success:      1
 
8183
DROP TRIGGER trg_2;
 
8184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8186
f_charbig = CONCAT('===',f_char1,'===');
 
8187
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8188
BEGIN
 
8189
SET new.f_int1 = new.f_int1 + @max_row,
 
8190
new.f_int2 = new.f_int2 - @max_row,
 
8191
new.f_charbig = '####updated per update trigger####';
 
8192
END|
 
8193
UPDATE t1
 
8194
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8195
f_charbig = '####updated per update statement itself####';
 
8196
        
 
8197
# check trigger-10 success:     1
 
8198
DROP TRIGGER trg_2;
 
8199
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8200
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8201
f_charbig = CONCAT('===',f_char1,'===');
 
8202
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8203
BEGIN
 
8204
SET new.f_int1 = @my_max1 + @counter,
 
8205
new.f_int2 = @my_min2 - @counter,
 
8206
new.f_charbig = '####updated per insert trigger####';
 
8207
SET @counter = @counter + 1;
 
8208
END|
 
8209
SET @counter = 1;
 
8210
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8212
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8213
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8215
ORDER BY f_int1;
 
8216
DROP TRIGGER trg_3;
 
8217
        
 
8218
# check trigger-11 success:     1
 
8219
DELETE FROM t1
 
8220
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8221
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8222
AND f_charbig = '####updated per insert trigger####';
 
8223
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8224
BEGIN
 
8225
SET new.f_int1 = @my_max1 + @counter,
 
8226
new.f_int2 = @my_min2 - @counter,
 
8227
new.f_charbig = '####updated per insert trigger####';
 
8228
SET @counter = @counter + 1;
 
8229
END|
 
8230
SET @counter = 1;
 
8231
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8232
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8233
SELECT CAST(f_int1 AS CHAR),
 
8234
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8236
ORDER BY f_int1;
 
8237
DROP TRIGGER trg_3;
 
8238
        
 
8239
# check trigger-12 success:     1
 
8240
DELETE FROM t1
 
8241
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8242
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8243
AND f_charbig = '####updated per insert trigger####';
 
8244
ANALYZE  TABLE t1;
 
8245
Table   Op      Msg_type        Msg_text
 
8246
test.t1 analyze status  OK
 
8247
CHECK    TABLE t1 EXTENDED;
 
8248
Table   Op      Msg_type        Msg_text
 
8249
test.t1 check   status  OK
 
8250
CHECKSUM TABLE t1 EXTENDED;
 
8251
Table   Checksum
 
8252
test.t1 <some_value>
 
8253
OPTIMIZE TABLE t1;
 
8254
Table   Op      Msg_type        Msg_text
 
8255
test.t1 optimize        status  OK
 
8256
# check layout success:    1
 
8257
REPAIR   TABLE t1 EXTENDED;
 
8258
Table   Op      Msg_type        Msg_text
 
8259
test.t1 repair  status  OK
 
8260
# check layout success:    1
 
8261
TRUNCATE t1;
 
8262
        
 
8263
# check TRUNCATE success:       1
 
8264
# check layout success:    1
 
8265
# End usability test (inc/partition_check.inc)
 
8266
DROP TABLE t1;
 
8267
CREATE TABLE t1 (
 
8268
f_int1 INTEGER,
 
8269
f_int2 INTEGER,
 
8270
f_char1 CHAR(20),
 
8271
f_char2 CHAR(20),
 
8272
f_charbig VARCHAR(1000)
 
8273
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
8274
)
 
8275
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
8276
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8277
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8278
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8279
ALTER TABLE t1 DROP INDEX uidx1;
 
8280
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8281
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8282
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8283
# Start usability test (inc/partition_check.inc)
 
8284
create_command
 
8285
SHOW CREATE TABLE t1;
 
8286
Table   Create Table
 
8287
t1      CREATE TABLE `t1` (
 
8288
  `f_int1` int(11) DEFAULT NULL,
 
8289
  `f_int2` int(11) DEFAULT NULL,
 
8290
  `f_char1` char(20) DEFAULT NULL,
 
8291
  `f_char2` char(20) DEFAULT NULL,
 
8292
  `f_charbig` varchar(1000) DEFAULT NULL
 
8293
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
8294
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
8295
PARTITIONS 5 */
 
8296
 
 
8297
unified filelist
 
8298
t1#P#p0.MYD
 
8299
t1#P#p0.MYI
 
8300
t1#P#p1.MYD
 
8301
t1#P#p1.MYI
 
8302
t1#P#p2.MYD
 
8303
t1#P#p2.MYI
 
8304
t1#P#p3.MYD
 
8305
t1#P#p3.MYI
 
8306
t1#P#p4.MYD
 
8307
t1#P#p4.MYI
 
8308
t1.frm
 
8309
t1.par
 
8310
 
 
8311
# check prerequisites-1 success:    1
 
8312
# check COUNT(*) success:    1
 
8313
# check MIN/MAX(f_int1) success:    1
 
8314
# check MIN/MAX(f_int2) success:    1
 
8315
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8316
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8317
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8318
WHERE f_int1 IN (2,3);
 
8319
# check prerequisites-3 success:    1
 
8320
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8321
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8322
# check read via f_int1 success: 1
 
8323
# check read via f_int2 success: 1
 
8324
        
 
8325
# check multiple-1 success:     1
 
8326
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8327
        
 
8328
# check multiple-2 success:     1
 
8329
INSERT INTO t1 SELECT * FROM t0_template
 
8330
WHERE MOD(f_int1,3) = 0;
 
8331
        
 
8332
# check multiple-3 success:     1
 
8333
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8334
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8335
AND @max_row_div2 + @max_row_div4;
 
8336
        
 
8337
# check multiple-4 success:     1
 
8338
DELETE FROM t1
 
8339
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8340
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8341
        
 
8342
# check multiple-5 success:     1
 
8343
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8344
INSERT INTO t1
 
8345
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8346
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8347
f_charbig = '#SINGLE#';
 
8348
        
 
8349
# check single-1 success:       1
 
8350
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8351
INSERT INTO t1
 
8352
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8353
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8354
f_charbig = '#SINGLE#';
 
8355
        
 
8356
# check single-2 success:       1
 
8357
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8358
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8359
UPDATE t1 SET f_int1 = @cur_value2
 
8360
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8361
        
 
8362
# check single-3 success:       1
 
8363
SET @cur_value1= -1;
 
8364
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8365
UPDATE t1 SET f_int1 = @cur_value1
 
8366
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8367
        
 
8368
# check single-4 success:       1
 
8369
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8370
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8371
        
 
8372
# check single-5 success:       1
 
8373
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8374
        
 
8375
# check single-6 success:       1
 
8376
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8377
        
 
8378
# check single-7 success:       1
 
8379
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8380
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8381
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8382
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8383
f_charbig = '#NULL#';
 
8384
INSERT INTO t1
 
8385
SET f_int1 = NULL , f_int2 = -@max_row,
 
8386
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8387
f_charbig = '#NULL#';
 
8388
# check null success:    1
 
8389
        
 
8390
# check null-1 success:         1
 
8391
UPDATE t1 SET f_int1 = -@max_row
 
8392
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8393
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8394
        
 
8395
# check null-2 success:         1
 
8396
UPDATE t1 SET f_int1 = NULL
 
8397
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8398
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8399
        
 
8400
# check null-3 success:         1
 
8401
DELETE FROM t1
 
8402
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8403
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8404
        
 
8405
# check null-4 success:         1
 
8406
DELETE FROM t1
 
8407
WHERE f_int1 = 0 AND f_int2 = 0
 
8408
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8409
AND f_charbig = '#NULL#';
 
8410
SET AUTOCOMMIT= 0;
 
8411
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8412
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8413
FROM t0_template source_tab
 
8414
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8415
        
 
8416
# check transactions-1 success:         1
 
8417
COMMIT WORK;
 
8418
        
 
8419
# check transactions-2 success:         1
 
8420
ROLLBACK WORK;
 
8421
        
 
8422
# check transactions-3 success:         1
 
8423
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8424
COMMIT WORK;
 
8425
ROLLBACK WORK;
 
8426
        
 
8427
# check transactions-4 success:         1
 
8428
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8429
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8430
FROM t0_template source_tab
 
8431
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8432
        
 
8433
# check transactions-5 success:         1
 
8434
ROLLBACK WORK;
 
8435
Warnings:
 
8436
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8437
        
 
8438
# check transactions-6 success:         1
 
8439
# INFO: Storage engine used for t1 seems to be not transactional.
 
8440
COMMIT;
 
8441
        
 
8442
# check transactions-7 success:         1
 
8443
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8444
COMMIT WORK;
 
8445
SET @@session.sql_mode = 'traditional';
 
8446
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8447
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8448
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8449
'', '', 'was inserted' FROM t0_template
 
8450
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8451
ERROR 22012: Division by 0
 
8452
COMMIT;
 
8453
        
 
8454
# check transactions-8 success:         1
 
8455
# INFO: Storage engine used for t1 seems to be unable to revert
 
8456
#       changes made by the failing statement.
 
8457
SET @@session.sql_mode = '';
 
8458
SET AUTOCOMMIT= 1;
 
8459
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8460
COMMIT WORK;
 
8461
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8462
        
 
8463
# check special-1 success:      1
 
8464
UPDATE t1 SET f_charbig = '';
 
8465
        
 
8466
# check special-2 success:      1
 
8467
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8468
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8469
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8472
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8473
'just inserted' FROM t0_template
 
8474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8475
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8476
BEGIN
 
8477
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8478
f_charbig = 'updated by trigger'
 
8479
      WHERE f_int1 = new.f_int1;
 
8480
END|
 
8481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8482
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8483
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8484
        
 
8485
# check trigger-1 success:      1
 
8486
DROP TRIGGER trg_1;
 
8487
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8488
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8489
f_charbig = 'just inserted'
 
8490
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8491
DELETE FROM t0_aux
 
8492
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8494
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8495
'just inserted' FROM t0_template
 
8496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8497
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8498
BEGIN
 
8499
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8500
f_charbig = 'updated by trigger'
 
8501
      WHERE f_int1 = new.f_int1;
 
8502
END|
 
8503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8504
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8506
        
 
8507
# check trigger-2 success:      1
 
8508
DROP TRIGGER trg_1;
 
8509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8511
f_charbig = 'just inserted'
 
8512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8513
DELETE FROM t0_aux
 
8514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8517
'just inserted' FROM t0_template
 
8518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8519
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8520
BEGIN
 
8521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8522
f_charbig = 'updated by trigger'
 
8523
      WHERE f_int1 = new.f_int1;
 
8524
END|
 
8525
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8526
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8527
        
 
8528
# check trigger-3 success:      1
 
8529
DROP TRIGGER trg_1;
 
8530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8532
f_charbig = 'just inserted'
 
8533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8534
DELETE FROM t0_aux
 
8535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8536
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8537
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8538
'just inserted' FROM t0_template
 
8539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8540
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8541
BEGIN
 
8542
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8543
f_charbig = 'updated by trigger'
 
8544
      WHERE f_int1 = - old.f_int1;
 
8545
END|
 
8546
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8547
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8548
        
 
8549
# check trigger-4 success:      1
 
8550
DROP TRIGGER trg_1;
 
8551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8553
f_charbig = 'just inserted'
 
8554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8555
DELETE FROM t0_aux
 
8556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8559
'just inserted' FROM t0_template
 
8560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8561
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8562
BEGIN
 
8563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8564
f_charbig = 'updated by trigger'
 
8565
      WHERE f_int1 = new.f_int1;
 
8566
END|
 
8567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8569
        
 
8570
# check trigger-5 success:      1
 
8571
DROP TRIGGER trg_1;
 
8572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8574
f_charbig = 'just inserted'
 
8575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8576
DELETE FROM t0_aux
 
8577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8580
'just inserted' FROM t0_template
 
8581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8582
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8583
BEGIN
 
8584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8585
f_charbig = 'updated by trigger'
 
8586
      WHERE f_int1 = - old.f_int1;
 
8587
END|
 
8588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8590
        
 
8591
# check trigger-6 success:      1
 
8592
DROP TRIGGER trg_1;
 
8593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8595
f_charbig = 'just inserted'
 
8596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8597
DELETE FROM t0_aux
 
8598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8601
'just inserted' FROM t0_template
 
8602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8603
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8604
BEGIN
 
8605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8606
f_charbig = 'updated by trigger'
 
8607
      WHERE f_int1 = - old.f_int1;
 
8608
END|
 
8609
DELETE FROM t0_aux
 
8610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8611
        
 
8612
# check trigger-7 success:      1
 
8613
DROP TRIGGER trg_1;
 
8614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8616
f_charbig = 'just inserted'
 
8617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8618
DELETE FROM t0_aux
 
8619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8622
'just inserted' FROM t0_template
 
8623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8624
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8625
BEGIN
 
8626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8627
f_charbig = 'updated by trigger'
 
8628
      WHERE f_int1 = - old.f_int1;
 
8629
END|
 
8630
DELETE FROM t0_aux
 
8631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8632
        
 
8633
# check trigger-8 success:      1
 
8634
DROP TRIGGER trg_1;
 
8635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8637
f_charbig = 'just inserted'
 
8638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8639
DELETE FROM t0_aux
 
8640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8641
DELETE FROM t1
 
8642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8643
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8644
BEGIN
 
8645
SET new.f_int1 = old.f_int1 + @max_row,
 
8646
new.f_int2 = old.f_int2 - @max_row,
 
8647
new.f_charbig = '####updated per update trigger####';
 
8648
END|
 
8649
UPDATE t1
 
8650
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8651
f_charbig = '####updated per update statement itself####';
 
8652
        
 
8653
# check trigger-9 success:      1
 
8654
DROP TRIGGER trg_2;
 
8655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8657
f_charbig = CONCAT('===',f_char1,'===');
 
8658
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8659
BEGIN
 
8660
SET new.f_int1 = new.f_int1 + @max_row,
 
8661
new.f_int2 = new.f_int2 - @max_row,
 
8662
new.f_charbig = '####updated per update trigger####';
 
8663
END|
 
8664
UPDATE t1
 
8665
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8666
f_charbig = '####updated per update statement itself####';
 
8667
        
 
8668
# check trigger-10 success:     1
 
8669
DROP TRIGGER trg_2;
 
8670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8672
f_charbig = CONCAT('===',f_char1,'===');
 
8673
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8674
BEGIN
 
8675
SET new.f_int1 = @my_max1 + @counter,
 
8676
new.f_int2 = @my_min2 - @counter,
 
8677
new.f_charbig = '####updated per insert trigger####';
 
8678
SET @counter = @counter + 1;
 
8679
END|
 
8680
SET @counter = 1;
 
8681
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8682
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8683
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8684
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8686
ORDER BY f_int1;
 
8687
DROP TRIGGER trg_3;
 
8688
        
 
8689
# check trigger-11 success:     1
 
8690
DELETE FROM t1
 
8691
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8692
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8693
AND f_charbig = '####updated per insert trigger####';
 
8694
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8695
BEGIN
 
8696
SET new.f_int1 = @my_max1 + @counter,
 
8697
new.f_int2 = @my_min2 - @counter,
 
8698
new.f_charbig = '####updated per insert trigger####';
 
8699
SET @counter = @counter + 1;
 
8700
END|
 
8701
SET @counter = 1;
 
8702
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8703
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8704
SELECT CAST(f_int1 AS CHAR),
 
8705
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8707
ORDER BY f_int1;
 
8708
DROP TRIGGER trg_3;
 
8709
        
 
8710
# check trigger-12 success:     1
 
8711
DELETE FROM t1
 
8712
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8713
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8714
AND f_charbig = '####updated per insert trigger####';
 
8715
ANALYZE  TABLE t1;
 
8716
Table   Op      Msg_type        Msg_text
 
8717
test.t1 analyze status  OK
 
8718
CHECK    TABLE t1 EXTENDED;
 
8719
Table   Op      Msg_type        Msg_text
 
8720
test.t1 check   status  OK
 
8721
CHECKSUM TABLE t1 EXTENDED;
 
8722
Table   Checksum
 
8723
test.t1 <some_value>
 
8724
OPTIMIZE TABLE t1;
 
8725
Table   Op      Msg_type        Msg_text
 
8726
test.t1 optimize        status  OK
 
8727
# check layout success:    1
 
8728
REPAIR   TABLE t1 EXTENDED;
 
8729
Table   Op      Msg_type        Msg_text
 
8730
test.t1 repair  status  OK
 
8731
# check layout success:    1
 
8732
TRUNCATE t1;
 
8733
        
 
8734
# check TRUNCATE success:       1
 
8735
# check layout success:    1
 
8736
# End usability test (inc/partition_check.inc)
 
8737
DROP TABLE t1;
 
8738
CREATE TABLE t1 (
 
8739
f_int1 INTEGER,
 
8740
f_int2 INTEGER,
 
8741
f_char1 CHAR(20),
 
8742
f_char2 CHAR(20),
 
8743
f_charbig VARCHAR(1000)
 
8744
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
8745
)
 
8746
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
8747
(PARTITION part_3 VALUES IN (-3),
 
8748
PARTITION part_2 VALUES IN (-2),
 
8749
PARTITION part_1 VALUES IN (-1),
 
8750
PARTITION part_N VALUES IN (NULL),
 
8751
PARTITION part0 VALUES IN (0),
 
8752
PARTITION part1 VALUES IN (1),
 
8753
PARTITION part2 VALUES IN (2),
 
8754
PARTITION part3 VALUES IN (3));
 
8755
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8756
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8757
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8758
ALTER TABLE t1 DROP INDEX uidx1;
 
8759
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8760
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8761
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8762
# Start usability test (inc/partition_check.inc)
 
8763
create_command
 
8764
SHOW CREATE TABLE t1;
 
8765
Table   Create Table
 
8766
t1      CREATE TABLE `t1` (
 
8767
  `f_int1` int(11) DEFAULT NULL,
 
8768
  `f_int2` int(11) DEFAULT NULL,
 
8769
  `f_char1` char(20) DEFAULT NULL,
 
8770
  `f_char2` char(20) DEFAULT NULL,
 
8771
  `f_charbig` varchar(1000) DEFAULT NULL
 
8772
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
8773
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
8774
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
8775
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
8776
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
8777
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
8778
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
8779
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
8780
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
8781
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
8782
 
 
8783
unified filelist
 
8784
t1#P#part0.MYD
 
8785
t1#P#part0.MYI
 
8786
t1#P#part1.MYD
 
8787
t1#P#part1.MYI
 
8788
t1#P#part2.MYD
 
8789
t1#P#part2.MYI
 
8790
t1#P#part3.MYD
 
8791
t1#P#part3.MYI
 
8792
t1#P#part_1.MYD
 
8793
t1#P#part_1.MYI
 
8794
t1#P#part_2.MYD
 
8795
t1#P#part_2.MYI
 
8796
t1#P#part_3.MYD
 
8797
t1#P#part_3.MYI
 
8798
t1#P#part_N.MYD
 
8799
t1#P#part_N.MYI
 
8800
t1.frm
 
8801
t1.par
 
8802
 
 
8803
# check prerequisites-1 success:    1
 
8804
# check COUNT(*) success:    1
 
8805
# check MIN/MAX(f_int1) success:    1
 
8806
# check MIN/MAX(f_int2) success:    1
 
8807
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8808
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8809
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8810
WHERE f_int1 IN (2,3);
 
8811
# check prerequisites-3 success:    1
 
8812
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8813
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8814
# check read via f_int1 success: 1
 
8815
# check read via f_int2 success: 1
 
8816
        
 
8817
# check multiple-1 success:     1
 
8818
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8819
        
 
8820
# check multiple-2 success:     1
 
8821
INSERT INTO t1 SELECT * FROM t0_template
 
8822
WHERE MOD(f_int1,3) = 0;
 
8823
        
 
8824
# check multiple-3 success:     1
 
8825
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8826
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8827
AND @max_row_div2 + @max_row_div4;
 
8828
        
 
8829
# check multiple-4 success:     1
 
8830
DELETE FROM t1
 
8831
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8832
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8833
        
 
8834
# check multiple-5 success:     1
 
8835
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8836
INSERT INTO t1
 
8837
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8838
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8839
f_charbig = '#SINGLE#';
 
8840
        
 
8841
# check single-1 success:       1
 
8842
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8843
INSERT INTO t1
 
8844
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8845
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8846
f_charbig = '#SINGLE#';
 
8847
        
 
8848
# check single-2 success:       1
 
8849
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8850
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8851
UPDATE t1 SET f_int1 = @cur_value2
 
8852
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8853
        
 
8854
# check single-3 success:       1
 
8855
SET @cur_value1= -1;
 
8856
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8857
UPDATE t1 SET f_int1 = @cur_value1
 
8858
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8859
        
 
8860
# check single-4 success:       1
 
8861
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8862
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8863
        
 
8864
# check single-5 success:       1
 
8865
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8866
        
 
8867
# check single-6 success:       1
 
8868
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8869
        
 
8870
# check single-7 success:       1
 
8871
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8872
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8873
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8874
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8875
f_charbig = '#NULL#';
 
8876
INSERT INTO t1
 
8877
SET f_int1 = NULL , f_int2 = -@max_row,
 
8878
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8879
f_charbig = '#NULL#';
 
8880
# check null success:    1
 
8881
        
 
8882
# check null-1 success:         1
 
8883
UPDATE t1 SET f_int1 = -@max_row
 
8884
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8885
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8886
        
 
8887
# check null-2 success:         1
 
8888
UPDATE t1 SET f_int1 = NULL
 
8889
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8890
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8891
        
 
8892
# check null-3 success:         1
 
8893
DELETE FROM t1
 
8894
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8895
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8896
        
 
8897
# check null-4 success:         1
 
8898
DELETE FROM t1
 
8899
WHERE f_int1 = 0 AND f_int2 = 0
 
8900
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8901
AND f_charbig = '#NULL#';
 
8902
SET AUTOCOMMIT= 0;
 
8903
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8904
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8905
FROM t0_template source_tab
 
8906
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8907
        
 
8908
# check transactions-1 success:         1
 
8909
COMMIT WORK;
 
8910
        
 
8911
# check transactions-2 success:         1
 
8912
ROLLBACK WORK;
 
8913
        
 
8914
# check transactions-3 success:         1
 
8915
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8916
COMMIT WORK;
 
8917
ROLLBACK WORK;
 
8918
        
 
8919
# check transactions-4 success:         1
 
8920
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8921
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8922
FROM t0_template source_tab
 
8923
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8924
        
 
8925
# check transactions-5 success:         1
 
8926
ROLLBACK WORK;
 
8927
Warnings:
 
8928
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8929
        
 
8930
# check transactions-6 success:         1
 
8931
# INFO: Storage engine used for t1 seems to be not transactional.
 
8932
COMMIT;
 
8933
        
 
8934
# check transactions-7 success:         1
 
8935
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8936
COMMIT WORK;
 
8937
SET @@session.sql_mode = 'traditional';
 
8938
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8939
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8940
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8941
'', '', 'was inserted' FROM t0_template
 
8942
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8943
ERROR 22012: Division by 0
 
8944
COMMIT;
 
8945
        
 
8946
# check transactions-8 success:         1
 
8947
# INFO: Storage engine used for t1 seems to be unable to revert
 
8948
#       changes made by the failing statement.
 
8949
SET @@session.sql_mode = '';
 
8950
SET AUTOCOMMIT= 1;
 
8951
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8952
COMMIT WORK;
 
8953
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8954
        
 
8955
# check special-1 success:      1
 
8956
UPDATE t1 SET f_charbig = '';
 
8957
        
 
8958
# check special-2 success:      1
 
8959
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8960
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8961
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8962
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8963
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8964
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8965
'just inserted' FROM t0_template
 
8966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8967
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8968
BEGIN
 
8969
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8970
f_charbig = 'updated by trigger'
 
8971
      WHERE f_int1 = new.f_int1;
 
8972
END|
 
8973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8974
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8975
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8976
        
 
8977
# check trigger-1 success:      1
 
8978
DROP TRIGGER trg_1;
 
8979
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8980
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8981
f_charbig = 'just inserted'
 
8982
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8983
DELETE FROM t0_aux
 
8984
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8985
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8986
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8987
'just inserted' FROM t0_template
 
8988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8989
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8990
BEGIN
 
8991
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8992
f_charbig = 'updated by trigger'
 
8993
      WHERE f_int1 = new.f_int1;
 
8994
END|
 
8995
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8996
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8998
        
 
8999
# check trigger-2 success:      1
 
9000
DROP TRIGGER trg_1;
 
9001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9003
f_charbig = 'just inserted'
 
9004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9005
DELETE FROM t0_aux
 
9006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9008
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9009
'just inserted' FROM t0_template
 
9010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9011
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9012
BEGIN
 
9013
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9014
f_charbig = 'updated by trigger'
 
9015
      WHERE f_int1 = new.f_int1;
 
9016
END|
 
9017
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9018
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9019
        
 
9020
# check trigger-3 success:      1
 
9021
DROP TRIGGER trg_1;
 
9022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9024
f_charbig = 'just inserted'
 
9025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9026
DELETE FROM t0_aux
 
9027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9030
'just inserted' FROM t0_template
 
9031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9032
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9033
BEGIN
 
9034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9035
f_charbig = 'updated by trigger'
 
9036
      WHERE f_int1 = - old.f_int1;
 
9037
END|
 
9038
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9039
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9040
        
 
9041
# check trigger-4 success:      1
 
9042
DROP TRIGGER trg_1;
 
9043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9044
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9045
f_charbig = 'just inserted'
 
9046
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9047
DELETE FROM t0_aux
 
9048
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9050
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9051
'just inserted' FROM t0_template
 
9052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9053
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9054
BEGIN
 
9055
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9056
f_charbig = 'updated by trigger'
 
9057
      WHERE f_int1 = new.f_int1;
 
9058
END|
 
9059
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9060
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9061
        
 
9062
# check trigger-5 success:      1
 
9063
DROP TRIGGER trg_1;
 
9064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9066
f_charbig = 'just inserted'
 
9067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9068
DELETE FROM t0_aux
 
9069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9072
'just inserted' FROM t0_template
 
9073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9074
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9075
BEGIN
 
9076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9077
f_charbig = 'updated by trigger'
 
9078
      WHERE f_int1 = - old.f_int1;
 
9079
END|
 
9080
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9082
        
 
9083
# check trigger-6 success:      1
 
9084
DROP TRIGGER trg_1;
 
9085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9087
f_charbig = 'just inserted'
 
9088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9089
DELETE FROM t0_aux
 
9090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9093
'just inserted' FROM t0_template
 
9094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9095
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9096
BEGIN
 
9097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9098
f_charbig = 'updated by trigger'
 
9099
      WHERE f_int1 = - old.f_int1;
 
9100
END|
 
9101
DELETE FROM t0_aux
 
9102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9103
        
 
9104
# check trigger-7 success:      1
 
9105
DROP TRIGGER trg_1;
 
9106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9108
f_charbig = 'just inserted'
 
9109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9110
DELETE FROM t0_aux
 
9111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9114
'just inserted' FROM t0_template
 
9115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9116
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9117
BEGIN
 
9118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9119
f_charbig = 'updated by trigger'
 
9120
      WHERE f_int1 = - old.f_int1;
 
9121
END|
 
9122
DELETE FROM t0_aux
 
9123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9124
        
 
9125
# check trigger-8 success:      1
 
9126
DROP TRIGGER trg_1;
 
9127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9129
f_charbig = 'just inserted'
 
9130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9131
DELETE FROM t0_aux
 
9132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9133
DELETE FROM t1
 
9134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9135
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9136
BEGIN
 
9137
SET new.f_int1 = old.f_int1 + @max_row,
 
9138
new.f_int2 = old.f_int2 - @max_row,
 
9139
new.f_charbig = '####updated per update trigger####';
 
9140
END|
 
9141
UPDATE t1
 
9142
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9143
f_charbig = '####updated per update statement itself####';
 
9144
        
 
9145
# check trigger-9 success:      1
 
9146
DROP TRIGGER trg_2;
 
9147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9149
f_charbig = CONCAT('===',f_char1,'===');
 
9150
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9151
BEGIN
 
9152
SET new.f_int1 = new.f_int1 + @max_row,
 
9153
new.f_int2 = new.f_int2 - @max_row,
 
9154
new.f_charbig = '####updated per update trigger####';
 
9155
END|
 
9156
UPDATE t1
 
9157
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9158
f_charbig = '####updated per update statement itself####';
 
9159
        
 
9160
# check trigger-10 success:     1
 
9161
DROP TRIGGER trg_2;
 
9162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9164
f_charbig = CONCAT('===',f_char1,'===');
 
9165
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9166
BEGIN
 
9167
SET new.f_int1 = @my_max1 + @counter,
 
9168
new.f_int2 = @my_min2 - @counter,
 
9169
new.f_charbig = '####updated per insert trigger####';
 
9170
SET @counter = @counter + 1;
 
9171
END|
 
9172
SET @counter = 1;
 
9173
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9174
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9175
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9176
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9178
ORDER BY f_int1;
 
9179
DROP TRIGGER trg_3;
 
9180
        
 
9181
# check trigger-11 success:     1
 
9182
DELETE FROM t1
 
9183
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9184
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9185
AND f_charbig = '####updated per insert trigger####';
 
9186
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9187
BEGIN
 
9188
SET new.f_int1 = @my_max1 + @counter,
 
9189
new.f_int2 = @my_min2 - @counter,
 
9190
new.f_charbig = '####updated per insert trigger####';
 
9191
SET @counter = @counter + 1;
 
9192
END|
 
9193
SET @counter = 1;
 
9194
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9195
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9196
SELECT CAST(f_int1 AS CHAR),
 
9197
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9199
ORDER BY f_int1;
 
9200
DROP TRIGGER trg_3;
 
9201
        
 
9202
# check trigger-12 success:     1
 
9203
DELETE FROM t1
 
9204
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9205
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9206
AND f_charbig = '####updated per insert trigger####';
 
9207
ANALYZE  TABLE t1;
 
9208
Table   Op      Msg_type        Msg_text
 
9209
test.t1 analyze status  OK
 
9210
CHECK    TABLE t1 EXTENDED;
 
9211
Table   Op      Msg_type        Msg_text
 
9212
test.t1 check   status  OK
 
9213
CHECKSUM TABLE t1 EXTENDED;
 
9214
Table   Checksum
 
9215
test.t1 <some_value>
 
9216
OPTIMIZE TABLE t1;
 
9217
Table   Op      Msg_type        Msg_text
 
9218
test.t1 optimize        status  OK
 
9219
# check layout success:    1
 
9220
REPAIR   TABLE t1 EXTENDED;
 
9221
Table   Op      Msg_type        Msg_text
 
9222
test.t1 repair  status  OK
 
9223
# check layout success:    1
 
9224
TRUNCATE t1;
 
9225
        
 
9226
# check TRUNCATE success:       1
 
9227
# check layout success:    1
 
9228
# End usability test (inc/partition_check.inc)
 
9229
DROP TABLE t1;
 
9230
CREATE TABLE t1 (
 
9231
f_int1 INTEGER,
 
9232
f_int2 INTEGER,
 
9233
f_char1 CHAR(20),
 
9234
f_char2 CHAR(20),
 
9235
f_charbig VARCHAR(1000)
 
9236
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
9237
)
 
9238
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
9239
(PARTITION parta VALUES LESS THAN (0),
 
9240
PARTITION partb VALUES LESS THAN (5),
 
9241
PARTITION partc VALUES LESS THAN (10),
 
9242
PARTITION partd VALUES LESS THAN (10 + 5),
 
9243
PARTITION parte VALUES LESS THAN (20),
 
9244
PARTITION partf VALUES LESS THAN (2147483646));
 
9245
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9246
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9247
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9248
ALTER TABLE t1 DROP INDEX uidx1;
 
9249
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9250
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9251
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9252
# Start usability test (inc/partition_check.inc)
 
9253
create_command
 
9254
SHOW CREATE TABLE t1;
 
9255
Table   Create Table
 
9256
t1      CREATE TABLE `t1` (
 
9257
  `f_int1` int(11) DEFAULT NULL,
 
9258
  `f_int2` int(11) DEFAULT NULL,
 
9259
  `f_char1` char(20) DEFAULT NULL,
 
9260
  `f_char2` char(20) DEFAULT NULL,
 
9261
  `f_charbig` varchar(1000) DEFAULT NULL
 
9262
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
9263
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
9264
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
9265
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
9266
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
9267
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
9268
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
9269
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
9270
 
 
9271
unified filelist
 
9272
t1#P#parta.MYD
 
9273
t1#P#parta.MYI
 
9274
t1#P#partb.MYD
 
9275
t1#P#partb.MYI
 
9276
t1#P#partc.MYD
 
9277
t1#P#partc.MYI
 
9278
t1#P#partd.MYD
 
9279
t1#P#partd.MYI
 
9280
t1#P#parte.MYD
 
9281
t1#P#parte.MYI
 
9282
t1#P#partf.MYD
 
9283
t1#P#partf.MYI
 
9284
t1.frm
 
9285
t1.par
 
9286
 
 
9287
# check prerequisites-1 success:    1
 
9288
# check COUNT(*) success:    1
 
9289
# check MIN/MAX(f_int1) success:    1
 
9290
# check MIN/MAX(f_int2) success:    1
 
9291
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9292
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9293
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9294
WHERE f_int1 IN (2,3);
 
9295
# check prerequisites-3 success:    1
 
9296
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9297
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9298
# check read via f_int1 success: 1
 
9299
# check read via f_int2 success: 1
 
9300
        
 
9301
# check multiple-1 success:     1
 
9302
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9303
        
 
9304
# check multiple-2 success:     1
 
9305
INSERT INTO t1 SELECT * FROM t0_template
 
9306
WHERE MOD(f_int1,3) = 0;
 
9307
        
 
9308
# check multiple-3 success:     1
 
9309
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9310
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9311
AND @max_row_div2 + @max_row_div4;
 
9312
        
 
9313
# check multiple-4 success:     1
 
9314
DELETE FROM t1
 
9315
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9316
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9317
        
 
9318
# check multiple-5 success:     1
 
9319
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9320
INSERT INTO t1
 
9321
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9322
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9323
f_charbig = '#SINGLE#';
 
9324
        
 
9325
# check single-1 success:       1
 
9326
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9327
INSERT INTO t1
 
9328
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9329
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9330
f_charbig = '#SINGLE#';
 
9331
        
 
9332
# check single-2 success:       1
 
9333
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9334
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9335
UPDATE t1 SET f_int1 = @cur_value2
 
9336
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9337
        
 
9338
# check single-3 success:       1
 
9339
SET @cur_value1= -1;
 
9340
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9341
UPDATE t1 SET f_int1 = @cur_value1
 
9342
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9343
        
 
9344
# check single-4 success:       1
 
9345
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9346
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9347
        
 
9348
# check single-5 success:       1
 
9349
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9350
        
 
9351
# check single-6 success:       1
 
9352
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9353
ERROR HY000: Table has no partition for value 2147483647
 
9354
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9355
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9356
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9357
f_charbig = '#NULL#';
 
9358
INSERT INTO t1
 
9359
SET f_int1 = NULL , f_int2 = -@max_row,
 
9360
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9361
f_charbig = '#NULL#';
 
9362
# check null success:    1
 
9363
        
 
9364
# check null-1 success:         1
 
9365
UPDATE t1 SET f_int1 = -@max_row
 
9366
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9367
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9368
        
 
9369
# check null-2 success:         1
 
9370
UPDATE t1 SET f_int1 = NULL
 
9371
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9372
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9373
        
 
9374
# check null-3 success:         1
 
9375
DELETE FROM t1
 
9376
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9377
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9378
        
 
9379
# check null-4 success:         1
 
9380
DELETE FROM t1
 
9381
WHERE f_int1 = 0 AND f_int2 = 0
 
9382
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9383
AND f_charbig = '#NULL#';
 
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 status  OK
 
9692
CHECK    TABLE t1 EXTENDED;
 
9693
Table   Op      Msg_type        Msg_text
 
9694
test.t1 check   status  OK
 
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        status  OK
 
9701
# check layout success:    1
 
9702
REPAIR   TABLE t1 EXTENDED;
 
9703
Table   Op      Msg_type        Msg_text
 
9704
test.t1 repair  status  OK
 
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
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
9719
)
 
9720
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
9721
(PARTITION parta VALUES LESS THAN (0),
 
9722
PARTITION partb VALUES LESS THAN (5),
 
9723
PARTITION partc VALUES LESS THAN (10),
 
9724
PARTITION partd VALUES LESS THAN (2147483646));
 
9725
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9726
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9727
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9728
ALTER TABLE t1 DROP INDEX uidx1;
 
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 @max_row_div2 AND @max_row;
 
9732
# Start usability test (inc/partition_check.inc)
 
9733
create_command
 
9734
SHOW CREATE TABLE t1;
 
9735
Table   Create Table
 
9736
t1      CREATE TABLE `t1` (
 
9737
  `f_int1` int(11) DEFAULT NULL,
 
9738
  `f_int2` int(11) DEFAULT NULL,
 
9739
  `f_char1` char(20) DEFAULT NULL,
 
9740
  `f_char2` char(20) DEFAULT NULL,
 
9741
  `f_charbig` varchar(1000) DEFAULT NULL
 
9742
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
9743
/*!50100 PARTITION BY RANGE (f_int1)
 
9744
SUBPARTITION BY HASH (f_int2)
 
9745
SUBPARTITIONS 2
 
9746
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
9747
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
9748
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
9749
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
9750
 
 
9751
unified filelist
 
9752
t1#P#parta#SP#partasp0.MYD
 
9753
t1#P#parta#SP#partasp0.MYI
 
9754
t1#P#parta#SP#partasp1.MYD
 
9755
t1#P#parta#SP#partasp1.MYI
 
9756
t1#P#partb#SP#partbsp0.MYD
 
9757
t1#P#partb#SP#partbsp0.MYI
 
9758
t1#P#partb#SP#partbsp1.MYD
 
9759
t1#P#partb#SP#partbsp1.MYI
 
9760
t1#P#partc#SP#partcsp0.MYD
 
9761
t1#P#partc#SP#partcsp0.MYI
 
9762
t1#P#partc#SP#partcsp1.MYD
 
9763
t1#P#partc#SP#partcsp1.MYI
 
9764
t1#P#partd#SP#partdsp0.MYD
 
9765
t1#P#partd#SP#partdsp0.MYI
 
9766
t1#P#partd#SP#partdsp1.MYD
 
9767
t1#P#partd#SP#partdsp1.MYI
 
9768
t1.frm
 
9769
t1.par
 
9770
 
 
9771
# check prerequisites-1 success:    1
 
9772
# check COUNT(*) success:    1
 
9773
# check MIN/MAX(f_int1) success:    1
 
9774
# check MIN/MAX(f_int2) success:    1
 
9775
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9776
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9777
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9778
WHERE f_int1 IN (2,3);
 
9779
# check prerequisites-3 success:    1
 
9780
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9781
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9782
# check read via f_int1 success: 1
 
9783
# check read via f_int2 success: 1
 
9784
        
 
9785
# check multiple-1 success:     1
 
9786
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9787
        
 
9788
# check multiple-2 success:     1
 
9789
INSERT INTO t1 SELECT * FROM t0_template
 
9790
WHERE MOD(f_int1,3) = 0;
 
9791
        
 
9792
# check multiple-3 success:     1
 
9793
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9794
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9795
AND @max_row_div2 + @max_row_div4;
 
9796
        
 
9797
# check multiple-4 success:     1
 
9798
DELETE FROM t1
 
9799
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9800
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9801
        
 
9802
# check multiple-5 success:     1
 
9803
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9804
INSERT INTO t1
 
9805
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9806
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9807
f_charbig = '#SINGLE#';
 
9808
        
 
9809
# check single-1 success:       1
 
9810
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9811
INSERT INTO t1
 
9812
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9813
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9814
f_charbig = '#SINGLE#';
 
9815
        
 
9816
# check single-2 success:       1
 
9817
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9818
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9819
UPDATE t1 SET f_int1 = @cur_value2
 
9820
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9821
        
 
9822
# check single-3 success:       1
 
9823
SET @cur_value1= -1;
 
9824
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9825
UPDATE t1 SET f_int1 = @cur_value1
 
9826
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9827
        
 
9828
# check single-4 success:       1
 
9829
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9830
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9831
        
 
9832
# check single-5 success:       1
 
9833
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9834
        
 
9835
# check single-6 success:       1
 
9836
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9837
ERROR HY000: Table has no partition for value 2147483647
 
9838
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9839
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9840
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9841
f_charbig = '#NULL#';
 
9842
INSERT INTO t1
 
9843
SET f_int1 = NULL , f_int2 = -@max_row,
 
9844
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9845
f_charbig = '#NULL#';
 
9846
# check null success:    1
 
9847
        
 
9848
# check null-1 success:         1
 
9849
UPDATE t1 SET f_int1 = -@max_row
 
9850
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9851
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9852
        
 
9853
# check null-2 success:         1
 
9854
UPDATE t1 SET f_int1 = NULL
 
9855
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9856
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9857
        
 
9858
# check null-3 success:         1
 
9859
DELETE FROM t1
 
9860
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9861
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9862
        
 
9863
# check null-4 success:         1
 
9864
DELETE FROM t1
 
9865
WHERE f_int1 = 0 AND f_int2 = 0
 
9866
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9867
AND f_charbig = '#NULL#';
 
9868
SET AUTOCOMMIT= 0;
 
9869
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9870
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9871
FROM t0_template source_tab
 
9872
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9873
        
 
9874
# check transactions-1 success:         1
 
9875
COMMIT WORK;
 
9876
        
 
9877
# check transactions-2 success:         1
 
9878
ROLLBACK WORK;
 
9879
        
 
9880
# check transactions-3 success:         1
 
9881
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9882
COMMIT WORK;
 
9883
ROLLBACK WORK;
 
9884
        
 
9885
# check transactions-4 success:         1
 
9886
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9887
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9888
FROM t0_template source_tab
 
9889
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9890
        
 
9891
# check transactions-5 success:         1
 
9892
ROLLBACK WORK;
 
9893
Warnings:
 
9894
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
9895
        
 
9896
# check transactions-6 success:         1
 
9897
# INFO: Storage engine used for t1 seems to be not transactional.
 
9898
COMMIT;
 
9899
        
 
9900
# check transactions-7 success:         1
 
9901
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9902
COMMIT WORK;
 
9903
SET @@session.sql_mode = 'traditional';
 
9904
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9905
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9906
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9907
'', '', 'was inserted' FROM t0_template
 
9908
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9909
ERROR 22012: Division by 0
 
9910
COMMIT;
 
9911
        
 
9912
# check transactions-8 success:         1
 
9913
# INFO: Storage engine used for t1 seems to be unable to revert
 
9914
#       changes made by the failing statement.
 
9915
SET @@session.sql_mode = '';
 
9916
SET AUTOCOMMIT= 1;
 
9917
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9918
COMMIT WORK;
 
9919
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9920
        
 
9921
# check special-1 success:      1
 
9922
UPDATE t1 SET f_charbig = '';
 
9923
        
 
9924
# check special-2 success:      1
 
9925
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9926
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9927
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9928
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9929
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9930
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9931
'just inserted' FROM t0_template
 
9932
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9933
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9934
BEGIN
 
9935
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9936
f_charbig = 'updated by trigger'
 
9937
      WHERE f_int1 = new.f_int1;
 
9938
END|
 
9939
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9940
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9941
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9942
        
 
9943
# check trigger-1 success:      1
 
9944
DROP TRIGGER trg_1;
 
9945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9946
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9947
f_charbig = 'just inserted'
 
9948
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9949
DELETE FROM t0_aux
 
9950
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9953
'just inserted' FROM t0_template
 
9954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9955
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9956
BEGIN
 
9957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9958
f_charbig = 'updated by trigger'
 
9959
      WHERE f_int1 = new.f_int1;
 
9960
END|
 
9961
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9962
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9964
        
 
9965
# check trigger-2 success:      1
 
9966
DROP TRIGGER trg_1;
 
9967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9969
f_charbig = 'just inserted'
 
9970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9971
DELETE FROM t0_aux
 
9972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9974
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9975
'just inserted' FROM t0_template
 
9976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9977
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9978
BEGIN
 
9979
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9980
f_charbig = 'updated by trigger'
 
9981
      WHERE f_int1 = new.f_int1;
 
9982
END|
 
9983
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9984
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9985
        
 
9986
# check trigger-3 success:      1
 
9987
DROP TRIGGER trg_1;
 
9988
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9989
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9990
f_charbig = 'just inserted'
 
9991
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9992
DELETE FROM t0_aux
 
9993
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9995
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9996
'just inserted' FROM t0_template
 
9997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9998
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9999
BEGIN
 
10000
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10001
f_charbig = 'updated by trigger'
 
10002
      WHERE f_int1 = - old.f_int1;
 
10003
END|
 
10004
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10005
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10006
        
 
10007
# check trigger-4 success:      1
 
10008
DROP TRIGGER trg_1;
 
10009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10011
f_charbig = 'just inserted'
 
10012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10013
DELETE FROM t0_aux
 
10014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10017
'just inserted' FROM t0_template
 
10018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10019
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10020
BEGIN
 
10021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10022
f_charbig = 'updated by trigger'
 
10023
      WHERE f_int1 = new.f_int1;
 
10024
END|
 
10025
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10026
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10027
        
 
10028
# check trigger-5 success:      1
 
10029
DROP TRIGGER trg_1;
 
10030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10032
f_charbig = 'just inserted'
 
10033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10034
DELETE FROM t0_aux
 
10035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10037
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10038
'just inserted' FROM t0_template
 
10039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10040
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10041
BEGIN
 
10042
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10043
f_charbig = 'updated by trigger'
 
10044
      WHERE f_int1 = - old.f_int1;
 
10045
END|
 
10046
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10047
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10048
        
 
10049
# check trigger-6 success:      1
 
10050
DROP TRIGGER trg_1;
 
10051
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10052
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10053
f_charbig = 'just inserted'
 
10054
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10055
DELETE FROM t0_aux
 
10056
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10058
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10059
'just inserted' FROM t0_template
 
10060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10061
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10062
BEGIN
 
10063
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10064
f_charbig = 'updated by trigger'
 
10065
      WHERE f_int1 = - old.f_int1;
 
10066
END|
 
10067
DELETE FROM t0_aux
 
10068
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10069
        
 
10070
# check trigger-7 success:      1
 
10071
DROP TRIGGER trg_1;
 
10072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10074
f_charbig = 'just inserted'
 
10075
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10076
DELETE FROM t0_aux
 
10077
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10078
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10079
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10080
'just inserted' FROM t0_template
 
10081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10082
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10083
BEGIN
 
10084
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10085
f_charbig = 'updated by trigger'
 
10086
      WHERE f_int1 = - old.f_int1;
 
10087
END|
 
10088
DELETE FROM t0_aux
 
10089
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10090
        
 
10091
# check trigger-8 success:      1
 
10092
DROP TRIGGER trg_1;
 
10093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10095
f_charbig = 'just inserted'
 
10096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10097
DELETE FROM t0_aux
 
10098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10099
DELETE FROM t1
 
10100
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10101
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10102
BEGIN
 
10103
SET new.f_int1 = old.f_int1 + @max_row,
 
10104
new.f_int2 = old.f_int2 - @max_row,
 
10105
new.f_charbig = '####updated per update trigger####';
 
10106
END|
 
10107
UPDATE t1
 
10108
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10109
f_charbig = '####updated per update statement itself####';
 
10110
        
 
10111
# check trigger-9 success:      1
 
10112
DROP TRIGGER trg_2;
 
10113
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10114
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10115
f_charbig = CONCAT('===',f_char1,'===');
 
10116
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10117
BEGIN
 
10118
SET new.f_int1 = new.f_int1 + @max_row,
 
10119
new.f_int2 = new.f_int2 - @max_row,
 
10120
new.f_charbig = '####updated per update trigger####';
 
10121
END|
 
10122
UPDATE t1
 
10123
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10124
f_charbig = '####updated per update statement itself####';
 
10125
        
 
10126
# check trigger-10 success:     1
 
10127
DROP TRIGGER trg_2;
 
10128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10130
f_charbig = CONCAT('===',f_char1,'===');
 
10131
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10132
BEGIN
 
10133
SET new.f_int1 = @my_max1 + @counter,
 
10134
new.f_int2 = @my_min2 - @counter,
 
10135
new.f_charbig = '####updated per insert trigger####';
 
10136
SET @counter = @counter + 1;
 
10137
END|
 
10138
SET @counter = 1;
 
10139
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10140
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10141
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10142
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10143
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10144
ORDER BY f_int1;
 
10145
DROP TRIGGER trg_3;
 
10146
        
 
10147
# check trigger-11 success:     1
 
10148
DELETE FROM t1
 
10149
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10150
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10151
AND f_charbig = '####updated per insert trigger####';
 
10152
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10153
BEGIN
 
10154
SET new.f_int1 = @my_max1 + @counter,
 
10155
new.f_int2 = @my_min2 - @counter,
 
10156
new.f_charbig = '####updated per insert trigger####';
 
10157
SET @counter = @counter + 1;
 
10158
END|
 
10159
SET @counter = 1;
 
10160
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10161
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10162
SELECT CAST(f_int1 AS CHAR),
 
10163
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10165
ORDER BY f_int1;
 
10166
DROP TRIGGER trg_3;
 
10167
        
 
10168
# check trigger-12 success:     1
 
10169
DELETE FROM t1
 
10170
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10171
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10172
AND f_charbig = '####updated per insert trigger####';
 
10173
ANALYZE  TABLE t1;
 
10174
Table   Op      Msg_type        Msg_text
 
10175
test.t1 analyze status  OK
 
10176
CHECK    TABLE t1 EXTENDED;
 
10177
Table   Op      Msg_type        Msg_text
 
10178
test.t1 check   status  OK
 
10179
CHECKSUM TABLE t1 EXTENDED;
 
10180
Table   Checksum
 
10181
test.t1 <some_value>
 
10182
OPTIMIZE TABLE t1;
 
10183
Table   Op      Msg_type        Msg_text
 
10184
test.t1 optimize        status  OK
 
10185
# check layout success:    1
 
10186
REPAIR   TABLE t1 EXTENDED;
 
10187
Table   Op      Msg_type        Msg_text
 
10188
test.t1 repair  status  OK
 
10189
# check layout success:    1
 
10190
TRUNCATE t1;
 
10191
        
 
10192
# check TRUNCATE success:       1
 
10193
# check layout success:    1
 
10194
# End usability test (inc/partition_check.inc)
 
10195
DROP TABLE t1;
 
10196
CREATE TABLE t1 (
 
10197
f_int1 INTEGER,
 
10198
f_int2 INTEGER,
 
10199
f_char1 CHAR(20),
 
10200
f_char2 CHAR(20),
 
10201
f_charbig VARCHAR(1000)
 
10202
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
10203
)
 
10204
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
10205
(PARTITION part1 VALUES LESS THAN (0)
 
10206
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
10207
PARTITION part2 VALUES LESS THAN (5)
 
10208
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
10209
PARTITION part3 VALUES LESS THAN (10)
 
10210
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
10211
PARTITION part4 VALUES LESS THAN (2147483646)
 
10212
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
10213
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10214
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10215
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10216
ALTER TABLE t1 DROP INDEX uidx1;
 
10217
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10218
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10219
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10220
# Start usability test (inc/partition_check.inc)
 
10221
create_command
 
10222
SHOW CREATE TABLE t1;
 
10223
Table   Create Table
 
10224
t1      CREATE TABLE `t1` (
 
10225
  `f_int1` int(11) DEFAULT NULL,
 
10226
  `f_int2` int(11) DEFAULT NULL,
 
10227
  `f_char1` char(20) DEFAULT NULL,
 
10228
  `f_char2` char(20) DEFAULT NULL,
 
10229
  `f_charbig` varchar(1000) DEFAULT NULL
 
10230
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
10231
/*!50100 PARTITION BY RANGE (f_int1)
 
10232
SUBPARTITION BY KEY (f_int2)
 
10233
(PARTITION part1 VALUES LESS THAN (0)
 
10234
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
10235
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
10236
 PARTITION part2 VALUES LESS THAN (5)
 
10237
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
10238
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
10239
 PARTITION part3 VALUES LESS THAN (10)
 
10240
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
10241
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
10242
 PARTITION part4 VALUES LESS THAN (2147483646)
 
10243
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
10244
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
10245
 
 
10246
unified filelist
 
10247
t1#P#part1#SP#subpart11.MYD
 
10248
t1#P#part1#SP#subpart11.MYI
 
10249
t1#P#part1#SP#subpart12.MYD
 
10250
t1#P#part1#SP#subpart12.MYI
 
10251
t1#P#part2#SP#subpart21.MYD
 
10252
t1#P#part2#SP#subpart21.MYI
 
10253
t1#P#part2#SP#subpart22.MYD
 
10254
t1#P#part2#SP#subpart22.MYI
 
10255
t1#P#part3#SP#subpart31.MYD
 
10256
t1#P#part3#SP#subpart31.MYI
 
10257
t1#P#part3#SP#subpart32.MYD
 
10258
t1#P#part3#SP#subpart32.MYI
 
10259
t1#P#part4#SP#subpart41.MYD
 
10260
t1#P#part4#SP#subpart41.MYI
 
10261
t1#P#part4#SP#subpart42.MYD
 
10262
t1#P#part4#SP#subpart42.MYI
 
10263
t1.frm
 
10264
t1.par
 
10265
 
 
10266
# check prerequisites-1 success:    1
 
10267
# check COUNT(*) success:    1
 
10268
# check MIN/MAX(f_int1) success:    1
 
10269
# check MIN/MAX(f_int2) success:    1
 
10270
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10271
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10272
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10273
WHERE f_int1 IN (2,3);
 
10274
# check prerequisites-3 success:    1
 
10275
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10276
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10277
# check read via f_int1 success: 1
 
10278
# check read via f_int2 success: 1
 
10279
        
 
10280
# check multiple-1 success:     1
 
10281
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10282
        
 
10283
# check multiple-2 success:     1
 
10284
INSERT INTO t1 SELECT * FROM t0_template
 
10285
WHERE MOD(f_int1,3) = 0;
 
10286
        
 
10287
# check multiple-3 success:     1
 
10288
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10289
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10290
AND @max_row_div2 + @max_row_div4;
 
10291
        
 
10292
# check multiple-4 success:     1
 
10293
DELETE FROM t1
 
10294
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10295
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10296
        
 
10297
# check multiple-5 success:     1
 
10298
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10299
INSERT INTO t1
 
10300
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10301
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10302
f_charbig = '#SINGLE#';
 
10303
        
 
10304
# check single-1 success:       1
 
10305
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10306
INSERT INTO t1
 
10307
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10308
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10309
f_charbig = '#SINGLE#';
 
10310
        
 
10311
# check single-2 success:       1
 
10312
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10313
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10314
UPDATE t1 SET f_int1 = @cur_value2
 
10315
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10316
        
 
10317
# check single-3 success:       1
 
10318
SET @cur_value1= -1;
 
10319
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10320
UPDATE t1 SET f_int1 = @cur_value1
 
10321
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10322
        
 
10323
# check single-4 success:       1
 
10324
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10325
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10326
        
 
10327
# check single-5 success:       1
 
10328
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10329
        
 
10330
# check single-6 success:       1
 
10331
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10332
ERROR HY000: Table has no partition for value 2147483647
 
10333
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10334
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10335
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10336
f_charbig = '#NULL#';
 
10337
INSERT INTO t1
 
10338
SET f_int1 = NULL , f_int2 = -@max_row,
 
10339
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10340
f_charbig = '#NULL#';
 
10341
# check null success:    1
 
10342
        
 
10343
# check null-1 success:         1
 
10344
UPDATE t1 SET f_int1 = -@max_row
 
10345
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10346
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10347
        
 
10348
# check null-2 success:         1
 
10349
UPDATE t1 SET f_int1 = NULL
 
10350
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10351
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10352
        
 
10353
# check null-3 success:         1
 
10354
DELETE FROM t1
 
10355
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10356
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10357
        
 
10358
# check null-4 success:         1
 
10359
DELETE FROM t1
 
10360
WHERE f_int1 = 0 AND f_int2 = 0
 
10361
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10362
AND f_charbig = '#NULL#';
 
10363
SET AUTOCOMMIT= 0;
 
10364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10365
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10366
FROM t0_template source_tab
 
10367
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10368
        
 
10369
# check transactions-1 success:         1
 
10370
COMMIT WORK;
 
10371
        
 
10372
# check transactions-2 success:         1
 
10373
ROLLBACK WORK;
 
10374
        
 
10375
# check transactions-3 success:         1
 
10376
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10377
COMMIT WORK;
 
10378
ROLLBACK WORK;
 
10379
        
 
10380
# check transactions-4 success:         1
 
10381
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10382
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10383
FROM t0_template source_tab
 
10384
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10385
        
 
10386
# check transactions-5 success:         1
 
10387
ROLLBACK WORK;
 
10388
Warnings:
 
10389
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
10390
        
 
10391
# check transactions-6 success:         1
 
10392
# INFO: Storage engine used for t1 seems to be not transactional.
 
10393
COMMIT;
 
10394
        
 
10395
# check transactions-7 success:         1
 
10396
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10397
COMMIT WORK;
 
10398
SET @@session.sql_mode = 'traditional';
 
10399
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10400
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10401
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10402
'', '', 'was inserted' FROM t0_template
 
10403
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10404
ERROR 22012: Division by 0
 
10405
COMMIT;
 
10406
        
 
10407
# check transactions-8 success:         1
 
10408
# INFO: Storage engine used for t1 seems to be unable to revert
 
10409
#       changes made by the failing statement.
 
10410
SET @@session.sql_mode = '';
 
10411
SET AUTOCOMMIT= 1;
 
10412
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10413
COMMIT WORK;
 
10414
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10415
        
 
10416
# check special-1 success:      1
 
10417
UPDATE t1 SET f_charbig = '';
 
10418
        
 
10419
# check special-2 success:      1
 
10420
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10421
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10422
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10424
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10425
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10426
'just inserted' FROM t0_template
 
10427
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10428
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10429
BEGIN
 
10430
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10431
f_charbig = 'updated by trigger'
 
10432
      WHERE f_int1 = new.f_int1;
 
10433
END|
 
10434
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10435
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10437
        
 
10438
# check trigger-1 success:      1
 
10439
DROP TRIGGER trg_1;
 
10440
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10441
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10442
f_charbig = 'just inserted'
 
10443
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10444
DELETE FROM t0_aux
 
10445
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10446
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10447
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10448
'just inserted' FROM t0_template
 
10449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10450
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10451
BEGIN
 
10452
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10453
f_charbig = 'updated by trigger'
 
10454
      WHERE f_int1 = new.f_int1;
 
10455
END|
 
10456
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10457
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10458
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10459
        
 
10460
# check trigger-2 success:      1
 
10461
DROP TRIGGER trg_1;
 
10462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10464
f_charbig = 'just inserted'
 
10465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10466
DELETE FROM t0_aux
 
10467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10470
'just inserted' FROM t0_template
 
10471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10472
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10473
BEGIN
 
10474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10475
f_charbig = 'updated by trigger'
 
10476
      WHERE f_int1 = new.f_int1;
 
10477
END|
 
10478
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10480
        
 
10481
# check trigger-3 success:      1
 
10482
DROP TRIGGER trg_1;
 
10483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10485
f_charbig = 'just inserted'
 
10486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10487
DELETE FROM t0_aux
 
10488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10491
'just inserted' FROM t0_template
 
10492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10493
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10494
BEGIN
 
10495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10496
f_charbig = 'updated by trigger'
 
10497
      WHERE f_int1 = - old.f_int1;
 
10498
END|
 
10499
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10500
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10501
        
 
10502
# check trigger-4 success:      1
 
10503
DROP TRIGGER trg_1;
 
10504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10506
f_charbig = 'just inserted'
 
10507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10508
DELETE FROM t0_aux
 
10509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10512
'just inserted' FROM t0_template
 
10513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10514
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10515
BEGIN
 
10516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10517
f_charbig = 'updated by trigger'
 
10518
      WHERE f_int1 = new.f_int1;
 
10519
END|
 
10520
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10521
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10522
        
 
10523
# check trigger-5 success:      1
 
10524
DROP TRIGGER trg_1;
 
10525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10527
f_charbig = 'just inserted'
 
10528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10529
DELETE FROM t0_aux
 
10530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10533
'just inserted' FROM t0_template
 
10534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10535
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10536
BEGIN
 
10537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10538
f_charbig = 'updated by trigger'
 
10539
      WHERE f_int1 = - old.f_int1;
 
10540
END|
 
10541
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10542
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10543
        
 
10544
# check trigger-6 success:      1
 
10545
DROP TRIGGER trg_1;
 
10546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10548
f_charbig = 'just inserted'
 
10549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10550
DELETE FROM t0_aux
 
10551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10554
'just inserted' FROM t0_template
 
10555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10556
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10557
BEGIN
 
10558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10559
f_charbig = 'updated by trigger'
 
10560
      WHERE f_int1 = - old.f_int1;
 
10561
END|
 
10562
DELETE FROM t0_aux
 
10563
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10564
        
 
10565
# check trigger-7 success:      1
 
10566
DROP TRIGGER trg_1;
 
10567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10569
f_charbig = 'just inserted'
 
10570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10571
DELETE FROM t0_aux
 
10572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10573
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10574
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10575
'just inserted' FROM t0_template
 
10576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10577
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10578
BEGIN
 
10579
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10580
f_charbig = 'updated by trigger'
 
10581
      WHERE f_int1 = - old.f_int1;
 
10582
END|
 
10583
DELETE FROM t0_aux
 
10584
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10585
        
 
10586
# check trigger-8 success:      1
 
10587
DROP TRIGGER trg_1;
 
10588
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10589
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10590
f_charbig = 'just inserted'
 
10591
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10592
DELETE FROM t0_aux
 
10593
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10594
DELETE FROM t1
 
10595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10596
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10597
BEGIN
 
10598
SET new.f_int1 = old.f_int1 + @max_row,
 
10599
new.f_int2 = old.f_int2 - @max_row,
 
10600
new.f_charbig = '####updated per update trigger####';
 
10601
END|
 
10602
UPDATE t1
 
10603
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10604
f_charbig = '####updated per update statement itself####';
 
10605
        
 
10606
# check trigger-9 success:      1
 
10607
DROP TRIGGER trg_2;
 
10608
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10609
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10610
f_charbig = CONCAT('===',f_char1,'===');
 
10611
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10612
BEGIN
 
10613
SET new.f_int1 = new.f_int1 + @max_row,
 
10614
new.f_int2 = new.f_int2 - @max_row,
 
10615
new.f_charbig = '####updated per update trigger####';
 
10616
END|
 
10617
UPDATE t1
 
10618
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10619
f_charbig = '####updated per update statement itself####';
 
10620
        
 
10621
# check trigger-10 success:     1
 
10622
DROP TRIGGER trg_2;
 
10623
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10624
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10625
f_charbig = CONCAT('===',f_char1,'===');
 
10626
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10627
BEGIN
 
10628
SET new.f_int1 = @my_max1 + @counter,
 
10629
new.f_int2 = @my_min2 - @counter,
 
10630
new.f_charbig = '####updated per insert trigger####';
 
10631
SET @counter = @counter + 1;
 
10632
END|
 
10633
SET @counter = 1;
 
10634
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10635
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10636
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10637
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10639
ORDER BY f_int1;
 
10640
DROP TRIGGER trg_3;
 
10641
        
 
10642
# check trigger-11 success:     1
 
10643
DELETE FROM t1
 
10644
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10645
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10646
AND f_charbig = '####updated per insert trigger####';
 
10647
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10648
BEGIN
 
10649
SET new.f_int1 = @my_max1 + @counter,
 
10650
new.f_int2 = @my_min2 - @counter,
 
10651
new.f_charbig = '####updated per insert trigger####';
 
10652
SET @counter = @counter + 1;
 
10653
END|
 
10654
SET @counter = 1;
 
10655
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10656
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10657
SELECT CAST(f_int1 AS CHAR),
 
10658
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10660
ORDER BY f_int1;
 
10661
DROP TRIGGER trg_3;
 
10662
        
 
10663
# check trigger-12 success:     1
 
10664
DELETE FROM t1
 
10665
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10666
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10667
AND f_charbig = '####updated per insert trigger####';
 
10668
ANALYZE  TABLE t1;
 
10669
Table   Op      Msg_type        Msg_text
 
10670
test.t1 analyze status  OK
 
10671
CHECK    TABLE t1 EXTENDED;
 
10672
Table   Op      Msg_type        Msg_text
 
10673
test.t1 check   status  OK
 
10674
CHECKSUM TABLE t1 EXTENDED;
 
10675
Table   Checksum
 
10676
test.t1 <some_value>
 
10677
OPTIMIZE TABLE t1;
 
10678
Table   Op      Msg_type        Msg_text
 
10679
test.t1 optimize        status  OK
 
10680
# check layout success:    1
 
10681
REPAIR   TABLE t1 EXTENDED;
 
10682
Table   Op      Msg_type        Msg_text
 
10683
test.t1 repair  status  OK
 
10684
# check layout success:    1
 
10685
TRUNCATE t1;
 
10686
        
 
10687
# check TRUNCATE success:       1
 
10688
# check layout success:    1
 
10689
# End usability test (inc/partition_check.inc)
 
10690
DROP TABLE t1;
 
10691
CREATE TABLE t1 (
 
10692
f_int1 INTEGER,
 
10693
f_int2 INTEGER,
 
10694
f_char1 CHAR(20),
 
10695
f_char2 CHAR(20),
 
10696
f_charbig VARCHAR(1000)
 
10697
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
10698
)
 
10699
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
10700
(PARTITION part1 VALUES IN (0)
 
10701
(SUBPARTITION sp11, SUBPARTITION sp12),
 
10702
PARTITION part2 VALUES IN (1)
 
10703
(SUBPARTITION sp21, SUBPARTITION sp22),
 
10704
PARTITION part3 VALUES IN (2)
 
10705
(SUBPARTITION sp31, SUBPARTITION sp32),
 
10706
PARTITION part4 VALUES IN (NULL)
 
10707
(SUBPARTITION sp41, SUBPARTITION sp42));
 
10708
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10709
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10710
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10711
ALTER TABLE t1 DROP INDEX uidx1;
 
10712
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10713
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10714
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10715
# Start usability test (inc/partition_check.inc)
 
10716
create_command
 
10717
SHOW CREATE TABLE t1;
 
10718
Table   Create Table
 
10719
t1      CREATE TABLE `t1` (
 
10720
  `f_int1` int(11) DEFAULT NULL,
 
10721
  `f_int2` int(11) DEFAULT NULL,
 
10722
  `f_char1` char(20) DEFAULT NULL,
 
10723
  `f_char2` char(20) DEFAULT NULL,
 
10724
  `f_charbig` varchar(1000) DEFAULT NULL
 
10725
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
10726
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
10727
SUBPARTITION BY HASH (f_int2 + 1)
 
10728
(PARTITION part1 VALUES IN (0)
 
10729
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
10730
  SUBPARTITION sp12 ENGINE = MyISAM),
 
10731
 PARTITION part2 VALUES IN (1)
 
10732
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
10733
  SUBPARTITION sp22 ENGINE = MyISAM),
 
10734
 PARTITION part3 VALUES IN (2)
 
10735
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
10736
  SUBPARTITION sp32 ENGINE = MyISAM),
 
10737
 PARTITION part4 VALUES IN (NULL)
 
10738
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
10739
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
10740
 
 
10741
unified filelist
 
10742
t1#P#part1#SP#sp11.MYD
 
10743
t1#P#part1#SP#sp11.MYI
 
10744
t1#P#part1#SP#sp12.MYD
 
10745
t1#P#part1#SP#sp12.MYI
 
10746
t1#P#part2#SP#sp21.MYD
 
10747
t1#P#part2#SP#sp21.MYI
 
10748
t1#P#part2#SP#sp22.MYD
 
10749
t1#P#part2#SP#sp22.MYI
 
10750
t1#P#part3#SP#sp31.MYD
 
10751
t1#P#part3#SP#sp31.MYI
 
10752
t1#P#part3#SP#sp32.MYD
 
10753
t1#P#part3#SP#sp32.MYI
 
10754
t1#P#part4#SP#sp41.MYD
 
10755
t1#P#part4#SP#sp41.MYI
 
10756
t1#P#part4#SP#sp42.MYD
 
10757
t1#P#part4#SP#sp42.MYI
 
10758
t1.frm
 
10759
t1.par
 
10760
 
 
10761
# check prerequisites-1 success:    1
 
10762
# check COUNT(*) success:    1
 
10763
# check MIN/MAX(f_int1) success:    1
 
10764
# check MIN/MAX(f_int2) success:    1
 
10765
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10766
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10767
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10768
WHERE f_int1 IN (2,3);
 
10769
# check prerequisites-3 success:    1
 
10770
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10771
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10772
# check read via f_int1 success: 1
 
10773
# check read via f_int2 success: 1
 
10774
        
 
10775
# check multiple-1 success:     1
 
10776
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10777
        
 
10778
# check multiple-2 success:     1
 
10779
INSERT INTO t1 SELECT * FROM t0_template
 
10780
WHERE MOD(f_int1,3) = 0;
 
10781
        
 
10782
# check multiple-3 success:     1
 
10783
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10784
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10785
AND @max_row_div2 + @max_row_div4;
 
10786
        
 
10787
# check multiple-4 success:     1
 
10788
DELETE FROM t1
 
10789
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10790
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10791
        
 
10792
# check multiple-5 success:     1
 
10793
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10794
INSERT INTO t1
 
10795
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10796
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10797
f_charbig = '#SINGLE#';
 
10798
        
 
10799
# check single-1 success:       1
 
10800
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10801
INSERT INTO t1
 
10802
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10803
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10804
f_charbig = '#SINGLE#';
 
10805
        
 
10806
# check single-2 success:       1
 
10807
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10808
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10809
UPDATE t1 SET f_int1 = @cur_value2
 
10810
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10811
        
 
10812
# check single-3 success:       1
 
10813
SET @cur_value1= -1;
 
10814
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10815
UPDATE t1 SET f_int1 = @cur_value1
 
10816
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10817
        
 
10818
# check single-4 success:       1
 
10819
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10820
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10821
        
 
10822
# check single-5 success:       1
 
10823
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10824
        
 
10825
# check single-6 success:       1
 
10826
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10827
        
 
10828
# check single-7 success:       1
 
10829
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10830
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10831
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10832
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10833
f_charbig = '#NULL#';
 
10834
INSERT INTO t1
 
10835
SET f_int1 = NULL , f_int2 = -@max_row,
 
10836
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10837
f_charbig = '#NULL#';
 
10838
# check null success:    1
 
10839
        
 
10840
# check null-1 success:         1
 
10841
UPDATE t1 SET f_int1 = -@max_row
 
10842
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10843
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10844
        
 
10845
# check null-2 success:         1
 
10846
UPDATE t1 SET f_int1 = NULL
 
10847
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10848
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10849
        
 
10850
# check null-3 success:         1
 
10851
DELETE FROM t1
 
10852
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10853
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10854
        
 
10855
# check null-4 success:         1
 
10856
DELETE FROM t1
 
10857
WHERE f_int1 = 0 AND f_int2 = 0
 
10858
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10859
AND f_charbig = '#NULL#';
 
10860
SET AUTOCOMMIT= 0;
 
10861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10862
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10863
FROM t0_template source_tab
 
10864
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10865
        
 
10866
# check transactions-1 success:         1
 
10867
COMMIT WORK;
 
10868
        
 
10869
# check transactions-2 success:         1
 
10870
ROLLBACK WORK;
 
10871
        
 
10872
# check transactions-3 success:         1
 
10873
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10874
COMMIT WORK;
 
10875
ROLLBACK WORK;
 
10876
        
 
10877
# check transactions-4 success:         1
 
10878
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10879
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10880
FROM t0_template source_tab
 
10881
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10882
        
 
10883
# check transactions-5 success:         1
 
10884
ROLLBACK WORK;
 
10885
Warnings:
 
10886
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
10887
        
 
10888
# check transactions-6 success:         1
 
10889
# INFO: Storage engine used for t1 seems to be not transactional.
 
10890
COMMIT;
 
10891
        
 
10892
# check transactions-7 success:         1
 
10893
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10894
COMMIT WORK;
 
10895
SET @@session.sql_mode = 'traditional';
 
10896
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10897
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10898
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10899
'', '', 'was inserted' FROM t0_template
 
10900
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10901
ERROR 22012: Division by 0
 
10902
COMMIT;
 
10903
        
 
10904
# check transactions-8 success:         1
 
10905
# INFO: Storage engine used for t1 seems to be unable to revert
 
10906
#       changes made by the failing statement.
 
10907
SET @@session.sql_mode = '';
 
10908
SET AUTOCOMMIT= 1;
 
10909
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10910
COMMIT WORK;
 
10911
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10912
        
 
10913
# check special-1 success:      1
 
10914
UPDATE t1 SET f_charbig = '';
 
10915
        
 
10916
# check special-2 success:      1
 
10917
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10918
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10919
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10921
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10922
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10923
'just inserted' FROM t0_template
 
10924
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10925
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10926
BEGIN
 
10927
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10928
f_charbig = 'updated by trigger'
 
10929
      WHERE f_int1 = new.f_int1;
 
10930
END|
 
10931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10932
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10934
        
 
10935
# check trigger-1 success:      1
 
10936
DROP TRIGGER trg_1;
 
10937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10939
f_charbig = 'just inserted'
 
10940
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10941
DELETE FROM t0_aux
 
10942
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10943
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10944
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10945
'just inserted' FROM t0_template
 
10946
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10947
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10948
BEGIN
 
10949
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10950
f_charbig = 'updated by trigger'
 
10951
      WHERE f_int1 = new.f_int1;
 
10952
END|
 
10953
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10954
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10956
        
 
10957
# check trigger-2 success:      1
 
10958
DROP TRIGGER trg_1;
 
10959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10961
f_charbig = 'just inserted'
 
10962
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10963
DELETE FROM t0_aux
 
10964
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10965
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10966
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10967
'just inserted' FROM t0_template
 
10968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10969
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10970
BEGIN
 
10971
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10972
f_charbig = 'updated by trigger'
 
10973
      WHERE f_int1 = new.f_int1;
 
10974
END|
 
10975
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10976
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10977
        
 
10978
# check trigger-3 success:      1
 
10979
DROP TRIGGER trg_1;
 
10980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10982
f_charbig = 'just inserted'
 
10983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10984
DELETE FROM t0_aux
 
10985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10987
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10988
'just inserted' FROM t0_template
 
10989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10990
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10991
BEGIN
 
10992
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10993
f_charbig = 'updated by trigger'
 
10994
      WHERE f_int1 = - old.f_int1;
 
10995
END|
 
10996
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10997
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10998
        
 
10999
# check trigger-4 success:      1
 
11000
DROP TRIGGER trg_1;
 
11001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11003
f_charbig = 'just inserted'
 
11004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11005
DELETE FROM t0_aux
 
11006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11008
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11009
'just inserted' FROM t0_template
 
11010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11011
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11012
BEGIN
 
11013
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11014
f_charbig = 'updated by trigger'
 
11015
      WHERE f_int1 = new.f_int1;
 
11016
END|
 
11017
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11018
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11019
        
 
11020
# check trigger-5 success:      1
 
11021
DROP TRIGGER trg_1;
 
11022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11024
f_charbig = 'just inserted'
 
11025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11026
DELETE FROM t0_aux
 
11027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11030
'just inserted' FROM t0_template
 
11031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11032
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11033
BEGIN
 
11034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11035
f_charbig = 'updated by trigger'
 
11036
      WHERE f_int1 = - old.f_int1;
 
11037
END|
 
11038
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11039
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11040
        
 
11041
# check trigger-6 success:      1
 
11042
DROP TRIGGER trg_1;
 
11043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11044
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11045
f_charbig = 'just inserted'
 
11046
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11047
DELETE FROM t0_aux
 
11048
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11050
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11051
'just inserted' FROM t0_template
 
11052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11053
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11054
BEGIN
 
11055
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11056
f_charbig = 'updated by trigger'
 
11057
      WHERE f_int1 = - old.f_int1;
 
11058
END|
 
11059
DELETE FROM t0_aux
 
11060
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11061
        
 
11062
# check trigger-7 success:      1
 
11063
DROP TRIGGER trg_1;
 
11064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11066
f_charbig = 'just inserted'
 
11067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11068
DELETE FROM t0_aux
 
11069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11072
'just inserted' FROM t0_template
 
11073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11074
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11075
BEGIN
 
11076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11077
f_charbig = 'updated by trigger'
 
11078
      WHERE f_int1 = - old.f_int1;
 
11079
END|
 
11080
DELETE FROM t0_aux
 
11081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11082
        
 
11083
# check trigger-8 success:      1
 
11084
DROP TRIGGER trg_1;
 
11085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11087
f_charbig = 'just inserted'
 
11088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11089
DELETE FROM t0_aux
 
11090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11091
DELETE FROM t1
 
11092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11093
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11094
BEGIN
 
11095
SET new.f_int1 = old.f_int1 + @max_row,
 
11096
new.f_int2 = old.f_int2 - @max_row,
 
11097
new.f_charbig = '####updated per update trigger####';
 
11098
END|
 
11099
UPDATE t1
 
11100
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11101
f_charbig = '####updated per update statement itself####';
 
11102
        
 
11103
# check trigger-9 success:      1
 
11104
DROP TRIGGER trg_2;
 
11105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11107
f_charbig = CONCAT('===',f_char1,'===');
 
11108
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11109
BEGIN
 
11110
SET new.f_int1 = new.f_int1 + @max_row,
 
11111
new.f_int2 = new.f_int2 - @max_row,
 
11112
new.f_charbig = '####updated per update trigger####';
 
11113
END|
 
11114
UPDATE t1
 
11115
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11116
f_charbig = '####updated per update statement itself####';
 
11117
        
 
11118
# check trigger-10 success:     1
 
11119
DROP TRIGGER trg_2;
 
11120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11122
f_charbig = CONCAT('===',f_char1,'===');
 
11123
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11124
BEGIN
 
11125
SET new.f_int1 = @my_max1 + @counter,
 
11126
new.f_int2 = @my_min2 - @counter,
 
11127
new.f_charbig = '####updated per insert trigger####';
 
11128
SET @counter = @counter + 1;
 
11129
END|
 
11130
SET @counter = 1;
 
11131
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11132
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11133
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11134
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11136
ORDER BY f_int1;
 
11137
DROP TRIGGER trg_3;
 
11138
        
 
11139
# check trigger-11 success:     1
 
11140
DELETE FROM t1
 
11141
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11142
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11143
AND f_charbig = '####updated per insert trigger####';
 
11144
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11145
BEGIN
 
11146
SET new.f_int1 = @my_max1 + @counter,
 
11147
new.f_int2 = @my_min2 - @counter,
 
11148
new.f_charbig = '####updated per insert trigger####';
 
11149
SET @counter = @counter + 1;
 
11150
END|
 
11151
SET @counter = 1;
 
11152
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11153
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11154
SELECT CAST(f_int1 AS CHAR),
 
11155
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11157
ORDER BY f_int1;
 
11158
DROP TRIGGER trg_3;
 
11159
        
 
11160
# check trigger-12 success:     1
 
11161
DELETE FROM t1
 
11162
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11163
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11164
AND f_charbig = '####updated per insert trigger####';
 
11165
ANALYZE  TABLE t1;
 
11166
Table   Op      Msg_type        Msg_text
 
11167
test.t1 analyze status  OK
 
11168
CHECK    TABLE t1 EXTENDED;
 
11169
Table   Op      Msg_type        Msg_text
 
11170
test.t1 check   status  OK
 
11171
CHECKSUM TABLE t1 EXTENDED;
 
11172
Table   Checksum
 
11173
test.t1 <some_value>
 
11174
OPTIMIZE TABLE t1;
 
11175
Table   Op      Msg_type        Msg_text
 
11176
test.t1 optimize        status  OK
 
11177
# check layout success:    1
 
11178
REPAIR   TABLE t1 EXTENDED;
 
11179
Table   Op      Msg_type        Msg_text
 
11180
test.t1 repair  status  OK
 
11181
# check layout success:    1
 
11182
TRUNCATE t1;
 
11183
        
 
11184
# check TRUNCATE success:       1
 
11185
# check layout success:    1
 
11186
# End usability test (inc/partition_check.inc)
 
11187
DROP TABLE t1;
 
11188
CREATE TABLE t1 (
 
11189
f_int1 INTEGER,
 
11190
f_int2 INTEGER,
 
11191
f_char1 CHAR(20),
 
11192
f_char2 CHAR(20),
 
11193
f_charbig VARCHAR(1000)
 
11194
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
11195
)
 
11196
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
11197
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
11198
(PARTITION part1 VALUES IN (0),
 
11199
 PARTITION part2 VALUES IN (1),
 
11200
 PARTITION part3 VALUES IN (NULL));
 
11201
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11202
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11203
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11204
ALTER TABLE t1 DROP INDEX uidx1;
 
11205
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11206
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11207
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11208
# Start usability test (inc/partition_check.inc)
 
11209
create_command
 
11210
SHOW CREATE TABLE t1;
 
11211
Table   Create Table
 
11212
t1      CREATE TABLE `t1` (
 
11213
  `f_int1` int(11) DEFAULT NULL,
 
11214
  `f_int2` int(11) DEFAULT NULL,
 
11215
  `f_char1` char(20) DEFAULT NULL,
 
11216
  `f_char2` char(20) DEFAULT NULL,
 
11217
  `f_charbig` varchar(1000) DEFAULT NULL
 
11218
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
11219
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
11220
SUBPARTITION BY KEY (f_int2)
 
11221
SUBPARTITIONS 3
 
11222
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
11223
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
11224
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
11225
 
 
11226
unified filelist
 
11227
t1#P#part1#SP#part1sp0.MYD
 
11228
t1#P#part1#SP#part1sp0.MYI
 
11229
t1#P#part1#SP#part1sp1.MYD
 
11230
t1#P#part1#SP#part1sp1.MYI
 
11231
t1#P#part1#SP#part1sp2.MYD
 
11232
t1#P#part1#SP#part1sp2.MYI
 
11233
t1#P#part2#SP#part2sp0.MYD
 
11234
t1#P#part2#SP#part2sp0.MYI
 
11235
t1#P#part2#SP#part2sp1.MYD
 
11236
t1#P#part2#SP#part2sp1.MYI
 
11237
t1#P#part2#SP#part2sp2.MYD
 
11238
t1#P#part2#SP#part2sp2.MYI
 
11239
t1#P#part3#SP#part3sp0.MYD
 
11240
t1#P#part3#SP#part3sp0.MYI
 
11241
t1#P#part3#SP#part3sp1.MYD
 
11242
t1#P#part3#SP#part3sp1.MYI
 
11243
t1#P#part3#SP#part3sp2.MYD
 
11244
t1#P#part3#SP#part3sp2.MYI
 
11245
t1.frm
 
11246
t1.par
 
11247
 
 
11248
# check prerequisites-1 success:    1
 
11249
# check COUNT(*) success:    1
 
11250
# check MIN/MAX(f_int1) success:    1
 
11251
# check MIN/MAX(f_int2) success:    1
 
11252
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11253
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11254
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11255
WHERE f_int1 IN (2,3);
 
11256
# check prerequisites-3 success:    1
 
11257
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11258
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11259
# check read via f_int1 success: 1
 
11260
# check read via f_int2 success: 1
 
11261
        
 
11262
# check multiple-1 success:     1
 
11263
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11264
        
 
11265
# check multiple-2 success:     1
 
11266
INSERT INTO t1 SELECT * FROM t0_template
 
11267
WHERE MOD(f_int1,3) = 0;
 
11268
        
 
11269
# check multiple-3 success:     1
 
11270
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11271
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11272
AND @max_row_div2 + @max_row_div4;
 
11273
        
 
11274
# check multiple-4 success:     1
 
11275
DELETE FROM t1
 
11276
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11277
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11278
        
 
11279
# check multiple-5 success:     1
 
11280
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11281
INSERT INTO t1
 
11282
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11283
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11284
f_charbig = '#SINGLE#';
 
11285
        
 
11286
# check single-1 success:       1
 
11287
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11288
INSERT INTO t1
 
11289
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11290
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11291
f_charbig = '#SINGLE#';
 
11292
        
 
11293
# check single-2 success:       1
 
11294
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11295
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11296
UPDATE t1 SET f_int1 = @cur_value2
 
11297
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11298
        
 
11299
# check single-3 success:       1
 
11300
SET @cur_value1= -1;
 
11301
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11302
UPDATE t1 SET f_int1 = @cur_value1
 
11303
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11304
        
 
11305
# check single-4 success:       1
 
11306
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11307
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11308
        
 
11309
# check single-5 success:       1
 
11310
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11311
        
 
11312
# check single-6 success:       1
 
11313
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11314
        
 
11315
# check single-7 success:       1
 
11316
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11317
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11318
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11319
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11320
f_charbig = '#NULL#';
 
11321
INSERT INTO t1
 
11322
SET f_int1 = NULL , f_int2 = -@max_row,
 
11323
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11324
f_charbig = '#NULL#';
 
11325
# check null success:    1
 
11326
        
 
11327
# check null-1 success:         1
 
11328
UPDATE t1 SET f_int1 = -@max_row
 
11329
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11330
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11331
        
 
11332
# check null-2 success:         1
 
11333
UPDATE t1 SET f_int1 = NULL
 
11334
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11335
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11336
        
 
11337
# check null-3 success:         1
 
11338
DELETE FROM t1
 
11339
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11340
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11341
        
 
11342
# check null-4 success:         1
 
11343
DELETE FROM t1
 
11344
WHERE f_int1 = 0 AND f_int2 = 0
 
11345
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11346
AND f_charbig = '#NULL#';
 
11347
SET AUTOCOMMIT= 0;
 
11348
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11349
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11350
FROM t0_template source_tab
 
11351
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11352
        
 
11353
# check transactions-1 success:         1
 
11354
COMMIT WORK;
 
11355
        
 
11356
# check transactions-2 success:         1
 
11357
ROLLBACK WORK;
 
11358
        
 
11359
# check transactions-3 success:         1
 
11360
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11361
COMMIT WORK;
 
11362
ROLLBACK WORK;
 
11363
        
 
11364
# check transactions-4 success:         1
 
11365
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11366
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11367
FROM t0_template source_tab
 
11368
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11369
        
 
11370
# check transactions-5 success:         1
 
11371
ROLLBACK WORK;
 
11372
Warnings:
 
11373
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11374
        
 
11375
# check transactions-6 success:         1
 
11376
# INFO: Storage engine used for t1 seems to be not transactional.
 
11377
COMMIT;
 
11378
        
 
11379
# check transactions-7 success:         1
 
11380
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11381
COMMIT WORK;
 
11382
SET @@session.sql_mode = 'traditional';
 
11383
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11384
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11385
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11386
'', '', 'was inserted' FROM t0_template
 
11387
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11388
ERROR 22012: Division by 0
 
11389
COMMIT;
 
11390
        
 
11391
# check transactions-8 success:         1
 
11392
# INFO: Storage engine used for t1 seems to be unable to revert
 
11393
#       changes made by the failing statement.
 
11394
SET @@session.sql_mode = '';
 
11395
SET AUTOCOMMIT= 1;
 
11396
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11397
COMMIT WORK;
 
11398
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11399
        
 
11400
# check special-1 success:      1
 
11401
UPDATE t1 SET f_charbig = '';
 
11402
        
 
11403
# check special-2 success:      1
 
11404
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11405
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11406
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11407
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11408
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11409
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11410
'just inserted' FROM t0_template
 
11411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11412
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11413
BEGIN
 
11414
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11415
f_charbig = 'updated by trigger'
 
11416
      WHERE f_int1 = new.f_int1;
 
11417
END|
 
11418
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11419
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11421
        
 
11422
# check trigger-1 success:      1
 
11423
DROP TRIGGER trg_1;
 
11424
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11425
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11426
f_charbig = 'just inserted'
 
11427
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11428
DELETE FROM t0_aux
 
11429
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11430
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11431
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11432
'just inserted' FROM t0_template
 
11433
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11434
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11435
BEGIN
 
11436
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11437
f_charbig = 'updated by trigger'
 
11438
      WHERE f_int1 = new.f_int1;
 
11439
END|
 
11440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11441
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11443
        
 
11444
# check trigger-2 success:      1
 
11445
DROP TRIGGER trg_1;
 
11446
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11447
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11448
f_charbig = 'just inserted'
 
11449
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11450
DELETE FROM t0_aux
 
11451
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11452
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11453
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11454
'just inserted' FROM t0_template
 
11455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11456
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11457
BEGIN
 
11458
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11459
f_charbig = 'updated by trigger'
 
11460
      WHERE f_int1 = new.f_int1;
 
11461
END|
 
11462
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11463
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11464
        
 
11465
# check trigger-3 success:      1
 
11466
DROP TRIGGER trg_1;
 
11467
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11468
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11469
f_charbig = 'just inserted'
 
11470
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11471
DELETE FROM t0_aux
 
11472
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11473
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11474
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11475
'just inserted' FROM t0_template
 
11476
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11477
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11478
BEGIN
 
11479
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11480
f_charbig = 'updated by trigger'
 
11481
      WHERE f_int1 = - old.f_int1;
 
11482
END|
 
11483
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11484
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11485
        
 
11486
# check trigger-4 success:      1
 
11487
DROP TRIGGER trg_1;
 
11488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11490
f_charbig = 'just inserted'
 
11491
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11492
DELETE FROM t0_aux
 
11493
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11494
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11495
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11496
'just inserted' FROM t0_template
 
11497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11498
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11499
BEGIN
 
11500
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11501
f_charbig = 'updated by trigger'
 
11502
      WHERE f_int1 = new.f_int1;
 
11503
END|
 
11504
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11505
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11506
        
 
11507
# check trigger-5 success:      1
 
11508
DROP TRIGGER trg_1;
 
11509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11511
f_charbig = 'just inserted'
 
11512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11513
DELETE FROM t0_aux
 
11514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11517
'just inserted' FROM t0_template
 
11518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11519
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11520
BEGIN
 
11521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11522
f_charbig = 'updated by trigger'
 
11523
      WHERE f_int1 = - old.f_int1;
 
11524
END|
 
11525
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11526
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11527
        
 
11528
# check trigger-6 success:      1
 
11529
DROP TRIGGER trg_1;
 
11530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11532
f_charbig = 'just inserted'
 
11533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11534
DELETE FROM t0_aux
 
11535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11536
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11537
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11538
'just inserted' FROM t0_template
 
11539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11540
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11541
BEGIN
 
11542
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11543
f_charbig = 'updated by trigger'
 
11544
      WHERE f_int1 = - old.f_int1;
 
11545
END|
 
11546
DELETE FROM t0_aux
 
11547
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11548
        
 
11549
# check trigger-7 success:      1
 
11550
DROP TRIGGER trg_1;
 
11551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11553
f_charbig = 'just inserted'
 
11554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11555
DELETE FROM t0_aux
 
11556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11559
'just inserted' FROM t0_template
 
11560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11561
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11562
BEGIN
 
11563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11564
f_charbig = 'updated by trigger'
 
11565
      WHERE f_int1 = - old.f_int1;
 
11566
END|
 
11567
DELETE FROM t0_aux
 
11568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11569
        
 
11570
# check trigger-8 success:      1
 
11571
DROP TRIGGER trg_1;
 
11572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11574
f_charbig = 'just inserted'
 
11575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11576
DELETE FROM t0_aux
 
11577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11578
DELETE FROM t1
 
11579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11580
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11581
BEGIN
 
11582
SET new.f_int1 = old.f_int1 + @max_row,
 
11583
new.f_int2 = old.f_int2 - @max_row,
 
11584
new.f_charbig = '####updated per update trigger####';
 
11585
END|
 
11586
UPDATE t1
 
11587
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11588
f_charbig = '####updated per update statement itself####';
 
11589
        
 
11590
# check trigger-9 success:      1
 
11591
DROP TRIGGER trg_2;
 
11592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11593
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11594
f_charbig = CONCAT('===',f_char1,'===');
 
11595
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11596
BEGIN
 
11597
SET new.f_int1 = new.f_int1 + @max_row,
 
11598
new.f_int2 = new.f_int2 - @max_row,
 
11599
new.f_charbig = '####updated per update trigger####';
 
11600
END|
 
11601
UPDATE t1
 
11602
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11603
f_charbig = '####updated per update statement itself####';
 
11604
        
 
11605
# check trigger-10 success:     1
 
11606
DROP TRIGGER trg_2;
 
11607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11609
f_charbig = CONCAT('===',f_char1,'===');
 
11610
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11611
BEGIN
 
11612
SET new.f_int1 = @my_max1 + @counter,
 
11613
new.f_int2 = @my_min2 - @counter,
 
11614
new.f_charbig = '####updated per insert trigger####';
 
11615
SET @counter = @counter + 1;
 
11616
END|
 
11617
SET @counter = 1;
 
11618
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11619
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11620
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11621
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11622
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11623
ORDER BY f_int1;
 
11624
DROP TRIGGER trg_3;
 
11625
        
 
11626
# check trigger-11 success:     1
 
11627
DELETE FROM t1
 
11628
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11629
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11630
AND f_charbig = '####updated per insert trigger####';
 
11631
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11632
BEGIN
 
11633
SET new.f_int1 = @my_max1 + @counter,
 
11634
new.f_int2 = @my_min2 - @counter,
 
11635
new.f_charbig = '####updated per insert trigger####';
 
11636
SET @counter = @counter + 1;
 
11637
END|
 
11638
SET @counter = 1;
 
11639
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11640
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11641
SELECT CAST(f_int1 AS CHAR),
 
11642
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11644
ORDER BY f_int1;
 
11645
DROP TRIGGER trg_3;
 
11646
        
 
11647
# check trigger-12 success:     1
 
11648
DELETE FROM t1
 
11649
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11650
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11651
AND f_charbig = '####updated per insert trigger####';
 
11652
ANALYZE  TABLE t1;
 
11653
Table   Op      Msg_type        Msg_text
 
11654
test.t1 analyze status  OK
 
11655
CHECK    TABLE t1 EXTENDED;
 
11656
Table   Op      Msg_type        Msg_text
 
11657
test.t1 check   status  OK
 
11658
CHECKSUM TABLE t1 EXTENDED;
 
11659
Table   Checksum
 
11660
test.t1 <some_value>
 
11661
OPTIMIZE TABLE t1;
 
11662
Table   Op      Msg_type        Msg_text
 
11663
test.t1 optimize        status  OK
 
11664
# check layout success:    1
 
11665
REPAIR   TABLE t1 EXTENDED;
 
11666
Table   Op      Msg_type        Msg_text
 
11667
test.t1 repair  status  OK
 
11668
# check layout success:    1
 
11669
TRUNCATE t1;
 
11670
        
 
11671
# check TRUNCATE success:       1
 
11672
# check layout success:    1
 
11673
# End usability test (inc/partition_check.inc)
 
11674
DROP TABLE t1;
 
11675
DROP TABLE IF EXISTS t1;
 
11676
CREATE TABLE t1 (
 
11677
f_int1 INTEGER,
 
11678
f_int2 INTEGER,
 
11679
f_char1 CHAR(20),
 
11680
f_char2 CHAR(20),
 
11681
f_charbig VARCHAR(1000)
 
11682
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
11683
)
 
11684
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
11685
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11686
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11687
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11688
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
11689
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11690
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11691
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11692
# Start usability test (inc/partition_check.inc)
 
11693
create_command
 
11694
SHOW CREATE TABLE t1;
 
11695
Table   Create Table
 
11696
t1      CREATE TABLE `t1` (
 
11697
  `f_int1` int(11) DEFAULT NULL,
 
11698
  `f_int2` int(11) DEFAULT NULL,
 
11699
  `f_char1` char(20) DEFAULT NULL,
 
11700
  `f_char2` char(20) DEFAULT NULL,
 
11701
  `f_charbig` varchar(1000) DEFAULT NULL
 
11702
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
11703
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
11704
PARTITIONS 2 */
 
11705
 
 
11706
unified filelist
 
11707
t1#P#p0.MYD
 
11708
t1#P#p0.MYI
 
11709
t1#P#p1.MYD
 
11710
t1#P#p1.MYI
 
11711
t1.frm
 
11712
t1.par
 
11713
 
 
11714
# check prerequisites-1 success:    1
 
11715
# check COUNT(*) success:    1
 
11716
# check MIN/MAX(f_int1) success:    1
 
11717
# check MIN/MAX(f_int2) success:    1
 
11718
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11719
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11720
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11721
WHERE f_int1 IN (2,3);
 
11722
# check prerequisites-3 success:    1
 
11723
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11724
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11725
# check read via f_int1 success: 1
 
11726
# check read via f_int2 success: 1
 
11727
        
 
11728
# check multiple-1 success:     1
 
11729
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11730
        
 
11731
# check multiple-2 success:     1
 
11732
INSERT INTO t1 SELECT * FROM t0_template
 
11733
WHERE MOD(f_int1,3) = 0;
 
11734
        
 
11735
# check multiple-3 success:     1
 
11736
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11737
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11738
AND @max_row_div2 + @max_row_div4;
 
11739
        
 
11740
# check multiple-4 success:     1
 
11741
DELETE FROM t1
 
11742
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11743
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11744
        
 
11745
# check multiple-5 success:     1
 
11746
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11747
INSERT INTO t1
 
11748
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11749
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11750
f_charbig = '#SINGLE#';
 
11751
        
 
11752
# check single-1 success:       1
 
11753
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11754
INSERT INTO t1
 
11755
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11756
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11757
f_charbig = '#SINGLE#';
 
11758
        
 
11759
# check single-2 success:       1
 
11760
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11761
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11762
UPDATE t1 SET f_int1 = @cur_value2
 
11763
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11764
        
 
11765
# check single-3 success:       1
 
11766
SET @cur_value1= -1;
 
11767
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11768
UPDATE t1 SET f_int1 = @cur_value1
 
11769
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11770
        
 
11771
# check single-4 success:       1
 
11772
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11773
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11774
        
 
11775
# check single-5 success:       1
 
11776
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11777
        
 
11778
# check single-6 success:       1
 
11779
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11780
        
 
11781
# check single-7 success:       1
 
11782
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11783
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11784
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11785
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11786
f_charbig = '#NULL#';
 
11787
INSERT INTO t1
 
11788
SET f_int1 = NULL , f_int2 = -@max_row,
 
11789
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11790
f_charbig = '#NULL#';
 
11791
# check null success:    1
 
11792
        
 
11793
# check null-1 success:         1
 
11794
UPDATE t1 SET f_int1 = -@max_row
 
11795
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11796
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11797
        
 
11798
# check null-2 success:         1
 
11799
UPDATE t1 SET f_int1 = NULL
 
11800
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11801
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11802
        
 
11803
# check null-3 success:         1
 
11804
DELETE FROM t1
 
11805
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11806
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11807
        
 
11808
# check null-4 success:         1
 
11809
DELETE FROM t1
 
11810
WHERE f_int1 = 0 AND f_int2 = 0
 
11811
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11812
AND f_charbig = '#NULL#';
 
11813
SET AUTOCOMMIT= 0;
 
11814
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11815
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11816
FROM t0_template source_tab
 
11817
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11818
        
 
11819
# check transactions-1 success:         1
 
11820
COMMIT WORK;
 
11821
        
 
11822
# check transactions-2 success:         1
 
11823
ROLLBACK WORK;
 
11824
        
 
11825
# check transactions-3 success:         1
 
11826
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11827
COMMIT WORK;
 
11828
ROLLBACK WORK;
 
11829
        
 
11830
# check transactions-4 success:         1
 
11831
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11832
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11833
FROM t0_template source_tab
 
11834
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11835
        
 
11836
# check transactions-5 success:         1
 
11837
ROLLBACK WORK;
 
11838
Warnings:
 
11839
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11840
        
 
11841
# check transactions-6 success:         1
 
11842
# INFO: Storage engine used for t1 seems to be not transactional.
 
11843
COMMIT;
 
11844
        
 
11845
# check transactions-7 success:         1
 
11846
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11847
COMMIT WORK;
 
11848
SET @@session.sql_mode = 'traditional';
 
11849
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11850
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11851
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11852
'', '', 'was inserted' FROM t0_template
 
11853
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11854
ERROR 22012: Division by 0
 
11855
COMMIT;
 
11856
        
 
11857
# check transactions-8 success:         1
 
11858
# INFO: Storage engine used for t1 seems to be unable to revert
 
11859
#       changes made by the failing statement.
 
11860
SET @@session.sql_mode = '';
 
11861
SET AUTOCOMMIT= 1;
 
11862
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11863
COMMIT WORK;
 
11864
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11865
        
 
11866
# check special-1 success:      1
 
11867
UPDATE t1 SET f_charbig = '';
 
11868
        
 
11869
# check special-2 success:      1
 
11870
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11871
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11872
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11873
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11874
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11875
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11876
'just inserted' FROM t0_template
 
11877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11878
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11879
BEGIN
 
11880
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11881
f_charbig = 'updated by trigger'
 
11882
      WHERE f_int1 = new.f_int1;
 
11883
END|
 
11884
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11885
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11887
        
 
11888
# check trigger-1 success:      1
 
11889
DROP TRIGGER trg_1;
 
11890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11892
f_charbig = 'just inserted'
 
11893
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11894
DELETE FROM t0_aux
 
11895
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11896
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11897
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11898
'just inserted' FROM t0_template
 
11899
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11900
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11901
BEGIN
 
11902
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11903
f_charbig = 'updated by trigger'
 
11904
      WHERE f_int1 = new.f_int1;
 
11905
END|
 
11906
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11907
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11908
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11909
        
 
11910
# check trigger-2 success:      1
 
11911
DROP TRIGGER trg_1;
 
11912
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11913
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11914
f_charbig = 'just inserted'
 
11915
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11916
DELETE FROM t0_aux
 
11917
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11918
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11919
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11920
'just inserted' FROM t0_template
 
11921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11922
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11923
BEGIN
 
11924
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11925
f_charbig = 'updated by trigger'
 
11926
      WHERE f_int1 = new.f_int1;
 
11927
END|
 
11928
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11929
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11930
        
 
11931
# check trigger-3 success:      1
 
11932
DROP TRIGGER trg_1;
 
11933
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11934
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11935
f_charbig = 'just inserted'
 
11936
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11937
DELETE FROM t0_aux
 
11938
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11939
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11940
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11941
'just inserted' FROM t0_template
 
11942
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11943
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11944
BEGIN
 
11945
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11946
f_charbig = 'updated by trigger'
 
11947
      WHERE f_int1 = - old.f_int1;
 
11948
END|
 
11949
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11950
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11951
        
 
11952
# check trigger-4 success:      1
 
11953
DROP TRIGGER trg_1;
 
11954
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11955
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11956
f_charbig = 'just inserted'
 
11957
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11958
DELETE FROM t0_aux
 
11959
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11960
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11961
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11962
'just inserted' FROM t0_template
 
11963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11964
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11965
BEGIN
 
11966
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11967
f_charbig = 'updated by trigger'
 
11968
      WHERE f_int1 = new.f_int1;
 
11969
END|
 
11970
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11971
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11972
        
 
11973
# check trigger-5 success:      1
 
11974
DROP TRIGGER trg_1;
 
11975
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11976
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11977
f_charbig = 'just inserted'
 
11978
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11979
DELETE FROM t0_aux
 
11980
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11981
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11982
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11983
'just inserted' FROM t0_template
 
11984
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11985
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11986
BEGIN
 
11987
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11988
f_charbig = 'updated by trigger'
 
11989
      WHERE f_int1 = - old.f_int1;
 
11990
END|
 
11991
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11992
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11993
        
 
11994
# check trigger-6 success:      1
 
11995
DROP TRIGGER trg_1;
 
11996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11998
f_charbig = 'just inserted'
 
11999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12000
DELETE FROM t0_aux
 
12001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12003
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12004
'just inserted' FROM t0_template
 
12005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12006
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12007
BEGIN
 
12008
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12009
f_charbig = 'updated by trigger'
 
12010
      WHERE f_int1 = - old.f_int1;
 
12011
END|
 
12012
DELETE FROM t0_aux
 
12013
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12014
        
 
12015
# check trigger-7 success:      1
 
12016
DROP TRIGGER trg_1;
 
12017
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12018
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12019
f_charbig = 'just inserted'
 
12020
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12021
DELETE FROM t0_aux
 
12022
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12023
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12024
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12025
'just inserted' FROM t0_template
 
12026
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12027
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12028
BEGIN
 
12029
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12030
f_charbig = 'updated by trigger'
 
12031
      WHERE f_int1 = - old.f_int1;
 
12032
END|
 
12033
DELETE FROM t0_aux
 
12034
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12035
        
 
12036
# check trigger-8 success:      1
 
12037
DROP TRIGGER trg_1;
 
12038
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12039
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12040
f_charbig = 'just inserted'
 
12041
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12042
DELETE FROM t0_aux
 
12043
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12044
DELETE FROM t1
 
12045
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12046
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12047
BEGIN
 
12048
SET new.f_int1 = old.f_int1 + @max_row,
 
12049
new.f_int2 = old.f_int2 - @max_row,
 
12050
new.f_charbig = '####updated per update trigger####';
 
12051
END|
 
12052
UPDATE t1
 
12053
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12054
f_charbig = '####updated per update statement itself####';
 
12055
        
 
12056
# check trigger-9 success:      1
 
12057
DROP TRIGGER trg_2;
 
12058
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12059
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12060
f_charbig = CONCAT('===',f_char1,'===');
 
12061
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12062
BEGIN
 
12063
SET new.f_int1 = new.f_int1 + @max_row,
 
12064
new.f_int2 = new.f_int2 - @max_row,
 
12065
new.f_charbig = '####updated per update trigger####';
 
12066
END|
 
12067
UPDATE t1
 
12068
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12069
f_charbig = '####updated per update statement itself####';
 
12070
        
 
12071
# check trigger-10 success:     1
 
12072
DROP TRIGGER trg_2;
 
12073
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12074
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12075
f_charbig = CONCAT('===',f_char1,'===');
 
12076
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12077
BEGIN
 
12078
SET new.f_int1 = @my_max1 + @counter,
 
12079
new.f_int2 = @my_min2 - @counter,
 
12080
new.f_charbig = '####updated per insert trigger####';
 
12081
SET @counter = @counter + 1;
 
12082
END|
 
12083
SET @counter = 1;
 
12084
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12085
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12086
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12087
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12088
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12089
ORDER BY f_int1;
 
12090
DROP TRIGGER trg_3;
 
12091
        
 
12092
# check trigger-11 success:     1
 
12093
DELETE FROM t1
 
12094
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12095
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12096
AND f_charbig = '####updated per insert trigger####';
 
12097
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12098
BEGIN
 
12099
SET new.f_int1 = @my_max1 + @counter,
 
12100
new.f_int2 = @my_min2 - @counter,
 
12101
new.f_charbig = '####updated per insert trigger####';
 
12102
SET @counter = @counter + 1;
 
12103
END|
 
12104
SET @counter = 1;
 
12105
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12106
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12107
SELECT CAST(f_int1 AS CHAR),
 
12108
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12110
ORDER BY f_int1;
 
12111
DROP TRIGGER trg_3;
 
12112
        
 
12113
# check trigger-12 success:     1
 
12114
DELETE FROM t1
 
12115
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12116
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12117
AND f_charbig = '####updated per insert trigger####';
 
12118
ANALYZE  TABLE t1;
 
12119
Table   Op      Msg_type        Msg_text
 
12120
test.t1 analyze status  OK
 
12121
CHECK    TABLE t1 EXTENDED;
 
12122
Table   Op      Msg_type        Msg_text
 
12123
test.t1 check   status  OK
 
12124
CHECKSUM TABLE t1 EXTENDED;
 
12125
Table   Checksum
 
12126
test.t1 <some_value>
 
12127
OPTIMIZE TABLE t1;
 
12128
Table   Op      Msg_type        Msg_text
 
12129
test.t1 optimize        status  OK
 
12130
# check layout success:    1
 
12131
REPAIR   TABLE t1 EXTENDED;
 
12132
Table   Op      Msg_type        Msg_text
 
12133
test.t1 repair  status  OK
 
12134
# check layout success:    1
 
12135
TRUNCATE t1;
 
12136
        
 
12137
# check TRUNCATE success:       1
 
12138
# check layout success:    1
 
12139
# End usability test (inc/partition_check.inc)
 
12140
DROP TABLE t1;
 
12141
CREATE TABLE t1 (
 
12142
f_int1 INTEGER,
 
12143
f_int2 INTEGER,
 
12144
f_char1 CHAR(20),
 
12145
f_char2 CHAR(20),
 
12146
f_charbig VARCHAR(1000)
 
12147
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
12148
)
 
12149
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
12150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12151
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12152
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12153
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
12154
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12155
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12156
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12157
# Start usability test (inc/partition_check.inc)
 
12158
create_command
 
12159
SHOW CREATE TABLE t1;
 
12160
Table   Create Table
 
12161
t1      CREATE TABLE `t1` (
 
12162
  `f_int1` int(11) DEFAULT NULL,
 
12163
  `f_int2` int(11) DEFAULT NULL,
 
12164
  `f_char1` char(20) DEFAULT NULL,
 
12165
  `f_char2` char(20) DEFAULT NULL,
 
12166
  `f_charbig` varchar(1000) DEFAULT NULL
 
12167
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
12168
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
12169
PARTITIONS 5 */
 
12170
 
 
12171
unified filelist
 
12172
t1#P#p0.MYD
 
12173
t1#P#p0.MYI
 
12174
t1#P#p1.MYD
 
12175
t1#P#p1.MYI
 
12176
t1#P#p2.MYD
 
12177
t1#P#p2.MYI
 
12178
t1#P#p3.MYD
 
12179
t1#P#p3.MYI
 
12180
t1#P#p4.MYD
 
12181
t1#P#p4.MYI
 
12182
t1.frm
 
12183
t1.par
 
12184
 
 
12185
# check prerequisites-1 success:    1
 
12186
# check COUNT(*) success:    1
 
12187
# check MIN/MAX(f_int1) success:    1
 
12188
# check MIN/MAX(f_int2) success:    1
 
12189
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12190
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12191
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12192
WHERE f_int1 IN (2,3);
 
12193
# check prerequisites-3 success:    1
 
12194
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12195
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12196
# check read via f_int1 success: 1
 
12197
# check read via f_int2 success: 1
 
12198
        
 
12199
# check multiple-1 success:     1
 
12200
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12201
        
 
12202
# check multiple-2 success:     1
 
12203
INSERT INTO t1 SELECT * FROM t0_template
 
12204
WHERE MOD(f_int1,3) = 0;
 
12205
        
 
12206
# check multiple-3 success:     1
 
12207
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12208
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12209
AND @max_row_div2 + @max_row_div4;
 
12210
        
 
12211
# check multiple-4 success:     1
 
12212
DELETE FROM t1
 
12213
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12214
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12215
        
 
12216
# check multiple-5 success:     1
 
12217
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12218
INSERT INTO t1
 
12219
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12220
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12221
f_charbig = '#SINGLE#';
 
12222
        
 
12223
# check single-1 success:       1
 
12224
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12225
INSERT INTO t1
 
12226
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12227
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12228
f_charbig = '#SINGLE#';
 
12229
        
 
12230
# check single-2 success:       1
 
12231
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12232
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12233
UPDATE t1 SET f_int1 = @cur_value2
 
12234
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12235
        
 
12236
# check single-3 success:       1
 
12237
SET @cur_value1= -1;
 
12238
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12239
UPDATE t1 SET f_int1 = @cur_value1
 
12240
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12241
        
 
12242
# check single-4 success:       1
 
12243
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12244
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12245
        
 
12246
# check single-5 success:       1
 
12247
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12248
        
 
12249
# check single-6 success:       1
 
12250
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12251
        
 
12252
# check single-7 success:       1
 
12253
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12254
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12255
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12256
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12257
f_charbig = '#NULL#';
 
12258
INSERT INTO t1
 
12259
SET f_int1 = NULL , f_int2 = -@max_row,
 
12260
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12261
f_charbig = '#NULL#';
 
12262
# check null success:    1
 
12263
        
 
12264
# check null-1 success:         1
 
12265
UPDATE t1 SET f_int1 = -@max_row
 
12266
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12267
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12268
        
 
12269
# check null-2 success:         1
 
12270
UPDATE t1 SET f_int1 = NULL
 
12271
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12272
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12273
        
 
12274
# check null-3 success:         1
 
12275
DELETE FROM t1
 
12276
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12277
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12278
        
 
12279
# check null-4 success:         1
 
12280
DELETE FROM t1
 
12281
WHERE f_int1 = 0 AND f_int2 = 0
 
12282
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12283
AND f_charbig = '#NULL#';
 
12284
SET AUTOCOMMIT= 0;
 
12285
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12286
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12287
FROM t0_template source_tab
 
12288
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12289
        
 
12290
# check transactions-1 success:         1
 
12291
COMMIT WORK;
 
12292
        
 
12293
# check transactions-2 success:         1
 
12294
ROLLBACK WORK;
 
12295
        
 
12296
# check transactions-3 success:         1
 
12297
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12298
COMMIT WORK;
 
12299
ROLLBACK WORK;
 
12300
        
 
12301
# check transactions-4 success:         1
 
12302
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12303
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12304
FROM t0_template source_tab
 
12305
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12306
        
 
12307
# check transactions-5 success:         1
 
12308
ROLLBACK WORK;
 
12309
Warnings:
 
12310
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12311
        
 
12312
# check transactions-6 success:         1
 
12313
# INFO: Storage engine used for t1 seems to be not transactional.
 
12314
COMMIT;
 
12315
        
 
12316
# check transactions-7 success:         1
 
12317
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12318
COMMIT WORK;
 
12319
SET @@session.sql_mode = 'traditional';
 
12320
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12321
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12322
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12323
'', '', 'was inserted' FROM t0_template
 
12324
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12325
ERROR 22012: Division by 0
 
12326
COMMIT;
 
12327
        
 
12328
# check transactions-8 success:         1
 
12329
# INFO: Storage engine used for t1 seems to be unable to revert
 
12330
#       changes made by the failing statement.
 
12331
SET @@session.sql_mode = '';
 
12332
SET AUTOCOMMIT= 1;
 
12333
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12334
COMMIT WORK;
 
12335
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12336
        
 
12337
# check special-1 success:      1
 
12338
UPDATE t1 SET f_charbig = '';
 
12339
        
 
12340
# check special-2 success:      1
 
12341
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12342
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12343
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12344
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12345
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12346
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12347
'just inserted' FROM t0_template
 
12348
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12349
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12350
BEGIN
 
12351
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12352
f_charbig = 'updated by trigger'
 
12353
      WHERE f_int1 = new.f_int1;
 
12354
END|
 
12355
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12356
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12358
        
 
12359
# check trigger-1 success:      1
 
12360
DROP TRIGGER trg_1;
 
12361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12363
f_charbig = 'just inserted'
 
12364
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12365
DELETE FROM t0_aux
 
12366
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12368
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12369
'just inserted' FROM t0_template
 
12370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12371
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12372
BEGIN
 
12373
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12374
f_charbig = 'updated by trigger'
 
12375
      WHERE f_int1 = new.f_int1;
 
12376
END|
 
12377
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12378
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12380
        
 
12381
# check trigger-2 success:      1
 
12382
DROP TRIGGER trg_1;
 
12383
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12384
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12385
f_charbig = 'just inserted'
 
12386
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12387
DELETE FROM t0_aux
 
12388
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12389
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12390
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12391
'just inserted' FROM t0_template
 
12392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12393
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12394
BEGIN
 
12395
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12396
f_charbig = 'updated by trigger'
 
12397
      WHERE f_int1 = new.f_int1;
 
12398
END|
 
12399
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12400
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12401
        
 
12402
# check trigger-3 success:      1
 
12403
DROP TRIGGER trg_1;
 
12404
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12405
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12406
f_charbig = 'just inserted'
 
12407
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12408
DELETE FROM t0_aux
 
12409
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12410
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12411
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12412
'just inserted' FROM t0_template
 
12413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12414
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12415
BEGIN
 
12416
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12417
f_charbig = 'updated by trigger'
 
12418
      WHERE f_int1 = - old.f_int1;
 
12419
END|
 
12420
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12421
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12422
        
 
12423
# check trigger-4 success:      1
 
12424
DROP TRIGGER trg_1;
 
12425
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12426
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12427
f_charbig = 'just inserted'
 
12428
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12429
DELETE FROM t0_aux
 
12430
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12431
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12432
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12433
'just inserted' FROM t0_template
 
12434
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12435
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12436
BEGIN
 
12437
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12438
f_charbig = 'updated by trigger'
 
12439
      WHERE f_int1 = new.f_int1;
 
12440
END|
 
12441
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12442
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12443
        
 
12444
# check trigger-5 success:      1
 
12445
DROP TRIGGER trg_1;
 
12446
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12447
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12448
f_charbig = 'just inserted'
 
12449
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12450
DELETE FROM t0_aux
 
12451
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12452
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12453
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12454
'just inserted' FROM t0_template
 
12455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12456
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12457
BEGIN
 
12458
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12459
f_charbig = 'updated by trigger'
 
12460
      WHERE f_int1 = - old.f_int1;
 
12461
END|
 
12462
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12463
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12464
        
 
12465
# check trigger-6 success:      1
 
12466
DROP TRIGGER trg_1;
 
12467
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12468
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12469
f_charbig = 'just inserted'
 
12470
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12471
DELETE FROM t0_aux
 
12472
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12473
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12474
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12475
'just inserted' FROM t0_template
 
12476
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12477
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12478
BEGIN
 
12479
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12480
f_charbig = 'updated by trigger'
 
12481
      WHERE f_int1 = - old.f_int1;
 
12482
END|
 
12483
DELETE FROM t0_aux
 
12484
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12485
        
 
12486
# check trigger-7 success:      1
 
12487
DROP TRIGGER trg_1;
 
12488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12490
f_charbig = 'just inserted'
 
12491
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12492
DELETE FROM t0_aux
 
12493
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12494
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12495
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12496
'just inserted' FROM t0_template
 
12497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12498
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12499
BEGIN
 
12500
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12501
f_charbig = 'updated by trigger'
 
12502
      WHERE f_int1 = - old.f_int1;
 
12503
END|
 
12504
DELETE FROM t0_aux
 
12505
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12506
        
 
12507
# check trigger-8 success:      1
 
12508
DROP TRIGGER trg_1;
 
12509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12511
f_charbig = 'just inserted'
 
12512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12513
DELETE FROM t0_aux
 
12514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12515
DELETE FROM t1
 
12516
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12517
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12518
BEGIN
 
12519
SET new.f_int1 = old.f_int1 + @max_row,
 
12520
new.f_int2 = old.f_int2 - @max_row,
 
12521
new.f_charbig = '####updated per update trigger####';
 
12522
END|
 
12523
UPDATE t1
 
12524
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12525
f_charbig = '####updated per update statement itself####';
 
12526
        
 
12527
# check trigger-9 success:      1
 
12528
DROP TRIGGER trg_2;
 
12529
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12530
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12531
f_charbig = CONCAT('===',f_char1,'===');
 
12532
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12533
BEGIN
 
12534
SET new.f_int1 = new.f_int1 + @max_row,
 
12535
new.f_int2 = new.f_int2 - @max_row,
 
12536
new.f_charbig = '####updated per update trigger####';
 
12537
END|
 
12538
UPDATE t1
 
12539
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12540
f_charbig = '####updated per update statement itself####';
 
12541
        
 
12542
# check trigger-10 success:     1
 
12543
DROP TRIGGER trg_2;
 
12544
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12545
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12546
f_charbig = CONCAT('===',f_char1,'===');
 
12547
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12548
BEGIN
 
12549
SET new.f_int1 = @my_max1 + @counter,
 
12550
new.f_int2 = @my_min2 - @counter,
 
12551
new.f_charbig = '####updated per insert trigger####';
 
12552
SET @counter = @counter + 1;
 
12553
END|
 
12554
SET @counter = 1;
 
12555
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12556
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12557
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12558
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12560
ORDER BY f_int1;
 
12561
DROP TRIGGER trg_3;
 
12562
        
 
12563
# check trigger-11 success:     1
 
12564
DELETE FROM t1
 
12565
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12566
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12567
AND f_charbig = '####updated per insert trigger####';
 
12568
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12569
BEGIN
 
12570
SET new.f_int1 = @my_max1 + @counter,
 
12571
new.f_int2 = @my_min2 - @counter,
 
12572
new.f_charbig = '####updated per insert trigger####';
 
12573
SET @counter = @counter + 1;
 
12574
END|
 
12575
SET @counter = 1;
 
12576
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12577
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12578
SELECT CAST(f_int1 AS CHAR),
 
12579
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12581
ORDER BY f_int1;
 
12582
DROP TRIGGER trg_3;
 
12583
        
 
12584
# check trigger-12 success:     1
 
12585
DELETE FROM t1
 
12586
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12587
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12588
AND f_charbig = '####updated per insert trigger####';
 
12589
ANALYZE  TABLE t1;
 
12590
Table   Op      Msg_type        Msg_text
 
12591
test.t1 analyze status  OK
 
12592
CHECK    TABLE t1 EXTENDED;
 
12593
Table   Op      Msg_type        Msg_text
 
12594
test.t1 check   status  OK
 
12595
CHECKSUM TABLE t1 EXTENDED;
 
12596
Table   Checksum
 
12597
test.t1 <some_value>
 
12598
OPTIMIZE TABLE t1;
 
12599
Table   Op      Msg_type        Msg_text
 
12600
test.t1 optimize        status  OK
 
12601
# check layout success:    1
 
12602
REPAIR   TABLE t1 EXTENDED;
 
12603
Table   Op      Msg_type        Msg_text
 
12604
test.t1 repair  status  OK
 
12605
# check layout success:    1
 
12606
TRUNCATE t1;
 
12607
        
 
12608
# check TRUNCATE success:       1
 
12609
# check layout success:    1
 
12610
# End usability test (inc/partition_check.inc)
 
12611
DROP TABLE t1;
 
12612
CREATE TABLE t1 (
 
12613
f_int1 INTEGER,
 
12614
f_int2 INTEGER,
 
12615
f_char1 CHAR(20),
 
12616
f_char2 CHAR(20),
 
12617
f_charbig VARCHAR(1000)
 
12618
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
12619
)
 
12620
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
12621
(PARTITION part_3 VALUES IN (-3),
 
12622
PARTITION part_2 VALUES IN (-2),
 
12623
PARTITION part_1 VALUES IN (-1),
 
12624
PARTITION part_N VALUES IN (NULL),
 
12625
PARTITION part0 VALUES IN (0),
 
12626
PARTITION part1 VALUES IN (1),
 
12627
PARTITION part2 VALUES IN (2),
 
12628
PARTITION part3 VALUES IN (3));
 
12629
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12630
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12631
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12632
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
12633
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12634
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12635
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12636
# Start usability test (inc/partition_check.inc)
 
12637
create_command
 
12638
SHOW CREATE TABLE t1;
 
12639
Table   Create Table
 
12640
t1      CREATE TABLE `t1` (
 
12641
  `f_int1` int(11) DEFAULT NULL,
 
12642
  `f_int2` int(11) DEFAULT NULL,
 
12643
  `f_char1` char(20) DEFAULT NULL,
 
12644
  `f_char2` char(20) DEFAULT NULL,
 
12645
  `f_charbig` varchar(1000) DEFAULT NULL
 
12646
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
12647
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
12648
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
12649
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
12650
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
12651
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
12652
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
12653
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
12654
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
12655
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
12656
 
 
12657
unified filelist
 
12658
t1#P#part0.MYD
 
12659
t1#P#part0.MYI
 
12660
t1#P#part1.MYD
 
12661
t1#P#part1.MYI
 
12662
t1#P#part2.MYD
 
12663
t1#P#part2.MYI
 
12664
t1#P#part3.MYD
 
12665
t1#P#part3.MYI
 
12666
t1#P#part_1.MYD
 
12667
t1#P#part_1.MYI
 
12668
t1#P#part_2.MYD
 
12669
t1#P#part_2.MYI
 
12670
t1#P#part_3.MYD
 
12671
t1#P#part_3.MYI
 
12672
t1#P#part_N.MYD
 
12673
t1#P#part_N.MYI
 
12674
t1.frm
 
12675
t1.par
 
12676
 
 
12677
# check prerequisites-1 success:    1
 
12678
# check COUNT(*) success:    1
 
12679
# check MIN/MAX(f_int1) success:    1
 
12680
# check MIN/MAX(f_int2) success:    1
 
12681
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12682
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12683
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12684
WHERE f_int1 IN (2,3);
 
12685
# check prerequisites-3 success:    1
 
12686
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12687
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12688
# check read via f_int1 success: 1
 
12689
# check read via f_int2 success: 1
 
12690
        
 
12691
# check multiple-1 success:     1
 
12692
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12693
        
 
12694
# check multiple-2 success:     1
 
12695
INSERT INTO t1 SELECT * FROM t0_template
 
12696
WHERE MOD(f_int1,3) = 0;
 
12697
        
 
12698
# check multiple-3 success:     1
 
12699
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12700
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12701
AND @max_row_div2 + @max_row_div4;
 
12702
        
 
12703
# check multiple-4 success:     1
 
12704
DELETE FROM t1
 
12705
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12706
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12707
        
 
12708
# check multiple-5 success:     1
 
12709
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12710
INSERT INTO t1
 
12711
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12712
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12713
f_charbig = '#SINGLE#';
 
12714
        
 
12715
# check single-1 success:       1
 
12716
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12717
INSERT INTO t1
 
12718
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12719
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12720
f_charbig = '#SINGLE#';
 
12721
        
 
12722
# check single-2 success:       1
 
12723
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12724
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12725
UPDATE t1 SET f_int1 = @cur_value2
 
12726
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12727
        
 
12728
# check single-3 success:       1
 
12729
SET @cur_value1= -1;
 
12730
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12731
UPDATE t1 SET f_int1 = @cur_value1
 
12732
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12733
        
 
12734
# check single-4 success:       1
 
12735
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12736
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12737
        
 
12738
# check single-5 success:       1
 
12739
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12740
        
 
12741
# check single-6 success:       1
 
12742
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12743
        
 
12744
# check single-7 success:       1
 
12745
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12746
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12747
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12748
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12749
f_charbig = '#NULL#';
 
12750
INSERT INTO t1
 
12751
SET f_int1 = NULL , f_int2 = -@max_row,
 
12752
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12753
f_charbig = '#NULL#';
 
12754
# check null success:    1
 
12755
        
 
12756
# check null-1 success:         1
 
12757
UPDATE t1 SET f_int1 = -@max_row
 
12758
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12759
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12760
        
 
12761
# check null-2 success:         1
 
12762
UPDATE t1 SET f_int1 = NULL
 
12763
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12764
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12765
        
 
12766
# check null-3 success:         1
 
12767
DELETE FROM t1
 
12768
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12769
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12770
        
 
12771
# check null-4 success:         1
 
12772
DELETE FROM t1
 
12773
WHERE f_int1 = 0 AND f_int2 = 0
 
12774
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12775
AND f_charbig = '#NULL#';
 
12776
SET AUTOCOMMIT= 0;
 
12777
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12778
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12779
FROM t0_template source_tab
 
12780
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12781
        
 
12782
# check transactions-1 success:         1
 
12783
COMMIT WORK;
 
12784
        
 
12785
# check transactions-2 success:         1
 
12786
ROLLBACK WORK;
 
12787
        
 
12788
# check transactions-3 success:         1
 
12789
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12790
COMMIT WORK;
 
12791
ROLLBACK WORK;
 
12792
        
 
12793
# check transactions-4 success:         1
 
12794
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12795
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12796
FROM t0_template source_tab
 
12797
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12798
        
 
12799
# check transactions-5 success:         1
 
12800
ROLLBACK WORK;
 
12801
Warnings:
 
12802
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12803
        
 
12804
# check transactions-6 success:         1
 
12805
# INFO: Storage engine used for t1 seems to be not transactional.
 
12806
COMMIT;
 
12807
        
 
12808
# check transactions-7 success:         1
 
12809
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12810
COMMIT WORK;
 
12811
SET @@session.sql_mode = 'traditional';
 
12812
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12813
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12814
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12815
'', '', 'was inserted' FROM t0_template
 
12816
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12817
ERROR 22012: Division by 0
 
12818
COMMIT;
 
12819
        
 
12820
# check transactions-8 success:         1
 
12821
# INFO: Storage engine used for t1 seems to be unable to revert
 
12822
#       changes made by the failing statement.
 
12823
SET @@session.sql_mode = '';
 
12824
SET AUTOCOMMIT= 1;
 
12825
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12826
COMMIT WORK;
 
12827
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12828
        
 
12829
# check special-1 success:      1
 
12830
UPDATE t1 SET f_charbig = '';
 
12831
        
 
12832
# check special-2 success:      1
 
12833
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12834
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12835
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12839
'just inserted' FROM t0_template
 
12840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12841
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12842
BEGIN
 
12843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12844
f_charbig = 'updated by trigger'
 
12845
      WHERE f_int1 = new.f_int1;
 
12846
END|
 
12847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12848
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12850
        
 
12851
# check trigger-1 success:      1
 
12852
DROP TRIGGER trg_1;
 
12853
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12854
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12855
f_charbig = 'just inserted'
 
12856
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12857
DELETE FROM t0_aux
 
12858
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12859
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12860
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12861
'just inserted' FROM t0_template
 
12862
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12863
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12864
BEGIN
 
12865
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12866
f_charbig = 'updated by trigger'
 
12867
      WHERE f_int1 = new.f_int1;
 
12868
END|
 
12869
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12870
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12872
        
 
12873
# check trigger-2 success:      1
 
12874
DROP TRIGGER trg_1;
 
12875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12877
f_charbig = 'just inserted'
 
12878
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12879
DELETE FROM t0_aux
 
12880
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12881
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12882
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12883
'just inserted' FROM t0_template
 
12884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12885
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12886
BEGIN
 
12887
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12888
f_charbig = 'updated by trigger'
 
12889
      WHERE f_int1 = new.f_int1;
 
12890
END|
 
12891
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12892
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12893
        
 
12894
# check trigger-3 success:      1
 
12895
DROP TRIGGER trg_1;
 
12896
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12897
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12898
f_charbig = 'just inserted'
 
12899
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12900
DELETE FROM t0_aux
 
12901
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12903
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12904
'just inserted' FROM t0_template
 
12905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12906
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12907
BEGIN
 
12908
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12909
f_charbig = 'updated by trigger'
 
12910
      WHERE f_int1 = - old.f_int1;
 
12911
END|
 
12912
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12913
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12914
        
 
12915
# check trigger-4 success:      1
 
12916
DROP TRIGGER trg_1;
 
12917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12918
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12919
f_charbig = 'just inserted'
 
12920
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12921
DELETE FROM t0_aux
 
12922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12925
'just inserted' FROM t0_template
 
12926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12927
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12928
BEGIN
 
12929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12930
f_charbig = 'updated by trigger'
 
12931
      WHERE f_int1 = new.f_int1;
 
12932
END|
 
12933
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12934
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12935
        
 
12936
# check trigger-5 success:      1
 
12937
DROP TRIGGER trg_1;
 
12938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12940
f_charbig = 'just inserted'
 
12941
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12942
DELETE FROM t0_aux
 
12943
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12945
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12946
'just inserted' FROM t0_template
 
12947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12948
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12949
BEGIN
 
12950
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12951
f_charbig = 'updated by trigger'
 
12952
      WHERE f_int1 = - old.f_int1;
 
12953
END|
 
12954
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12955
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12956
        
 
12957
# check trigger-6 success:      1
 
12958
DROP TRIGGER trg_1;
 
12959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12961
f_charbig = 'just inserted'
 
12962
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12963
DELETE FROM t0_aux
 
12964
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12965
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12966
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12967
'just inserted' FROM t0_template
 
12968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12969
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12970
BEGIN
 
12971
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12972
f_charbig = 'updated by trigger'
 
12973
      WHERE f_int1 = - old.f_int1;
 
12974
END|
 
12975
DELETE FROM t0_aux
 
12976
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12977
        
 
12978
# check trigger-7 success:      1
 
12979
DROP TRIGGER trg_1;
 
12980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12982
f_charbig = 'just inserted'
 
12983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12984
DELETE FROM t0_aux
 
12985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12987
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12988
'just inserted' FROM t0_template
 
12989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12990
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12991
BEGIN
 
12992
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12993
f_charbig = 'updated by trigger'
 
12994
      WHERE f_int1 = - old.f_int1;
 
12995
END|
 
12996
DELETE FROM t0_aux
 
12997
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12998
        
 
12999
# check trigger-8 success:      1
 
13000
DROP TRIGGER trg_1;
 
13001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13003
f_charbig = 'just inserted'
 
13004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13005
DELETE FROM t0_aux
 
13006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13007
DELETE FROM t1
 
13008
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13009
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13010
BEGIN
 
13011
SET new.f_int1 = old.f_int1 + @max_row,
 
13012
new.f_int2 = old.f_int2 - @max_row,
 
13013
new.f_charbig = '####updated per update trigger####';
 
13014
END|
 
13015
UPDATE t1
 
13016
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13017
f_charbig = '####updated per update statement itself####';
 
13018
        
 
13019
# check trigger-9 success:      1
 
13020
DROP TRIGGER trg_2;
 
13021
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13022
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13023
f_charbig = CONCAT('===',f_char1,'===');
 
13024
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13025
BEGIN
 
13026
SET new.f_int1 = new.f_int1 + @max_row,
 
13027
new.f_int2 = new.f_int2 - @max_row,
 
13028
new.f_charbig = '####updated per update trigger####';
 
13029
END|
 
13030
UPDATE t1
 
13031
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13032
f_charbig = '####updated per update statement itself####';
 
13033
        
 
13034
# check trigger-10 success:     1
 
13035
DROP TRIGGER trg_2;
 
13036
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13037
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13038
f_charbig = CONCAT('===',f_char1,'===');
 
13039
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13040
BEGIN
 
13041
SET new.f_int1 = @my_max1 + @counter,
 
13042
new.f_int2 = @my_min2 - @counter,
 
13043
new.f_charbig = '####updated per insert trigger####';
 
13044
SET @counter = @counter + 1;
 
13045
END|
 
13046
SET @counter = 1;
 
13047
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13048
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13049
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13050
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13052
ORDER BY f_int1;
 
13053
DROP TRIGGER trg_3;
 
13054
        
 
13055
# check trigger-11 success:     1
 
13056
DELETE FROM t1
 
13057
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13058
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13059
AND f_charbig = '####updated per insert trigger####';
 
13060
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13061
BEGIN
 
13062
SET new.f_int1 = @my_max1 + @counter,
 
13063
new.f_int2 = @my_min2 - @counter,
 
13064
new.f_charbig = '####updated per insert trigger####';
 
13065
SET @counter = @counter + 1;
 
13066
END|
 
13067
SET @counter = 1;
 
13068
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13069
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13070
SELECT CAST(f_int1 AS CHAR),
 
13071
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13073
ORDER BY f_int1;
 
13074
DROP TRIGGER trg_3;
 
13075
        
 
13076
# check trigger-12 success:     1
 
13077
DELETE FROM t1
 
13078
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13079
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13080
AND f_charbig = '####updated per insert trigger####';
 
13081
ANALYZE  TABLE t1;
 
13082
Table   Op      Msg_type        Msg_text
 
13083
test.t1 analyze status  OK
 
13084
CHECK    TABLE t1 EXTENDED;
 
13085
Table   Op      Msg_type        Msg_text
 
13086
test.t1 check   status  OK
 
13087
CHECKSUM TABLE t1 EXTENDED;
 
13088
Table   Checksum
 
13089
test.t1 <some_value>
 
13090
OPTIMIZE TABLE t1;
 
13091
Table   Op      Msg_type        Msg_text
 
13092
test.t1 optimize        status  OK
 
13093
# check layout success:    1
 
13094
REPAIR   TABLE t1 EXTENDED;
 
13095
Table   Op      Msg_type        Msg_text
 
13096
test.t1 repair  status  OK
 
13097
# check layout success:    1
 
13098
TRUNCATE t1;
 
13099
        
 
13100
# check TRUNCATE success:       1
 
13101
# check layout success:    1
 
13102
# End usability test (inc/partition_check.inc)
 
13103
DROP TABLE t1;
 
13104
CREATE TABLE t1 (
 
13105
f_int1 INTEGER,
 
13106
f_int2 INTEGER,
 
13107
f_char1 CHAR(20),
 
13108
f_char2 CHAR(20),
 
13109
f_charbig VARCHAR(1000)
 
13110
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
13111
)
 
13112
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
13113
(PARTITION parta VALUES LESS THAN (0),
 
13114
PARTITION partb VALUES LESS THAN (5),
 
13115
PARTITION partc VALUES LESS THAN (10),
 
13116
PARTITION partd VALUES LESS THAN (10 + 5),
 
13117
PARTITION parte VALUES LESS THAN (20),
 
13118
PARTITION partf VALUES LESS THAN (2147483646));
 
13119
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13120
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13121
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13122
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
13123
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13124
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13125
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13126
# Start usability test (inc/partition_check.inc)
 
13127
create_command
 
13128
SHOW CREATE TABLE t1;
 
13129
Table   Create Table
 
13130
t1      CREATE TABLE `t1` (
 
13131
  `f_int1` int(11) DEFAULT NULL,
 
13132
  `f_int2` int(11) DEFAULT NULL,
 
13133
  `f_char1` char(20) DEFAULT NULL,
 
13134
  `f_char2` char(20) DEFAULT NULL,
 
13135
  `f_charbig` varchar(1000) DEFAULT NULL
 
13136
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
13137
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
13138
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
13139
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
13140
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
13141
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
13142
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
13143
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
13144
 
 
13145
unified filelist
 
13146
t1#P#parta.MYD
 
13147
t1#P#parta.MYI
 
13148
t1#P#partb.MYD
 
13149
t1#P#partb.MYI
 
13150
t1#P#partc.MYD
 
13151
t1#P#partc.MYI
 
13152
t1#P#partd.MYD
 
13153
t1#P#partd.MYI
 
13154
t1#P#parte.MYD
 
13155
t1#P#parte.MYI
 
13156
t1#P#partf.MYD
 
13157
t1#P#partf.MYI
 
13158
t1.frm
 
13159
t1.par
 
13160
 
 
13161
# check prerequisites-1 success:    1
 
13162
# check COUNT(*) success:    1
 
13163
# check MIN/MAX(f_int1) success:    1
 
13164
# check MIN/MAX(f_int2) success:    1
 
13165
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13166
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13167
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13168
WHERE f_int1 IN (2,3);
 
13169
# check prerequisites-3 success:    1
 
13170
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13171
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13172
# check read via f_int1 success: 1
 
13173
# check read via f_int2 success: 1
 
13174
        
 
13175
# check multiple-1 success:     1
 
13176
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13177
        
 
13178
# check multiple-2 success:     1
 
13179
INSERT INTO t1 SELECT * FROM t0_template
 
13180
WHERE MOD(f_int1,3) = 0;
 
13181
        
 
13182
# check multiple-3 success:     1
 
13183
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13184
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13185
AND @max_row_div2 + @max_row_div4;
 
13186
        
 
13187
# check multiple-4 success:     1
 
13188
DELETE FROM t1
 
13189
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13190
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13191
        
 
13192
# check multiple-5 success:     1
 
13193
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13194
INSERT INTO t1
 
13195
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13196
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13197
f_charbig = '#SINGLE#';
 
13198
        
 
13199
# check single-1 success:       1
 
13200
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13201
INSERT INTO t1
 
13202
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13203
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13204
f_charbig = '#SINGLE#';
 
13205
        
 
13206
# check single-2 success:       1
 
13207
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13208
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13209
UPDATE t1 SET f_int1 = @cur_value2
 
13210
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13211
        
 
13212
# check single-3 success:       1
 
13213
SET @cur_value1= -1;
 
13214
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13215
UPDATE t1 SET f_int1 = @cur_value1
 
13216
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13217
        
 
13218
# check single-4 success:       1
 
13219
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13220
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13221
        
 
13222
# check single-5 success:       1
 
13223
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13224
        
 
13225
# check single-6 success:       1
 
13226
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13227
ERROR HY000: Table has no partition for value 2147483647
 
13228
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13229
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13230
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13231
f_charbig = '#NULL#';
 
13232
INSERT INTO t1
 
13233
SET f_int1 = NULL , f_int2 = -@max_row,
 
13234
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13235
f_charbig = '#NULL#';
 
13236
# check null success:    1
 
13237
        
 
13238
# check null-1 success:         1
 
13239
UPDATE t1 SET f_int1 = -@max_row
 
13240
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13241
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13242
        
 
13243
# check null-2 success:         1
 
13244
UPDATE t1 SET f_int1 = NULL
 
13245
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13246
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13247
        
 
13248
# check null-3 success:         1
 
13249
DELETE FROM t1
 
13250
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13251
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13252
        
 
13253
# check null-4 success:         1
 
13254
DELETE FROM t1
 
13255
WHERE f_int1 = 0 AND f_int2 = 0
 
13256
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13257
AND f_charbig = '#NULL#';
 
13258
SET AUTOCOMMIT= 0;
 
13259
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13260
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13261
FROM t0_template source_tab
 
13262
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13263
        
 
13264
# check transactions-1 success:         1
 
13265
COMMIT WORK;
 
13266
        
 
13267
# check transactions-2 success:         1
 
13268
ROLLBACK WORK;
 
13269
        
 
13270
# check transactions-3 success:         1
 
13271
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13272
COMMIT WORK;
 
13273
ROLLBACK WORK;
 
13274
        
 
13275
# check transactions-4 success:         1
 
13276
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13277
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13278
FROM t0_template source_tab
 
13279
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13280
        
 
13281
# check transactions-5 success:         1
 
13282
ROLLBACK WORK;
 
13283
Warnings:
 
13284
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13285
        
 
13286
# check transactions-6 success:         1
 
13287
# INFO: Storage engine used for t1 seems to be not transactional.
 
13288
COMMIT;
 
13289
        
 
13290
# check transactions-7 success:         1
 
13291
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13292
COMMIT WORK;
 
13293
SET @@session.sql_mode = 'traditional';
 
13294
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13295
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13296
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13297
'', '', 'was inserted' FROM t0_template
 
13298
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13299
ERROR 22012: Division by 0
 
13300
COMMIT;
 
13301
        
 
13302
# check transactions-8 success:         1
 
13303
# INFO: Storage engine used for t1 seems to be unable to revert
 
13304
#       changes made by the failing statement.
 
13305
SET @@session.sql_mode = '';
 
13306
SET AUTOCOMMIT= 1;
 
13307
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13308
COMMIT WORK;
 
13309
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13310
        
 
13311
# check special-1 success:      1
 
13312
UPDATE t1 SET f_charbig = '';
 
13313
        
 
13314
# check special-2 success:      1
 
13315
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13316
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13317
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13319
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13320
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13321
'just inserted' FROM t0_template
 
13322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13323
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13324
BEGIN
 
13325
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13326
f_charbig = 'updated by trigger'
 
13327
      WHERE f_int1 = new.f_int1;
 
13328
END|
 
13329
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13330
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13332
        
 
13333
# check trigger-1 success:      1
 
13334
DROP TRIGGER trg_1;
 
13335
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13336
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13337
f_charbig = 'just inserted'
 
13338
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13339
DELETE FROM t0_aux
 
13340
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13341
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13342
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13343
'just inserted' FROM t0_template
 
13344
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13345
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13346
BEGIN
 
13347
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13348
f_charbig = 'updated by trigger'
 
13349
      WHERE f_int1 = new.f_int1;
 
13350
END|
 
13351
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13352
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13354
        
 
13355
# check trigger-2 success:      1
 
13356
DROP TRIGGER trg_1;
 
13357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13359
f_charbig = 'just inserted'
 
13360
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13361
DELETE FROM t0_aux
 
13362
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13364
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13365
'just inserted' FROM t0_template
 
13366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13367
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13368
BEGIN
 
13369
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13370
f_charbig = 'updated by trigger'
 
13371
      WHERE f_int1 = new.f_int1;
 
13372
END|
 
13373
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13374
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13375
        
 
13376
# check trigger-3 success:      1
 
13377
DROP TRIGGER trg_1;
 
13378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13379
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13380
f_charbig = 'just inserted'
 
13381
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13382
DELETE FROM t0_aux
 
13383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13386
'just inserted' FROM t0_template
 
13387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13388
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13389
BEGIN
 
13390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13391
f_charbig = 'updated by trigger'
 
13392
      WHERE f_int1 = - old.f_int1;
 
13393
END|
 
13394
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13395
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13396
        
 
13397
# check trigger-4 success:      1
 
13398
DROP TRIGGER trg_1;
 
13399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13401
f_charbig = 'just inserted'
 
13402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13403
DELETE FROM t0_aux
 
13404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13406
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13407
'just inserted' FROM t0_template
 
13408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13409
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13410
BEGIN
 
13411
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13412
f_charbig = 'updated by trigger'
 
13413
      WHERE f_int1 = new.f_int1;
 
13414
END|
 
13415
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13416
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13417
        
 
13418
# check trigger-5 success:      1
 
13419
DROP TRIGGER trg_1;
 
13420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13422
f_charbig = 'just inserted'
 
13423
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13424
DELETE FROM t0_aux
 
13425
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13426
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13427
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13428
'just inserted' FROM t0_template
 
13429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13430
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13431
BEGIN
 
13432
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13433
f_charbig = 'updated by trigger'
 
13434
      WHERE f_int1 = - old.f_int1;
 
13435
END|
 
13436
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13437
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13438
        
 
13439
# check trigger-6 success:      1
 
13440
DROP TRIGGER trg_1;
 
13441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13443
f_charbig = 'just inserted'
 
13444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13445
DELETE FROM t0_aux
 
13446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13449
'just inserted' FROM t0_template
 
13450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13451
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13452
BEGIN
 
13453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13454
f_charbig = 'updated by trigger'
 
13455
      WHERE f_int1 = - old.f_int1;
 
13456
END|
 
13457
DELETE FROM t0_aux
 
13458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13459
        
 
13460
# check trigger-7 success:      1
 
13461
DROP TRIGGER trg_1;
 
13462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13464
f_charbig = 'just inserted'
 
13465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13466
DELETE FROM t0_aux
 
13467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13470
'just inserted' FROM t0_template
 
13471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13472
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13473
BEGIN
 
13474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13475
f_charbig = 'updated by trigger'
 
13476
      WHERE f_int1 = - old.f_int1;
 
13477
END|
 
13478
DELETE FROM t0_aux
 
13479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13480
        
 
13481
# check trigger-8 success:      1
 
13482
DROP TRIGGER trg_1;
 
13483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13485
f_charbig = 'just inserted'
 
13486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13487
DELETE FROM t0_aux
 
13488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13489
DELETE FROM t1
 
13490
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13491
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13492
BEGIN
 
13493
SET new.f_int1 = old.f_int1 + @max_row,
 
13494
new.f_int2 = old.f_int2 - @max_row,
 
13495
new.f_charbig = '####updated per update trigger####';
 
13496
END|
 
13497
UPDATE t1
 
13498
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13499
f_charbig = '####updated per update statement itself####';
 
13500
        
 
13501
# check trigger-9 success:      1
 
13502
DROP TRIGGER trg_2;
 
13503
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13504
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13505
f_charbig = CONCAT('===',f_char1,'===');
 
13506
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13507
BEGIN
 
13508
SET new.f_int1 = new.f_int1 + @max_row,
 
13509
new.f_int2 = new.f_int2 - @max_row,
 
13510
new.f_charbig = '####updated per update trigger####';
 
13511
END|
 
13512
UPDATE t1
 
13513
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13514
f_charbig = '####updated per update statement itself####';
 
13515
        
 
13516
# check trigger-10 success:     1
 
13517
DROP TRIGGER trg_2;
 
13518
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13519
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13520
f_charbig = CONCAT('===',f_char1,'===');
 
13521
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13522
BEGIN
 
13523
SET new.f_int1 = @my_max1 + @counter,
 
13524
new.f_int2 = @my_min2 - @counter,
 
13525
new.f_charbig = '####updated per insert trigger####';
 
13526
SET @counter = @counter + 1;
 
13527
END|
 
13528
SET @counter = 1;
 
13529
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13531
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13532
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13534
ORDER BY f_int1;
 
13535
DROP TRIGGER trg_3;
 
13536
        
 
13537
# check trigger-11 success:     1
 
13538
DELETE FROM t1
 
13539
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13540
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13541
AND f_charbig = '####updated per insert trigger####';
 
13542
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13543
BEGIN
 
13544
SET new.f_int1 = @my_max1 + @counter,
 
13545
new.f_int2 = @my_min2 - @counter,
 
13546
new.f_charbig = '####updated per insert trigger####';
 
13547
SET @counter = @counter + 1;
 
13548
END|
 
13549
SET @counter = 1;
 
13550
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13551
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13552
SELECT CAST(f_int1 AS CHAR),
 
13553
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13555
ORDER BY f_int1;
 
13556
DROP TRIGGER trg_3;
 
13557
        
 
13558
# check trigger-12 success:     1
 
13559
DELETE FROM t1
 
13560
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13561
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13562
AND f_charbig = '####updated per insert trigger####';
 
13563
ANALYZE  TABLE t1;
 
13564
Table   Op      Msg_type        Msg_text
 
13565
test.t1 analyze status  OK
 
13566
CHECK    TABLE t1 EXTENDED;
 
13567
Table   Op      Msg_type        Msg_text
 
13568
test.t1 check   status  OK
 
13569
CHECKSUM TABLE t1 EXTENDED;
 
13570
Table   Checksum
 
13571
test.t1 <some_value>
 
13572
OPTIMIZE TABLE t1;
 
13573
Table   Op      Msg_type        Msg_text
 
13574
test.t1 optimize        status  OK
 
13575
# check layout success:    1
 
13576
REPAIR   TABLE t1 EXTENDED;
 
13577
Table   Op      Msg_type        Msg_text
 
13578
test.t1 repair  status  OK
 
13579
# check layout success:    1
 
13580
TRUNCATE t1;
 
13581
        
 
13582
# check TRUNCATE success:       1
 
13583
# check layout success:    1
 
13584
# End usability test (inc/partition_check.inc)
 
13585
DROP TABLE t1;
 
13586
CREATE TABLE t1 (
 
13587
f_int1 INTEGER,
 
13588
f_int2 INTEGER,
 
13589
f_char1 CHAR(20),
 
13590
f_char2 CHAR(20),
 
13591
f_charbig VARCHAR(1000)
 
13592
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
13593
)
 
13594
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
13595
(PARTITION parta VALUES LESS THAN (0),
 
13596
PARTITION partb VALUES LESS THAN (5),
 
13597
PARTITION partc VALUES LESS THAN (10),
 
13598
PARTITION partd VALUES LESS THAN (2147483646));
 
13599
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13600
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13601
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13602
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
13603
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13604
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13605
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13606
# Start usability test (inc/partition_check.inc)
 
13607
create_command
 
13608
SHOW CREATE TABLE t1;
 
13609
Table   Create Table
 
13610
t1      CREATE TABLE `t1` (
 
13611
  `f_int1` int(11) DEFAULT NULL,
 
13612
  `f_int2` int(11) DEFAULT NULL,
 
13613
  `f_char1` char(20) DEFAULT NULL,
 
13614
  `f_char2` char(20) DEFAULT NULL,
 
13615
  `f_charbig` varchar(1000) DEFAULT NULL
 
13616
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
13617
/*!50100 PARTITION BY RANGE (f_int1)
 
13618
SUBPARTITION BY HASH (f_int2)
 
13619
SUBPARTITIONS 2
 
13620
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
13621
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
13622
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
13623
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
13624
 
 
13625
unified filelist
 
13626
t1#P#parta#SP#partasp0.MYD
 
13627
t1#P#parta#SP#partasp0.MYI
 
13628
t1#P#parta#SP#partasp1.MYD
 
13629
t1#P#parta#SP#partasp1.MYI
 
13630
t1#P#partb#SP#partbsp0.MYD
 
13631
t1#P#partb#SP#partbsp0.MYI
 
13632
t1#P#partb#SP#partbsp1.MYD
 
13633
t1#P#partb#SP#partbsp1.MYI
 
13634
t1#P#partc#SP#partcsp0.MYD
 
13635
t1#P#partc#SP#partcsp0.MYI
 
13636
t1#P#partc#SP#partcsp1.MYD
 
13637
t1#P#partc#SP#partcsp1.MYI
 
13638
t1#P#partd#SP#partdsp0.MYD
 
13639
t1#P#partd#SP#partdsp0.MYI
 
13640
t1#P#partd#SP#partdsp1.MYD
 
13641
t1#P#partd#SP#partdsp1.MYI
 
13642
t1.frm
 
13643
t1.par
 
13644
 
 
13645
# check prerequisites-1 success:    1
 
13646
# check COUNT(*) success:    1
 
13647
# check MIN/MAX(f_int1) success:    1
 
13648
# check MIN/MAX(f_int2) success:    1
 
13649
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13650
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13651
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13652
WHERE f_int1 IN (2,3);
 
13653
# check prerequisites-3 success:    1
 
13654
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13655
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13656
# check read via f_int1 success: 1
 
13657
# check read via f_int2 success: 1
 
13658
        
 
13659
# check multiple-1 success:     1
 
13660
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13661
        
 
13662
# check multiple-2 success:     1
 
13663
INSERT INTO t1 SELECT * FROM t0_template
 
13664
WHERE MOD(f_int1,3) = 0;
 
13665
        
 
13666
# check multiple-3 success:     1
 
13667
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13668
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13669
AND @max_row_div2 + @max_row_div4;
 
13670
        
 
13671
# check multiple-4 success:     1
 
13672
DELETE FROM t1
 
13673
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13674
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13675
        
 
13676
# check multiple-5 success:     1
 
13677
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13678
INSERT INTO t1
 
13679
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13680
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13681
f_charbig = '#SINGLE#';
 
13682
        
 
13683
# check single-1 success:       1
 
13684
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13685
INSERT INTO t1
 
13686
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13687
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13688
f_charbig = '#SINGLE#';
 
13689
        
 
13690
# check single-2 success:       1
 
13691
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13692
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13693
UPDATE t1 SET f_int1 = @cur_value2
 
13694
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13695
        
 
13696
# check single-3 success:       1
 
13697
SET @cur_value1= -1;
 
13698
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13699
UPDATE t1 SET f_int1 = @cur_value1
 
13700
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13701
        
 
13702
# check single-4 success:       1
 
13703
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13704
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13705
        
 
13706
# check single-5 success:       1
 
13707
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13708
        
 
13709
# check single-6 success:       1
 
13710
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13711
ERROR HY000: Table has no partition for value 2147483647
 
13712
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13713
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13714
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13715
f_charbig = '#NULL#';
 
13716
INSERT INTO t1
 
13717
SET f_int1 = NULL , f_int2 = -@max_row,
 
13718
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13719
f_charbig = '#NULL#';
 
13720
# check null success:    1
 
13721
        
 
13722
# check null-1 success:         1
 
13723
UPDATE t1 SET f_int1 = -@max_row
 
13724
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13725
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13726
        
 
13727
# check null-2 success:         1
 
13728
UPDATE t1 SET f_int1 = NULL
 
13729
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13730
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13731
        
 
13732
# check null-3 success:         1
 
13733
DELETE FROM t1
 
13734
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13735
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13736
        
 
13737
# check null-4 success:         1
 
13738
DELETE FROM t1
 
13739
WHERE f_int1 = 0 AND f_int2 = 0
 
13740
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13741
AND f_charbig = '#NULL#';
 
13742
SET AUTOCOMMIT= 0;
 
13743
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13744
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13745
FROM t0_template source_tab
 
13746
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13747
        
 
13748
# check transactions-1 success:         1
 
13749
COMMIT WORK;
 
13750
        
 
13751
# check transactions-2 success:         1
 
13752
ROLLBACK WORK;
 
13753
        
 
13754
# check transactions-3 success:         1
 
13755
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13756
COMMIT WORK;
 
13757
ROLLBACK WORK;
 
13758
        
 
13759
# check transactions-4 success:         1
 
13760
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13761
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13762
FROM t0_template source_tab
 
13763
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13764
        
 
13765
# check transactions-5 success:         1
 
13766
ROLLBACK WORK;
 
13767
Warnings:
 
13768
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13769
        
 
13770
# check transactions-6 success:         1
 
13771
# INFO: Storage engine used for t1 seems to be not transactional.
 
13772
COMMIT;
 
13773
        
 
13774
# check transactions-7 success:         1
 
13775
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13776
COMMIT WORK;
 
13777
SET @@session.sql_mode = 'traditional';
 
13778
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13779
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13780
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13781
'', '', 'was inserted' FROM t0_template
 
13782
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13783
ERROR 22012: Division by 0
 
13784
COMMIT;
 
13785
        
 
13786
# check transactions-8 success:         1
 
13787
# INFO: Storage engine used for t1 seems to be unable to revert
 
13788
#       changes made by the failing statement.
 
13789
SET @@session.sql_mode = '';
 
13790
SET AUTOCOMMIT= 1;
 
13791
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13792
COMMIT WORK;
 
13793
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13794
        
 
13795
# check special-1 success:      1
 
13796
UPDATE t1 SET f_charbig = '';
 
13797
        
 
13798
# check special-2 success:      1
 
13799
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13800
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13801
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13803
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13804
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13805
'just inserted' FROM t0_template
 
13806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13807
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13808
BEGIN
 
13809
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13810
f_charbig = 'updated by trigger'
 
13811
      WHERE f_int1 = new.f_int1;
 
13812
END|
 
13813
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13814
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13816
        
 
13817
# check trigger-1 success:      1
 
13818
DROP TRIGGER trg_1;
 
13819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13821
f_charbig = 'just inserted'
 
13822
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13823
DELETE FROM t0_aux
 
13824
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13825
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13826
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13827
'just inserted' FROM t0_template
 
13828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13829
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13830
BEGIN
 
13831
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13832
f_charbig = 'updated by trigger'
 
13833
      WHERE f_int1 = new.f_int1;
 
13834
END|
 
13835
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13836
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13838
        
 
13839
# check trigger-2 success:      1
 
13840
DROP TRIGGER trg_1;
 
13841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13842
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13843
f_charbig = 'just inserted'
 
13844
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13845
DELETE FROM t0_aux
 
13846
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13848
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13849
'just inserted' FROM t0_template
 
13850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13851
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13852
BEGIN
 
13853
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13854
f_charbig = 'updated by trigger'
 
13855
      WHERE f_int1 = new.f_int1;
 
13856
END|
 
13857
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13858
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13859
        
 
13860
# check trigger-3 success:      1
 
13861
DROP TRIGGER trg_1;
 
13862
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13863
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13864
f_charbig = 'just inserted'
 
13865
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13866
DELETE FROM t0_aux
 
13867
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13868
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13869
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13870
'just inserted' FROM t0_template
 
13871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13872
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13873
BEGIN
 
13874
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13875
f_charbig = 'updated by trigger'
 
13876
      WHERE f_int1 = - old.f_int1;
 
13877
END|
 
13878
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13879
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13880
        
 
13881
# check trigger-4 success:      1
 
13882
DROP TRIGGER trg_1;
 
13883
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13884
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13885
f_charbig = 'just inserted'
 
13886
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13887
DELETE FROM t0_aux
 
13888
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13889
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13890
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13891
'just inserted' FROM t0_template
 
13892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13893
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13894
BEGIN
 
13895
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13896
f_charbig = 'updated by trigger'
 
13897
      WHERE f_int1 = new.f_int1;
 
13898
END|
 
13899
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13900
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13901
        
 
13902
# check trigger-5 success:      1
 
13903
DROP TRIGGER trg_1;
 
13904
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13905
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13906
f_charbig = 'just inserted'
 
13907
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13908
DELETE FROM t0_aux
 
13909
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13911
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13912
'just inserted' FROM t0_template
 
13913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13914
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13915
BEGIN
 
13916
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13917
f_charbig = 'updated by trigger'
 
13918
      WHERE f_int1 = - old.f_int1;
 
13919
END|
 
13920
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13921
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13922
        
 
13923
# check trigger-6 success:      1
 
13924
DROP TRIGGER trg_1;
 
13925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13927
f_charbig = 'just inserted'
 
13928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13929
DELETE FROM t0_aux
 
13930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13933
'just inserted' FROM t0_template
 
13934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13935
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13936
BEGIN
 
13937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13938
f_charbig = 'updated by trigger'
 
13939
      WHERE f_int1 = - old.f_int1;
 
13940
END|
 
13941
DELETE FROM t0_aux
 
13942
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13943
        
 
13944
# check trigger-7 success:      1
 
13945
DROP TRIGGER trg_1;
 
13946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13948
f_charbig = 'just inserted'
 
13949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13950
DELETE FROM t0_aux
 
13951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13954
'just inserted' FROM t0_template
 
13955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13956
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13957
BEGIN
 
13958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13959
f_charbig = 'updated by trigger'
 
13960
      WHERE f_int1 = - old.f_int1;
 
13961
END|
 
13962
DELETE FROM t0_aux
 
13963
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13964
        
 
13965
# check trigger-8 success:      1
 
13966
DROP TRIGGER trg_1;
 
13967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13969
f_charbig = 'just inserted'
 
13970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13971
DELETE FROM t0_aux
 
13972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13973
DELETE FROM t1
 
13974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13975
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13976
BEGIN
 
13977
SET new.f_int1 = old.f_int1 + @max_row,
 
13978
new.f_int2 = old.f_int2 - @max_row,
 
13979
new.f_charbig = '####updated per update trigger####';
 
13980
END|
 
13981
UPDATE t1
 
13982
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13983
f_charbig = '####updated per update statement itself####';
 
13984
        
 
13985
# check trigger-9 success:      1
 
13986
DROP TRIGGER trg_2;
 
13987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13988
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13989
f_charbig = CONCAT('===',f_char1,'===');
 
13990
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13991
BEGIN
 
13992
SET new.f_int1 = new.f_int1 + @max_row,
 
13993
new.f_int2 = new.f_int2 - @max_row,
 
13994
new.f_charbig = '####updated per update trigger####';
 
13995
END|
 
13996
UPDATE t1
 
13997
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13998
f_charbig = '####updated per update statement itself####';
 
13999
        
 
14000
# check trigger-10 success:     1
 
14001
DROP TRIGGER trg_2;
 
14002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14003
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14004
f_charbig = CONCAT('===',f_char1,'===');
 
14005
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14006
BEGIN
 
14007
SET new.f_int1 = @my_max1 + @counter,
 
14008
new.f_int2 = @my_min2 - @counter,
 
14009
new.f_charbig = '####updated per insert trigger####';
 
14010
SET @counter = @counter + 1;
 
14011
END|
 
14012
SET @counter = 1;
 
14013
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14014
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14015
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14016
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14018
ORDER BY f_int1;
 
14019
DROP TRIGGER trg_3;
 
14020
        
 
14021
# check trigger-11 success:     1
 
14022
DELETE FROM t1
 
14023
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14024
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14025
AND f_charbig = '####updated per insert trigger####';
 
14026
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14027
BEGIN
 
14028
SET new.f_int1 = @my_max1 + @counter,
 
14029
new.f_int2 = @my_min2 - @counter,
 
14030
new.f_charbig = '####updated per insert trigger####';
 
14031
SET @counter = @counter + 1;
 
14032
END|
 
14033
SET @counter = 1;
 
14034
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14035
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14036
SELECT CAST(f_int1 AS CHAR),
 
14037
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14039
ORDER BY f_int1;
 
14040
DROP TRIGGER trg_3;
 
14041
        
 
14042
# check trigger-12 success:     1
 
14043
DELETE FROM t1
 
14044
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14045
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14046
AND f_charbig = '####updated per insert trigger####';
 
14047
ANALYZE  TABLE t1;
 
14048
Table   Op      Msg_type        Msg_text
 
14049
test.t1 analyze status  OK
 
14050
CHECK    TABLE t1 EXTENDED;
 
14051
Table   Op      Msg_type        Msg_text
 
14052
test.t1 check   status  OK
 
14053
CHECKSUM TABLE t1 EXTENDED;
 
14054
Table   Checksum
 
14055
test.t1 <some_value>
 
14056
OPTIMIZE TABLE t1;
 
14057
Table   Op      Msg_type        Msg_text
 
14058
test.t1 optimize        status  OK
 
14059
# check layout success:    1
 
14060
REPAIR   TABLE t1 EXTENDED;
 
14061
Table   Op      Msg_type        Msg_text
 
14062
test.t1 repair  status  OK
 
14063
# check layout success:    1
 
14064
TRUNCATE t1;
 
14065
        
 
14066
# check TRUNCATE success:       1
 
14067
# check layout success:    1
 
14068
# End usability test (inc/partition_check.inc)
 
14069
DROP TABLE t1;
 
14070
CREATE TABLE t1 (
 
14071
f_int1 INTEGER,
 
14072
f_int2 INTEGER,
 
14073
f_char1 CHAR(20),
 
14074
f_char2 CHAR(20),
 
14075
f_charbig VARCHAR(1000)
 
14076
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
14077
)
 
14078
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
14079
(PARTITION part1 VALUES LESS THAN (0)
 
14080
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
14081
PARTITION part2 VALUES LESS THAN (5)
 
14082
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
14083
PARTITION part3 VALUES LESS THAN (10)
 
14084
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
14085
PARTITION part4 VALUES LESS THAN (2147483646)
 
14086
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
14087
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14088
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14089
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14090
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
14091
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14092
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14093
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14094
# Start usability test (inc/partition_check.inc)
 
14095
create_command
 
14096
SHOW CREATE TABLE t1;
 
14097
Table   Create Table
 
14098
t1      CREATE TABLE `t1` (
 
14099
  `f_int1` int(11) DEFAULT NULL,
 
14100
  `f_int2` int(11) DEFAULT NULL,
 
14101
  `f_char1` char(20) DEFAULT NULL,
 
14102
  `f_char2` char(20) DEFAULT NULL,
 
14103
  `f_charbig` varchar(1000) DEFAULT NULL
 
14104
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
14105
/*!50100 PARTITION BY RANGE (f_int1)
 
14106
SUBPARTITION BY KEY (f_int2)
 
14107
(PARTITION part1 VALUES LESS THAN (0)
 
14108
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
14109
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
14110
 PARTITION part2 VALUES LESS THAN (5)
 
14111
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
14112
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
14113
 PARTITION part3 VALUES LESS THAN (10)
 
14114
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
14115
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
14116
 PARTITION part4 VALUES LESS THAN (2147483646)
 
14117
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
14118
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
14119
 
 
14120
unified filelist
 
14121
t1#P#part1#SP#subpart11.MYD
 
14122
t1#P#part1#SP#subpart11.MYI
 
14123
t1#P#part1#SP#subpart12.MYD
 
14124
t1#P#part1#SP#subpart12.MYI
 
14125
t1#P#part2#SP#subpart21.MYD
 
14126
t1#P#part2#SP#subpart21.MYI
 
14127
t1#P#part2#SP#subpart22.MYD
 
14128
t1#P#part2#SP#subpart22.MYI
 
14129
t1#P#part3#SP#subpart31.MYD
 
14130
t1#P#part3#SP#subpart31.MYI
 
14131
t1#P#part3#SP#subpart32.MYD
 
14132
t1#P#part3#SP#subpart32.MYI
 
14133
t1#P#part4#SP#subpart41.MYD
 
14134
t1#P#part4#SP#subpart41.MYI
 
14135
t1#P#part4#SP#subpart42.MYD
 
14136
t1#P#part4#SP#subpart42.MYI
 
14137
t1.frm
 
14138
t1.par
 
14139
 
 
14140
# check prerequisites-1 success:    1
 
14141
# check COUNT(*) success:    1
 
14142
# check MIN/MAX(f_int1) success:    1
 
14143
# check MIN/MAX(f_int2) success:    1
 
14144
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14145
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14146
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14147
WHERE f_int1 IN (2,3);
 
14148
# check prerequisites-3 success:    1
 
14149
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14150
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14151
# check read via f_int1 success: 1
 
14152
# check read via f_int2 success: 1
 
14153
        
 
14154
# check multiple-1 success:     1
 
14155
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14156
        
 
14157
# check multiple-2 success:     1
 
14158
INSERT INTO t1 SELECT * FROM t0_template
 
14159
WHERE MOD(f_int1,3) = 0;
 
14160
        
 
14161
# check multiple-3 success:     1
 
14162
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14163
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14164
AND @max_row_div2 + @max_row_div4;
 
14165
        
 
14166
# check multiple-4 success:     1
 
14167
DELETE FROM t1
 
14168
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14169
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14170
        
 
14171
# check multiple-5 success:     1
 
14172
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14173
INSERT INTO t1
 
14174
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14175
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14176
f_charbig = '#SINGLE#';
 
14177
        
 
14178
# check single-1 success:       1
 
14179
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14180
INSERT INTO t1
 
14181
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14182
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14183
f_charbig = '#SINGLE#';
 
14184
        
 
14185
# check single-2 success:       1
 
14186
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14187
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14188
UPDATE t1 SET f_int1 = @cur_value2
 
14189
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14190
        
 
14191
# check single-3 success:       1
 
14192
SET @cur_value1= -1;
 
14193
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14194
UPDATE t1 SET f_int1 = @cur_value1
 
14195
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14196
        
 
14197
# check single-4 success:       1
 
14198
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14199
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14200
        
 
14201
# check single-5 success:       1
 
14202
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14203
        
 
14204
# check single-6 success:       1
 
14205
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14206
ERROR HY000: Table has no partition for value 2147483647
 
14207
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14208
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14209
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14210
f_charbig = '#NULL#';
 
14211
INSERT INTO t1
 
14212
SET f_int1 = NULL , f_int2 = -@max_row,
 
14213
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14214
f_charbig = '#NULL#';
 
14215
# check null success:    1
 
14216
        
 
14217
# check null-1 success:         1
 
14218
UPDATE t1 SET f_int1 = -@max_row
 
14219
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14220
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14221
        
 
14222
# check null-2 success:         1
 
14223
UPDATE t1 SET f_int1 = NULL
 
14224
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14225
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14226
        
 
14227
# check null-3 success:         1
 
14228
DELETE FROM t1
 
14229
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14230
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14231
        
 
14232
# check null-4 success:         1
 
14233
DELETE FROM t1
 
14234
WHERE f_int1 = 0 AND f_int2 = 0
 
14235
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14236
AND f_charbig = '#NULL#';
 
14237
SET AUTOCOMMIT= 0;
 
14238
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14239
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14240
FROM t0_template source_tab
 
14241
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14242
        
 
14243
# check transactions-1 success:         1
 
14244
COMMIT WORK;
 
14245
        
 
14246
# check transactions-2 success:         1
 
14247
ROLLBACK WORK;
 
14248
        
 
14249
# check transactions-3 success:         1
 
14250
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14251
COMMIT WORK;
 
14252
ROLLBACK WORK;
 
14253
        
 
14254
# check transactions-4 success:         1
 
14255
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14256
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14257
FROM t0_template source_tab
 
14258
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14259
        
 
14260
# check transactions-5 success:         1
 
14261
ROLLBACK WORK;
 
14262
Warnings:
 
14263
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14264
        
 
14265
# check transactions-6 success:         1
 
14266
# INFO: Storage engine used for t1 seems to be not transactional.
 
14267
COMMIT;
 
14268
        
 
14269
# check transactions-7 success:         1
 
14270
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14271
COMMIT WORK;
 
14272
SET @@session.sql_mode = 'traditional';
 
14273
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14274
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14275
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14276
'', '', 'was inserted' FROM t0_template
 
14277
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14278
ERROR 22012: Division by 0
 
14279
COMMIT;
 
14280
        
 
14281
# check transactions-8 success:         1
 
14282
# INFO: Storage engine used for t1 seems to be unable to revert
 
14283
#       changes made by the failing statement.
 
14284
SET @@session.sql_mode = '';
 
14285
SET AUTOCOMMIT= 1;
 
14286
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14287
COMMIT WORK;
 
14288
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14289
        
 
14290
# check special-1 success:      1
 
14291
UPDATE t1 SET f_charbig = '';
 
14292
        
 
14293
# check special-2 success:      1
 
14294
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14295
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14296
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14298
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14299
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14300
'just inserted' FROM t0_template
 
14301
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14302
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14303
BEGIN
 
14304
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14305
f_charbig = 'updated by trigger'
 
14306
      WHERE f_int1 = new.f_int1;
 
14307
END|
 
14308
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14309
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14311
        
 
14312
# check trigger-1 success:      1
 
14313
DROP TRIGGER trg_1;
 
14314
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14315
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14316
f_charbig = 'just inserted'
 
14317
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14318
DELETE FROM t0_aux
 
14319
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14320
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14321
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14322
'just inserted' FROM t0_template
 
14323
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14324
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14325
BEGIN
 
14326
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14327
f_charbig = 'updated by trigger'
 
14328
      WHERE f_int1 = new.f_int1;
 
14329
END|
 
14330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14331
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14332
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14333
        
 
14334
# check trigger-2 success:      1
 
14335
DROP TRIGGER trg_1;
 
14336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14338
f_charbig = 'just inserted'
 
14339
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14340
DELETE FROM t0_aux
 
14341
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14342
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14343
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14344
'just inserted' FROM t0_template
 
14345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14346
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14347
BEGIN
 
14348
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14349
f_charbig = 'updated by trigger'
 
14350
      WHERE f_int1 = new.f_int1;
 
14351
END|
 
14352
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14353
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14354
        
 
14355
# check trigger-3 success:      1
 
14356
DROP TRIGGER trg_1;
 
14357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14359
f_charbig = 'just inserted'
 
14360
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14361
DELETE FROM t0_aux
 
14362
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14364
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14365
'just inserted' FROM t0_template
 
14366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14367
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14368
BEGIN
 
14369
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14370
f_charbig = 'updated by trigger'
 
14371
      WHERE f_int1 = - old.f_int1;
 
14372
END|
 
14373
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14374
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14375
        
 
14376
# check trigger-4 success:      1
 
14377
DROP TRIGGER trg_1;
 
14378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14379
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14380
f_charbig = 'just inserted'
 
14381
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14382
DELETE FROM t0_aux
 
14383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14386
'just inserted' FROM t0_template
 
14387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14388
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14389
BEGIN
 
14390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14391
f_charbig = 'updated by trigger'
 
14392
      WHERE f_int1 = new.f_int1;
 
14393
END|
 
14394
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14395
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14396
        
 
14397
# check trigger-5 success:      1
 
14398
DROP TRIGGER trg_1;
 
14399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14401
f_charbig = 'just inserted'
 
14402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14403
DELETE FROM t0_aux
 
14404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14406
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14407
'just inserted' FROM t0_template
 
14408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14409
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14410
BEGIN
 
14411
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14412
f_charbig = 'updated by trigger'
 
14413
      WHERE f_int1 = - old.f_int1;
 
14414
END|
 
14415
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14416
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14417
        
 
14418
# check trigger-6 success:      1
 
14419
DROP TRIGGER trg_1;
 
14420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14422
f_charbig = 'just inserted'
 
14423
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14424
DELETE FROM t0_aux
 
14425
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14426
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14427
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14428
'just inserted' FROM t0_template
 
14429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14430
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14431
BEGIN
 
14432
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14433
f_charbig = 'updated by trigger'
 
14434
      WHERE f_int1 = - old.f_int1;
 
14435
END|
 
14436
DELETE FROM t0_aux
 
14437
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14438
        
 
14439
# check trigger-7 success:      1
 
14440
DROP TRIGGER trg_1;
 
14441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14443
f_charbig = 'just inserted'
 
14444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14445
DELETE FROM t0_aux
 
14446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14449
'just inserted' FROM t0_template
 
14450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14451
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14452
BEGIN
 
14453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14454
f_charbig = 'updated by trigger'
 
14455
      WHERE f_int1 = - old.f_int1;
 
14456
END|
 
14457
DELETE FROM t0_aux
 
14458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14459
        
 
14460
# check trigger-8 success:      1
 
14461
DROP TRIGGER trg_1;
 
14462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14464
f_charbig = 'just inserted'
 
14465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14466
DELETE FROM t0_aux
 
14467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14468
DELETE FROM t1
 
14469
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14470
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14471
BEGIN
 
14472
SET new.f_int1 = old.f_int1 + @max_row,
 
14473
new.f_int2 = old.f_int2 - @max_row,
 
14474
new.f_charbig = '####updated per update trigger####';
 
14475
END|
 
14476
UPDATE t1
 
14477
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14478
f_charbig = '####updated per update statement itself####';
 
14479
        
 
14480
# check trigger-9 success:      1
 
14481
DROP TRIGGER trg_2;
 
14482
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14483
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14484
f_charbig = CONCAT('===',f_char1,'===');
 
14485
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14486
BEGIN
 
14487
SET new.f_int1 = new.f_int1 + @max_row,
 
14488
new.f_int2 = new.f_int2 - @max_row,
 
14489
new.f_charbig = '####updated per update trigger####';
 
14490
END|
 
14491
UPDATE t1
 
14492
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14493
f_charbig = '####updated per update statement itself####';
 
14494
        
 
14495
# check trigger-10 success:     1
 
14496
DROP TRIGGER trg_2;
 
14497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14499
f_charbig = CONCAT('===',f_char1,'===');
 
14500
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14501
BEGIN
 
14502
SET new.f_int1 = @my_max1 + @counter,
 
14503
new.f_int2 = @my_min2 - @counter,
 
14504
new.f_charbig = '####updated per insert trigger####';
 
14505
SET @counter = @counter + 1;
 
14506
END|
 
14507
SET @counter = 1;
 
14508
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14509
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14510
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14511
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14513
ORDER BY f_int1;
 
14514
DROP TRIGGER trg_3;
 
14515
        
 
14516
# check trigger-11 success:     1
 
14517
DELETE FROM t1
 
14518
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14519
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14520
AND f_charbig = '####updated per insert trigger####';
 
14521
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14522
BEGIN
 
14523
SET new.f_int1 = @my_max1 + @counter,
 
14524
new.f_int2 = @my_min2 - @counter,
 
14525
new.f_charbig = '####updated per insert trigger####';
 
14526
SET @counter = @counter + 1;
 
14527
END|
 
14528
SET @counter = 1;
 
14529
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14530
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14531
SELECT CAST(f_int1 AS CHAR),
 
14532
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14534
ORDER BY f_int1;
 
14535
DROP TRIGGER trg_3;
 
14536
        
 
14537
# check trigger-12 success:     1
 
14538
DELETE FROM t1
 
14539
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14540
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14541
AND f_charbig = '####updated per insert trigger####';
 
14542
ANALYZE  TABLE t1;
 
14543
Table   Op      Msg_type        Msg_text
 
14544
test.t1 analyze status  OK
 
14545
CHECK    TABLE t1 EXTENDED;
 
14546
Table   Op      Msg_type        Msg_text
 
14547
test.t1 check   status  OK
 
14548
CHECKSUM TABLE t1 EXTENDED;
 
14549
Table   Checksum
 
14550
test.t1 <some_value>
 
14551
OPTIMIZE TABLE t1;
 
14552
Table   Op      Msg_type        Msg_text
 
14553
test.t1 optimize        status  OK
 
14554
# check layout success:    1
 
14555
REPAIR   TABLE t1 EXTENDED;
 
14556
Table   Op      Msg_type        Msg_text
 
14557
test.t1 repair  status  OK
 
14558
# check layout success:    1
 
14559
TRUNCATE t1;
 
14560
        
 
14561
# check TRUNCATE success:       1
 
14562
# check layout success:    1
 
14563
# End usability test (inc/partition_check.inc)
 
14564
DROP TABLE t1;
 
14565
CREATE TABLE t1 (
 
14566
f_int1 INTEGER,
 
14567
f_int2 INTEGER,
 
14568
f_char1 CHAR(20),
 
14569
f_char2 CHAR(20),
 
14570
f_charbig VARCHAR(1000)
 
14571
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
14572
)
 
14573
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
14574
(PARTITION part1 VALUES IN (0)
 
14575
(SUBPARTITION sp11, SUBPARTITION sp12),
 
14576
PARTITION part2 VALUES IN (1)
 
14577
(SUBPARTITION sp21, SUBPARTITION sp22),
 
14578
PARTITION part3 VALUES IN (2)
 
14579
(SUBPARTITION sp31, SUBPARTITION sp32),
 
14580
PARTITION part4 VALUES IN (NULL)
 
14581
(SUBPARTITION sp41, SUBPARTITION sp42));
 
14582
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14583
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14584
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14585
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
14586
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14587
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14588
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14589
# Start usability test (inc/partition_check.inc)
 
14590
create_command
 
14591
SHOW CREATE TABLE t1;
 
14592
Table   Create Table
 
14593
t1      CREATE TABLE `t1` (
 
14594
  `f_int1` int(11) DEFAULT NULL,
 
14595
  `f_int2` int(11) DEFAULT NULL,
 
14596
  `f_char1` char(20) DEFAULT NULL,
 
14597
  `f_char2` char(20) DEFAULT NULL,
 
14598
  `f_charbig` varchar(1000) DEFAULT NULL
 
14599
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
14600
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
14601
SUBPARTITION BY HASH (f_int2 + 1)
 
14602
(PARTITION part1 VALUES IN (0)
 
14603
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
14604
  SUBPARTITION sp12 ENGINE = MyISAM),
 
14605
 PARTITION part2 VALUES IN (1)
 
14606
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
14607
  SUBPARTITION sp22 ENGINE = MyISAM),
 
14608
 PARTITION part3 VALUES IN (2)
 
14609
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
14610
  SUBPARTITION sp32 ENGINE = MyISAM),
 
14611
 PARTITION part4 VALUES IN (NULL)
 
14612
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
14613
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
14614
 
 
14615
unified filelist
 
14616
t1#P#part1#SP#sp11.MYD
 
14617
t1#P#part1#SP#sp11.MYI
 
14618
t1#P#part1#SP#sp12.MYD
 
14619
t1#P#part1#SP#sp12.MYI
 
14620
t1#P#part2#SP#sp21.MYD
 
14621
t1#P#part2#SP#sp21.MYI
 
14622
t1#P#part2#SP#sp22.MYD
 
14623
t1#P#part2#SP#sp22.MYI
 
14624
t1#P#part3#SP#sp31.MYD
 
14625
t1#P#part3#SP#sp31.MYI
 
14626
t1#P#part3#SP#sp32.MYD
 
14627
t1#P#part3#SP#sp32.MYI
 
14628
t1#P#part4#SP#sp41.MYD
 
14629
t1#P#part4#SP#sp41.MYI
 
14630
t1#P#part4#SP#sp42.MYD
 
14631
t1#P#part4#SP#sp42.MYI
 
14632
t1.frm
 
14633
t1.par
 
14634
 
 
14635
# check prerequisites-1 success:    1
 
14636
# check COUNT(*) success:    1
 
14637
# check MIN/MAX(f_int1) success:    1
 
14638
# check MIN/MAX(f_int2) success:    1
 
14639
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14640
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14641
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14642
WHERE f_int1 IN (2,3);
 
14643
# check prerequisites-3 success:    1
 
14644
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14645
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14646
# check read via f_int1 success: 1
 
14647
# check read via f_int2 success: 1
 
14648
        
 
14649
# check multiple-1 success:     1
 
14650
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14651
        
 
14652
# check multiple-2 success:     1
 
14653
INSERT INTO t1 SELECT * FROM t0_template
 
14654
WHERE MOD(f_int1,3) = 0;
 
14655
        
 
14656
# check multiple-3 success:     1
 
14657
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14658
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14659
AND @max_row_div2 + @max_row_div4;
 
14660
        
 
14661
# check multiple-4 success:     1
 
14662
DELETE FROM t1
 
14663
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14664
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14665
        
 
14666
# check multiple-5 success:     1
 
14667
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14668
INSERT INTO t1
 
14669
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14670
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14671
f_charbig = '#SINGLE#';
 
14672
        
 
14673
# check single-1 success:       1
 
14674
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14675
INSERT INTO t1
 
14676
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14677
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14678
f_charbig = '#SINGLE#';
 
14679
        
 
14680
# check single-2 success:       1
 
14681
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14682
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14683
UPDATE t1 SET f_int1 = @cur_value2
 
14684
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14685
        
 
14686
# check single-3 success:       1
 
14687
SET @cur_value1= -1;
 
14688
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14689
UPDATE t1 SET f_int1 = @cur_value1
 
14690
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14691
        
 
14692
# check single-4 success:       1
 
14693
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14694
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14695
        
 
14696
# check single-5 success:       1
 
14697
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14698
        
 
14699
# check single-6 success:       1
 
14700
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14701
        
 
14702
# check single-7 success:       1
 
14703
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14704
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14705
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14706
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14707
f_charbig = '#NULL#';
 
14708
INSERT INTO t1
 
14709
SET f_int1 = NULL , f_int2 = -@max_row,
 
14710
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14711
f_charbig = '#NULL#';
 
14712
# check null success:    1
 
14713
        
 
14714
# check null-1 success:         1
 
14715
UPDATE t1 SET f_int1 = -@max_row
 
14716
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14717
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14718
        
 
14719
# check null-2 success:         1
 
14720
UPDATE t1 SET f_int1 = NULL
 
14721
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14722
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14723
        
 
14724
# check null-3 success:         1
 
14725
DELETE FROM t1
 
14726
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14727
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14728
        
 
14729
# check null-4 success:         1
 
14730
DELETE FROM t1
 
14731
WHERE f_int1 = 0 AND f_int2 = 0
 
14732
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14733
AND f_charbig = '#NULL#';
 
14734
SET AUTOCOMMIT= 0;
 
14735
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14736
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14737
FROM t0_template source_tab
 
14738
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14739
        
 
14740
# check transactions-1 success:         1
 
14741
COMMIT WORK;
 
14742
        
 
14743
# check transactions-2 success:         1
 
14744
ROLLBACK WORK;
 
14745
        
 
14746
# check transactions-3 success:         1
 
14747
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14748
COMMIT WORK;
 
14749
ROLLBACK WORK;
 
14750
        
 
14751
# check transactions-4 success:         1
 
14752
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14753
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14754
FROM t0_template source_tab
 
14755
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14756
        
 
14757
# check transactions-5 success:         1
 
14758
ROLLBACK WORK;
 
14759
Warnings:
 
14760
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14761
        
 
14762
# check transactions-6 success:         1
 
14763
# INFO: Storage engine used for t1 seems to be not transactional.
 
14764
COMMIT;
 
14765
        
 
14766
# check transactions-7 success:         1
 
14767
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14768
COMMIT WORK;
 
14769
SET @@session.sql_mode = 'traditional';
 
14770
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14771
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14772
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14773
'', '', 'was inserted' FROM t0_template
 
14774
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14775
ERROR 22012: Division by 0
 
14776
COMMIT;
 
14777
        
 
14778
# check transactions-8 success:         1
 
14779
# INFO: Storage engine used for t1 seems to be unable to revert
 
14780
#       changes made by the failing statement.
 
14781
SET @@session.sql_mode = '';
 
14782
SET AUTOCOMMIT= 1;
 
14783
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14784
COMMIT WORK;
 
14785
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14786
        
 
14787
# check special-1 success:      1
 
14788
UPDATE t1 SET f_charbig = '';
 
14789
        
 
14790
# check special-2 success:      1
 
14791
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14792
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14793
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14797
'just inserted' FROM t0_template
 
14798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14799
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14800
BEGIN
 
14801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14802
f_charbig = 'updated by trigger'
 
14803
      WHERE f_int1 = new.f_int1;
 
14804
END|
 
14805
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14806
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14808
        
 
14809
# check trigger-1 success:      1
 
14810
DROP TRIGGER trg_1;
 
14811
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14812
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14813
f_charbig = 'just inserted'
 
14814
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14815
DELETE FROM t0_aux
 
14816
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14817
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14818
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14819
'just inserted' FROM t0_template
 
14820
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14821
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14822
BEGIN
 
14823
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14824
f_charbig = 'updated by trigger'
 
14825
      WHERE f_int1 = new.f_int1;
 
14826
END|
 
14827
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14828
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14829
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14830
        
 
14831
# check trigger-2 success:      1
 
14832
DROP TRIGGER trg_1;
 
14833
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14834
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14835
f_charbig = 'just inserted'
 
14836
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14837
DELETE FROM t0_aux
 
14838
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14839
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14840
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14841
'just inserted' FROM t0_template
 
14842
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14843
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14844
BEGIN
 
14845
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14846
f_charbig = 'updated by trigger'
 
14847
      WHERE f_int1 = new.f_int1;
 
14848
END|
 
14849
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14850
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14851
        
 
14852
# check trigger-3 success:      1
 
14853
DROP TRIGGER trg_1;
 
14854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14856
f_charbig = 'just inserted'
 
14857
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14858
DELETE FROM t0_aux
 
14859
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14860
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14861
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14862
'just inserted' FROM t0_template
 
14863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14864
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14865
BEGIN
 
14866
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14867
f_charbig = 'updated by trigger'
 
14868
      WHERE f_int1 = - old.f_int1;
 
14869
END|
 
14870
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14871
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14872
        
 
14873
# check trigger-4 success:      1
 
14874
DROP TRIGGER trg_1;
 
14875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14877
f_charbig = 'just inserted'
 
14878
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14879
DELETE FROM t0_aux
 
14880
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14881
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14882
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14883
'just inserted' FROM t0_template
 
14884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14885
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14886
BEGIN
 
14887
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14888
f_charbig = 'updated by trigger'
 
14889
      WHERE f_int1 = new.f_int1;
 
14890
END|
 
14891
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14892
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14893
        
 
14894
# check trigger-5 success:      1
 
14895
DROP TRIGGER trg_1;
 
14896
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14897
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14898
f_charbig = 'just inserted'
 
14899
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14900
DELETE FROM t0_aux
 
14901
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14903
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14904
'just inserted' FROM t0_template
 
14905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14906
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14907
BEGIN
 
14908
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14909
f_charbig = 'updated by trigger'
 
14910
      WHERE f_int1 = - old.f_int1;
 
14911
END|
 
14912
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14913
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14914
        
 
14915
# check trigger-6 success:      1
 
14916
DROP TRIGGER trg_1;
 
14917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14918
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14919
f_charbig = 'just inserted'
 
14920
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14921
DELETE FROM t0_aux
 
14922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14925
'just inserted' FROM t0_template
 
14926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14927
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14928
BEGIN
 
14929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14930
f_charbig = 'updated by trigger'
 
14931
      WHERE f_int1 = - old.f_int1;
 
14932
END|
 
14933
DELETE FROM t0_aux
 
14934
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14935
        
 
14936
# check trigger-7 success:      1
 
14937
DROP TRIGGER trg_1;
 
14938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14940
f_charbig = 'just inserted'
 
14941
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14942
DELETE FROM t0_aux
 
14943
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14945
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14946
'just inserted' FROM t0_template
 
14947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14948
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14949
BEGIN
 
14950
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14951
f_charbig = 'updated by trigger'
 
14952
      WHERE f_int1 = - old.f_int1;
 
14953
END|
 
14954
DELETE FROM t0_aux
 
14955
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14956
        
 
14957
# check trigger-8 success:      1
 
14958
DROP TRIGGER trg_1;
 
14959
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14960
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14961
f_charbig = 'just inserted'
 
14962
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14963
DELETE FROM t0_aux
 
14964
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14965
DELETE FROM t1
 
14966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14967
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14968
BEGIN
 
14969
SET new.f_int1 = old.f_int1 + @max_row,
 
14970
new.f_int2 = old.f_int2 - @max_row,
 
14971
new.f_charbig = '####updated per update trigger####';
 
14972
END|
 
14973
UPDATE t1
 
14974
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14975
f_charbig = '####updated per update statement itself####';
 
14976
        
 
14977
# check trigger-9 success:      1
 
14978
DROP TRIGGER trg_2;
 
14979
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14980
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14981
f_charbig = CONCAT('===',f_char1,'===');
 
14982
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14983
BEGIN
 
14984
SET new.f_int1 = new.f_int1 + @max_row,
 
14985
new.f_int2 = new.f_int2 - @max_row,
 
14986
new.f_charbig = '####updated per update trigger####';
 
14987
END|
 
14988
UPDATE t1
 
14989
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14990
f_charbig = '####updated per update statement itself####';
 
14991
        
 
14992
# check trigger-10 success:     1
 
14993
DROP TRIGGER trg_2;
 
14994
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14995
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14996
f_charbig = CONCAT('===',f_char1,'===');
 
14997
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14998
BEGIN
 
14999
SET new.f_int1 = @my_max1 + @counter,
 
15000
new.f_int2 = @my_min2 - @counter,
 
15001
new.f_charbig = '####updated per insert trigger####';
 
15002
SET @counter = @counter + 1;
 
15003
END|
 
15004
SET @counter = 1;
 
15005
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15006
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15007
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15008
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15010
ORDER BY f_int1;
 
15011
DROP TRIGGER trg_3;
 
15012
        
 
15013
# check trigger-11 success:     1
 
15014
DELETE FROM t1
 
15015
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15016
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15017
AND f_charbig = '####updated per insert trigger####';
 
15018
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15019
BEGIN
 
15020
SET new.f_int1 = @my_max1 + @counter,
 
15021
new.f_int2 = @my_min2 - @counter,
 
15022
new.f_charbig = '####updated per insert trigger####';
 
15023
SET @counter = @counter + 1;
 
15024
END|
 
15025
SET @counter = 1;
 
15026
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15027
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15028
SELECT CAST(f_int1 AS CHAR),
 
15029
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15030
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15031
ORDER BY f_int1;
 
15032
DROP TRIGGER trg_3;
 
15033
        
 
15034
# check trigger-12 success:     1
 
15035
DELETE FROM t1
 
15036
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15037
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15038
AND f_charbig = '####updated per insert trigger####';
 
15039
ANALYZE  TABLE t1;
 
15040
Table   Op      Msg_type        Msg_text
 
15041
test.t1 analyze status  OK
 
15042
CHECK    TABLE t1 EXTENDED;
 
15043
Table   Op      Msg_type        Msg_text
 
15044
test.t1 check   status  OK
 
15045
CHECKSUM TABLE t1 EXTENDED;
 
15046
Table   Checksum
 
15047
test.t1 <some_value>
 
15048
OPTIMIZE TABLE t1;
 
15049
Table   Op      Msg_type        Msg_text
 
15050
test.t1 optimize        status  OK
 
15051
# check layout success:    1
 
15052
REPAIR   TABLE t1 EXTENDED;
 
15053
Table   Op      Msg_type        Msg_text
 
15054
test.t1 repair  status  OK
 
15055
# check layout success:    1
 
15056
TRUNCATE t1;
 
15057
        
 
15058
# check TRUNCATE success:       1
 
15059
# check layout success:    1
 
15060
# End usability test (inc/partition_check.inc)
 
15061
DROP TABLE t1;
 
15062
CREATE TABLE t1 (
 
15063
f_int1 INTEGER,
 
15064
f_int2 INTEGER,
 
15065
f_char1 CHAR(20),
 
15066
f_char2 CHAR(20),
 
15067
f_charbig VARCHAR(1000)
 
15068
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
15069
)
 
15070
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15071
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
15072
(PARTITION part1 VALUES IN (0),
 
15073
 PARTITION part2 VALUES IN (1),
 
15074
 PARTITION part3 VALUES IN (NULL));
 
15075
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15076
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15077
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15078
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
15079
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15080
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15081
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15082
# Start usability test (inc/partition_check.inc)
 
15083
create_command
 
15084
SHOW CREATE TABLE t1;
 
15085
Table   Create Table
 
15086
t1      CREATE TABLE `t1` (
 
15087
  `f_int1` int(11) DEFAULT NULL,
 
15088
  `f_int2` int(11) DEFAULT NULL,
 
15089
  `f_char1` char(20) DEFAULT NULL,
 
15090
  `f_char2` char(20) DEFAULT NULL,
 
15091
  `f_charbig` varchar(1000) DEFAULT NULL
 
15092
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
15093
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
15094
SUBPARTITION BY KEY (f_int2)
 
15095
SUBPARTITIONS 3
 
15096
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
15097
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
15098
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
15099
 
 
15100
unified filelist
 
15101
t1#P#part1#SP#part1sp0.MYD
 
15102
t1#P#part1#SP#part1sp0.MYI
 
15103
t1#P#part1#SP#part1sp1.MYD
 
15104
t1#P#part1#SP#part1sp1.MYI
 
15105
t1#P#part1#SP#part1sp2.MYD
 
15106
t1#P#part1#SP#part1sp2.MYI
 
15107
t1#P#part2#SP#part2sp0.MYD
 
15108
t1#P#part2#SP#part2sp0.MYI
 
15109
t1#P#part2#SP#part2sp1.MYD
 
15110
t1#P#part2#SP#part2sp1.MYI
 
15111
t1#P#part2#SP#part2sp2.MYD
 
15112
t1#P#part2#SP#part2sp2.MYI
 
15113
t1#P#part3#SP#part3sp0.MYD
 
15114
t1#P#part3#SP#part3sp0.MYI
 
15115
t1#P#part3#SP#part3sp1.MYD
 
15116
t1#P#part3#SP#part3sp1.MYI
 
15117
t1#P#part3#SP#part3sp2.MYD
 
15118
t1#P#part3#SP#part3sp2.MYI
 
15119
t1.frm
 
15120
t1.par
 
15121
 
 
15122
# check prerequisites-1 success:    1
 
15123
# check COUNT(*) success:    1
 
15124
# check MIN/MAX(f_int1) success:    1
 
15125
# check MIN/MAX(f_int2) success:    1
 
15126
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15127
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15128
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15129
WHERE f_int1 IN (2,3);
 
15130
# check prerequisites-3 success:    1
 
15131
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15132
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
15133
# check read via f_int1 success: 1
 
15134
# check read via f_int2 success: 1
 
15135
        
 
15136
# check multiple-1 success:     1
 
15137
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15138
        
 
15139
# check multiple-2 success:     1
 
15140
INSERT INTO t1 SELECT * FROM t0_template
 
15141
WHERE MOD(f_int1,3) = 0;
 
15142
        
 
15143
# check multiple-3 success:     1
 
15144
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15145
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15146
AND @max_row_div2 + @max_row_div4;
 
15147
        
 
15148
# check multiple-4 success:     1
 
15149
DELETE FROM t1
 
15150
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15151
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15152
        
 
15153
# check multiple-5 success:     1
 
15154
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15155
INSERT INTO t1
 
15156
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15157
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15158
f_charbig = '#SINGLE#';
 
15159
        
 
15160
# check single-1 success:       1
 
15161
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15162
INSERT INTO t1
 
15163
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15164
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15165
f_charbig = '#SINGLE#';
 
15166
        
 
15167
# check single-2 success:       1
 
15168
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15169
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15170
UPDATE t1 SET f_int1 = @cur_value2
 
15171
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15172
        
 
15173
# check single-3 success:       1
 
15174
SET @cur_value1= -1;
 
15175
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15176
UPDATE t1 SET f_int1 = @cur_value1
 
15177
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15178
        
 
15179
# check single-4 success:       1
 
15180
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15181
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15182
        
 
15183
# check single-5 success:       1
 
15184
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15185
        
 
15186
# check single-6 success:       1
 
15187
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15188
        
 
15189
# check single-7 success:       1
 
15190
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15191
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15192
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15193
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15194
f_charbig = '#NULL#';
 
15195
INSERT INTO t1
 
15196
SET f_int1 = NULL , f_int2 = -@max_row,
 
15197
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15198
f_charbig = '#NULL#';
 
15199
# check null success:    1
 
15200
        
 
15201
# check null-1 success:         1
 
15202
UPDATE t1 SET f_int1 = -@max_row
 
15203
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15204
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15205
        
 
15206
# check null-2 success:         1
 
15207
UPDATE t1 SET f_int1 = NULL
 
15208
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15209
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15210
        
 
15211
# check null-3 success:         1
 
15212
DELETE FROM t1
 
15213
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15214
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15215
        
 
15216
# check null-4 success:         1
 
15217
DELETE FROM t1
 
15218
WHERE f_int1 = 0 AND f_int2 = 0
 
15219
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15220
AND f_charbig = '#NULL#';
 
15221
SET AUTOCOMMIT= 0;
 
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-1 success:         1
 
15228
COMMIT WORK;
 
15229
        
 
15230
# check transactions-2 success:         1
 
15231
ROLLBACK WORK;
 
15232
        
 
15233
# check transactions-3 success:         1
 
15234
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15235
COMMIT WORK;
 
15236
ROLLBACK WORK;
 
15237
        
 
15238
# check transactions-4 success:         1
 
15239
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15240
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15241
FROM t0_template source_tab
 
15242
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15243
        
 
15244
# check transactions-5 success:         1
 
15245
ROLLBACK WORK;
 
15246
Warnings:
 
15247
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
15248
        
 
15249
# check transactions-6 success:         1
 
15250
# INFO: Storage engine used for t1 seems to be not transactional.
 
15251
COMMIT;
 
15252
        
 
15253
# check transactions-7 success:         1
 
15254
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15255
COMMIT WORK;
 
15256
SET @@session.sql_mode = 'traditional';
 
15257
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15259
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15260
'', '', 'was inserted' FROM t0_template
 
15261
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15262
ERROR 22012: Division by 0
 
15263
COMMIT;
 
15264
        
 
15265
# check transactions-8 success:         1
 
15266
# INFO: Storage engine used for t1 seems to be unable to revert
 
15267
#       changes made by the failing statement.
 
15268
SET @@session.sql_mode = '';
 
15269
SET AUTOCOMMIT= 1;
 
15270
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15271
COMMIT WORK;
 
15272
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15273
        
 
15274
# check special-1 success:      1
 
15275
UPDATE t1 SET f_charbig = '';
 
15276
        
 
15277
# check special-2 success:      1
 
15278
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15279
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15280
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15282
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15283
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15284
'just inserted' FROM t0_template
 
15285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15286
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15287
BEGIN
 
15288
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15289
f_charbig = 'updated by trigger'
 
15290
      WHERE f_int1 = new.f_int1;
 
15291
END|
 
15292
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15293
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15295
        
 
15296
# check trigger-1 success:      1
 
15297
DROP TRIGGER trg_1;
 
15298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15300
f_charbig = 'just inserted'
 
15301
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15302
DELETE FROM t0_aux
 
15303
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15305
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15306
'just inserted' FROM t0_template
 
15307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15308
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15309
BEGIN
 
15310
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15311
f_charbig = 'updated by trigger'
 
15312
      WHERE f_int1 = new.f_int1;
 
15313
END|
 
15314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15315
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15316
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15317
        
 
15318
# check trigger-2 success:      1
 
15319
DROP TRIGGER trg_1;
 
15320
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15321
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15322
f_charbig = 'just inserted'
 
15323
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15324
DELETE FROM t0_aux
 
15325
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15326
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15327
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15328
'just inserted' FROM t0_template
 
15329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15330
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15331
BEGIN
 
15332
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15333
f_charbig = 'updated by trigger'
 
15334
      WHERE f_int1 = new.f_int1;
 
15335
END|
 
15336
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15337
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15338
        
 
15339
# check trigger-3 success:      1
 
15340
DROP TRIGGER trg_1;
 
15341
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15342
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15343
f_charbig = 'just inserted'
 
15344
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15345
DELETE FROM t0_aux
 
15346
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15347
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15348
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15349
'just inserted' FROM t0_template
 
15350
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15351
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15352
BEGIN
 
15353
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15354
f_charbig = 'updated by trigger'
 
15355
      WHERE f_int1 = - old.f_int1;
 
15356
END|
 
15357
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15358
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15359
        
 
15360
# check trigger-4 success:      1
 
15361
DROP TRIGGER trg_1;
 
15362
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15363
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15364
f_charbig = 'just inserted'
 
15365
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15366
DELETE FROM t0_aux
 
15367
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15368
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15369
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15370
'just inserted' FROM t0_template
 
15371
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15372
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15373
BEGIN
 
15374
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15375
f_charbig = 'updated by trigger'
 
15376
      WHERE f_int1 = new.f_int1;
 
15377
END|
 
15378
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15379
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15380
        
 
15381
# check trigger-5 success:      1
 
15382
DROP TRIGGER trg_1;
 
15383
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15384
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15385
f_charbig = 'just inserted'
 
15386
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15387
DELETE FROM t0_aux
 
15388
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15389
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15390
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15391
'just inserted' FROM t0_template
 
15392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15393
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15394
BEGIN
 
15395
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15396
f_charbig = 'updated by trigger'
 
15397
      WHERE f_int1 = - old.f_int1;
 
15398
END|
 
15399
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15400
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15401
        
 
15402
# check trigger-6 success:      1
 
15403
DROP TRIGGER trg_1;
 
15404
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15405
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15406
f_charbig = 'just inserted'
 
15407
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15408
DELETE FROM t0_aux
 
15409
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15410
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15411
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15412
'just inserted' FROM t0_template
 
15413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15414
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15415
BEGIN
 
15416
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15417
f_charbig = 'updated by trigger'
 
15418
      WHERE f_int1 = - old.f_int1;
 
15419
END|
 
15420
DELETE FROM t0_aux
 
15421
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15422
        
 
15423
# check trigger-7 success:      1
 
15424
DROP TRIGGER trg_1;
 
15425
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15426
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15427
f_charbig = 'just inserted'
 
15428
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15429
DELETE FROM t0_aux
 
15430
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15431
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15432
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15433
'just inserted' FROM t0_template
 
15434
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15435
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15436
BEGIN
 
15437
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15438
f_charbig = 'updated by trigger'
 
15439
      WHERE f_int1 = - old.f_int1;
 
15440
END|
 
15441
DELETE FROM t0_aux
 
15442
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15443
        
 
15444
# check trigger-8 success:      1
 
15445
DROP TRIGGER trg_1;
 
15446
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15447
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15448
f_charbig = 'just inserted'
 
15449
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15450
DELETE FROM t0_aux
 
15451
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15452
DELETE FROM t1
 
15453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15454
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15455
BEGIN
 
15456
SET new.f_int1 = old.f_int1 + @max_row,
 
15457
new.f_int2 = old.f_int2 - @max_row,
 
15458
new.f_charbig = '####updated per update trigger####';
 
15459
END|
 
15460
UPDATE t1
 
15461
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15462
f_charbig = '####updated per update statement itself####';
 
15463
        
 
15464
# check trigger-9 success:      1
 
15465
DROP TRIGGER trg_2;
 
15466
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15467
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15468
f_charbig = CONCAT('===',f_char1,'===');
 
15469
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15470
BEGIN
 
15471
SET new.f_int1 = new.f_int1 + @max_row,
 
15472
new.f_int2 = new.f_int2 - @max_row,
 
15473
new.f_charbig = '####updated per update trigger####';
 
15474
END|
 
15475
UPDATE t1
 
15476
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15477
f_charbig = '####updated per update statement itself####';
 
15478
        
 
15479
# check trigger-10 success:     1
 
15480
DROP TRIGGER trg_2;
 
15481
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15482
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15483
f_charbig = CONCAT('===',f_char1,'===');
 
15484
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15485
BEGIN
 
15486
SET new.f_int1 = @my_max1 + @counter,
 
15487
new.f_int2 = @my_min2 - @counter,
 
15488
new.f_charbig = '####updated per insert trigger####';
 
15489
SET @counter = @counter + 1;
 
15490
END|
 
15491
SET @counter = 1;
 
15492
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15493
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15494
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15495
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15497
ORDER BY f_int1;
 
15498
DROP TRIGGER trg_3;
 
15499
        
 
15500
# check trigger-11 success:     1
 
15501
DELETE FROM t1
 
15502
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15503
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15504
AND f_charbig = '####updated per insert trigger####';
 
15505
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15506
BEGIN
 
15507
SET new.f_int1 = @my_max1 + @counter,
 
15508
new.f_int2 = @my_min2 - @counter,
 
15509
new.f_charbig = '####updated per insert trigger####';
 
15510
SET @counter = @counter + 1;
 
15511
END|
 
15512
SET @counter = 1;
 
15513
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15514
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15515
SELECT CAST(f_int1 AS CHAR),
 
15516
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15517
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15518
ORDER BY f_int1;
 
15519
DROP TRIGGER trg_3;
 
15520
        
 
15521
# check trigger-12 success:     1
 
15522
DELETE FROM t1
 
15523
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15524
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15525
AND f_charbig = '####updated per insert trigger####';
 
15526
ANALYZE  TABLE t1;
 
15527
Table   Op      Msg_type        Msg_text
 
15528
test.t1 analyze status  OK
 
15529
CHECK    TABLE t1 EXTENDED;
 
15530
Table   Op      Msg_type        Msg_text
 
15531
test.t1 check   status  OK
 
15532
CHECKSUM TABLE t1 EXTENDED;
 
15533
Table   Checksum
 
15534
test.t1 <some_value>
 
15535
OPTIMIZE TABLE t1;
 
15536
Table   Op      Msg_type        Msg_text
 
15537
test.t1 optimize        status  OK
 
15538
# check layout success:    1
 
15539
REPAIR   TABLE t1 EXTENDED;
 
15540
Table   Op      Msg_type        Msg_text
 
15541
test.t1 repair  status  OK
 
15542
# check layout success:    1
 
15543
TRUNCATE t1;
 
15544
        
 
15545
# check TRUNCATE success:       1
 
15546
# check layout success:    1
 
15547
# End usability test (inc/partition_check.inc)
 
15548
DROP TABLE t1;
 
15549
DROP VIEW  IF EXISTS v1;
 
15550
DROP TABLE IF EXISTS t1;
 
15551
DROP TABLE IF EXISTS t0_aux;
 
15552
DROP TABLE IF EXISTS t0_definition;
 
15553
DROP TABLE IF EXISTS t0_template;