~ubuntu-branches/ubuntu/trusty/mysql-5.6/trusty

« back to all changes in this revision

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

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-12 11:54:27 UTC
  • Revision ID: package-import@ubuntu.com-20140212115427-oq6tfsqxl1wuwehi
Tags: upstream-5.6.15
ImportĀ upstreamĀ versionĀ 5.6.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
SET @max_row = 20;
 
2
SET @@session.default_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
#  Check partitioning methods on just created tables
 
43
#  The tables should be defined without/with PRIMARY KEY and
 
44
#  UNIQUE INDEXes.
 
45
#  Every test round has to check
 
46
#        PARTITION BY HASH/KEY/LIST/RANGE
 
47
#        PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ...
 
48
#========================================================================
 
49
#------------------------------------------------------------------------
 
50
#  1   Tables without PRIMARY KEY or UNIQUE INDEXes
 
51
#------------------------------------------------------------------------
 
52
#  1.1 The partitioning function contains one column.
 
53
DROP TABLE IF EXISTS t1;
 
54
CREATE TABLE t1 (
 
55
f_int1 INTEGER,
 
56
f_int2 INTEGER,
 
57
f_char1 CHAR(20),
 
58
f_char2 CHAR(20),
 
59
f_charbig VARCHAR(1000)
 
60
 
 
61
)
 
62
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
63
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
64
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
65
# Start usability test (inc/partition_check.inc)
 
66
create_command
 
67
SHOW CREATE TABLE t1;
 
68
Table   Create Table
 
69
t1      CREATE TABLE `t1` (
 
70
  `f_int1` int(11) DEFAULT NULL,
 
71
  `f_int2` int(11) DEFAULT NULL,
 
72
  `f_char1` char(20) DEFAULT NULL,
 
73
  `f_char2` char(20) DEFAULT NULL,
 
74
  `f_charbig` varchar(1000) DEFAULT NULL
 
75
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
76
/*!50100 PARTITION BY HASH (f_int1)
 
77
PARTITIONS 2 */
 
78
 
 
79
unified filelist
 
80
t1#P#p0.MYD
 
81
t1#P#p0.MYI
 
82
t1#P#p1.MYD
 
83
t1#P#p1.MYI
 
84
t1.frm
 
85
t1.par
 
86
 
 
87
# check prerequisites-1 success:    1
 
88
# check COUNT(*) success:    1
 
89
# check MIN/MAX(f_int1) success:    1
 
90
# check MIN/MAX(f_int2) success:    1
 
91
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
92
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
93
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
94
WHERE f_int1 IN (2,3);
 
95
# check prerequisites-3 success:    1
 
96
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
97
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
98
# check read via f_int1 success: 1
 
99
# check read via f_int2 success: 1
 
100
        
 
101
# check multiple-1 success:     1
 
102
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
103
        
 
104
# check multiple-2 success:     1
 
105
INSERT INTO t1 SELECT * FROM t0_template
 
106
WHERE MOD(f_int1,3) = 0;
 
107
        
 
108
# check multiple-3 success:     1
 
109
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
110
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
111
AND @max_row_div2 + @max_row_div4;
 
112
        
 
113
# check multiple-4 success:     1
 
114
DELETE FROM t1
 
115
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
116
AND @max_row_div2 + @max_row_div4 + @max_row;
 
117
        
 
118
# check multiple-5 success:     1
 
119
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
120
INSERT INTO t1
 
121
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
122
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
123
f_charbig = '#SINGLE#';
 
124
        
 
125
# check single-1 success:       1
 
126
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
127
INSERT INTO t1
 
128
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
129
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
130
f_charbig = '#SINGLE#';
 
131
        
 
132
# check single-2 success:       1
 
133
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
134
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
135
UPDATE t1 SET f_int1 = @cur_value2
 
136
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
137
        
 
138
# check single-3 success:       1
 
139
SET @cur_value1= -1;
 
140
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
141
UPDATE t1 SET f_int1 = @cur_value1
 
142
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
143
        
 
144
# check single-4 success:       1
 
145
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
146
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
147
        
 
148
# check single-5 success:       1
 
149
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
150
        
 
151
# check single-6 success:       1
 
152
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
153
        
 
154
# check single-7 success:       1
 
155
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
156
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
157
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
158
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
159
f_charbig = '#NULL#';
 
160
INSERT INTO t1
 
161
SET f_int1 = NULL , f_int2 = -@max_row,
 
162
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
163
f_charbig = '#NULL#';
 
164
# check null success:    1
 
165
        
 
166
# check null-1 success:         1
 
167
UPDATE t1 SET f_int1 = -@max_row
 
168
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
169
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
170
        
 
171
# check null-2 success:         1
 
172
UPDATE t1 SET f_int1 = NULL
 
173
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
174
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
175
        
 
176
# check null-3 success:         1
 
177
DELETE FROM t1
 
178
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
179
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
180
        
 
181
# check null-4 success:         1
 
182
DELETE FROM t1
 
183
WHERE f_int1 = 0 AND f_int2 = 0
 
184
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
185
AND f_charbig = '#NULL#';
 
186
SET AUTOCOMMIT= 0;
 
187
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
188
SELECT f_int1, f_int1, '', '', 'was inserted'
 
189
FROM t0_template source_tab
 
190
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
191
        
 
192
# check transactions-1 success:         1
 
193
COMMIT WORK;
 
194
        
 
195
# check transactions-2 success:         1
 
196
ROLLBACK WORK;
 
197
        
 
198
# check transactions-3 success:         1
 
199
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
200
COMMIT WORK;
 
201
ROLLBACK WORK;
 
202
        
 
203
# check transactions-4 success:         1
 
204
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
205
SELECT f_int1, f_int1, '', '', 'was inserted'
 
206
FROM t0_template source_tab
 
207
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
208
        
 
209
# check transactions-5 success:         1
 
210
ROLLBACK WORK;
 
211
Warnings:
 
212
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
213
        
 
214
# check transactions-6 success:         1
 
215
# INFO: Storage engine used for t1 seems to be not transactional.
 
216
COMMIT;
 
217
        
 
218
# check transactions-7 success:         1
 
219
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
220
COMMIT WORK;
 
221
SET @@session.sql_mode = 'traditional';
 
222
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
223
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
224
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
225
'', '', 'was inserted' FROM t0_template
 
226
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
227
ERROR 22012: Division by 0
 
228
COMMIT;
 
229
        
 
230
# check transactions-8 success:         1
 
231
# INFO: Storage engine used for t1 seems to be unable to revert
 
232
#       changes made by the failing statement.
 
233
SET @@session.sql_mode = '';
 
234
SET AUTOCOMMIT= 1;
 
235
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
236
COMMIT WORK;
 
237
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
238
        
 
239
# check special-1 success:      1
 
240
UPDATE t1 SET f_charbig = '';
 
241
        
 
242
# check special-2 success:      1
 
243
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
244
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
245
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
248
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
249
'just inserted' FROM t0_template
 
250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
251
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
252
BEGIN
 
253
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
254
f_charbig = 'updated by trigger'
 
255
      WHERE f_int1 = new.f_int1;
 
256
END|
 
257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
258
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
260
        
 
261
# check trigger-1 success:      1
 
262
DROP TRIGGER trg_1;
 
263
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
264
f_int2 = CAST(f_char1 AS SIGNED INT),
 
265
f_charbig = 'just inserted'
 
266
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
267
DELETE FROM t0_aux
 
268
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
269
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
270
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
271
'just inserted' FROM t0_template
 
272
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
273
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
274
BEGIN
 
275
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
276
f_charbig = 'updated by trigger'
 
277
      WHERE f_int1 = new.f_int1;
 
278
END|
 
279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
280
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
282
        
 
283
# check trigger-2 success:      1
 
284
DROP TRIGGER trg_1;
 
285
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
286
f_int2 = CAST(f_char1 AS SIGNED INT),
 
287
f_charbig = 'just inserted'
 
288
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
289
DELETE FROM t0_aux
 
290
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
291
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
292
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
293
'just inserted' FROM t0_template
 
294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
295
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
296
BEGIN
 
297
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
298
f_charbig = 'updated by trigger'
 
299
      WHERE f_int1 = new.f_int1;
 
300
END|
 
301
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
302
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
303
        
 
304
# check trigger-3 success:      1
 
305
DROP TRIGGER trg_1;
 
306
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
307
f_int2 = CAST(f_char1 AS SIGNED INT),
 
308
f_charbig = 'just inserted'
 
309
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
310
DELETE FROM t0_aux
 
311
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
312
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
313
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
314
'just inserted' FROM t0_template
 
315
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
316
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
317
BEGIN
 
318
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
319
f_charbig = 'updated by trigger'
 
320
      WHERE f_int1 = - old.f_int1;
 
321
END|
 
322
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
323
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
324
        
 
325
# check trigger-4 success:      1
 
326
DROP TRIGGER trg_1;
 
327
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
328
f_int2 = CAST(f_char1 AS SIGNED INT),
 
329
f_charbig = 'just inserted'
 
330
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
331
DELETE FROM t0_aux
 
332
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
333
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
334
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
335
'just inserted' FROM t0_template
 
336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
337
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
338
BEGIN
 
339
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
340
f_charbig = 'updated by trigger'
 
341
      WHERE f_int1 = new.f_int1;
 
342
END|
 
343
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
344
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
345
        
 
346
# check trigger-5 success:      1
 
347
DROP TRIGGER trg_1;
 
348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
350
f_charbig = 'just inserted'
 
351
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
352
DELETE FROM t0_aux
 
353
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
355
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
356
'just inserted' FROM t0_template
 
357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
358
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
359
BEGIN
 
360
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
361
f_charbig = 'updated by trigger'
 
362
      WHERE f_int1 = - old.f_int1;
 
363
END|
 
364
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
365
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
366
        
 
367
# check trigger-6 success:      1
 
368
DROP TRIGGER trg_1;
 
369
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
370
f_int2 = CAST(f_char1 AS SIGNED INT),
 
371
f_charbig = 'just inserted'
 
372
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
373
DELETE FROM t0_aux
 
374
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
377
'just inserted' FROM t0_template
 
378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
379
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
380
BEGIN
 
381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
382
f_charbig = 'updated by trigger'
 
383
      WHERE f_int1 = - old.f_int1;
 
384
END|
 
385
DELETE FROM t0_aux
 
386
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
387
        
 
388
# check trigger-7 success:      1
 
389
DROP TRIGGER trg_1;
 
390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
391
f_int2 = CAST(f_char1 AS SIGNED INT),
 
392
f_charbig = 'just inserted'
 
393
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
394
DELETE FROM t0_aux
 
395
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
397
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
398
'just inserted' FROM t0_template
 
399
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
400
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
401
BEGIN
 
402
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
403
f_charbig = 'updated by trigger'
 
404
      WHERE f_int1 = - old.f_int1;
 
405
END|
 
406
DELETE FROM t0_aux
 
407
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
408
        
 
409
# check trigger-8 success:      1
 
410
DROP TRIGGER trg_1;
 
411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
413
f_charbig = 'just inserted'
 
414
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
415
DELETE FROM t0_aux
 
416
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
417
DELETE FROM t1
 
418
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
419
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
420
BEGIN
 
421
SET new.f_int1 = old.f_int1 + @max_row,
 
422
new.f_int2 = old.f_int2 - @max_row,
 
423
new.f_charbig = '####updated per update trigger####';
 
424
END|
 
425
UPDATE t1
 
426
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
427
f_charbig = '####updated per update statement itself####';
 
428
        
 
429
# check trigger-9 success:      1
 
430
DROP TRIGGER trg_2;
 
431
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
432
f_int2 = CAST(f_char1 AS SIGNED INT),
 
433
f_charbig = CONCAT('===',f_char1,'===');
 
434
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
435
BEGIN
 
436
SET new.f_int1 = new.f_int1 + @max_row,
 
437
new.f_int2 = new.f_int2 - @max_row,
 
438
new.f_charbig = '####updated per update trigger####';
 
439
END|
 
440
UPDATE t1
 
441
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
442
f_charbig = '####updated per update statement itself####';
 
443
        
 
444
# check trigger-10 success:     1
 
445
DROP TRIGGER trg_2;
 
446
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
447
f_int2 = CAST(f_char1 AS SIGNED INT),
 
448
f_charbig = CONCAT('===',f_char1,'===');
 
449
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
450
BEGIN
 
451
SET new.f_int1 = @my_max1 + @counter,
 
452
new.f_int2 = @my_min2 - @counter,
 
453
new.f_charbig = '####updated per insert trigger####';
 
454
SET @counter = @counter + 1;
 
455
END|
 
456
SET @counter = 1;
 
457
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
458
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
459
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
460
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
461
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
462
ORDER BY f_int1;
 
463
DROP TRIGGER trg_3;
 
464
        
 
465
# check trigger-11 success:     1
 
466
DELETE FROM t1
 
467
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
468
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
469
AND f_charbig = '####updated per insert trigger####';
 
470
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
471
BEGIN
 
472
SET new.f_int1 = @my_max1 + @counter,
 
473
new.f_int2 = @my_min2 - @counter,
 
474
new.f_charbig = '####updated per insert trigger####';
 
475
SET @counter = @counter + 1;
 
476
END|
 
477
SET @counter = 1;
 
478
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
479
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
480
SELECT CAST(f_int1 AS CHAR),
 
481
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
482
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
483
ORDER BY f_int1;
 
484
DROP TRIGGER trg_3;
 
485
        
 
486
# check trigger-12 success:     1
 
487
DELETE FROM t1
 
488
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
489
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
490
AND f_charbig = '####updated per insert trigger####';
 
491
ANALYZE  TABLE t1;
 
492
Table   Op      Msg_type        Msg_text
 
493
test.t1 analyze status  OK
 
494
CHECK    TABLE t1 EXTENDED;
 
495
Table   Op      Msg_type        Msg_text
 
496
test.t1 check   status  OK
 
497
CHECKSUM TABLE t1 EXTENDED;
 
498
Table   Checksum
 
499
test.t1 <some_value>
 
500
OPTIMIZE TABLE t1;
 
501
Table   Op      Msg_type        Msg_text
 
502
test.t1 optimize        status  OK
 
503
# check layout success:    1
 
504
REPAIR   TABLE t1 EXTENDED;
 
505
Table   Op      Msg_type        Msg_text
 
506
test.t1 repair  status  OK
 
507
# check layout success:    1
 
508
TRUNCATE t1;
 
509
        
 
510
# check TRUNCATE success:       1
 
511
# check layout success:    1
 
512
# End usability test (inc/partition_check.inc)
 
513
DROP TABLE t1;
 
514
CREATE TABLE t1 (
 
515
f_int1 INTEGER,
 
516
f_int2 INTEGER,
 
517
f_char1 CHAR(20),
 
518
f_char2 CHAR(20),
 
519
f_charbig VARCHAR(1000)
 
520
 
 
521
)
 
522
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
523
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
524
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
525
# Start usability test (inc/partition_check.inc)
 
526
create_command
 
527
SHOW CREATE TABLE t1;
 
528
Table   Create Table
 
529
t1      CREATE TABLE `t1` (
 
530
  `f_int1` int(11) DEFAULT NULL,
 
531
  `f_int2` int(11) DEFAULT NULL,
 
532
  `f_char1` char(20) DEFAULT NULL,
 
533
  `f_char2` char(20) DEFAULT NULL,
 
534
  `f_charbig` varchar(1000) DEFAULT NULL
 
535
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
536
/*!50100 PARTITION BY KEY (f_int1)
 
537
PARTITIONS 5 */
 
538
 
 
539
unified filelist
 
540
t1#P#p0.MYD
 
541
t1#P#p0.MYI
 
542
t1#P#p1.MYD
 
543
t1#P#p1.MYI
 
544
t1#P#p2.MYD
 
545
t1#P#p2.MYI
 
546
t1#P#p3.MYD
 
547
t1#P#p3.MYI
 
548
t1#P#p4.MYD
 
549
t1#P#p4.MYI
 
550
t1.frm
 
551
t1.par
 
552
 
 
553
# check prerequisites-1 success:    1
 
554
# check COUNT(*) success:    1
 
555
# check MIN/MAX(f_int1) success:    1
 
556
# check MIN/MAX(f_int2) success:    1
 
557
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
558
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
559
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
560
WHERE f_int1 IN (2,3);
 
561
# check prerequisites-3 success:    1
 
562
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
563
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
564
# check read via f_int1 success: 1
 
565
# check read via f_int2 success: 1
 
566
        
 
567
# check multiple-1 success:     1
 
568
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
569
        
 
570
# check multiple-2 success:     1
 
571
INSERT INTO t1 SELECT * FROM t0_template
 
572
WHERE MOD(f_int1,3) = 0;
 
573
        
 
574
# check multiple-3 success:     1
 
575
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
576
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
577
AND @max_row_div2 + @max_row_div4;
 
578
        
 
579
# check multiple-4 success:     1
 
580
DELETE FROM t1
 
581
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
582
AND @max_row_div2 + @max_row_div4 + @max_row;
 
583
        
 
584
# check multiple-5 success:     1
 
585
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
586
INSERT INTO t1
 
587
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
588
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
589
f_charbig = '#SINGLE#';
 
590
        
 
591
# check single-1 success:       1
 
592
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
593
INSERT INTO t1
 
594
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
595
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
596
f_charbig = '#SINGLE#';
 
597
        
 
598
# check single-2 success:       1
 
599
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
600
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
601
UPDATE t1 SET f_int1 = @cur_value2
 
602
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
603
        
 
604
# check single-3 success:       1
 
605
SET @cur_value1= -1;
 
606
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
607
UPDATE t1 SET f_int1 = @cur_value1
 
608
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
609
        
 
610
# check single-4 success:       1
 
611
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
612
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
613
        
 
614
# check single-5 success:       1
 
615
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
616
        
 
617
# check single-6 success:       1
 
618
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
619
        
 
620
# check single-7 success:       1
 
621
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
622
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
623
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
624
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
625
f_charbig = '#NULL#';
 
626
INSERT INTO t1
 
627
SET f_int1 = NULL , f_int2 = -@max_row,
 
628
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
629
f_charbig = '#NULL#';
 
630
# check null success:    1
 
631
        
 
632
# check null-1 success:         1
 
633
UPDATE t1 SET f_int1 = -@max_row
 
634
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
635
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
636
        
 
637
# check null-2 success:         1
 
638
UPDATE t1 SET f_int1 = NULL
 
639
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
640
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
641
        
 
642
# check null-3 success:         1
 
643
DELETE FROM t1
 
644
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
645
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
646
        
 
647
# check null-4 success:         1
 
648
DELETE FROM t1
 
649
WHERE f_int1 = 0 AND f_int2 = 0
 
650
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
651
AND f_charbig = '#NULL#';
 
652
SET AUTOCOMMIT= 0;
 
653
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
654
SELECT f_int1, f_int1, '', '', 'was inserted'
 
655
FROM t0_template source_tab
 
656
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
657
        
 
658
# check transactions-1 success:         1
 
659
COMMIT WORK;
 
660
        
 
661
# check transactions-2 success:         1
 
662
ROLLBACK WORK;
 
663
        
 
664
# check transactions-3 success:         1
 
665
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
666
COMMIT WORK;
 
667
ROLLBACK WORK;
 
668
        
 
669
# check transactions-4 success:         1
 
670
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
671
SELECT f_int1, f_int1, '', '', 'was inserted'
 
672
FROM t0_template source_tab
 
673
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
674
        
 
675
# check transactions-5 success:         1
 
676
ROLLBACK WORK;
 
677
Warnings:
 
678
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
679
        
 
680
# check transactions-6 success:         1
 
681
# INFO: Storage engine used for t1 seems to be not transactional.
 
682
COMMIT;
 
683
        
 
684
# check transactions-7 success:         1
 
685
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
686
COMMIT WORK;
 
687
SET @@session.sql_mode = 'traditional';
 
688
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
689
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
690
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
691
'', '', 'was inserted' FROM t0_template
 
692
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
693
ERROR 22012: Division by 0
 
694
COMMIT;
 
695
        
 
696
# check transactions-8 success:         1
 
697
# INFO: Storage engine used for t1 seems to be unable to revert
 
698
#       changes made by the failing statement.
 
699
SET @@session.sql_mode = '';
 
700
SET AUTOCOMMIT= 1;
 
701
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
702
COMMIT WORK;
 
703
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
704
        
 
705
# check special-1 success:      1
 
706
UPDATE t1 SET f_charbig = '';
 
707
        
 
708
# check special-2 success:      1
 
709
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
710
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
711
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
715
'just inserted' FROM t0_template
 
716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
717
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
718
BEGIN
 
719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
720
f_charbig = 'updated by trigger'
 
721
      WHERE f_int1 = new.f_int1;
 
722
END|
 
723
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
724
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
726
        
 
727
# check trigger-1 success:      1
 
728
DROP TRIGGER trg_1;
 
729
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
730
f_int2 = CAST(f_char1 AS SIGNED INT),
 
731
f_charbig = 'just inserted'
 
732
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
733
DELETE FROM t0_aux
 
734
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
735
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
736
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
737
'just inserted' FROM t0_template
 
738
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
739
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
740
BEGIN
 
741
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
742
f_charbig = 'updated by trigger'
 
743
      WHERE f_int1 = new.f_int1;
 
744
END|
 
745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
746
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
748
        
 
749
# check trigger-2 success:      1
 
750
DROP TRIGGER trg_1;
 
751
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
752
f_int2 = CAST(f_char1 AS SIGNED INT),
 
753
f_charbig = 'just inserted'
 
754
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
755
DELETE FROM t0_aux
 
756
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
757
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
758
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
759
'just inserted' FROM t0_template
 
760
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
761
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
762
BEGIN
 
763
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
764
f_charbig = 'updated by trigger'
 
765
      WHERE f_int1 = new.f_int1;
 
766
END|
 
767
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
768
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
769
        
 
770
# check trigger-3 success:      1
 
771
DROP TRIGGER trg_1;
 
772
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
773
f_int2 = CAST(f_char1 AS SIGNED INT),
 
774
f_charbig = 'just inserted'
 
775
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
776
DELETE FROM t0_aux
 
777
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
779
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
780
'just inserted' FROM t0_template
 
781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
782
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
783
BEGIN
 
784
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
785
f_charbig = 'updated by trigger'
 
786
      WHERE f_int1 = - old.f_int1;
 
787
END|
 
788
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
789
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
790
        
 
791
# check trigger-4 success:      1
 
792
DROP TRIGGER trg_1;
 
793
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
794
f_int2 = CAST(f_char1 AS SIGNED INT),
 
795
f_charbig = 'just inserted'
 
796
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
797
DELETE FROM t0_aux
 
798
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
799
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
800
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
801
'just inserted' FROM t0_template
 
802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
803
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
804
BEGIN
 
805
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
806
f_charbig = 'updated by trigger'
 
807
      WHERE f_int1 = new.f_int1;
 
808
END|
 
809
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
810
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
811
        
 
812
# check trigger-5 success:      1
 
813
DROP TRIGGER trg_1;
 
814
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
815
f_int2 = CAST(f_char1 AS SIGNED INT),
 
816
f_charbig = 'just inserted'
 
817
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
818
DELETE FROM t0_aux
 
819
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
820
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
821
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
822
'just inserted' FROM t0_template
 
823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
824
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
825
BEGIN
 
826
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
827
f_charbig = 'updated by trigger'
 
828
      WHERE f_int1 = - old.f_int1;
 
829
END|
 
830
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
831
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
832
        
 
833
# check trigger-6 success:      1
 
834
DROP TRIGGER trg_1;
 
835
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
836
f_int2 = CAST(f_char1 AS SIGNED INT),
 
837
f_charbig = 'just inserted'
 
838
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
839
DELETE FROM t0_aux
 
840
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
842
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
843
'just inserted' FROM t0_template
 
844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
845
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
846
BEGIN
 
847
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
848
f_charbig = 'updated by trigger'
 
849
      WHERE f_int1 = - old.f_int1;
 
850
END|
 
851
DELETE FROM t0_aux
 
852
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
853
        
 
854
# check trigger-7 success:      1
 
855
DROP TRIGGER trg_1;
 
856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
858
f_charbig = 'just inserted'
 
859
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
860
DELETE FROM t0_aux
 
861
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
862
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
863
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
864
'just inserted' FROM t0_template
 
865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
866
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
867
BEGIN
 
868
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
869
f_charbig = 'updated by trigger'
 
870
      WHERE f_int1 = - old.f_int1;
 
871
END|
 
872
DELETE FROM t0_aux
 
873
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
874
        
 
875
# check trigger-8 success:      1
 
876
DROP TRIGGER trg_1;
 
877
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
878
f_int2 = CAST(f_char1 AS SIGNED INT),
 
879
f_charbig = 'just inserted'
 
880
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
881
DELETE FROM t0_aux
 
882
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
883
DELETE FROM t1
 
884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
885
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
886
BEGIN
 
887
SET new.f_int1 = old.f_int1 + @max_row,
 
888
new.f_int2 = old.f_int2 - @max_row,
 
889
new.f_charbig = '####updated per update trigger####';
 
890
END|
 
891
UPDATE t1
 
892
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
893
f_charbig = '####updated per update statement itself####';
 
894
        
 
895
# check trigger-9 success:      1
 
896
DROP TRIGGER trg_2;
 
897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
899
f_charbig = CONCAT('===',f_char1,'===');
 
900
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
901
BEGIN
 
902
SET new.f_int1 = new.f_int1 + @max_row,
 
903
new.f_int2 = new.f_int2 - @max_row,
 
904
new.f_charbig = '####updated per update trigger####';
 
905
END|
 
906
UPDATE t1
 
907
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
908
f_charbig = '####updated per update statement itself####';
 
909
        
 
910
# check trigger-10 success:     1
 
911
DROP TRIGGER trg_2;
 
912
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
913
f_int2 = CAST(f_char1 AS SIGNED INT),
 
914
f_charbig = CONCAT('===',f_char1,'===');
 
915
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
916
BEGIN
 
917
SET new.f_int1 = @my_max1 + @counter,
 
918
new.f_int2 = @my_min2 - @counter,
 
919
new.f_charbig = '####updated per insert trigger####';
 
920
SET @counter = @counter + 1;
 
921
END|
 
922
SET @counter = 1;
 
923
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
924
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
925
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
926
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
928
ORDER BY f_int1;
 
929
DROP TRIGGER trg_3;
 
930
        
 
931
# check trigger-11 success:     1
 
932
DELETE FROM t1
 
933
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
934
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
935
AND f_charbig = '####updated per insert trigger####';
 
936
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
937
BEGIN
 
938
SET new.f_int1 = @my_max1 + @counter,
 
939
new.f_int2 = @my_min2 - @counter,
 
940
new.f_charbig = '####updated per insert trigger####';
 
941
SET @counter = @counter + 1;
 
942
END|
 
943
SET @counter = 1;
 
944
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
945
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
946
SELECT CAST(f_int1 AS CHAR),
 
947
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
949
ORDER BY f_int1;
 
950
DROP TRIGGER trg_3;
 
951
        
 
952
# check trigger-12 success:     1
 
953
DELETE FROM t1
 
954
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
955
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
956
AND f_charbig = '####updated per insert trigger####';
 
957
ANALYZE  TABLE t1;
 
958
Table   Op      Msg_type        Msg_text
 
959
test.t1 analyze status  OK
 
960
CHECK    TABLE t1 EXTENDED;
 
961
Table   Op      Msg_type        Msg_text
 
962
test.t1 check   status  OK
 
963
CHECKSUM TABLE t1 EXTENDED;
 
964
Table   Checksum
 
965
test.t1 <some_value>
 
966
OPTIMIZE TABLE t1;
 
967
Table   Op      Msg_type        Msg_text
 
968
test.t1 optimize        status  OK
 
969
# check layout success:    1
 
970
REPAIR   TABLE t1 EXTENDED;
 
971
Table   Op      Msg_type        Msg_text
 
972
test.t1 repair  status  OK
 
973
# check layout success:    1
 
974
TRUNCATE t1;
 
975
        
 
976
# check TRUNCATE success:       1
 
977
# check layout success:    1
 
978
# End usability test (inc/partition_check.inc)
 
979
DROP TABLE t1;
 
980
CREATE TABLE t1 (
 
981
f_int1 INTEGER,
 
982
f_int2 INTEGER,
 
983
f_char1 CHAR(20),
 
984
f_char2 CHAR(20),
 
985
f_charbig VARCHAR(1000)
 
986
 
 
987
)
 
988
PARTITION BY LIST(MOD(f_int1,4))
 
989
(PARTITION part_3 VALUES IN (-3),
 
990
PARTITION part_2 VALUES IN (-2),
 
991
PARTITION part_1 VALUES IN (-1),
 
992
PARTITION part_N VALUES IN (NULL),
 
993
PARTITION part0 VALUES IN (0),
 
994
PARTITION part1 VALUES IN (1),
 
995
PARTITION part2 VALUES IN (2),
 
996
PARTITION part3 VALUES IN (3));
 
997
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
998
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
999
# Start usability test (inc/partition_check.inc)
 
1000
create_command
 
1001
SHOW CREATE TABLE t1;
 
1002
Table   Create Table
 
1003
t1      CREATE TABLE `t1` (
 
1004
  `f_int1` int(11) DEFAULT NULL,
 
1005
  `f_int2` int(11) DEFAULT NULL,
 
1006
  `f_char1` char(20) DEFAULT NULL,
 
1007
  `f_char2` char(20) DEFAULT NULL,
 
1008
  `f_charbig` varchar(1000) DEFAULT NULL
 
1009
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1010
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
1011
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
1012
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
1013
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
1014
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
1015
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
1016
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
1017
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
1018
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
1019
 
 
1020
unified filelist
 
1021
t1#P#part0.MYD
 
1022
t1#P#part0.MYI
 
1023
t1#P#part1.MYD
 
1024
t1#P#part1.MYI
 
1025
t1#P#part2.MYD
 
1026
t1#P#part2.MYI
 
1027
t1#P#part3.MYD
 
1028
t1#P#part3.MYI
 
1029
t1#P#part_1.MYD
 
1030
t1#P#part_1.MYI
 
1031
t1#P#part_2.MYD
 
1032
t1#P#part_2.MYI
 
1033
t1#P#part_3.MYD
 
1034
t1#P#part_3.MYI
 
1035
t1#P#part_N.MYD
 
1036
t1#P#part_N.MYI
 
1037
t1.frm
 
1038
t1.par
 
1039
 
 
1040
# check prerequisites-1 success:    1
 
1041
# check COUNT(*) success:    1
 
1042
# check MIN/MAX(f_int1) success:    1
 
1043
# check MIN/MAX(f_int2) success:    1
 
1044
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1045
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1046
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1047
WHERE f_int1 IN (2,3);
 
1048
# check prerequisites-3 success:    1
 
1049
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1050
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1051
# check read via f_int1 success: 1
 
1052
# check read via f_int2 success: 1
 
1053
        
 
1054
# check multiple-1 success:     1
 
1055
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1056
        
 
1057
# check multiple-2 success:     1
 
1058
INSERT INTO t1 SELECT * FROM t0_template
 
1059
WHERE MOD(f_int1,3) = 0;
 
1060
        
 
1061
# check multiple-3 success:     1
 
1062
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1063
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1064
AND @max_row_div2 + @max_row_div4;
 
1065
        
 
1066
# check multiple-4 success:     1
 
1067
DELETE FROM t1
 
1068
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1069
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1070
        
 
1071
# check multiple-5 success:     1
 
1072
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1073
INSERT INTO t1
 
1074
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1075
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1076
f_charbig = '#SINGLE#';
 
1077
        
 
1078
# check single-1 success:       1
 
1079
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1080
INSERT INTO t1
 
1081
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1082
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1083
f_charbig = '#SINGLE#';
 
1084
        
 
1085
# check single-2 success:       1
 
1086
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1087
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1088
UPDATE t1 SET f_int1 = @cur_value2
 
1089
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1090
        
 
1091
# check single-3 success:       1
 
1092
SET @cur_value1= -1;
 
1093
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1094
UPDATE t1 SET f_int1 = @cur_value1
 
1095
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1096
        
 
1097
# check single-4 success:       1
 
1098
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1099
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1100
        
 
1101
# check single-5 success:       1
 
1102
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1103
        
 
1104
# check single-6 success:       1
 
1105
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1106
        
 
1107
# check single-7 success:       1
 
1108
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1109
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1110
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1111
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1112
f_charbig = '#NULL#';
 
1113
INSERT INTO t1
 
1114
SET f_int1 = NULL , f_int2 = -@max_row,
 
1115
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1116
f_charbig = '#NULL#';
 
1117
# check null success:    1
 
1118
        
 
1119
# check null-1 success:         1
 
1120
UPDATE t1 SET f_int1 = -@max_row
 
1121
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1122
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1123
        
 
1124
# check null-2 success:         1
 
1125
UPDATE t1 SET f_int1 = NULL
 
1126
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1127
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1128
        
 
1129
# check null-3 success:         1
 
1130
DELETE FROM t1
 
1131
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1132
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1133
        
 
1134
# check null-4 success:         1
 
1135
DELETE FROM t1
 
1136
WHERE f_int1 = 0 AND f_int2 = 0
 
1137
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1138
AND f_charbig = '#NULL#';
 
1139
SET AUTOCOMMIT= 0;
 
1140
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1141
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1142
FROM t0_template source_tab
 
1143
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1144
        
 
1145
# check transactions-1 success:         1
 
1146
COMMIT WORK;
 
1147
        
 
1148
# check transactions-2 success:         1
 
1149
ROLLBACK WORK;
 
1150
        
 
1151
# check transactions-3 success:         1
 
1152
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1153
COMMIT WORK;
 
1154
ROLLBACK WORK;
 
1155
        
 
1156
# check transactions-4 success:         1
 
1157
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1158
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1159
FROM t0_template source_tab
 
1160
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1161
        
 
1162
# check transactions-5 success:         1
 
1163
ROLLBACK WORK;
 
1164
Warnings:
 
1165
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1166
        
 
1167
# check transactions-6 success:         1
 
1168
# INFO: Storage engine used for t1 seems to be not transactional.
 
1169
COMMIT;
 
1170
        
 
1171
# check transactions-7 success:         1
 
1172
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1173
COMMIT WORK;
 
1174
SET @@session.sql_mode = 'traditional';
 
1175
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1176
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1177
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1178
'', '', 'was inserted' FROM t0_template
 
1179
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1180
ERROR 22012: Division by 0
 
1181
COMMIT;
 
1182
        
 
1183
# check transactions-8 success:         1
 
1184
# INFO: Storage engine used for t1 seems to be unable to revert
 
1185
#       changes made by the failing statement.
 
1186
SET @@session.sql_mode = '';
 
1187
SET AUTOCOMMIT= 1;
 
1188
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1189
COMMIT WORK;
 
1190
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1191
        
 
1192
# check special-1 success:      1
 
1193
UPDATE t1 SET f_charbig = '';
 
1194
        
 
1195
# check special-2 success:      1
 
1196
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1197
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1198
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1202
'just inserted' FROM t0_template
 
1203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1204
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1205
BEGIN
 
1206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1207
f_charbig = 'updated by trigger'
 
1208
      WHERE f_int1 = new.f_int1;
 
1209
END|
 
1210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1211
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1213
        
 
1214
# check trigger-1 success:      1
 
1215
DROP TRIGGER trg_1;
 
1216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1218
f_charbig = 'just inserted'
 
1219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1220
DELETE FROM t0_aux
 
1221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1222
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1223
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1224
'just inserted' FROM t0_template
 
1225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1226
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1227
BEGIN
 
1228
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1229
f_charbig = 'updated by trigger'
 
1230
      WHERE f_int1 = new.f_int1;
 
1231
END|
 
1232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1233
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1235
        
 
1236
# check trigger-2 success:      1
 
1237
DROP TRIGGER trg_1;
 
1238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1240
f_charbig = 'just inserted'
 
1241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1242
DELETE FROM t0_aux
 
1243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1245
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1246
'just inserted' FROM t0_template
 
1247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1248
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1249
BEGIN
 
1250
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1251
f_charbig = 'updated by trigger'
 
1252
      WHERE f_int1 = new.f_int1;
 
1253
END|
 
1254
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1255
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1256
        
 
1257
# check trigger-3 success:      1
 
1258
DROP TRIGGER trg_1;
 
1259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1261
f_charbig = 'just inserted'
 
1262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1263
DELETE FROM t0_aux
 
1264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1267
'just inserted' FROM t0_template
 
1268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1269
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1270
BEGIN
 
1271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1272
f_charbig = 'updated by trigger'
 
1273
      WHERE f_int1 = - old.f_int1;
 
1274
END|
 
1275
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1276
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1277
        
 
1278
# check trigger-4 success:      1
 
1279
DROP TRIGGER trg_1;
 
1280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1282
f_charbig = 'just inserted'
 
1283
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1284
DELETE FROM t0_aux
 
1285
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1286
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1287
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1288
'just inserted' FROM t0_template
 
1289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1290
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1291
BEGIN
 
1292
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1293
f_charbig = 'updated by trigger'
 
1294
      WHERE f_int1 = new.f_int1;
 
1295
END|
 
1296
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1297
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1298
        
 
1299
# check trigger-5 success:      1
 
1300
DROP TRIGGER trg_1;
 
1301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1303
f_charbig = 'just inserted'
 
1304
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1305
DELETE FROM t0_aux
 
1306
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1307
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1308
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1309
'just inserted' FROM t0_template
 
1310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1311
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1312
BEGIN
 
1313
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1314
f_charbig = 'updated by trigger'
 
1315
      WHERE f_int1 = - old.f_int1;
 
1316
END|
 
1317
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1318
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1319
        
 
1320
# check trigger-6 success:      1
 
1321
DROP TRIGGER trg_1;
 
1322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1324
f_charbig = 'just inserted'
 
1325
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1326
DELETE FROM t0_aux
 
1327
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1329
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1330
'just inserted' FROM t0_template
 
1331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1332
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1333
BEGIN
 
1334
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1335
f_charbig = 'updated by trigger'
 
1336
      WHERE f_int1 = - old.f_int1;
 
1337
END|
 
1338
DELETE FROM t0_aux
 
1339
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1340
        
 
1341
# check trigger-7 success:      1
 
1342
DROP TRIGGER trg_1;
 
1343
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1344
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1345
f_charbig = 'just inserted'
 
1346
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1347
DELETE FROM t0_aux
 
1348
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1349
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1350
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1351
'just inserted' FROM t0_template
 
1352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1353
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1354
BEGIN
 
1355
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1356
f_charbig = 'updated by trigger'
 
1357
      WHERE f_int1 = - old.f_int1;
 
1358
END|
 
1359
DELETE FROM t0_aux
 
1360
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1361
        
 
1362
# check trigger-8 success:      1
 
1363
DROP TRIGGER trg_1;
 
1364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1366
f_charbig = 'just inserted'
 
1367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1368
DELETE FROM t0_aux
 
1369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1370
DELETE FROM t1
 
1371
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1372
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1373
BEGIN
 
1374
SET new.f_int1 = old.f_int1 + @max_row,
 
1375
new.f_int2 = old.f_int2 - @max_row,
 
1376
new.f_charbig = '####updated per update trigger####';
 
1377
END|
 
1378
UPDATE t1
 
1379
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1380
f_charbig = '####updated per update statement itself####';
 
1381
        
 
1382
# check trigger-9 success:      1
 
1383
DROP TRIGGER trg_2;
 
1384
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1385
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1386
f_charbig = CONCAT('===',f_char1,'===');
 
1387
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1388
BEGIN
 
1389
SET new.f_int1 = new.f_int1 + @max_row,
 
1390
new.f_int2 = new.f_int2 - @max_row,
 
1391
new.f_charbig = '####updated per update trigger####';
 
1392
END|
 
1393
UPDATE t1
 
1394
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1395
f_charbig = '####updated per update statement itself####';
 
1396
        
 
1397
# check trigger-10 success:     1
 
1398
DROP TRIGGER trg_2;
 
1399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1401
f_charbig = CONCAT('===',f_char1,'===');
 
1402
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1403
BEGIN
 
1404
SET new.f_int1 = @my_max1 + @counter,
 
1405
new.f_int2 = @my_min2 - @counter,
 
1406
new.f_charbig = '####updated per insert trigger####';
 
1407
SET @counter = @counter + 1;
 
1408
END|
 
1409
SET @counter = 1;
 
1410
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1411
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1412
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1413
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1415
ORDER BY f_int1;
 
1416
DROP TRIGGER trg_3;
 
1417
        
 
1418
# check trigger-11 success:     1
 
1419
DELETE FROM t1
 
1420
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1421
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1422
AND f_charbig = '####updated per insert trigger####';
 
1423
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1424
BEGIN
 
1425
SET new.f_int1 = @my_max1 + @counter,
 
1426
new.f_int2 = @my_min2 - @counter,
 
1427
new.f_charbig = '####updated per insert trigger####';
 
1428
SET @counter = @counter + 1;
 
1429
END|
 
1430
SET @counter = 1;
 
1431
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1432
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1433
SELECT CAST(f_int1 AS CHAR),
 
1434
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1436
ORDER BY f_int1;
 
1437
DROP TRIGGER trg_3;
 
1438
        
 
1439
# check trigger-12 success:     1
 
1440
DELETE FROM t1
 
1441
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1442
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1443
AND f_charbig = '####updated per insert trigger####';
 
1444
ANALYZE  TABLE t1;
 
1445
Table   Op      Msg_type        Msg_text
 
1446
test.t1 analyze status  OK
 
1447
CHECK    TABLE t1 EXTENDED;
 
1448
Table   Op      Msg_type        Msg_text
 
1449
test.t1 check   status  OK
 
1450
CHECKSUM TABLE t1 EXTENDED;
 
1451
Table   Checksum
 
1452
test.t1 <some_value>
 
1453
OPTIMIZE TABLE t1;
 
1454
Table   Op      Msg_type        Msg_text
 
1455
test.t1 optimize        status  OK
 
1456
# check layout success:    1
 
1457
REPAIR   TABLE t1 EXTENDED;
 
1458
Table   Op      Msg_type        Msg_text
 
1459
test.t1 repair  status  OK
 
1460
# check layout success:    1
 
1461
TRUNCATE t1;
 
1462
        
 
1463
# check TRUNCATE success:       1
 
1464
# check layout success:    1
 
1465
# End usability test (inc/partition_check.inc)
 
1466
DROP TABLE t1;
 
1467
CREATE TABLE t1 (
 
1468
f_int1 INTEGER,
 
1469
f_int2 INTEGER,
 
1470
f_char1 CHAR(20),
 
1471
f_char2 CHAR(20),
 
1472
f_charbig VARCHAR(1000)
 
1473
 
 
1474
)
 
1475
PARTITION BY RANGE(f_int1)
 
1476
(PARTITION parta VALUES LESS THAN (0),
 
1477
PARTITION partb VALUES LESS THAN (5),
 
1478
PARTITION partc VALUES LESS THAN (10),
 
1479
PARTITION partd VALUES LESS THAN (10 + 5),
 
1480
PARTITION parte VALUES LESS THAN (20),
 
1481
PARTITION partf VALUES LESS THAN (2147483646));
 
1482
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1483
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
1484
# Start usability test (inc/partition_check.inc)
 
1485
create_command
 
1486
SHOW CREATE TABLE t1;
 
1487
Table   Create Table
 
1488
t1      CREATE TABLE `t1` (
 
1489
  `f_int1` int(11) DEFAULT NULL,
 
1490
  `f_int2` int(11) DEFAULT NULL,
 
1491
  `f_char1` char(20) DEFAULT NULL,
 
1492
  `f_char2` char(20) DEFAULT NULL,
 
1493
  `f_charbig` varchar(1000) DEFAULT NULL
 
1494
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1495
/*!50100 PARTITION BY RANGE (f_int1)
 
1496
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
1497
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
1498
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
1499
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
1500
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
1501
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1502
 
 
1503
unified filelist
 
1504
t1#P#parta.MYD
 
1505
t1#P#parta.MYI
 
1506
t1#P#partb.MYD
 
1507
t1#P#partb.MYI
 
1508
t1#P#partc.MYD
 
1509
t1#P#partc.MYI
 
1510
t1#P#partd.MYD
 
1511
t1#P#partd.MYI
 
1512
t1#P#parte.MYD
 
1513
t1#P#parte.MYI
 
1514
t1#P#partf.MYD
 
1515
t1#P#partf.MYI
 
1516
t1.frm
 
1517
t1.par
 
1518
 
 
1519
# check prerequisites-1 success:    1
 
1520
# check COUNT(*) success:    1
 
1521
# check MIN/MAX(f_int1) success:    1
 
1522
# check MIN/MAX(f_int2) success:    1
 
1523
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1524
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1525
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1526
WHERE f_int1 IN (2,3);
 
1527
# check prerequisites-3 success:    1
 
1528
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1529
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1530
# check read via f_int1 success: 1
 
1531
# check read via f_int2 success: 1
 
1532
        
 
1533
# check multiple-1 success:     1
 
1534
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1535
        
 
1536
# check multiple-2 success:     1
 
1537
INSERT INTO t1 SELECT * FROM t0_template
 
1538
WHERE MOD(f_int1,3) = 0;
 
1539
        
 
1540
# check multiple-3 success:     1
 
1541
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1542
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1543
AND @max_row_div2 + @max_row_div4;
 
1544
        
 
1545
# check multiple-4 success:     1
 
1546
DELETE FROM t1
 
1547
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1548
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1549
        
 
1550
# check multiple-5 success:     1
 
1551
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1552
INSERT INTO t1
 
1553
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1554
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1555
f_charbig = '#SINGLE#';
 
1556
        
 
1557
# check single-1 success:       1
 
1558
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1559
INSERT INTO t1
 
1560
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1561
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1562
f_charbig = '#SINGLE#';
 
1563
        
 
1564
# check single-2 success:       1
 
1565
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1566
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1567
UPDATE t1 SET f_int1 = @cur_value2
 
1568
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1569
        
 
1570
# check single-3 success:       1
 
1571
SET @cur_value1= -1;
 
1572
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1573
UPDATE t1 SET f_int1 = @cur_value1
 
1574
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1575
        
 
1576
# check single-4 success:       1
 
1577
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1578
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1579
        
 
1580
# check single-5 success:       1
 
1581
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1582
        
 
1583
# check single-6 success:       1
 
1584
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1585
ERROR HY000: Table has no partition for value 2147483647
 
1586
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1587
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1588
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1589
f_charbig = '#NULL#';
 
1590
INSERT INTO t1
 
1591
SET f_int1 = NULL , f_int2 = -@max_row,
 
1592
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1593
f_charbig = '#NULL#';
 
1594
# check null success:    1
 
1595
        
 
1596
# check null-1 success:         1
 
1597
UPDATE t1 SET f_int1 = -@max_row
 
1598
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1599
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1600
        
 
1601
# check null-2 success:         1
 
1602
UPDATE t1 SET f_int1 = NULL
 
1603
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1604
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1605
        
 
1606
# check null-3 success:         1
 
1607
DELETE FROM t1
 
1608
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1609
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1610
        
 
1611
# check null-4 success:         1
 
1612
DELETE FROM t1
 
1613
WHERE f_int1 = 0 AND f_int2 = 0
 
1614
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1615
AND f_charbig = '#NULL#';
 
1616
SET AUTOCOMMIT= 0;
 
1617
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1618
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1619
FROM t0_template source_tab
 
1620
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1621
        
 
1622
# check transactions-1 success:         1
 
1623
COMMIT WORK;
 
1624
        
 
1625
# check transactions-2 success:         1
 
1626
ROLLBACK WORK;
 
1627
        
 
1628
# check transactions-3 success:         1
 
1629
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1630
COMMIT WORK;
 
1631
ROLLBACK WORK;
 
1632
        
 
1633
# check transactions-4 success:         1
 
1634
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1635
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1636
FROM t0_template source_tab
 
1637
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1638
        
 
1639
# check transactions-5 success:         1
 
1640
ROLLBACK WORK;
 
1641
Warnings:
 
1642
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1643
        
 
1644
# check transactions-6 success:         1
 
1645
# INFO: Storage engine used for t1 seems to be not transactional.
 
1646
COMMIT;
 
1647
        
 
1648
# check transactions-7 success:         1
 
1649
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1650
COMMIT WORK;
 
1651
SET @@session.sql_mode = 'traditional';
 
1652
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1653
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1654
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1655
'', '', 'was inserted' FROM t0_template
 
1656
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1657
ERROR 22012: Division by 0
 
1658
COMMIT;
 
1659
        
 
1660
# check transactions-8 success:         1
 
1661
# INFO: Storage engine used for t1 seems to be unable to revert
 
1662
#       changes made by the failing statement.
 
1663
SET @@session.sql_mode = '';
 
1664
SET AUTOCOMMIT= 1;
 
1665
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1666
COMMIT WORK;
 
1667
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1668
        
 
1669
# check special-1 success:      1
 
1670
UPDATE t1 SET f_charbig = '';
 
1671
        
 
1672
# check special-2 success:      1
 
1673
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1674
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1675
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1676
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1677
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1678
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1679
'just inserted' FROM t0_template
 
1680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1681
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1682
BEGIN
 
1683
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1684
f_charbig = 'updated by trigger'
 
1685
      WHERE f_int1 = new.f_int1;
 
1686
END|
 
1687
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1688
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1690
        
 
1691
# check trigger-1 success:      1
 
1692
DROP TRIGGER trg_1;
 
1693
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1694
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1695
f_charbig = 'just inserted'
 
1696
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1697
DELETE FROM t0_aux
 
1698
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1699
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1700
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1701
'just inserted' FROM t0_template
 
1702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1703
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1704
BEGIN
 
1705
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1706
f_charbig = 'updated by trigger'
 
1707
      WHERE f_int1 = new.f_int1;
 
1708
END|
 
1709
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1710
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1712
        
 
1713
# check trigger-2 success:      1
 
1714
DROP TRIGGER trg_1;
 
1715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1717
f_charbig = 'just inserted'
 
1718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1719
DELETE FROM t0_aux
 
1720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1723
'just inserted' FROM t0_template
 
1724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1725
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1726
BEGIN
 
1727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1728
f_charbig = 'updated by trigger'
 
1729
      WHERE f_int1 = new.f_int1;
 
1730
END|
 
1731
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1732
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1733
        
 
1734
# check trigger-3 success:      1
 
1735
DROP TRIGGER trg_1;
 
1736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1738
f_charbig = 'just inserted'
 
1739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1740
DELETE FROM t0_aux
 
1741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1742
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1743
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1744
'just inserted' FROM t0_template
 
1745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1746
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1747
BEGIN
 
1748
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1749
f_charbig = 'updated by trigger'
 
1750
      WHERE f_int1 = - old.f_int1;
 
1751
END|
 
1752
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1753
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1754
        
 
1755
# check trigger-4 success:      1
 
1756
DROP TRIGGER trg_1;
 
1757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1759
f_charbig = 'just inserted'
 
1760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1761
DELETE FROM t0_aux
 
1762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1764
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1765
'just inserted' FROM t0_template
 
1766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1767
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1768
BEGIN
 
1769
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1770
f_charbig = 'updated by trigger'
 
1771
      WHERE f_int1 = new.f_int1;
 
1772
END|
 
1773
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1774
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1775
        
 
1776
# check trigger-5 success:      1
 
1777
DROP TRIGGER trg_1;
 
1778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1780
f_charbig = 'just inserted'
 
1781
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1782
DELETE FROM t0_aux
 
1783
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1784
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1785
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1786
'just inserted' FROM t0_template
 
1787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1788
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1789
BEGIN
 
1790
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1791
f_charbig = 'updated by trigger'
 
1792
      WHERE f_int1 = - old.f_int1;
 
1793
END|
 
1794
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1795
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1796
        
 
1797
# check trigger-6 success:      1
 
1798
DROP TRIGGER trg_1;
 
1799
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1800
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1801
f_charbig = 'just inserted'
 
1802
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1803
DELETE FROM t0_aux
 
1804
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1805
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1806
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1807
'just inserted' FROM t0_template
 
1808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1809
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1810
BEGIN
 
1811
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1812
f_charbig = 'updated by trigger'
 
1813
      WHERE f_int1 = - old.f_int1;
 
1814
END|
 
1815
DELETE FROM t0_aux
 
1816
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1817
        
 
1818
# check trigger-7 success:      1
 
1819
DROP TRIGGER trg_1;
 
1820
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1821
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1822
f_charbig = 'just inserted'
 
1823
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1824
DELETE FROM t0_aux
 
1825
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1826
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1827
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1828
'just inserted' FROM t0_template
 
1829
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1830
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1831
BEGIN
 
1832
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1833
f_charbig = 'updated by trigger'
 
1834
      WHERE f_int1 = - old.f_int1;
 
1835
END|
 
1836
DELETE FROM t0_aux
 
1837
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1838
        
 
1839
# check trigger-8 success:      1
 
1840
DROP TRIGGER trg_1;
 
1841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1842
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1843
f_charbig = 'just inserted'
 
1844
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1845
DELETE FROM t0_aux
 
1846
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1847
DELETE FROM t1
 
1848
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1849
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1850
BEGIN
 
1851
SET new.f_int1 = old.f_int1 + @max_row,
 
1852
new.f_int2 = old.f_int2 - @max_row,
 
1853
new.f_charbig = '####updated per update trigger####';
 
1854
END|
 
1855
UPDATE t1
 
1856
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1857
f_charbig = '####updated per update statement itself####';
 
1858
        
 
1859
# check trigger-9 success:      1
 
1860
DROP TRIGGER trg_2;
 
1861
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1862
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1863
f_charbig = CONCAT('===',f_char1,'===');
 
1864
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1865
BEGIN
 
1866
SET new.f_int1 = new.f_int1 + @max_row,
 
1867
new.f_int2 = new.f_int2 - @max_row,
 
1868
new.f_charbig = '####updated per update trigger####';
 
1869
END|
 
1870
UPDATE t1
 
1871
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1872
f_charbig = '####updated per update statement itself####';
 
1873
        
 
1874
# check trigger-10 success:     1
 
1875
DROP TRIGGER trg_2;
 
1876
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1877
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1878
f_charbig = CONCAT('===',f_char1,'===');
 
1879
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1880
BEGIN
 
1881
SET new.f_int1 = @my_max1 + @counter,
 
1882
new.f_int2 = @my_min2 - @counter,
 
1883
new.f_charbig = '####updated per insert trigger####';
 
1884
SET @counter = @counter + 1;
 
1885
END|
 
1886
SET @counter = 1;
 
1887
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1888
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1889
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1890
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1892
ORDER BY f_int1;
 
1893
DROP TRIGGER trg_3;
 
1894
        
 
1895
# check trigger-11 success:     1
 
1896
DELETE FROM t1
 
1897
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1898
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1899
AND f_charbig = '####updated per insert trigger####';
 
1900
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1901
BEGIN
 
1902
SET new.f_int1 = @my_max1 + @counter,
 
1903
new.f_int2 = @my_min2 - @counter,
 
1904
new.f_charbig = '####updated per insert trigger####';
 
1905
SET @counter = @counter + 1;
 
1906
END|
 
1907
SET @counter = 1;
 
1908
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1909
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1910
SELECT CAST(f_int1 AS CHAR),
 
1911
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1913
ORDER BY f_int1;
 
1914
DROP TRIGGER trg_3;
 
1915
        
 
1916
# check trigger-12 success:     1
 
1917
DELETE FROM t1
 
1918
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1919
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1920
AND f_charbig = '####updated per insert trigger####';
 
1921
ANALYZE  TABLE t1;
 
1922
Table   Op      Msg_type        Msg_text
 
1923
test.t1 analyze status  OK
 
1924
CHECK    TABLE t1 EXTENDED;
 
1925
Table   Op      Msg_type        Msg_text
 
1926
test.t1 check   status  OK
 
1927
CHECKSUM TABLE t1 EXTENDED;
 
1928
Table   Checksum
 
1929
test.t1 <some_value>
 
1930
OPTIMIZE TABLE t1;
 
1931
Table   Op      Msg_type        Msg_text
 
1932
test.t1 optimize        status  OK
 
1933
# check layout success:    1
 
1934
REPAIR   TABLE t1 EXTENDED;
 
1935
Table   Op      Msg_type        Msg_text
 
1936
test.t1 repair  status  OK
 
1937
# check layout success:    1
 
1938
TRUNCATE t1;
 
1939
        
 
1940
# check TRUNCATE success:       1
 
1941
# check layout success:    1
 
1942
# End usability test (inc/partition_check.inc)
 
1943
DROP TABLE t1;
 
1944
CREATE TABLE t1 (
 
1945
f_int1 INTEGER,
 
1946
f_int2 INTEGER,
 
1947
f_char1 CHAR(20),
 
1948
f_char2 CHAR(20),
 
1949
f_charbig VARCHAR(1000)
 
1950
 
 
1951
)
 
1952
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
1953
(PARTITION parta VALUES LESS THAN (0),
 
1954
PARTITION partb VALUES LESS THAN (5),
 
1955
PARTITION partc VALUES LESS THAN (10),
 
1956
PARTITION partd VALUES LESS THAN (2147483646));
 
1957
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1958
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
1959
# Start usability test (inc/partition_check.inc)
 
1960
create_command
 
1961
SHOW CREATE TABLE t1;
 
1962
Table   Create Table
 
1963
t1      CREATE TABLE `t1` (
 
1964
  `f_int1` int(11) DEFAULT NULL,
 
1965
  `f_int2` int(11) DEFAULT NULL,
 
1966
  `f_char1` char(20) DEFAULT NULL,
 
1967
  `f_char2` char(20) DEFAULT NULL,
 
1968
  `f_charbig` varchar(1000) DEFAULT NULL
 
1969
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1970
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
1971
SUBPARTITION BY HASH (f_int1)
 
1972
SUBPARTITIONS 2
 
1973
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
1974
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
1975
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
1976
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1977
 
 
1978
unified filelist
 
1979
t1#P#parta#SP#partasp0.MYD
 
1980
t1#P#parta#SP#partasp0.MYI
 
1981
t1#P#parta#SP#partasp1.MYD
 
1982
t1#P#parta#SP#partasp1.MYI
 
1983
t1#P#partb#SP#partbsp0.MYD
 
1984
t1#P#partb#SP#partbsp0.MYI
 
1985
t1#P#partb#SP#partbsp1.MYD
 
1986
t1#P#partb#SP#partbsp1.MYI
 
1987
t1#P#partc#SP#partcsp0.MYD
 
1988
t1#P#partc#SP#partcsp0.MYI
 
1989
t1#P#partc#SP#partcsp1.MYD
 
1990
t1#P#partc#SP#partcsp1.MYI
 
1991
t1#P#partd#SP#partdsp0.MYD
 
1992
t1#P#partd#SP#partdsp0.MYI
 
1993
t1#P#partd#SP#partdsp1.MYD
 
1994
t1#P#partd#SP#partdsp1.MYI
 
1995
t1.frm
 
1996
t1.par
 
1997
 
 
1998
# check prerequisites-1 success:    1
 
1999
# check COUNT(*) success:    1
 
2000
# check MIN/MAX(f_int1) success:    1
 
2001
# check MIN/MAX(f_int2) success:    1
 
2002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2003
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2004
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2005
WHERE f_int1 IN (2,3);
 
2006
# check prerequisites-3 success:    1
 
2007
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2008
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2009
# check read via f_int1 success: 1
 
2010
# check read via f_int2 success: 1
 
2011
        
 
2012
# check multiple-1 success:     1
 
2013
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2014
        
 
2015
# check multiple-2 success:     1
 
2016
INSERT INTO t1 SELECT * FROM t0_template
 
2017
WHERE MOD(f_int1,3) = 0;
 
2018
        
 
2019
# check multiple-3 success:     1
 
2020
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2021
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2022
AND @max_row_div2 + @max_row_div4;
 
2023
        
 
2024
# check multiple-4 success:     1
 
2025
DELETE FROM t1
 
2026
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2027
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2028
        
 
2029
# check multiple-5 success:     1
 
2030
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2031
INSERT INTO t1
 
2032
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2033
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2034
f_charbig = '#SINGLE#';
 
2035
        
 
2036
# check single-1 success:       1
 
2037
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2038
INSERT INTO t1
 
2039
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2040
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2041
f_charbig = '#SINGLE#';
 
2042
        
 
2043
# check single-2 success:       1
 
2044
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2045
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2046
UPDATE t1 SET f_int1 = @cur_value2
 
2047
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2048
        
 
2049
# check single-3 success:       1
 
2050
SET @cur_value1= -1;
 
2051
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2052
UPDATE t1 SET f_int1 = @cur_value1
 
2053
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2054
        
 
2055
# check single-4 success:       1
 
2056
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2057
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2058
        
 
2059
# check single-5 success:       1
 
2060
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2061
        
 
2062
# check single-6 success:       1
 
2063
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2064
        
 
2065
# check single-7 success:       1
 
2066
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
2067
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2068
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2069
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2070
f_charbig = '#NULL#';
 
2071
INSERT INTO t1
 
2072
SET f_int1 = NULL , f_int2 = -@max_row,
 
2073
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2074
f_charbig = '#NULL#';
 
2075
# check null success:    1
 
2076
        
 
2077
# check null-1 success:         1
 
2078
UPDATE t1 SET f_int1 = -@max_row
 
2079
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2080
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2081
        
 
2082
# check null-2 success:         1
 
2083
UPDATE t1 SET f_int1 = NULL
 
2084
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2085
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2086
        
 
2087
# check null-3 success:         1
 
2088
DELETE FROM t1
 
2089
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2090
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2091
        
 
2092
# check null-4 success:         1
 
2093
DELETE FROM t1
 
2094
WHERE f_int1 = 0 AND f_int2 = 0
 
2095
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2096
AND f_charbig = '#NULL#';
 
2097
SET AUTOCOMMIT= 0;
 
2098
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2099
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2100
FROM t0_template source_tab
 
2101
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2102
        
 
2103
# check transactions-1 success:         1
 
2104
COMMIT WORK;
 
2105
        
 
2106
# check transactions-2 success:         1
 
2107
ROLLBACK WORK;
 
2108
        
 
2109
# check transactions-3 success:         1
 
2110
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2111
COMMIT WORK;
 
2112
ROLLBACK WORK;
 
2113
        
 
2114
# check transactions-4 success:         1
 
2115
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2116
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2117
FROM t0_template source_tab
 
2118
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2119
        
 
2120
# check transactions-5 success:         1
 
2121
ROLLBACK WORK;
 
2122
Warnings:
 
2123
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2124
        
 
2125
# check transactions-6 success:         1
 
2126
# INFO: Storage engine used for t1 seems to be not transactional.
 
2127
COMMIT;
 
2128
        
 
2129
# check transactions-7 success:         1
 
2130
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2131
COMMIT WORK;
 
2132
SET @@session.sql_mode = 'traditional';
 
2133
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2134
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2135
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2136
'', '', 'was inserted' FROM t0_template
 
2137
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2138
ERROR 22012: Division by 0
 
2139
COMMIT;
 
2140
        
 
2141
# check transactions-8 success:         1
 
2142
# INFO: Storage engine used for t1 seems to be unable to revert
 
2143
#       changes made by the failing statement.
 
2144
SET @@session.sql_mode = '';
 
2145
SET AUTOCOMMIT= 1;
 
2146
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2147
COMMIT WORK;
 
2148
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2149
        
 
2150
# check special-1 success:      1
 
2151
UPDATE t1 SET f_charbig = '';
 
2152
        
 
2153
# check special-2 success:      1
 
2154
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2155
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2156
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2158
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2159
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2160
'just inserted' FROM t0_template
 
2161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2162
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2163
BEGIN
 
2164
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2165
f_charbig = 'updated by trigger'
 
2166
      WHERE f_int1 = new.f_int1;
 
2167
END|
 
2168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2169
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2171
        
 
2172
# check trigger-1 success:      1
 
2173
DROP TRIGGER trg_1;
 
2174
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2175
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2176
f_charbig = 'just inserted'
 
2177
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2178
DELETE FROM t0_aux
 
2179
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2180
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2181
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2182
'just inserted' FROM t0_template
 
2183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2184
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2185
BEGIN
 
2186
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2187
f_charbig = 'updated by trigger'
 
2188
      WHERE f_int1 = new.f_int1;
 
2189
END|
 
2190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2191
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2193
        
 
2194
# check trigger-2 success:      1
 
2195
DROP TRIGGER trg_1;
 
2196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2198
f_charbig = 'just inserted'
 
2199
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2200
DELETE FROM t0_aux
 
2201
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2203
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2204
'just inserted' FROM t0_template
 
2205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2206
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2207
BEGIN
 
2208
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2209
f_charbig = 'updated by trigger'
 
2210
      WHERE f_int1 = new.f_int1;
 
2211
END|
 
2212
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2213
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2214
        
 
2215
# check trigger-3 success:      1
 
2216
DROP TRIGGER trg_1;
 
2217
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2218
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2219
f_charbig = 'just inserted'
 
2220
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2221
DELETE FROM t0_aux
 
2222
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2224
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2225
'just inserted' FROM t0_template
 
2226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2227
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2228
BEGIN
 
2229
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2230
f_charbig = 'updated by trigger'
 
2231
      WHERE f_int1 = - old.f_int1;
 
2232
END|
 
2233
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2234
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2235
        
 
2236
# check trigger-4 success:      1
 
2237
DROP TRIGGER trg_1;
 
2238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2240
f_charbig = 'just inserted'
 
2241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2242
DELETE FROM t0_aux
 
2243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2245
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2246
'just inserted' FROM t0_template
 
2247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2248
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2249
BEGIN
 
2250
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2251
f_charbig = 'updated by trigger'
 
2252
      WHERE f_int1 = new.f_int1;
 
2253
END|
 
2254
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2255
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2256
        
 
2257
# check trigger-5 success:      1
 
2258
DROP TRIGGER trg_1;
 
2259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2261
f_charbig = 'just inserted'
 
2262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2263
DELETE FROM t0_aux
 
2264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2267
'just inserted' FROM t0_template
 
2268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2269
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2270
BEGIN
 
2271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2272
f_charbig = 'updated by trigger'
 
2273
      WHERE f_int1 = - old.f_int1;
 
2274
END|
 
2275
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2276
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2277
        
 
2278
# check trigger-6 success:      1
 
2279
DROP TRIGGER trg_1;
 
2280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2282
f_charbig = 'just inserted'
 
2283
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2284
DELETE FROM t0_aux
 
2285
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2286
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2287
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2288
'just inserted' FROM t0_template
 
2289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2290
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2291
BEGIN
 
2292
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2293
f_charbig = 'updated by trigger'
 
2294
      WHERE f_int1 = - old.f_int1;
 
2295
END|
 
2296
DELETE FROM t0_aux
 
2297
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2298
        
 
2299
# check trigger-7 success:      1
 
2300
DROP TRIGGER trg_1;
 
2301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2303
f_charbig = 'just inserted'
 
2304
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2305
DELETE FROM t0_aux
 
2306
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2307
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2308
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2309
'just inserted' FROM t0_template
 
2310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2311
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2312
BEGIN
 
2313
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2314
f_charbig = 'updated by trigger'
 
2315
      WHERE f_int1 = - old.f_int1;
 
2316
END|
 
2317
DELETE FROM t0_aux
 
2318
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2319
        
 
2320
# check trigger-8 success:      1
 
2321
DROP TRIGGER trg_1;
 
2322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2324
f_charbig = 'just inserted'
 
2325
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2326
DELETE FROM t0_aux
 
2327
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2328
DELETE FROM t1
 
2329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2330
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2331
BEGIN
 
2332
SET new.f_int1 = old.f_int1 + @max_row,
 
2333
new.f_int2 = old.f_int2 - @max_row,
 
2334
new.f_charbig = '####updated per update trigger####';
 
2335
END|
 
2336
UPDATE t1
 
2337
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2338
f_charbig = '####updated per update statement itself####';
 
2339
        
 
2340
# check trigger-9 success:      1
 
2341
DROP TRIGGER trg_2;
 
2342
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2343
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2344
f_charbig = CONCAT('===',f_char1,'===');
 
2345
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2346
BEGIN
 
2347
SET new.f_int1 = new.f_int1 + @max_row,
 
2348
new.f_int2 = new.f_int2 - @max_row,
 
2349
new.f_charbig = '####updated per update trigger####';
 
2350
END|
 
2351
UPDATE t1
 
2352
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2353
f_charbig = '####updated per update statement itself####';
 
2354
        
 
2355
# check trigger-10 success:     1
 
2356
DROP TRIGGER trg_2;
 
2357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2359
f_charbig = CONCAT('===',f_char1,'===');
 
2360
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2361
BEGIN
 
2362
SET new.f_int1 = @my_max1 + @counter,
 
2363
new.f_int2 = @my_min2 - @counter,
 
2364
new.f_charbig = '####updated per insert trigger####';
 
2365
SET @counter = @counter + 1;
 
2366
END|
 
2367
SET @counter = 1;
 
2368
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2369
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2370
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2371
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2372
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2373
ORDER BY f_int1;
 
2374
DROP TRIGGER trg_3;
 
2375
        
 
2376
# check trigger-11 success:     1
 
2377
DELETE FROM t1
 
2378
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2379
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2380
AND f_charbig = '####updated per insert trigger####';
 
2381
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2382
BEGIN
 
2383
SET new.f_int1 = @my_max1 + @counter,
 
2384
new.f_int2 = @my_min2 - @counter,
 
2385
new.f_charbig = '####updated per insert trigger####';
 
2386
SET @counter = @counter + 1;
 
2387
END|
 
2388
SET @counter = 1;
 
2389
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2390
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2391
SELECT CAST(f_int1 AS CHAR),
 
2392
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2393
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2394
ORDER BY f_int1;
 
2395
DROP TRIGGER trg_3;
 
2396
        
 
2397
# check trigger-12 success:     1
 
2398
DELETE FROM t1
 
2399
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2400
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2401
AND f_charbig = '####updated per insert trigger####';
 
2402
ANALYZE  TABLE t1;
 
2403
Table   Op      Msg_type        Msg_text
 
2404
test.t1 analyze status  OK
 
2405
CHECK    TABLE t1 EXTENDED;
 
2406
Table   Op      Msg_type        Msg_text
 
2407
test.t1 check   status  OK
 
2408
CHECKSUM TABLE t1 EXTENDED;
 
2409
Table   Checksum
 
2410
test.t1 <some_value>
 
2411
OPTIMIZE TABLE t1;
 
2412
Table   Op      Msg_type        Msg_text
 
2413
test.t1 optimize        status  OK
 
2414
# check layout success:    1
 
2415
REPAIR   TABLE t1 EXTENDED;
 
2416
Table   Op      Msg_type        Msg_text
 
2417
test.t1 repair  status  OK
 
2418
# check layout success:    1
 
2419
TRUNCATE t1;
 
2420
        
 
2421
# check TRUNCATE success:       1
 
2422
# check layout success:    1
 
2423
# End usability test (inc/partition_check.inc)
 
2424
DROP TABLE t1;
 
2425
CREATE TABLE t1 (
 
2426
f_int1 INTEGER,
 
2427
f_int2 INTEGER,
 
2428
f_char1 CHAR(20),
 
2429
f_char2 CHAR(20),
 
2430
f_charbig VARCHAR(1000)
 
2431
 
 
2432
)
 
2433
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2434
(PARTITION part1 VALUES LESS THAN (0)
 
2435
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2436
PARTITION part2 VALUES LESS THAN (5)
 
2437
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2438
PARTITION part3 VALUES LESS THAN (10)
 
2439
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2440
PARTITION part4 VALUES LESS THAN (2147483646)
 
2441
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2442
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2443
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
2444
# Start usability test (inc/partition_check.inc)
 
2445
create_command
 
2446
SHOW CREATE TABLE t1;
 
2447
Table   Create Table
 
2448
t1      CREATE TABLE `t1` (
 
2449
  `f_int1` int(11) DEFAULT NULL,
 
2450
  `f_int2` int(11) DEFAULT NULL,
 
2451
  `f_char1` char(20) DEFAULT NULL,
 
2452
  `f_char2` char(20) DEFAULT NULL,
 
2453
  `f_charbig` varchar(1000) DEFAULT NULL
 
2454
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
2455
/*!50100 PARTITION BY RANGE (f_int1)
 
2456
SUBPARTITION BY KEY (f_int1)
 
2457
(PARTITION part1 VALUES LESS THAN (0)
 
2458
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
2459
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
2460
 PARTITION part2 VALUES LESS THAN (5)
 
2461
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
2462
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
2463
 PARTITION part3 VALUES LESS THAN (10)
 
2464
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
2465
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
2466
 PARTITION part4 VALUES LESS THAN (2147483646)
 
2467
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
2468
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
2469
 
 
2470
unified filelist
 
2471
t1#P#part1#SP#subpart11.MYD
 
2472
t1#P#part1#SP#subpart11.MYI
 
2473
t1#P#part1#SP#subpart12.MYD
 
2474
t1#P#part1#SP#subpart12.MYI
 
2475
t1#P#part2#SP#subpart21.MYD
 
2476
t1#P#part2#SP#subpart21.MYI
 
2477
t1#P#part2#SP#subpart22.MYD
 
2478
t1#P#part2#SP#subpart22.MYI
 
2479
t1#P#part3#SP#subpart31.MYD
 
2480
t1#P#part3#SP#subpart31.MYI
 
2481
t1#P#part3#SP#subpart32.MYD
 
2482
t1#P#part3#SP#subpart32.MYI
 
2483
t1#P#part4#SP#subpart41.MYD
 
2484
t1#P#part4#SP#subpart41.MYI
 
2485
t1#P#part4#SP#subpart42.MYD
 
2486
t1#P#part4#SP#subpart42.MYI
 
2487
t1.frm
 
2488
t1.par
 
2489
 
 
2490
# check prerequisites-1 success:    1
 
2491
# check COUNT(*) success:    1
 
2492
# check MIN/MAX(f_int1) success:    1
 
2493
# check MIN/MAX(f_int2) success:    1
 
2494
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2495
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2496
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2497
WHERE f_int1 IN (2,3);
 
2498
# check prerequisites-3 success:    1
 
2499
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2500
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2501
# check read via f_int1 success: 1
 
2502
# check read via f_int2 success: 1
 
2503
        
 
2504
# check multiple-1 success:     1
 
2505
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2506
        
 
2507
# check multiple-2 success:     1
 
2508
INSERT INTO t1 SELECT * FROM t0_template
 
2509
WHERE MOD(f_int1,3) = 0;
 
2510
        
 
2511
# check multiple-3 success:     1
 
2512
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2513
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2514
AND @max_row_div2 + @max_row_div4;
 
2515
        
 
2516
# check multiple-4 success:     1
 
2517
DELETE FROM t1
 
2518
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2519
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2520
        
 
2521
# check multiple-5 success:     1
 
2522
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2523
INSERT INTO t1
 
2524
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2525
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2526
f_charbig = '#SINGLE#';
 
2527
        
 
2528
# check single-1 success:       1
 
2529
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2530
INSERT INTO t1
 
2531
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2532
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2533
f_charbig = '#SINGLE#';
 
2534
        
 
2535
# check single-2 success:       1
 
2536
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2537
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2538
UPDATE t1 SET f_int1 = @cur_value2
 
2539
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2540
        
 
2541
# check single-3 success:       1
 
2542
SET @cur_value1= -1;
 
2543
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2544
UPDATE t1 SET f_int1 = @cur_value1
 
2545
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2546
        
 
2547
# check single-4 success:       1
 
2548
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2549
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2550
        
 
2551
# check single-5 success:       1
 
2552
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2553
        
 
2554
# check single-6 success:       1
 
2555
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2556
ERROR HY000: Table has no partition for value 2147483647
 
2557
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2558
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2559
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2560
f_charbig = '#NULL#';
 
2561
INSERT INTO t1
 
2562
SET f_int1 = NULL , f_int2 = -@max_row,
 
2563
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2564
f_charbig = '#NULL#';
 
2565
# check null success:    1
 
2566
        
 
2567
# check null-1 success:         1
 
2568
UPDATE t1 SET f_int1 = -@max_row
 
2569
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2570
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2571
        
 
2572
# check null-2 success:         1
 
2573
UPDATE t1 SET f_int1 = NULL
 
2574
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2575
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2576
        
 
2577
# check null-3 success:         1
 
2578
DELETE FROM t1
 
2579
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2580
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2581
        
 
2582
# check null-4 success:         1
 
2583
DELETE FROM t1
 
2584
WHERE f_int1 = 0 AND f_int2 = 0
 
2585
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2586
AND f_charbig = '#NULL#';
 
2587
SET AUTOCOMMIT= 0;
 
2588
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2589
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2590
FROM t0_template source_tab
 
2591
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2592
        
 
2593
# check transactions-1 success:         1
 
2594
COMMIT WORK;
 
2595
        
 
2596
# check transactions-2 success:         1
 
2597
ROLLBACK WORK;
 
2598
        
 
2599
# check transactions-3 success:         1
 
2600
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2601
COMMIT WORK;
 
2602
ROLLBACK WORK;
 
2603
        
 
2604
# check transactions-4 success:         1
 
2605
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2606
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2607
FROM t0_template source_tab
 
2608
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2609
        
 
2610
# check transactions-5 success:         1
 
2611
ROLLBACK WORK;
 
2612
Warnings:
 
2613
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2614
        
 
2615
# check transactions-6 success:         1
 
2616
# INFO: Storage engine used for t1 seems to be not transactional.
 
2617
COMMIT;
 
2618
        
 
2619
# check transactions-7 success:         1
 
2620
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2621
COMMIT WORK;
 
2622
SET @@session.sql_mode = 'traditional';
 
2623
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2624
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2625
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2626
'', '', 'was inserted' FROM t0_template
 
2627
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2628
ERROR 22012: Division by 0
 
2629
COMMIT;
 
2630
        
 
2631
# check transactions-8 success:         1
 
2632
# INFO: Storage engine used for t1 seems to be unable to revert
 
2633
#       changes made by the failing statement.
 
2634
SET @@session.sql_mode = '';
 
2635
SET AUTOCOMMIT= 1;
 
2636
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2637
COMMIT WORK;
 
2638
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2639
        
 
2640
# check special-1 success:      1
 
2641
UPDATE t1 SET f_charbig = '';
 
2642
        
 
2643
# check special-2 success:      1
 
2644
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2645
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2646
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2650
'just inserted' FROM t0_template
 
2651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2652
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2653
BEGIN
 
2654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2655
f_charbig = 'updated by trigger'
 
2656
      WHERE f_int1 = new.f_int1;
 
2657
END|
 
2658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2659
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2661
        
 
2662
# check trigger-1 success:      1
 
2663
DROP TRIGGER trg_1;
 
2664
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2665
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2666
f_charbig = 'just inserted'
 
2667
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2668
DELETE FROM t0_aux
 
2669
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2671
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2672
'just inserted' FROM t0_template
 
2673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2674
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2675
BEGIN
 
2676
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2677
f_charbig = 'updated by trigger'
 
2678
      WHERE f_int1 = new.f_int1;
 
2679
END|
 
2680
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2681
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2683
        
 
2684
# check trigger-2 success:      1
 
2685
DROP TRIGGER trg_1;
 
2686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2688
f_charbig = 'just inserted'
 
2689
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2690
DELETE FROM t0_aux
 
2691
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2692
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2693
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2694
'just inserted' FROM t0_template
 
2695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2696
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2697
BEGIN
 
2698
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2699
f_charbig = 'updated by trigger'
 
2700
      WHERE f_int1 = new.f_int1;
 
2701
END|
 
2702
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2703
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2704
        
 
2705
# check trigger-3 success:      1
 
2706
DROP TRIGGER trg_1;
 
2707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2709
f_charbig = 'just inserted'
 
2710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2711
DELETE FROM t0_aux
 
2712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2715
'just inserted' FROM t0_template
 
2716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2717
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2718
BEGIN
 
2719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2720
f_charbig = 'updated by trigger'
 
2721
      WHERE f_int1 = - old.f_int1;
 
2722
END|
 
2723
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2724
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2725
        
 
2726
# check trigger-4 success:      1
 
2727
DROP TRIGGER trg_1;
 
2728
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2729
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2730
f_charbig = 'just inserted'
 
2731
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2732
DELETE FROM t0_aux
 
2733
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2736
'just inserted' FROM t0_template
 
2737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2738
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2739
BEGIN
 
2740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2741
f_charbig = 'updated by trigger'
 
2742
      WHERE f_int1 = new.f_int1;
 
2743
END|
 
2744
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2745
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2746
        
 
2747
# check trigger-5 success:      1
 
2748
DROP TRIGGER trg_1;
 
2749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2751
f_charbig = 'just inserted'
 
2752
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2753
DELETE FROM t0_aux
 
2754
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2756
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2757
'just inserted' FROM t0_template
 
2758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2759
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2760
BEGIN
 
2761
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2762
f_charbig = 'updated by trigger'
 
2763
      WHERE f_int1 = - old.f_int1;
 
2764
END|
 
2765
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2766
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2767
        
 
2768
# check trigger-6 success:      1
 
2769
DROP TRIGGER trg_1;
 
2770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2772
f_charbig = 'just inserted'
 
2773
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2774
DELETE FROM t0_aux
 
2775
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2777
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2778
'just inserted' FROM t0_template
 
2779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2780
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2781
BEGIN
 
2782
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2783
f_charbig = 'updated by trigger'
 
2784
      WHERE f_int1 = - old.f_int1;
 
2785
END|
 
2786
DELETE FROM t0_aux
 
2787
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2788
        
 
2789
# check trigger-7 success:      1
 
2790
DROP TRIGGER trg_1;
 
2791
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2792
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2793
f_charbig = 'just inserted'
 
2794
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2795
DELETE FROM t0_aux
 
2796
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2797
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2798
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2799
'just inserted' FROM t0_template
 
2800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2801
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2802
BEGIN
 
2803
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2804
f_charbig = 'updated by trigger'
 
2805
      WHERE f_int1 = - old.f_int1;
 
2806
END|
 
2807
DELETE FROM t0_aux
 
2808
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2809
        
 
2810
# check trigger-8 success:      1
 
2811
DROP TRIGGER trg_1;
 
2812
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2813
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2814
f_charbig = 'just inserted'
 
2815
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2816
DELETE FROM t0_aux
 
2817
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2818
DELETE FROM t1
 
2819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2820
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2821
BEGIN
 
2822
SET new.f_int1 = old.f_int1 + @max_row,
 
2823
new.f_int2 = old.f_int2 - @max_row,
 
2824
new.f_charbig = '####updated per update trigger####';
 
2825
END|
 
2826
UPDATE t1
 
2827
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2828
f_charbig = '####updated per update statement itself####';
 
2829
        
 
2830
# check trigger-9 success:      1
 
2831
DROP TRIGGER trg_2;
 
2832
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2833
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2834
f_charbig = CONCAT('===',f_char1,'===');
 
2835
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2836
BEGIN
 
2837
SET new.f_int1 = new.f_int1 + @max_row,
 
2838
new.f_int2 = new.f_int2 - @max_row,
 
2839
new.f_charbig = '####updated per update trigger####';
 
2840
END|
 
2841
UPDATE t1
 
2842
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2843
f_charbig = '####updated per update statement itself####';
 
2844
        
 
2845
# check trigger-10 success:     1
 
2846
DROP TRIGGER trg_2;
 
2847
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2848
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2849
f_charbig = CONCAT('===',f_char1,'===');
 
2850
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2851
BEGIN
 
2852
SET new.f_int1 = @my_max1 + @counter,
 
2853
new.f_int2 = @my_min2 - @counter,
 
2854
new.f_charbig = '####updated per insert trigger####';
 
2855
SET @counter = @counter + 1;
 
2856
END|
 
2857
SET @counter = 1;
 
2858
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2859
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2860
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2861
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2862
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2863
ORDER BY f_int1;
 
2864
DROP TRIGGER trg_3;
 
2865
        
 
2866
# check trigger-11 success:     1
 
2867
DELETE FROM t1
 
2868
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2869
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2870
AND f_charbig = '####updated per insert trigger####';
 
2871
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2872
BEGIN
 
2873
SET new.f_int1 = @my_max1 + @counter,
 
2874
new.f_int2 = @my_min2 - @counter,
 
2875
new.f_charbig = '####updated per insert trigger####';
 
2876
SET @counter = @counter + 1;
 
2877
END|
 
2878
SET @counter = 1;
 
2879
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2880
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2881
SELECT CAST(f_int1 AS CHAR),
 
2882
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2883
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2884
ORDER BY f_int1;
 
2885
DROP TRIGGER trg_3;
 
2886
        
 
2887
# check trigger-12 success:     1
 
2888
DELETE FROM t1
 
2889
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2890
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2891
AND f_charbig = '####updated per insert trigger####';
 
2892
ANALYZE  TABLE t1;
 
2893
Table   Op      Msg_type        Msg_text
 
2894
test.t1 analyze status  OK
 
2895
CHECK    TABLE t1 EXTENDED;
 
2896
Table   Op      Msg_type        Msg_text
 
2897
test.t1 check   status  OK
 
2898
CHECKSUM TABLE t1 EXTENDED;
 
2899
Table   Checksum
 
2900
test.t1 <some_value>
 
2901
OPTIMIZE TABLE t1;
 
2902
Table   Op      Msg_type        Msg_text
 
2903
test.t1 optimize        status  OK
 
2904
# check layout success:    1
 
2905
REPAIR   TABLE t1 EXTENDED;
 
2906
Table   Op      Msg_type        Msg_text
 
2907
test.t1 repair  status  OK
 
2908
# check layout success:    1
 
2909
TRUNCATE t1;
 
2910
        
 
2911
# check TRUNCATE success:       1
 
2912
# check layout success:    1
 
2913
# End usability test (inc/partition_check.inc)
 
2914
DROP TABLE t1;
 
2915
CREATE TABLE t1 (
 
2916
f_int1 INTEGER,
 
2917
f_int2 INTEGER,
 
2918
f_char1 CHAR(20),
 
2919
f_char2 CHAR(20),
 
2920
f_charbig VARCHAR(1000)
 
2921
 
 
2922
)
 
2923
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
2924
(PARTITION part1 VALUES IN (0)
 
2925
(SUBPARTITION sp11,
 
2926
SUBPARTITION sp12),
 
2927
PARTITION part2 VALUES IN (1)
 
2928
(SUBPARTITION sp21,
 
2929
SUBPARTITION sp22),
 
2930
PARTITION part3 VALUES IN (2)
 
2931
(SUBPARTITION sp31, 
 
2932
SUBPARTITION sp32),
 
2933
PARTITION part4 VALUES IN (NULL)
 
2934
(SUBPARTITION sp41,
 
2935
SUBPARTITION sp42));
 
2936
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2937
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
2938
# Start usability test (inc/partition_check.inc)
 
2939
create_command
 
2940
SHOW CREATE TABLE t1;
 
2941
Table   Create Table
 
2942
t1      CREATE TABLE `t1` (
 
2943
  `f_int1` int(11) DEFAULT NULL,
 
2944
  `f_int2` int(11) DEFAULT NULL,
 
2945
  `f_char1` char(20) DEFAULT NULL,
 
2946
  `f_char2` char(20) DEFAULT NULL,
 
2947
  `f_charbig` varchar(1000) DEFAULT NULL
 
2948
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
2949
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
2950
SUBPARTITION BY HASH (f_int1 + 1)
 
2951
(PARTITION part1 VALUES IN (0)
 
2952
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
2953
  SUBPARTITION sp12 ENGINE = MyISAM),
 
2954
 PARTITION part2 VALUES IN (1)
 
2955
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
2956
  SUBPARTITION sp22 ENGINE = MyISAM),
 
2957
 PARTITION part3 VALUES IN (2)
 
2958
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
2959
  SUBPARTITION sp32 ENGINE = MyISAM),
 
2960
 PARTITION part4 VALUES IN (NULL)
 
2961
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
2962
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
2963
 
 
2964
unified filelist
 
2965
t1#P#part1#SP#sp11.MYD
 
2966
t1#P#part1#SP#sp11.MYI
 
2967
t1#P#part1#SP#sp12.MYD
 
2968
t1#P#part1#SP#sp12.MYI
 
2969
t1#P#part2#SP#sp21.MYD
 
2970
t1#P#part2#SP#sp21.MYI
 
2971
t1#P#part2#SP#sp22.MYD
 
2972
t1#P#part2#SP#sp22.MYI
 
2973
t1#P#part3#SP#sp31.MYD
 
2974
t1#P#part3#SP#sp31.MYI
 
2975
t1#P#part3#SP#sp32.MYD
 
2976
t1#P#part3#SP#sp32.MYI
 
2977
t1#P#part4#SP#sp41.MYD
 
2978
t1#P#part4#SP#sp41.MYI
 
2979
t1#P#part4#SP#sp42.MYD
 
2980
t1#P#part4#SP#sp42.MYI
 
2981
t1.frm
 
2982
t1.par
 
2983
 
 
2984
# check prerequisites-1 success:    1
 
2985
# check COUNT(*) success:    1
 
2986
# check MIN/MAX(f_int1) success:    1
 
2987
# check MIN/MAX(f_int2) success:    1
 
2988
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2989
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2990
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2991
WHERE f_int1 IN (2,3);
 
2992
# check prerequisites-3 success:    1
 
2993
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2994
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2995
# check read via f_int1 success: 1
 
2996
# check read via f_int2 success: 1
 
2997
        
 
2998
# check multiple-1 success:     1
 
2999
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3000
        
 
3001
# check multiple-2 success:     1
 
3002
INSERT INTO t1 SELECT * FROM t0_template
 
3003
WHERE MOD(f_int1,3) = 0;
 
3004
        
 
3005
# check multiple-3 success:     1
 
3006
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3007
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3008
AND @max_row_div2 + @max_row_div4;
 
3009
        
 
3010
# check multiple-4 success:     1
 
3011
DELETE FROM t1
 
3012
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3013
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3014
        
 
3015
# check multiple-5 success:     1
 
3016
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3017
INSERT INTO t1
 
3018
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3019
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3020
f_charbig = '#SINGLE#';
 
3021
        
 
3022
# check single-1 success:       1
 
3023
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3024
INSERT INTO t1
 
3025
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3026
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3027
f_charbig = '#SINGLE#';
 
3028
        
 
3029
# check single-2 success:       1
 
3030
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3031
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3032
UPDATE t1 SET f_int1 = @cur_value2
 
3033
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3034
        
 
3035
# check single-3 success:       1
 
3036
SET @cur_value1= -1;
 
3037
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3038
UPDATE t1 SET f_int1 = @cur_value1
 
3039
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3040
        
 
3041
# check single-4 success:       1
 
3042
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3043
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3044
        
 
3045
# check single-5 success:       1
 
3046
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3047
        
 
3048
# check single-6 success:       1
 
3049
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3050
        
 
3051
# check single-7 success:       1
 
3052
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3053
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3054
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3055
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3056
f_charbig = '#NULL#';
 
3057
INSERT INTO t1
 
3058
SET f_int1 = NULL , f_int2 = -@max_row,
 
3059
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3060
f_charbig = '#NULL#';
 
3061
# check null success:    1
 
3062
        
 
3063
# check null-1 success:         1
 
3064
UPDATE t1 SET f_int1 = -@max_row
 
3065
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3066
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3067
        
 
3068
# check null-2 success:         1
 
3069
UPDATE t1 SET f_int1 = NULL
 
3070
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3071
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3072
        
 
3073
# check null-3 success:         1
 
3074
DELETE FROM t1
 
3075
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3076
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3077
        
 
3078
# check null-4 success:         1
 
3079
DELETE FROM t1
 
3080
WHERE f_int1 = 0 AND f_int2 = 0
 
3081
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3082
AND f_charbig = '#NULL#';
 
3083
SET AUTOCOMMIT= 0;
 
3084
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3085
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3086
FROM t0_template source_tab
 
3087
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3088
        
 
3089
# check transactions-1 success:         1
 
3090
COMMIT WORK;
 
3091
        
 
3092
# check transactions-2 success:         1
 
3093
ROLLBACK WORK;
 
3094
        
 
3095
# check transactions-3 success:         1
 
3096
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3097
COMMIT WORK;
 
3098
ROLLBACK WORK;
 
3099
        
 
3100
# check transactions-4 success:         1
 
3101
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3102
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3103
FROM t0_template source_tab
 
3104
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3105
        
 
3106
# check transactions-5 success:         1
 
3107
ROLLBACK WORK;
 
3108
Warnings:
 
3109
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3110
        
 
3111
# check transactions-6 success:         1
 
3112
# INFO: Storage engine used for t1 seems to be not transactional.
 
3113
COMMIT;
 
3114
        
 
3115
# check transactions-7 success:         1
 
3116
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3117
COMMIT WORK;
 
3118
SET @@session.sql_mode = 'traditional';
 
3119
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3120
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3121
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3122
'', '', 'was inserted' FROM t0_template
 
3123
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3124
ERROR 22012: Division by 0
 
3125
COMMIT;
 
3126
        
 
3127
# check transactions-8 success:         1
 
3128
# INFO: Storage engine used for t1 seems to be unable to revert
 
3129
#       changes made by the failing statement.
 
3130
SET @@session.sql_mode = '';
 
3131
SET AUTOCOMMIT= 1;
 
3132
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3133
COMMIT WORK;
 
3134
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3135
        
 
3136
# check special-1 success:      1
 
3137
UPDATE t1 SET f_charbig = '';
 
3138
        
 
3139
# check special-2 success:      1
 
3140
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3141
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3142
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3143
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3146
'just inserted' FROM t0_template
 
3147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3148
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3149
BEGIN
 
3150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3151
f_charbig = 'updated by trigger'
 
3152
      WHERE f_int1 = new.f_int1;
 
3153
END|
 
3154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3155
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3157
        
 
3158
# check trigger-1 success:      1
 
3159
DROP TRIGGER trg_1;
 
3160
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3161
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3162
f_charbig = 'just inserted'
 
3163
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3164
DELETE FROM t0_aux
 
3165
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3166
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3167
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3168
'just inserted' FROM t0_template
 
3169
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3170
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3171
BEGIN
 
3172
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3173
f_charbig = 'updated by trigger'
 
3174
      WHERE f_int1 = new.f_int1;
 
3175
END|
 
3176
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3177
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3179
        
 
3180
# check trigger-2 success:      1
 
3181
DROP TRIGGER trg_1;
 
3182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3184
f_charbig = 'just inserted'
 
3185
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3186
DELETE FROM t0_aux
 
3187
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3189
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3190
'just inserted' FROM t0_template
 
3191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3192
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3193
BEGIN
 
3194
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3195
f_charbig = 'updated by trigger'
 
3196
      WHERE f_int1 = new.f_int1;
 
3197
END|
 
3198
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3199
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3200
        
 
3201
# check trigger-3 success:      1
 
3202
DROP TRIGGER trg_1;
 
3203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3205
f_charbig = 'just inserted'
 
3206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3207
DELETE FROM t0_aux
 
3208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3211
'just inserted' FROM t0_template
 
3212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3213
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3214
BEGIN
 
3215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3216
f_charbig = 'updated by trigger'
 
3217
      WHERE f_int1 = - old.f_int1;
 
3218
END|
 
3219
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3221
        
 
3222
# check trigger-4 success:      1
 
3223
DROP TRIGGER trg_1;
 
3224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3226
f_charbig = 'just inserted'
 
3227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3228
DELETE FROM t0_aux
 
3229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3230
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3231
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3232
'just inserted' FROM t0_template
 
3233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3234
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3235
BEGIN
 
3236
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3237
f_charbig = 'updated by trigger'
 
3238
      WHERE f_int1 = new.f_int1;
 
3239
END|
 
3240
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3241
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3242
        
 
3243
# check trigger-5 success:      1
 
3244
DROP TRIGGER trg_1;
 
3245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3247
f_charbig = 'just inserted'
 
3248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3249
DELETE FROM t0_aux
 
3250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3253
'just inserted' FROM t0_template
 
3254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3255
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3256
BEGIN
 
3257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3258
f_charbig = 'updated by trigger'
 
3259
      WHERE f_int1 = - old.f_int1;
 
3260
END|
 
3261
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3263
        
 
3264
# check trigger-6 success:      1
 
3265
DROP TRIGGER trg_1;
 
3266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3268
f_charbig = 'just inserted'
 
3269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3270
DELETE FROM t0_aux
 
3271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3272
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3273
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3274
'just inserted' FROM t0_template
 
3275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3276
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3277
BEGIN
 
3278
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3279
f_charbig = 'updated by trigger'
 
3280
      WHERE f_int1 = - old.f_int1;
 
3281
END|
 
3282
DELETE FROM t0_aux
 
3283
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3284
        
 
3285
# check trigger-7 success:      1
 
3286
DROP TRIGGER trg_1;
 
3287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3289
f_charbig = 'just inserted'
 
3290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3291
DELETE FROM t0_aux
 
3292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3295
'just inserted' FROM t0_template
 
3296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3297
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3298
BEGIN
 
3299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3300
f_charbig = 'updated by trigger'
 
3301
      WHERE f_int1 = - old.f_int1;
 
3302
END|
 
3303
DELETE FROM t0_aux
 
3304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3305
        
 
3306
# check trigger-8 success:      1
 
3307
DROP TRIGGER trg_1;
 
3308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3310
f_charbig = 'just inserted'
 
3311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3312
DELETE FROM t0_aux
 
3313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3314
DELETE FROM t1
 
3315
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3316
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3317
BEGIN
 
3318
SET new.f_int1 = old.f_int1 + @max_row,
 
3319
new.f_int2 = old.f_int2 - @max_row,
 
3320
new.f_charbig = '####updated per update trigger####';
 
3321
END|
 
3322
UPDATE t1
 
3323
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3324
f_charbig = '####updated per update statement itself####';
 
3325
        
 
3326
# check trigger-9 success:      1
 
3327
DROP TRIGGER trg_2;
 
3328
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3329
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3330
f_charbig = CONCAT('===',f_char1,'===');
 
3331
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3332
BEGIN
 
3333
SET new.f_int1 = new.f_int1 + @max_row,
 
3334
new.f_int2 = new.f_int2 - @max_row,
 
3335
new.f_charbig = '####updated per update trigger####';
 
3336
END|
 
3337
UPDATE t1
 
3338
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3339
f_charbig = '####updated per update statement itself####';
 
3340
        
 
3341
# check trigger-10 success:     1
 
3342
DROP TRIGGER trg_2;
 
3343
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3344
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3345
f_charbig = CONCAT('===',f_char1,'===');
 
3346
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3347
BEGIN
 
3348
SET new.f_int1 = @my_max1 + @counter,
 
3349
new.f_int2 = @my_min2 - @counter,
 
3350
new.f_charbig = '####updated per insert trigger####';
 
3351
SET @counter = @counter + 1;
 
3352
END|
 
3353
SET @counter = 1;
 
3354
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3355
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3356
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3357
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3358
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3359
ORDER BY f_int1;
 
3360
DROP TRIGGER trg_3;
 
3361
        
 
3362
# check trigger-11 success:     1
 
3363
DELETE FROM t1
 
3364
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3365
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3366
AND f_charbig = '####updated per insert trigger####';
 
3367
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3368
BEGIN
 
3369
SET new.f_int1 = @my_max1 + @counter,
 
3370
new.f_int2 = @my_min2 - @counter,
 
3371
new.f_charbig = '####updated per insert trigger####';
 
3372
SET @counter = @counter + 1;
 
3373
END|
 
3374
SET @counter = 1;
 
3375
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3376
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3377
SELECT CAST(f_int1 AS CHAR),
 
3378
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3380
ORDER BY f_int1;
 
3381
DROP TRIGGER trg_3;
 
3382
        
 
3383
# check trigger-12 success:     1
 
3384
DELETE FROM t1
 
3385
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3386
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3387
AND f_charbig = '####updated per insert trigger####';
 
3388
ANALYZE  TABLE t1;
 
3389
Table   Op      Msg_type        Msg_text
 
3390
test.t1 analyze status  OK
 
3391
CHECK    TABLE t1 EXTENDED;
 
3392
Table   Op      Msg_type        Msg_text
 
3393
test.t1 check   status  OK
 
3394
CHECKSUM TABLE t1 EXTENDED;
 
3395
Table   Checksum
 
3396
test.t1 <some_value>
 
3397
OPTIMIZE TABLE t1;
 
3398
Table   Op      Msg_type        Msg_text
 
3399
test.t1 optimize        status  OK
 
3400
# check layout success:    1
 
3401
REPAIR   TABLE t1 EXTENDED;
 
3402
Table   Op      Msg_type        Msg_text
 
3403
test.t1 repair  status  OK
 
3404
# check layout success:    1
 
3405
TRUNCATE t1;
 
3406
        
 
3407
# check TRUNCATE success:       1
 
3408
# check layout success:    1
 
3409
# End usability test (inc/partition_check.inc)
 
3410
DROP TABLE t1;
 
3411
CREATE TABLE t1 (
 
3412
f_int1 INTEGER,
 
3413
f_int2 INTEGER,
 
3414
f_char1 CHAR(20),
 
3415
f_char2 CHAR(20),
 
3416
f_charbig VARCHAR(1000)
 
3417
 
 
3418
)
 
3419
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3420
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3421
(PARTITION part1 VALUES IN (0),
 
3422
PARTITION part2 VALUES IN (1),
 
3423
PARTITION part3 VALUES IN (NULL));
 
3424
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3425
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
3426
# Start usability test (inc/partition_check.inc)
 
3427
create_command
 
3428
SHOW CREATE TABLE t1;
 
3429
Table   Create Table
 
3430
t1      CREATE TABLE `t1` (
 
3431
  `f_int1` int(11) DEFAULT NULL,
 
3432
  `f_int2` int(11) DEFAULT NULL,
 
3433
  `f_char1` char(20) DEFAULT NULL,
 
3434
  `f_char2` char(20) DEFAULT NULL,
 
3435
  `f_charbig` varchar(1000) DEFAULT NULL
 
3436
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
3437
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
3438
SUBPARTITION BY KEY (f_int1)
 
3439
SUBPARTITIONS 3
 
3440
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
3441
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
3442
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
3443
 
 
3444
unified filelist
 
3445
t1#P#part1#SP#part1sp0.MYD
 
3446
t1#P#part1#SP#part1sp0.MYI
 
3447
t1#P#part1#SP#part1sp1.MYD
 
3448
t1#P#part1#SP#part1sp1.MYI
 
3449
t1#P#part1#SP#part1sp2.MYD
 
3450
t1#P#part1#SP#part1sp2.MYI
 
3451
t1#P#part2#SP#part2sp0.MYD
 
3452
t1#P#part2#SP#part2sp0.MYI
 
3453
t1#P#part2#SP#part2sp1.MYD
 
3454
t1#P#part2#SP#part2sp1.MYI
 
3455
t1#P#part2#SP#part2sp2.MYD
 
3456
t1#P#part2#SP#part2sp2.MYI
 
3457
t1#P#part3#SP#part3sp0.MYD
 
3458
t1#P#part3#SP#part3sp0.MYI
 
3459
t1#P#part3#SP#part3sp1.MYD
 
3460
t1#P#part3#SP#part3sp1.MYI
 
3461
t1#P#part3#SP#part3sp2.MYD
 
3462
t1#P#part3#SP#part3sp2.MYI
 
3463
t1.frm
 
3464
t1.par
 
3465
 
 
3466
# check prerequisites-1 success:    1
 
3467
# check COUNT(*) success:    1
 
3468
# check MIN/MAX(f_int1) success:    1
 
3469
# check MIN/MAX(f_int2) success:    1
 
3470
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3471
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3472
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3473
WHERE f_int1 IN (2,3);
 
3474
# check prerequisites-3 success:    1
 
3475
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3476
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3477
# check read via f_int1 success: 1
 
3478
# check read via f_int2 success: 1
 
3479
        
 
3480
# check multiple-1 success:     1
 
3481
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3482
        
 
3483
# check multiple-2 success:     1
 
3484
INSERT INTO t1 SELECT * FROM t0_template
 
3485
WHERE MOD(f_int1,3) = 0;
 
3486
        
 
3487
# check multiple-3 success:     1
 
3488
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3489
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3490
AND @max_row_div2 + @max_row_div4;
 
3491
        
 
3492
# check multiple-4 success:     1
 
3493
DELETE FROM t1
 
3494
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3495
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3496
        
 
3497
# check multiple-5 success:     1
 
3498
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3499
INSERT INTO t1
 
3500
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3501
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3502
f_charbig = '#SINGLE#';
 
3503
        
 
3504
# check single-1 success:       1
 
3505
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3506
INSERT INTO t1
 
3507
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3508
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3509
f_charbig = '#SINGLE#';
 
3510
        
 
3511
# check single-2 success:       1
 
3512
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3513
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3514
UPDATE t1 SET f_int1 = @cur_value2
 
3515
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3516
        
 
3517
# check single-3 success:       1
 
3518
SET @cur_value1= -1;
 
3519
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3520
UPDATE t1 SET f_int1 = @cur_value1
 
3521
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3522
        
 
3523
# check single-4 success:       1
 
3524
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3525
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3526
        
 
3527
# check single-5 success:       1
 
3528
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3529
        
 
3530
# check single-6 success:       1
 
3531
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3532
        
 
3533
# check single-7 success:       1
 
3534
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3535
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3536
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3537
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3538
f_charbig = '#NULL#';
 
3539
INSERT INTO t1
 
3540
SET f_int1 = NULL , f_int2 = -@max_row,
 
3541
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3542
f_charbig = '#NULL#';
 
3543
# check null success:    1
 
3544
        
 
3545
# check null-1 success:         1
 
3546
UPDATE t1 SET f_int1 = -@max_row
 
3547
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3548
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3549
        
 
3550
# check null-2 success:         1
 
3551
UPDATE t1 SET f_int1 = NULL
 
3552
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3553
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3554
        
 
3555
# check null-3 success:         1
 
3556
DELETE FROM t1
 
3557
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3558
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3559
        
 
3560
# check null-4 success:         1
 
3561
DELETE FROM t1
 
3562
WHERE f_int1 = 0 AND f_int2 = 0
 
3563
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3564
AND f_charbig = '#NULL#';
 
3565
SET AUTOCOMMIT= 0;
 
3566
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3567
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3568
FROM t0_template source_tab
 
3569
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3570
        
 
3571
# check transactions-1 success:         1
 
3572
COMMIT WORK;
 
3573
        
 
3574
# check transactions-2 success:         1
 
3575
ROLLBACK WORK;
 
3576
        
 
3577
# check transactions-3 success:         1
 
3578
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3579
COMMIT WORK;
 
3580
ROLLBACK WORK;
 
3581
        
 
3582
# check transactions-4 success:         1
 
3583
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3584
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3585
FROM t0_template source_tab
 
3586
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3587
        
 
3588
# check transactions-5 success:         1
 
3589
ROLLBACK WORK;
 
3590
Warnings:
 
3591
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3592
        
 
3593
# check transactions-6 success:         1
 
3594
# INFO: Storage engine used for t1 seems to be not transactional.
 
3595
COMMIT;
 
3596
        
 
3597
# check transactions-7 success:         1
 
3598
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3599
COMMIT WORK;
 
3600
SET @@session.sql_mode = 'traditional';
 
3601
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3602
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3603
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3604
'', '', 'was inserted' FROM t0_template
 
3605
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3606
ERROR 22012: Division by 0
 
3607
COMMIT;
 
3608
        
 
3609
# check transactions-8 success:         1
 
3610
# INFO: Storage engine used for t1 seems to be unable to revert
 
3611
#       changes made by the failing statement.
 
3612
SET @@session.sql_mode = '';
 
3613
SET AUTOCOMMIT= 1;
 
3614
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3615
COMMIT WORK;
 
3616
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3617
        
 
3618
# check special-1 success:      1
 
3619
UPDATE t1 SET f_charbig = '';
 
3620
        
 
3621
# check special-2 success:      1
 
3622
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3623
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3624
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3627
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3628
'just inserted' FROM t0_template
 
3629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3630
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3631
BEGIN
 
3632
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3633
f_charbig = 'updated by trigger'
 
3634
      WHERE f_int1 = new.f_int1;
 
3635
END|
 
3636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3637
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3639
        
 
3640
# check trigger-1 success:      1
 
3641
DROP TRIGGER trg_1;
 
3642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3644
f_charbig = 'just inserted'
 
3645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3646
DELETE FROM t0_aux
 
3647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3650
'just inserted' FROM t0_template
 
3651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3652
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3653
BEGIN
 
3654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3655
f_charbig = 'updated by trigger'
 
3656
      WHERE f_int1 = new.f_int1;
 
3657
END|
 
3658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3659
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3661
        
 
3662
# check trigger-2 success:      1
 
3663
DROP TRIGGER trg_1;
 
3664
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3665
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3666
f_charbig = 'just inserted'
 
3667
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3668
DELETE FROM t0_aux
 
3669
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3671
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3672
'just inserted' FROM t0_template
 
3673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3674
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3675
BEGIN
 
3676
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3677
f_charbig = 'updated by trigger'
 
3678
      WHERE f_int1 = new.f_int1;
 
3679
END|
 
3680
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3681
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3682
        
 
3683
# check trigger-3 success:      1
 
3684
DROP TRIGGER trg_1;
 
3685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3687
f_charbig = 'just inserted'
 
3688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3689
DELETE FROM t0_aux
 
3690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3693
'just inserted' FROM t0_template
 
3694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3695
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3696
BEGIN
 
3697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3698
f_charbig = 'updated by trigger'
 
3699
      WHERE f_int1 = - old.f_int1;
 
3700
END|
 
3701
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3702
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3703
        
 
3704
# check trigger-4 success:      1
 
3705
DROP TRIGGER trg_1;
 
3706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3708
f_charbig = 'just inserted'
 
3709
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3710
DELETE FROM t0_aux
 
3711
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3712
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3713
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3714
'just inserted' FROM t0_template
 
3715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3716
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3717
BEGIN
 
3718
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3719
f_charbig = 'updated by trigger'
 
3720
      WHERE f_int1 = new.f_int1;
 
3721
END|
 
3722
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3723
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3724
        
 
3725
# check trigger-5 success:      1
 
3726
DROP TRIGGER trg_1;
 
3727
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3728
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3729
f_charbig = 'just inserted'
 
3730
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3731
DELETE FROM t0_aux
 
3732
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3733
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3734
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3735
'just inserted' FROM t0_template
 
3736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3737
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3738
BEGIN
 
3739
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3740
f_charbig = 'updated by trigger'
 
3741
      WHERE f_int1 = - old.f_int1;
 
3742
END|
 
3743
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3744
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3745
        
 
3746
# check trigger-6 success:      1
 
3747
DROP TRIGGER trg_1;
 
3748
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3749
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3750
f_charbig = 'just inserted'
 
3751
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3752
DELETE FROM t0_aux
 
3753
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3755
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3756
'just inserted' FROM t0_template
 
3757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3758
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3759
BEGIN
 
3760
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3761
f_charbig = 'updated by trigger'
 
3762
      WHERE f_int1 = - old.f_int1;
 
3763
END|
 
3764
DELETE FROM t0_aux
 
3765
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3766
        
 
3767
# check trigger-7 success:      1
 
3768
DROP TRIGGER trg_1;
 
3769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3771
f_charbig = 'just inserted'
 
3772
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3773
DELETE FROM t0_aux
 
3774
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3775
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3776
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3777
'just inserted' FROM t0_template
 
3778
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3779
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3780
BEGIN
 
3781
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3782
f_charbig = 'updated by trigger'
 
3783
      WHERE f_int1 = - old.f_int1;
 
3784
END|
 
3785
DELETE FROM t0_aux
 
3786
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3787
        
 
3788
# check trigger-8 success:      1
 
3789
DROP TRIGGER trg_1;
 
3790
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3791
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3792
f_charbig = 'just inserted'
 
3793
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3794
DELETE FROM t0_aux
 
3795
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3796
DELETE FROM t1
 
3797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3798
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3799
BEGIN
 
3800
SET new.f_int1 = old.f_int1 + @max_row,
 
3801
new.f_int2 = old.f_int2 - @max_row,
 
3802
new.f_charbig = '####updated per update trigger####';
 
3803
END|
 
3804
UPDATE t1
 
3805
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3806
f_charbig = '####updated per update statement itself####';
 
3807
        
 
3808
# check trigger-9 success:      1
 
3809
DROP TRIGGER trg_2;
 
3810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3812
f_charbig = CONCAT('===',f_char1,'===');
 
3813
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3814
BEGIN
 
3815
SET new.f_int1 = new.f_int1 + @max_row,
 
3816
new.f_int2 = new.f_int2 - @max_row,
 
3817
new.f_charbig = '####updated per update trigger####';
 
3818
END|
 
3819
UPDATE t1
 
3820
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3821
f_charbig = '####updated per update statement itself####';
 
3822
        
 
3823
# check trigger-10 success:     1
 
3824
DROP TRIGGER trg_2;
 
3825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3827
f_charbig = CONCAT('===',f_char1,'===');
 
3828
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3829
BEGIN
 
3830
SET new.f_int1 = @my_max1 + @counter,
 
3831
new.f_int2 = @my_min2 - @counter,
 
3832
new.f_charbig = '####updated per insert trigger####';
 
3833
SET @counter = @counter + 1;
 
3834
END|
 
3835
SET @counter = 1;
 
3836
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3838
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3839
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3841
ORDER BY f_int1;
 
3842
DROP TRIGGER trg_3;
 
3843
        
 
3844
# check trigger-11 success:     1
 
3845
DELETE FROM t1
 
3846
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3847
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3848
AND f_charbig = '####updated per insert trigger####';
 
3849
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3850
BEGIN
 
3851
SET new.f_int1 = @my_max1 + @counter,
 
3852
new.f_int2 = @my_min2 - @counter,
 
3853
new.f_charbig = '####updated per insert trigger####';
 
3854
SET @counter = @counter + 1;
 
3855
END|
 
3856
SET @counter = 1;
 
3857
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3858
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3859
SELECT CAST(f_int1 AS CHAR),
 
3860
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3862
ORDER BY f_int1;
 
3863
DROP TRIGGER trg_3;
 
3864
        
 
3865
# check trigger-12 success:     1
 
3866
DELETE FROM t1
 
3867
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3868
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3869
AND f_charbig = '####updated per insert trigger####';
 
3870
ANALYZE  TABLE t1;
 
3871
Table   Op      Msg_type        Msg_text
 
3872
test.t1 analyze status  OK
 
3873
CHECK    TABLE t1 EXTENDED;
 
3874
Table   Op      Msg_type        Msg_text
 
3875
test.t1 check   status  OK
 
3876
CHECKSUM TABLE t1 EXTENDED;
 
3877
Table   Checksum
 
3878
test.t1 <some_value>
 
3879
OPTIMIZE TABLE t1;
 
3880
Table   Op      Msg_type        Msg_text
 
3881
test.t1 optimize        status  OK
 
3882
# check layout success:    1
 
3883
REPAIR   TABLE t1 EXTENDED;
 
3884
Table   Op      Msg_type        Msg_text
 
3885
test.t1 repair  status  OK
 
3886
# check layout success:    1
 
3887
TRUNCATE t1;
 
3888
        
 
3889
# check TRUNCATE success:       1
 
3890
# check layout success:    1
 
3891
# End usability test (inc/partition_check.inc)
 
3892
DROP TABLE t1;
 
3893
#  1.2 The partitioning function contains two columns.
 
3894
DROP TABLE IF EXISTS t1;
 
3895
CREATE TABLE t1 (
 
3896
f_int1 INTEGER,
 
3897
f_int2 INTEGER,
 
3898
f_char1 CHAR(20),
 
3899
f_char2 CHAR(20),
 
3900
f_charbig VARCHAR(1000)
 
3901
 
 
3902
)
 
3903
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
3904
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3905
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
3906
# Start usability test (inc/partition_check.inc)
 
3907
create_command
 
3908
SHOW CREATE TABLE t1;
 
3909
Table   Create Table
 
3910
t1      CREATE TABLE `t1` (
 
3911
  `f_int1` int(11) DEFAULT NULL,
 
3912
  `f_int2` int(11) DEFAULT NULL,
 
3913
  `f_char1` char(20) DEFAULT NULL,
 
3914
  `f_char2` char(20) DEFAULT NULL,
 
3915
  `f_charbig` varchar(1000) DEFAULT NULL
 
3916
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
3917
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
3918
PARTITIONS 2 */
 
3919
 
 
3920
unified filelist
 
3921
t1#P#p0.MYD
 
3922
t1#P#p0.MYI
 
3923
t1#P#p1.MYD
 
3924
t1#P#p1.MYI
 
3925
t1.frm
 
3926
t1.par
 
3927
 
 
3928
# check prerequisites-1 success:    1
 
3929
# check COUNT(*) success:    1
 
3930
# check MIN/MAX(f_int1) success:    1
 
3931
# check MIN/MAX(f_int2) success:    1
 
3932
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3933
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3934
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3935
WHERE f_int1 IN (2,3);
 
3936
# check prerequisites-3 success:    1
 
3937
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3938
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3939
# check read via f_int1 success: 1
 
3940
# check read via f_int2 success: 1
 
3941
        
 
3942
# check multiple-1 success:     1
 
3943
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3944
        
 
3945
# check multiple-2 success:     1
 
3946
INSERT INTO t1 SELECT * FROM t0_template
 
3947
WHERE MOD(f_int1,3) = 0;
 
3948
        
 
3949
# check multiple-3 success:     1
 
3950
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3951
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3952
AND @max_row_div2 + @max_row_div4;
 
3953
        
 
3954
# check multiple-4 success:     1
 
3955
DELETE FROM t1
 
3956
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3957
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3958
        
 
3959
# check multiple-5 success:     1
 
3960
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3961
INSERT INTO t1
 
3962
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3963
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3964
f_charbig = '#SINGLE#';
 
3965
        
 
3966
# check single-1 success:       1
 
3967
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3968
INSERT INTO t1
 
3969
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3970
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3971
f_charbig = '#SINGLE#';
 
3972
        
 
3973
# check single-2 success:       1
 
3974
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3975
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3976
UPDATE t1 SET f_int1 = @cur_value2
 
3977
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3978
        
 
3979
# check single-3 success:       1
 
3980
SET @cur_value1= -1;
 
3981
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3982
UPDATE t1 SET f_int1 = @cur_value1
 
3983
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3984
        
 
3985
# check single-4 success:       1
 
3986
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3987
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3988
        
 
3989
# check single-5 success:       1
 
3990
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3991
        
 
3992
# check single-6 success:       1
 
3993
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3994
        
 
3995
# check single-7 success:       1
 
3996
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3997
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3998
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3999
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4000
f_charbig = '#NULL#';
 
4001
INSERT INTO t1
 
4002
SET f_int1 = NULL , f_int2 = -@max_row,
 
4003
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4004
f_charbig = '#NULL#';
 
4005
# check null success:    1
 
4006
        
 
4007
# check null-1 success:         1
 
4008
UPDATE t1 SET f_int1 = -@max_row
 
4009
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4010
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4011
        
 
4012
# check null-2 success:         1
 
4013
UPDATE t1 SET f_int1 = NULL
 
4014
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4015
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4016
        
 
4017
# check null-3 success:         1
 
4018
DELETE FROM t1
 
4019
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4020
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4021
        
 
4022
# check null-4 success:         1
 
4023
DELETE FROM t1
 
4024
WHERE f_int1 = 0 AND f_int2 = 0
 
4025
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4026
AND f_charbig = '#NULL#';
 
4027
SET AUTOCOMMIT= 0;
 
4028
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4029
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4030
FROM t0_template source_tab
 
4031
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4032
        
 
4033
# check transactions-1 success:         1
 
4034
COMMIT WORK;
 
4035
        
 
4036
# check transactions-2 success:         1
 
4037
ROLLBACK WORK;
 
4038
        
 
4039
# check transactions-3 success:         1
 
4040
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4041
COMMIT WORK;
 
4042
ROLLBACK WORK;
 
4043
        
 
4044
# check transactions-4 success:         1
 
4045
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4046
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4047
FROM t0_template source_tab
 
4048
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4049
        
 
4050
# check transactions-5 success:         1
 
4051
ROLLBACK WORK;
 
4052
Warnings:
 
4053
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4054
        
 
4055
# check transactions-6 success:         1
 
4056
# INFO: Storage engine used for t1 seems to be not transactional.
 
4057
COMMIT;
 
4058
        
 
4059
# check transactions-7 success:         1
 
4060
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4061
COMMIT WORK;
 
4062
SET @@session.sql_mode = 'traditional';
 
4063
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4064
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4065
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4066
'', '', 'was inserted' FROM t0_template
 
4067
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4068
ERROR 22012: Division by 0
 
4069
COMMIT;
 
4070
        
 
4071
# check transactions-8 success:         1
 
4072
# INFO: Storage engine used for t1 seems to be unable to revert
 
4073
#       changes made by the failing statement.
 
4074
SET @@session.sql_mode = '';
 
4075
SET AUTOCOMMIT= 1;
 
4076
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4077
COMMIT WORK;
 
4078
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4079
        
 
4080
# check special-1 success:      1
 
4081
UPDATE t1 SET f_charbig = '';
 
4082
        
 
4083
# check special-2 success:      1
 
4084
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4085
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4086
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4088
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4089
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4090
'just inserted' FROM t0_template
 
4091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4092
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4093
BEGIN
 
4094
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4095
f_charbig = 'updated by trigger'
 
4096
      WHERE f_int1 = new.f_int1;
 
4097
END|
 
4098
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4099
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4100
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4101
        
 
4102
# check trigger-1 success:      1
 
4103
DROP TRIGGER trg_1;
 
4104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4106
f_charbig = 'just inserted'
 
4107
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4108
DELETE FROM t0_aux
 
4109
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4111
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4112
'just inserted' FROM t0_template
 
4113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4114
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4115
BEGIN
 
4116
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4117
f_charbig = 'updated by trigger'
 
4118
      WHERE f_int1 = new.f_int1;
 
4119
END|
 
4120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4121
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4123
        
 
4124
# check trigger-2 success:      1
 
4125
DROP TRIGGER trg_1;
 
4126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4128
f_charbig = 'just inserted'
 
4129
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4130
DELETE FROM t0_aux
 
4131
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4133
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4134
'just inserted' FROM t0_template
 
4135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4136
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4137
BEGIN
 
4138
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4139
f_charbig = 'updated by trigger'
 
4140
      WHERE f_int1 = new.f_int1;
 
4141
END|
 
4142
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4143
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4144
        
 
4145
# check trigger-3 success:      1
 
4146
DROP TRIGGER trg_1;
 
4147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4149
f_charbig = 'just inserted'
 
4150
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4151
DELETE FROM t0_aux
 
4152
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4155
'just inserted' FROM t0_template
 
4156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4157
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4158
BEGIN
 
4159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4160
f_charbig = 'updated by trigger'
 
4161
      WHERE f_int1 = - old.f_int1;
 
4162
END|
 
4163
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4164
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4165
        
 
4166
# check trigger-4 success:      1
 
4167
DROP TRIGGER trg_1;
 
4168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4169
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4170
f_charbig = 'just inserted'
 
4171
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4172
DELETE FROM t0_aux
 
4173
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4174
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4175
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4176
'just inserted' FROM t0_template
 
4177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4178
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4179
BEGIN
 
4180
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4181
f_charbig = 'updated by trigger'
 
4182
      WHERE f_int1 = new.f_int1;
 
4183
END|
 
4184
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4185
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4186
        
 
4187
# check trigger-5 success:      1
 
4188
DROP TRIGGER trg_1;
 
4189
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4190
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4191
f_charbig = 'just inserted'
 
4192
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4193
DELETE FROM t0_aux
 
4194
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4195
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4196
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4197
'just inserted' FROM t0_template
 
4198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4199
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4200
BEGIN
 
4201
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4202
f_charbig = 'updated by trigger'
 
4203
      WHERE f_int1 = - old.f_int1;
 
4204
END|
 
4205
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4206
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4207
        
 
4208
# check trigger-6 success:      1
 
4209
DROP TRIGGER trg_1;
 
4210
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4211
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4212
f_charbig = 'just inserted'
 
4213
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4214
DELETE FROM t0_aux
 
4215
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4216
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4217
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4218
'just inserted' FROM t0_template
 
4219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4220
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4221
BEGIN
 
4222
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4223
f_charbig = 'updated by trigger'
 
4224
      WHERE f_int1 = - old.f_int1;
 
4225
END|
 
4226
DELETE FROM t0_aux
 
4227
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4228
        
 
4229
# check trigger-7 success:      1
 
4230
DROP TRIGGER trg_1;
 
4231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4233
f_charbig = 'just inserted'
 
4234
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4235
DELETE FROM t0_aux
 
4236
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4237
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4238
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4239
'just inserted' FROM t0_template
 
4240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4241
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4242
BEGIN
 
4243
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4244
f_charbig = 'updated by trigger'
 
4245
      WHERE f_int1 = - old.f_int1;
 
4246
END|
 
4247
DELETE FROM t0_aux
 
4248
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4249
        
 
4250
# check trigger-8 success:      1
 
4251
DROP TRIGGER trg_1;
 
4252
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4253
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4254
f_charbig = 'just inserted'
 
4255
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4256
DELETE FROM t0_aux
 
4257
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4258
DELETE FROM t1
 
4259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4260
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4261
BEGIN
 
4262
SET new.f_int1 = old.f_int1 + @max_row,
 
4263
new.f_int2 = old.f_int2 - @max_row,
 
4264
new.f_charbig = '####updated per update trigger####';
 
4265
END|
 
4266
UPDATE t1
 
4267
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4268
f_charbig = '####updated per update statement itself####';
 
4269
        
 
4270
# check trigger-9 success:      1
 
4271
DROP TRIGGER trg_2;
 
4272
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4273
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4274
f_charbig = CONCAT('===',f_char1,'===');
 
4275
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4276
BEGIN
 
4277
SET new.f_int1 = new.f_int1 + @max_row,
 
4278
new.f_int2 = new.f_int2 - @max_row,
 
4279
new.f_charbig = '####updated per update trigger####';
 
4280
END|
 
4281
UPDATE t1
 
4282
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4283
f_charbig = '####updated per update statement itself####';
 
4284
        
 
4285
# check trigger-10 success:     1
 
4286
DROP TRIGGER trg_2;
 
4287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4289
f_charbig = CONCAT('===',f_char1,'===');
 
4290
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4291
BEGIN
 
4292
SET new.f_int1 = @my_max1 + @counter,
 
4293
new.f_int2 = @my_min2 - @counter,
 
4294
new.f_charbig = '####updated per insert trigger####';
 
4295
SET @counter = @counter + 1;
 
4296
END|
 
4297
SET @counter = 1;
 
4298
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4299
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4300
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4301
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4303
ORDER BY f_int1;
 
4304
DROP TRIGGER trg_3;
 
4305
        
 
4306
# check trigger-11 success:     1
 
4307
DELETE FROM t1
 
4308
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4309
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4310
AND f_charbig = '####updated per insert trigger####';
 
4311
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4312
BEGIN
 
4313
SET new.f_int1 = @my_max1 + @counter,
 
4314
new.f_int2 = @my_min2 - @counter,
 
4315
new.f_charbig = '####updated per insert trigger####';
 
4316
SET @counter = @counter + 1;
 
4317
END|
 
4318
SET @counter = 1;
 
4319
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4320
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4321
SELECT CAST(f_int1 AS CHAR),
 
4322
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4323
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4324
ORDER BY f_int1;
 
4325
DROP TRIGGER trg_3;
 
4326
        
 
4327
# check trigger-12 success:     1
 
4328
DELETE FROM t1
 
4329
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4330
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4331
AND f_charbig = '####updated per insert trigger####';
 
4332
ANALYZE  TABLE t1;
 
4333
Table   Op      Msg_type        Msg_text
 
4334
test.t1 analyze status  OK
 
4335
CHECK    TABLE t1 EXTENDED;
 
4336
Table   Op      Msg_type        Msg_text
 
4337
test.t1 check   status  OK
 
4338
CHECKSUM TABLE t1 EXTENDED;
 
4339
Table   Checksum
 
4340
test.t1 <some_value>
 
4341
OPTIMIZE TABLE t1;
 
4342
Table   Op      Msg_type        Msg_text
 
4343
test.t1 optimize        status  OK
 
4344
# check layout success:    1
 
4345
REPAIR   TABLE t1 EXTENDED;
 
4346
Table   Op      Msg_type        Msg_text
 
4347
test.t1 repair  status  OK
 
4348
# check layout success:    1
 
4349
TRUNCATE t1;
 
4350
        
 
4351
# check TRUNCATE success:       1
 
4352
# check layout success:    1
 
4353
# End usability test (inc/partition_check.inc)
 
4354
DROP TABLE t1;
 
4355
CREATE TABLE t1 (
 
4356
f_int1 INTEGER,
 
4357
f_int2 INTEGER,
 
4358
f_char1 CHAR(20),
 
4359
f_char2 CHAR(20),
 
4360
f_charbig VARCHAR(1000)
 
4361
 
 
4362
)
 
4363
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
4364
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4365
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
4366
# Start usability test (inc/partition_check.inc)
 
4367
create_command
 
4368
SHOW CREATE TABLE t1;
 
4369
Table   Create Table
 
4370
t1      CREATE TABLE `t1` (
 
4371
  `f_int1` int(11) DEFAULT NULL,
 
4372
  `f_int2` int(11) DEFAULT NULL,
 
4373
  `f_char1` char(20) DEFAULT NULL,
 
4374
  `f_char2` char(20) DEFAULT NULL,
 
4375
  `f_charbig` varchar(1000) DEFAULT NULL
 
4376
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
4377
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
4378
PARTITIONS 5 */
 
4379
 
 
4380
unified filelist
 
4381
t1#P#p0.MYD
 
4382
t1#P#p0.MYI
 
4383
t1#P#p1.MYD
 
4384
t1#P#p1.MYI
 
4385
t1#P#p2.MYD
 
4386
t1#P#p2.MYI
 
4387
t1#P#p3.MYD
 
4388
t1#P#p3.MYI
 
4389
t1#P#p4.MYD
 
4390
t1#P#p4.MYI
 
4391
t1.frm
 
4392
t1.par
 
4393
 
 
4394
# check prerequisites-1 success:    1
 
4395
# check COUNT(*) success:    1
 
4396
# check MIN/MAX(f_int1) success:    1
 
4397
# check MIN/MAX(f_int2) success:    1
 
4398
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4399
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4400
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4401
WHERE f_int1 IN (2,3);
 
4402
# check prerequisites-3 success:    1
 
4403
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4404
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4405
# check read via f_int1 success: 1
 
4406
# check read via f_int2 success: 1
 
4407
        
 
4408
# check multiple-1 success:     1
 
4409
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4410
        
 
4411
# check multiple-2 success:     1
 
4412
INSERT INTO t1 SELECT * FROM t0_template
 
4413
WHERE MOD(f_int1,3) = 0;
 
4414
        
 
4415
# check multiple-3 success:     1
 
4416
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4417
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4418
AND @max_row_div2 + @max_row_div4;
 
4419
        
 
4420
# check multiple-4 success:     1
 
4421
DELETE FROM t1
 
4422
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4423
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4424
        
 
4425
# check multiple-5 success:     1
 
4426
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4427
INSERT INTO t1
 
4428
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4429
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4430
f_charbig = '#SINGLE#';
 
4431
        
 
4432
# check single-1 success:       1
 
4433
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4434
INSERT INTO t1
 
4435
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4436
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4437
f_charbig = '#SINGLE#';
 
4438
        
 
4439
# check single-2 success:       1
 
4440
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4441
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4442
UPDATE t1 SET f_int1 = @cur_value2
 
4443
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4444
        
 
4445
# check single-3 success:       1
 
4446
SET @cur_value1= -1;
 
4447
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4448
UPDATE t1 SET f_int1 = @cur_value1
 
4449
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4450
        
 
4451
# check single-4 success:       1
 
4452
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4453
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4454
        
 
4455
# check single-5 success:       1
 
4456
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4457
        
 
4458
# check single-6 success:       1
 
4459
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4460
        
 
4461
# check single-7 success:       1
 
4462
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4463
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4464
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4465
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4466
f_charbig = '#NULL#';
 
4467
INSERT INTO t1
 
4468
SET f_int1 = NULL , f_int2 = -@max_row,
 
4469
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4470
f_charbig = '#NULL#';
 
4471
# check null success:    1
 
4472
        
 
4473
# check null-1 success:         1
 
4474
UPDATE t1 SET f_int1 = -@max_row
 
4475
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4476
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4477
        
 
4478
# check null-2 success:         1
 
4479
UPDATE t1 SET f_int1 = NULL
 
4480
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4481
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4482
        
 
4483
# check null-3 success:         1
 
4484
DELETE FROM t1
 
4485
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4486
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4487
        
 
4488
# check null-4 success:         1
 
4489
DELETE FROM t1
 
4490
WHERE f_int1 = 0 AND f_int2 = 0
 
4491
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4492
AND f_charbig = '#NULL#';
 
4493
SET AUTOCOMMIT= 0;
 
4494
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4495
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4496
FROM t0_template source_tab
 
4497
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4498
        
 
4499
# check transactions-1 success:         1
 
4500
COMMIT WORK;
 
4501
        
 
4502
# check transactions-2 success:         1
 
4503
ROLLBACK WORK;
 
4504
        
 
4505
# check transactions-3 success:         1
 
4506
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4507
COMMIT WORK;
 
4508
ROLLBACK WORK;
 
4509
        
 
4510
# check transactions-4 success:         1
 
4511
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4512
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4513
FROM t0_template source_tab
 
4514
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4515
        
 
4516
# check transactions-5 success:         1
 
4517
ROLLBACK WORK;
 
4518
Warnings:
 
4519
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4520
        
 
4521
# check transactions-6 success:         1
 
4522
# INFO: Storage engine used for t1 seems to be not transactional.
 
4523
COMMIT;
 
4524
        
 
4525
# check transactions-7 success:         1
 
4526
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4527
COMMIT WORK;
 
4528
SET @@session.sql_mode = 'traditional';
 
4529
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4531
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4532
'', '', 'was inserted' FROM t0_template
 
4533
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4534
ERROR 22012: Division by 0
 
4535
COMMIT;
 
4536
        
 
4537
# check transactions-8 success:         1
 
4538
# INFO: Storage engine used for t1 seems to be unable to revert
 
4539
#       changes made by the failing statement.
 
4540
SET @@session.sql_mode = '';
 
4541
SET AUTOCOMMIT= 1;
 
4542
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4543
COMMIT WORK;
 
4544
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4545
        
 
4546
# check special-1 success:      1
 
4547
UPDATE t1 SET f_charbig = '';
 
4548
        
 
4549
# check special-2 success:      1
 
4550
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4551
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4552
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4554
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4555
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4556
'just inserted' FROM t0_template
 
4557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4558
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4559
BEGIN
 
4560
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4561
f_charbig = 'updated by trigger'
 
4562
      WHERE f_int1 = new.f_int1;
 
4563
END|
 
4564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4565
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4567
        
 
4568
# check trigger-1 success:      1
 
4569
DROP TRIGGER trg_1;
 
4570
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4571
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4572
f_charbig = 'just inserted'
 
4573
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4574
DELETE FROM t0_aux
 
4575
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4576
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4577
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4578
'just inserted' FROM t0_template
 
4579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4580
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4581
BEGIN
 
4582
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4583
f_charbig = 'updated by trigger'
 
4584
      WHERE f_int1 = new.f_int1;
 
4585
END|
 
4586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4587
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4589
        
 
4590
# check trigger-2 success:      1
 
4591
DROP TRIGGER trg_1;
 
4592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4593
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4594
f_charbig = 'just inserted'
 
4595
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4596
DELETE FROM t0_aux
 
4597
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4598
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4599
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4600
'just inserted' FROM t0_template
 
4601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4602
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4603
BEGIN
 
4604
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4605
f_charbig = 'updated by trigger'
 
4606
      WHERE f_int1 = new.f_int1;
 
4607
END|
 
4608
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4609
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4610
        
 
4611
# check trigger-3 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 BEFORE UPDATE 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 = - old.f_int1;
 
4628
END|
 
4629
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4630
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4631
        
 
4632
# check trigger-4 success:      1
 
4633
DROP TRIGGER trg_1;
 
4634
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4635
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4636
f_charbig = 'just inserted'
 
4637
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4638
DELETE FROM t0_aux
 
4639
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4640
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4641
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4642
'just inserted' FROM t0_template
 
4643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4644
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4645
BEGIN
 
4646
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4647
f_charbig = 'updated by trigger'
 
4648
      WHERE f_int1 = new.f_int1;
 
4649
END|
 
4650
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4651
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4652
        
 
4653
# check trigger-5 success:      1
 
4654
DROP TRIGGER trg_1;
 
4655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4657
f_charbig = 'just inserted'
 
4658
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4659
DELETE FROM t0_aux
 
4660
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4662
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4663
'just inserted' FROM t0_template
 
4664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4665
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4666
BEGIN
 
4667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4668
f_charbig = 'updated by trigger'
 
4669
      WHERE f_int1 = - old.f_int1;
 
4670
END|
 
4671
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4672
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4673
        
 
4674
# check trigger-6 success:      1
 
4675
DROP TRIGGER trg_1;
 
4676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4678
f_charbig = 'just inserted'
 
4679
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4680
DELETE FROM t0_aux
 
4681
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4683
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4684
'just inserted' FROM t0_template
 
4685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4686
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4687
BEGIN
 
4688
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4689
f_charbig = 'updated by trigger'
 
4690
      WHERE f_int1 = - old.f_int1;
 
4691
END|
 
4692
DELETE FROM t0_aux
 
4693
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4694
        
 
4695
# check trigger-7 success:      1
 
4696
DROP TRIGGER trg_1;
 
4697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4699
f_charbig = 'just inserted'
 
4700
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4701
DELETE FROM t0_aux
 
4702
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4703
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4704
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4705
'just inserted' FROM t0_template
 
4706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4707
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4708
BEGIN
 
4709
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4710
f_charbig = 'updated by trigger'
 
4711
      WHERE f_int1 = - old.f_int1;
 
4712
END|
 
4713
DELETE FROM t0_aux
 
4714
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4715
        
 
4716
# check trigger-8 success:      1
 
4717
DROP TRIGGER trg_1;
 
4718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4720
f_charbig = 'just inserted'
 
4721
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4722
DELETE FROM t0_aux
 
4723
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4724
DELETE FROM t1
 
4725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4726
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4727
BEGIN
 
4728
SET new.f_int1 = old.f_int1 + @max_row,
 
4729
new.f_int2 = old.f_int2 - @max_row,
 
4730
new.f_charbig = '####updated per update trigger####';
 
4731
END|
 
4732
UPDATE t1
 
4733
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4734
f_charbig = '####updated per update statement itself####';
 
4735
        
 
4736
# check trigger-9 success:      1
 
4737
DROP TRIGGER trg_2;
 
4738
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4739
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4740
f_charbig = CONCAT('===',f_char1,'===');
 
4741
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4742
BEGIN
 
4743
SET new.f_int1 = new.f_int1 + @max_row,
 
4744
new.f_int2 = new.f_int2 - @max_row,
 
4745
new.f_charbig = '####updated per update trigger####';
 
4746
END|
 
4747
UPDATE t1
 
4748
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4749
f_charbig = '####updated per update statement itself####';
 
4750
        
 
4751
# check trigger-10 success:     1
 
4752
DROP TRIGGER trg_2;
 
4753
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4754
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4755
f_charbig = CONCAT('===',f_char1,'===');
 
4756
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4757
BEGIN
 
4758
SET new.f_int1 = @my_max1 + @counter,
 
4759
new.f_int2 = @my_min2 - @counter,
 
4760
new.f_charbig = '####updated per insert trigger####';
 
4761
SET @counter = @counter + 1;
 
4762
END|
 
4763
SET @counter = 1;
 
4764
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4765
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4766
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4767
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4769
ORDER BY f_int1;
 
4770
DROP TRIGGER trg_3;
 
4771
        
 
4772
# check trigger-11 success:     1
 
4773
DELETE FROM t1
 
4774
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4775
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4776
AND f_charbig = '####updated per insert trigger####';
 
4777
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4778
BEGIN
 
4779
SET new.f_int1 = @my_max1 + @counter,
 
4780
new.f_int2 = @my_min2 - @counter,
 
4781
new.f_charbig = '####updated per insert trigger####';
 
4782
SET @counter = @counter + 1;
 
4783
END|
 
4784
SET @counter = 1;
 
4785
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4786
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4787
SELECT CAST(f_int1 AS CHAR),
 
4788
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4789
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4790
ORDER BY f_int1;
 
4791
DROP TRIGGER trg_3;
 
4792
        
 
4793
# check trigger-12 success:     1
 
4794
DELETE FROM t1
 
4795
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4796
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4797
AND f_charbig = '####updated per insert trigger####';
 
4798
ANALYZE  TABLE t1;
 
4799
Table   Op      Msg_type        Msg_text
 
4800
test.t1 analyze status  OK
 
4801
CHECK    TABLE t1 EXTENDED;
 
4802
Table   Op      Msg_type        Msg_text
 
4803
test.t1 check   status  OK
 
4804
CHECKSUM TABLE t1 EXTENDED;
 
4805
Table   Checksum
 
4806
test.t1 <some_value>
 
4807
OPTIMIZE TABLE t1;
 
4808
Table   Op      Msg_type        Msg_text
 
4809
test.t1 optimize        status  OK
 
4810
# check layout success:    1
 
4811
REPAIR   TABLE t1 EXTENDED;
 
4812
Table   Op      Msg_type        Msg_text
 
4813
test.t1 repair  status  OK
 
4814
# check layout success:    1
 
4815
TRUNCATE t1;
 
4816
        
 
4817
# check TRUNCATE success:       1
 
4818
# check layout success:    1
 
4819
# End usability test (inc/partition_check.inc)
 
4820
DROP TABLE t1;
 
4821
CREATE TABLE t1 (
 
4822
f_int1 INTEGER,
 
4823
f_int2 INTEGER,
 
4824
f_char1 CHAR(20),
 
4825
f_char2 CHAR(20),
 
4826
f_charbig VARCHAR(1000)
 
4827
 
 
4828
)
 
4829
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
4830
(PARTITION part_3 VALUES IN (-3),
 
4831
PARTITION part_2 VALUES IN (-2),
 
4832
PARTITION part_1 VALUES IN (-1),
 
4833
PARTITION part_N VALUES IN (NULL),
 
4834
PARTITION part0 VALUES IN (0),
 
4835
PARTITION part1 VALUES IN (1),
 
4836
PARTITION part2 VALUES IN (2),
 
4837
PARTITION part3 VALUES IN (3));
 
4838
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4839
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
4840
# Start usability test (inc/partition_check.inc)
 
4841
create_command
 
4842
SHOW CREATE TABLE t1;
 
4843
Table   Create Table
 
4844
t1      CREATE TABLE `t1` (
 
4845
  `f_int1` int(11) DEFAULT NULL,
 
4846
  `f_int2` int(11) DEFAULT NULL,
 
4847
  `f_char1` char(20) DEFAULT NULL,
 
4848
  `f_char2` char(20) DEFAULT NULL,
 
4849
  `f_charbig` varchar(1000) DEFAULT NULL
 
4850
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
4851
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
4852
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
4853
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
4854
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
4855
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
4856
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
4857
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
4858
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
4859
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
4860
 
 
4861
unified filelist
 
4862
t1#P#part0.MYD
 
4863
t1#P#part0.MYI
 
4864
t1#P#part1.MYD
 
4865
t1#P#part1.MYI
 
4866
t1#P#part2.MYD
 
4867
t1#P#part2.MYI
 
4868
t1#P#part3.MYD
 
4869
t1#P#part3.MYI
 
4870
t1#P#part_1.MYD
 
4871
t1#P#part_1.MYI
 
4872
t1#P#part_2.MYD
 
4873
t1#P#part_2.MYI
 
4874
t1#P#part_3.MYD
 
4875
t1#P#part_3.MYI
 
4876
t1#P#part_N.MYD
 
4877
t1#P#part_N.MYI
 
4878
t1.frm
 
4879
t1.par
 
4880
 
 
4881
# check prerequisites-1 success:    1
 
4882
# check COUNT(*) success:    1
 
4883
# check MIN/MAX(f_int1) success:    1
 
4884
# check MIN/MAX(f_int2) success:    1
 
4885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4886
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4887
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4888
WHERE f_int1 IN (2,3);
 
4889
# check prerequisites-3 success:    1
 
4890
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4891
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4892
# check read via f_int1 success: 1
 
4893
# check read via f_int2 success: 1
 
4894
        
 
4895
# check multiple-1 success:     1
 
4896
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4897
        
 
4898
# check multiple-2 success:     1
 
4899
INSERT INTO t1 SELECT * FROM t0_template
 
4900
WHERE MOD(f_int1,3) = 0;
 
4901
        
 
4902
# check multiple-3 success:     1
 
4903
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4904
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4905
AND @max_row_div2 + @max_row_div4;
 
4906
        
 
4907
# check multiple-4 success:     1
 
4908
DELETE FROM t1
 
4909
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4910
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4911
        
 
4912
# check multiple-5 success:     1
 
4913
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4914
INSERT INTO t1
 
4915
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4916
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4917
f_charbig = '#SINGLE#';
 
4918
        
 
4919
# check single-1 success:       1
 
4920
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4921
INSERT INTO t1
 
4922
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4923
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4924
f_charbig = '#SINGLE#';
 
4925
        
 
4926
# check single-2 success:       1
 
4927
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4928
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4929
UPDATE t1 SET f_int1 = @cur_value2
 
4930
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4931
        
 
4932
# check single-3 success:       1
 
4933
SET @cur_value1= -1;
 
4934
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4935
UPDATE t1 SET f_int1 = @cur_value1
 
4936
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4937
        
 
4938
# check single-4 success:       1
 
4939
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4940
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4941
        
 
4942
# check single-5 success:       1
 
4943
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4944
        
 
4945
# check single-6 success:       1
 
4946
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4947
        
 
4948
# check single-7 success:       1
 
4949
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4950
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4951
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4952
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4953
f_charbig = '#NULL#';
 
4954
INSERT INTO t1
 
4955
SET f_int1 = NULL , f_int2 = -@max_row,
 
4956
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4957
f_charbig = '#NULL#';
 
4958
# check null success:    1
 
4959
        
 
4960
# check null-1 success:         1
 
4961
UPDATE t1 SET f_int1 = -@max_row
 
4962
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4963
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4964
        
 
4965
# check null-2 success:         1
 
4966
UPDATE t1 SET f_int1 = NULL
 
4967
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4968
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4969
        
 
4970
# check null-3 success:         1
 
4971
DELETE FROM t1
 
4972
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4973
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4974
        
 
4975
# check null-4 success:         1
 
4976
DELETE FROM t1
 
4977
WHERE f_int1 = 0 AND f_int2 = 0
 
4978
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4979
AND f_charbig = '#NULL#';
 
4980
SET AUTOCOMMIT= 0;
 
4981
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4982
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4983
FROM t0_template source_tab
 
4984
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4985
        
 
4986
# check transactions-1 success:         1
 
4987
COMMIT WORK;
 
4988
        
 
4989
# check transactions-2 success:         1
 
4990
ROLLBACK WORK;
 
4991
        
 
4992
# check transactions-3 success:         1
 
4993
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4994
COMMIT WORK;
 
4995
ROLLBACK WORK;
 
4996
        
 
4997
# check transactions-4 success:         1
 
4998
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4999
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5000
FROM t0_template source_tab
 
5001
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5002
        
 
5003
# check transactions-5 success:         1
 
5004
ROLLBACK WORK;
 
5005
Warnings:
 
5006
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5007
        
 
5008
# check transactions-6 success:         1
 
5009
# INFO: Storage engine used for t1 seems to be not transactional.
 
5010
COMMIT;
 
5011
        
 
5012
# check transactions-7 success:         1
 
5013
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5014
COMMIT WORK;
 
5015
SET @@session.sql_mode = 'traditional';
 
5016
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5017
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5018
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5019
'', '', 'was inserted' FROM t0_template
 
5020
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5021
ERROR 22012: Division by 0
 
5022
COMMIT;
 
5023
        
 
5024
# check transactions-8 success:         1
 
5025
# INFO: Storage engine used for t1 seems to be unable to revert
 
5026
#       changes made by the failing statement.
 
5027
SET @@session.sql_mode = '';
 
5028
SET AUTOCOMMIT= 1;
 
5029
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5030
COMMIT WORK;
 
5031
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5032
        
 
5033
# check special-1 success:      1
 
5034
UPDATE t1 SET f_charbig = '';
 
5035
        
 
5036
# check special-2 success:      1
 
5037
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5038
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5039
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5041
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5042
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5043
'just inserted' FROM t0_template
 
5044
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5045
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5046
BEGIN
 
5047
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5048
f_charbig = 'updated by trigger'
 
5049
      WHERE f_int1 = new.f_int1;
 
5050
END|
 
5051
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5052
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5054
        
 
5055
# check trigger-1 success:      1
 
5056
DROP TRIGGER trg_1;
 
5057
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5058
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5059
f_charbig = 'just inserted'
 
5060
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5061
DELETE FROM t0_aux
 
5062
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5063
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5064
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5065
'just inserted' FROM t0_template
 
5066
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5067
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5068
BEGIN
 
5069
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5070
f_charbig = 'updated by trigger'
 
5071
      WHERE f_int1 = new.f_int1;
 
5072
END|
 
5073
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5074
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5076
        
 
5077
# check trigger-2 success:      1
 
5078
DROP TRIGGER trg_1;
 
5079
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5080
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5081
f_charbig = 'just inserted'
 
5082
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5083
DELETE FROM t0_aux
 
5084
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5085
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5086
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5087
'just inserted' FROM t0_template
 
5088
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5089
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5090
BEGIN
 
5091
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5092
f_charbig = 'updated by trigger'
 
5093
      WHERE f_int1 = new.f_int1;
 
5094
END|
 
5095
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5096
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5097
        
 
5098
# check trigger-3 success:      1
 
5099
DROP TRIGGER trg_1;
 
5100
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5101
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5102
f_charbig = 'just inserted'
 
5103
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5104
DELETE FROM t0_aux
 
5105
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5106
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5107
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5108
'just inserted' FROM t0_template
 
5109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5110
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5111
BEGIN
 
5112
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5113
f_charbig = 'updated by trigger'
 
5114
      WHERE f_int1 = - old.f_int1;
 
5115
END|
 
5116
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5117
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5118
        
 
5119
# check trigger-4 success:      1
 
5120
DROP TRIGGER trg_1;
 
5121
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5122
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5123
f_charbig = 'just inserted'
 
5124
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5125
DELETE FROM t0_aux
 
5126
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5128
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5129
'just inserted' FROM t0_template
 
5130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5131
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5132
BEGIN
 
5133
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5134
f_charbig = 'updated by trigger'
 
5135
      WHERE f_int1 = new.f_int1;
 
5136
END|
 
5137
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5138
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5139
        
 
5140
# check trigger-5 success:      1
 
5141
DROP TRIGGER trg_1;
 
5142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5144
f_charbig = 'just inserted'
 
5145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5146
DELETE FROM t0_aux
 
5147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5149
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5150
'just inserted' FROM t0_template
 
5151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5152
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5153
BEGIN
 
5154
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5155
f_charbig = 'updated by trigger'
 
5156
      WHERE f_int1 = - old.f_int1;
 
5157
END|
 
5158
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5159
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5160
        
 
5161
# check trigger-6 success:      1
 
5162
DROP TRIGGER trg_1;
 
5163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5165
f_charbig = 'just inserted'
 
5166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5167
DELETE FROM t0_aux
 
5168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5171
'just inserted' FROM t0_template
 
5172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5173
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5174
BEGIN
 
5175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5176
f_charbig = 'updated by trigger'
 
5177
      WHERE f_int1 = - old.f_int1;
 
5178
END|
 
5179
DELETE FROM t0_aux
 
5180
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5181
        
 
5182
# check trigger-7 success:      1
 
5183
DROP TRIGGER trg_1;
 
5184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5186
f_charbig = 'just inserted'
 
5187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5188
DELETE FROM t0_aux
 
5189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5192
'just inserted' FROM t0_template
 
5193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5194
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5195
BEGIN
 
5196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5197
f_charbig = 'updated by trigger'
 
5198
      WHERE f_int1 = - old.f_int1;
 
5199
END|
 
5200
DELETE FROM t0_aux
 
5201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5202
        
 
5203
# check trigger-8 success:      1
 
5204
DROP TRIGGER trg_1;
 
5205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5207
f_charbig = 'just inserted'
 
5208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5209
DELETE FROM t0_aux
 
5210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5211
DELETE FROM t1
 
5212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5213
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5214
BEGIN
 
5215
SET new.f_int1 = old.f_int1 + @max_row,
 
5216
new.f_int2 = old.f_int2 - @max_row,
 
5217
new.f_charbig = '####updated per update trigger####';
 
5218
END|
 
5219
UPDATE t1
 
5220
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5221
f_charbig = '####updated per update statement itself####';
 
5222
        
 
5223
# check trigger-9 success:      1
 
5224
DROP TRIGGER trg_2;
 
5225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5227
f_charbig = CONCAT('===',f_char1,'===');
 
5228
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5229
BEGIN
 
5230
SET new.f_int1 = new.f_int1 + @max_row,
 
5231
new.f_int2 = new.f_int2 - @max_row,
 
5232
new.f_charbig = '####updated per update trigger####';
 
5233
END|
 
5234
UPDATE t1
 
5235
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5236
f_charbig = '####updated per update statement itself####';
 
5237
        
 
5238
# check trigger-10 success:     1
 
5239
DROP TRIGGER trg_2;
 
5240
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5241
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5242
f_charbig = CONCAT('===',f_char1,'===');
 
5243
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5244
BEGIN
 
5245
SET new.f_int1 = @my_max1 + @counter,
 
5246
new.f_int2 = @my_min2 - @counter,
 
5247
new.f_charbig = '####updated per insert trigger####';
 
5248
SET @counter = @counter + 1;
 
5249
END|
 
5250
SET @counter = 1;
 
5251
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5252
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5253
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5254
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5256
ORDER BY f_int1;
 
5257
DROP TRIGGER trg_3;
 
5258
        
 
5259
# check trigger-11 success:     1
 
5260
DELETE FROM t1
 
5261
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5262
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5263
AND f_charbig = '####updated per insert trigger####';
 
5264
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5265
BEGIN
 
5266
SET new.f_int1 = @my_max1 + @counter,
 
5267
new.f_int2 = @my_min2 - @counter,
 
5268
new.f_charbig = '####updated per insert trigger####';
 
5269
SET @counter = @counter + 1;
 
5270
END|
 
5271
SET @counter = 1;
 
5272
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5273
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5274
SELECT CAST(f_int1 AS CHAR),
 
5275
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5277
ORDER BY f_int1;
 
5278
DROP TRIGGER trg_3;
 
5279
        
 
5280
# check trigger-12 success:     1
 
5281
DELETE FROM t1
 
5282
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5283
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5284
AND f_charbig = '####updated per insert trigger####';
 
5285
ANALYZE  TABLE t1;
 
5286
Table   Op      Msg_type        Msg_text
 
5287
test.t1 analyze status  OK
 
5288
CHECK    TABLE t1 EXTENDED;
 
5289
Table   Op      Msg_type        Msg_text
 
5290
test.t1 check   status  OK
 
5291
CHECKSUM TABLE t1 EXTENDED;
 
5292
Table   Checksum
 
5293
test.t1 <some_value>
 
5294
OPTIMIZE TABLE t1;
 
5295
Table   Op      Msg_type        Msg_text
 
5296
test.t1 optimize        status  OK
 
5297
# check layout success:    1
 
5298
REPAIR   TABLE t1 EXTENDED;
 
5299
Table   Op      Msg_type        Msg_text
 
5300
test.t1 repair  status  OK
 
5301
# check layout success:    1
 
5302
TRUNCATE t1;
 
5303
        
 
5304
# check TRUNCATE success:       1
 
5305
# check layout success:    1
 
5306
# End usability test (inc/partition_check.inc)
 
5307
DROP TABLE t1;
 
5308
CREATE TABLE t1 (
 
5309
f_int1 INTEGER,
 
5310
f_int2 INTEGER,
 
5311
f_char1 CHAR(20),
 
5312
f_char2 CHAR(20),
 
5313
f_charbig VARCHAR(1000)
 
5314
 
 
5315
)
 
5316
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
5317
(PARTITION parta VALUES LESS THAN (0),
 
5318
PARTITION partb VALUES LESS THAN (5),
 
5319
PARTITION partc VALUES LESS THAN (10),
 
5320
PARTITION partd VALUES LESS THAN (10 + 5),
 
5321
PARTITION parte VALUES LESS THAN (20),
 
5322
PARTITION partf VALUES LESS THAN (2147483646));
 
5323
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5324
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
5325
# Start usability test (inc/partition_check.inc)
 
5326
create_command
 
5327
SHOW CREATE TABLE t1;
 
5328
Table   Create Table
 
5329
t1      CREATE TABLE `t1` (
 
5330
  `f_int1` int(11) DEFAULT NULL,
 
5331
  `f_int2` int(11) DEFAULT NULL,
 
5332
  `f_char1` char(20) DEFAULT NULL,
 
5333
  `f_char2` char(20) DEFAULT NULL,
 
5334
  `f_charbig` varchar(1000) DEFAULT NULL
 
5335
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
5336
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
5337
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
5338
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
5339
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
5340
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
5341
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
5342
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
5343
 
 
5344
unified filelist
 
5345
t1#P#parta.MYD
 
5346
t1#P#parta.MYI
 
5347
t1#P#partb.MYD
 
5348
t1#P#partb.MYI
 
5349
t1#P#partc.MYD
 
5350
t1#P#partc.MYI
 
5351
t1#P#partd.MYD
 
5352
t1#P#partd.MYI
 
5353
t1#P#parte.MYD
 
5354
t1#P#parte.MYI
 
5355
t1#P#partf.MYD
 
5356
t1#P#partf.MYI
 
5357
t1.frm
 
5358
t1.par
 
5359
 
 
5360
# check prerequisites-1 success:    1
 
5361
# check COUNT(*) success:    1
 
5362
# check MIN/MAX(f_int1) success:    1
 
5363
# check MIN/MAX(f_int2) success:    1
 
5364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5366
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5367
WHERE f_int1 IN (2,3);
 
5368
# check prerequisites-3 success:    1
 
5369
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5370
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5371
# check read via f_int1 success: 1
 
5372
# check read via f_int2 success: 1
 
5373
        
 
5374
# check multiple-1 success:     1
 
5375
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5376
        
 
5377
# check multiple-2 success:     1
 
5378
INSERT INTO t1 SELECT * FROM t0_template
 
5379
WHERE MOD(f_int1,3) = 0;
 
5380
        
 
5381
# check multiple-3 success:     1
 
5382
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5383
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5384
AND @max_row_div2 + @max_row_div4;
 
5385
        
 
5386
# check multiple-4 success:     1
 
5387
DELETE FROM t1
 
5388
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5389
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5390
        
 
5391
# check multiple-5 success:     1
 
5392
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5393
INSERT INTO t1
 
5394
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5395
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5396
f_charbig = '#SINGLE#';
 
5397
        
 
5398
# check single-1 success:       1
 
5399
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5400
INSERT INTO t1
 
5401
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5402
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5403
f_charbig = '#SINGLE#';
 
5404
        
 
5405
# check single-2 success:       1
 
5406
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5407
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5408
UPDATE t1 SET f_int1 = @cur_value2
 
5409
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5410
        
 
5411
# check single-3 success:       1
 
5412
SET @cur_value1= -1;
 
5413
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5414
UPDATE t1 SET f_int1 = @cur_value1
 
5415
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5416
        
 
5417
# check single-4 success:       1
 
5418
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5419
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5420
        
 
5421
# check single-5 success:       1
 
5422
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5423
        
 
5424
# check single-6 success:       1
 
5425
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5426
ERROR HY000: Table has no partition for value 2147483647
 
5427
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5428
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5429
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5430
f_charbig = '#NULL#';
 
5431
INSERT INTO t1
 
5432
SET f_int1 = NULL , f_int2 = -@max_row,
 
5433
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5434
f_charbig = '#NULL#';
 
5435
# check null success:    1
 
5436
        
 
5437
# check null-1 success:         1
 
5438
UPDATE t1 SET f_int1 = -@max_row
 
5439
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5440
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5441
        
 
5442
# check null-2 success:         1
 
5443
UPDATE t1 SET f_int1 = NULL
 
5444
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5445
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5446
        
 
5447
# check null-3 success:         1
 
5448
DELETE FROM t1
 
5449
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5450
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5451
        
 
5452
# check null-4 success:         1
 
5453
DELETE FROM t1
 
5454
WHERE f_int1 = 0 AND f_int2 = 0
 
5455
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5456
AND f_charbig = '#NULL#';
 
5457
SET AUTOCOMMIT= 0;
 
5458
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5459
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5460
FROM t0_template source_tab
 
5461
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5462
        
 
5463
# check transactions-1 success:         1
 
5464
COMMIT WORK;
 
5465
        
 
5466
# check transactions-2 success:         1
 
5467
ROLLBACK WORK;
 
5468
        
 
5469
# check transactions-3 success:         1
 
5470
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5471
COMMIT WORK;
 
5472
ROLLBACK WORK;
 
5473
        
 
5474
# check transactions-4 success:         1
 
5475
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5476
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5477
FROM t0_template source_tab
 
5478
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5479
        
 
5480
# check transactions-5 success:         1
 
5481
ROLLBACK WORK;
 
5482
Warnings:
 
5483
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5484
        
 
5485
# check transactions-6 success:         1
 
5486
# INFO: Storage engine used for t1 seems to be not transactional.
 
5487
COMMIT;
 
5488
        
 
5489
# check transactions-7 success:         1
 
5490
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5491
COMMIT WORK;
 
5492
SET @@session.sql_mode = 'traditional';
 
5493
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5494
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5495
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5496
'', '', 'was inserted' FROM t0_template
 
5497
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5498
ERROR 22012: Division by 0
 
5499
COMMIT;
 
5500
        
 
5501
# check transactions-8 success:         1
 
5502
# INFO: Storage engine used for t1 seems to be unable to revert
 
5503
#       changes made by the failing statement.
 
5504
SET @@session.sql_mode = '';
 
5505
SET AUTOCOMMIT= 1;
 
5506
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5507
COMMIT WORK;
 
5508
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5509
        
 
5510
# check special-1 success:      1
 
5511
UPDATE t1 SET f_charbig = '';
 
5512
        
 
5513
# check special-2 success:      1
 
5514
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5515
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5516
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5517
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5518
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5519
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5520
'just inserted' FROM t0_template
 
5521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5522
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5523
BEGIN
 
5524
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5525
f_charbig = 'updated by trigger'
 
5526
      WHERE f_int1 = new.f_int1;
 
5527
END|
 
5528
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5529
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5530
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5531
        
 
5532
# check trigger-1 success:      1
 
5533
DROP TRIGGER trg_1;
 
5534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5536
f_charbig = 'just inserted'
 
5537
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5538
DELETE FROM t0_aux
 
5539
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5540
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5541
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5542
'just inserted' FROM t0_template
 
5543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5544
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5545
BEGIN
 
5546
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5547
f_charbig = 'updated by trigger'
 
5548
      WHERE f_int1 = new.f_int1;
 
5549
END|
 
5550
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5551
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5552
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5553
        
 
5554
# check trigger-2 success:      1
 
5555
DROP TRIGGER trg_1;
 
5556
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5557
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5558
f_charbig = 'just inserted'
 
5559
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5560
DELETE FROM t0_aux
 
5561
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5562
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5563
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5564
'just inserted' FROM t0_template
 
5565
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5566
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5567
BEGIN
 
5568
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5569
f_charbig = 'updated by trigger'
 
5570
      WHERE f_int1 = new.f_int1;
 
5571
END|
 
5572
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5573
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5574
        
 
5575
# check trigger-3 success:      1
 
5576
DROP TRIGGER trg_1;
 
5577
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5578
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5579
f_charbig = 'just inserted'
 
5580
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5581
DELETE FROM t0_aux
 
5582
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5583
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5584
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5585
'just inserted' FROM t0_template
 
5586
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5587
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5588
BEGIN
 
5589
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5590
f_charbig = 'updated by trigger'
 
5591
      WHERE f_int1 = - old.f_int1;
 
5592
END|
 
5593
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5594
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5595
        
 
5596
# check trigger-4 success:      1
 
5597
DROP TRIGGER trg_1;
 
5598
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5599
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5600
f_charbig = 'just inserted'
 
5601
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5602
DELETE FROM t0_aux
 
5603
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5604
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5605
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5606
'just inserted' FROM t0_template
 
5607
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5608
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5609
BEGIN
 
5610
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5611
f_charbig = 'updated by trigger'
 
5612
      WHERE f_int1 = new.f_int1;
 
5613
END|
 
5614
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5615
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5616
        
 
5617
# check trigger-5 success:      1
 
5618
DROP TRIGGER trg_1;
 
5619
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5620
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5621
f_charbig = 'just inserted'
 
5622
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5623
DELETE FROM t0_aux
 
5624
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5625
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5626
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5627
'just inserted' FROM t0_template
 
5628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5629
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5630
BEGIN
 
5631
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5632
f_charbig = 'updated by trigger'
 
5633
      WHERE f_int1 = - old.f_int1;
 
5634
END|
 
5635
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5636
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5637
        
 
5638
# check trigger-6 success:      1
 
5639
DROP TRIGGER trg_1;
 
5640
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5641
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5642
f_charbig = 'just inserted'
 
5643
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5644
DELETE FROM t0_aux
 
5645
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5648
'just inserted' FROM t0_template
 
5649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5650
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5651
BEGIN
 
5652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5653
f_charbig = 'updated by trigger'
 
5654
      WHERE f_int1 = - old.f_int1;
 
5655
END|
 
5656
DELETE FROM t0_aux
 
5657
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5658
        
 
5659
# check trigger-7 success:      1
 
5660
DROP TRIGGER trg_1;
 
5661
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5662
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5663
f_charbig = 'just inserted'
 
5664
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5665
DELETE FROM t0_aux
 
5666
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5667
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5668
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5669
'just inserted' FROM t0_template
 
5670
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5671
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5672
BEGIN
 
5673
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5674
f_charbig = 'updated by trigger'
 
5675
      WHERE f_int1 = - old.f_int1;
 
5676
END|
 
5677
DELETE FROM t0_aux
 
5678
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5679
        
 
5680
# check trigger-8 success:      1
 
5681
DROP TRIGGER trg_1;
 
5682
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5683
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5684
f_charbig = 'just inserted'
 
5685
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5686
DELETE FROM t0_aux
 
5687
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5688
DELETE FROM t1
 
5689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5690
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5691
BEGIN
 
5692
SET new.f_int1 = old.f_int1 + @max_row,
 
5693
new.f_int2 = old.f_int2 - @max_row,
 
5694
new.f_charbig = '####updated per update trigger####';
 
5695
END|
 
5696
UPDATE t1
 
5697
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5698
f_charbig = '####updated per update statement itself####';
 
5699
        
 
5700
# check trigger-9 success:      1
 
5701
DROP TRIGGER trg_2;
 
5702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5704
f_charbig = CONCAT('===',f_char1,'===');
 
5705
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5706
BEGIN
 
5707
SET new.f_int1 = new.f_int1 + @max_row,
 
5708
new.f_int2 = new.f_int2 - @max_row,
 
5709
new.f_charbig = '####updated per update trigger####';
 
5710
END|
 
5711
UPDATE t1
 
5712
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5713
f_charbig = '####updated per update statement itself####';
 
5714
        
 
5715
# check trigger-10 success:     1
 
5716
DROP TRIGGER trg_2;
 
5717
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5718
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5719
f_charbig = CONCAT('===',f_char1,'===');
 
5720
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5721
BEGIN
 
5722
SET new.f_int1 = @my_max1 + @counter,
 
5723
new.f_int2 = @my_min2 - @counter,
 
5724
new.f_charbig = '####updated per insert trigger####';
 
5725
SET @counter = @counter + 1;
 
5726
END|
 
5727
SET @counter = 1;
 
5728
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5729
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5730
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5731
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5733
ORDER BY f_int1;
 
5734
DROP TRIGGER trg_3;
 
5735
        
 
5736
# check trigger-11 success:     1
 
5737
DELETE FROM t1
 
5738
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5739
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5740
AND f_charbig = '####updated per insert trigger####';
 
5741
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5742
BEGIN
 
5743
SET new.f_int1 = @my_max1 + @counter,
 
5744
new.f_int2 = @my_min2 - @counter,
 
5745
new.f_charbig = '####updated per insert trigger####';
 
5746
SET @counter = @counter + 1;
 
5747
END|
 
5748
SET @counter = 1;
 
5749
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5750
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5751
SELECT CAST(f_int1 AS CHAR),
 
5752
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5753
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5754
ORDER BY f_int1;
 
5755
DROP TRIGGER trg_3;
 
5756
        
 
5757
# check trigger-12 success:     1
 
5758
DELETE FROM t1
 
5759
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5760
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5761
AND f_charbig = '####updated per insert trigger####';
 
5762
ANALYZE  TABLE t1;
 
5763
Table   Op      Msg_type        Msg_text
 
5764
test.t1 analyze status  OK
 
5765
CHECK    TABLE t1 EXTENDED;
 
5766
Table   Op      Msg_type        Msg_text
 
5767
test.t1 check   status  OK
 
5768
CHECKSUM TABLE t1 EXTENDED;
 
5769
Table   Checksum
 
5770
test.t1 <some_value>
 
5771
OPTIMIZE TABLE t1;
 
5772
Table   Op      Msg_type        Msg_text
 
5773
test.t1 optimize        status  OK
 
5774
# check layout success:    1
 
5775
REPAIR   TABLE t1 EXTENDED;
 
5776
Table   Op      Msg_type        Msg_text
 
5777
test.t1 repair  status  OK
 
5778
# check layout success:    1
 
5779
TRUNCATE t1;
 
5780
        
 
5781
# check TRUNCATE success:       1
 
5782
# check layout success:    1
 
5783
# End usability test (inc/partition_check.inc)
 
5784
DROP TABLE t1;
 
5785
CREATE TABLE t1 (
 
5786
f_int1 INTEGER,
 
5787
f_int2 INTEGER,
 
5788
f_char1 CHAR(20),
 
5789
f_char2 CHAR(20),
 
5790
f_charbig VARCHAR(1000)
 
5791
 
 
5792
)
 
5793
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
5794
(PARTITION parta VALUES LESS THAN (0),
 
5795
PARTITION partb VALUES LESS THAN (5),
 
5796
PARTITION partc VALUES LESS THAN (10),
 
5797
PARTITION partd VALUES LESS THAN (2147483646));
 
5798
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5799
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
5800
# Start usability test (inc/partition_check.inc)
 
5801
create_command
 
5802
SHOW CREATE TABLE t1;
 
5803
Table   Create Table
 
5804
t1      CREATE TABLE `t1` (
 
5805
  `f_int1` int(11) DEFAULT NULL,
 
5806
  `f_int2` int(11) DEFAULT NULL,
 
5807
  `f_char1` char(20) DEFAULT NULL,
 
5808
  `f_char2` char(20) DEFAULT NULL,
 
5809
  `f_charbig` varchar(1000) DEFAULT NULL
 
5810
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
5811
/*!50100 PARTITION BY RANGE (f_int1)
 
5812
SUBPARTITION BY HASH (f_int2)
 
5813
SUBPARTITIONS 2
 
5814
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
5815
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
5816
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
5817
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
5818
 
 
5819
unified filelist
 
5820
t1#P#parta#SP#partasp0.MYD
 
5821
t1#P#parta#SP#partasp0.MYI
 
5822
t1#P#parta#SP#partasp1.MYD
 
5823
t1#P#parta#SP#partasp1.MYI
 
5824
t1#P#partb#SP#partbsp0.MYD
 
5825
t1#P#partb#SP#partbsp0.MYI
 
5826
t1#P#partb#SP#partbsp1.MYD
 
5827
t1#P#partb#SP#partbsp1.MYI
 
5828
t1#P#partc#SP#partcsp0.MYD
 
5829
t1#P#partc#SP#partcsp0.MYI
 
5830
t1#P#partc#SP#partcsp1.MYD
 
5831
t1#P#partc#SP#partcsp1.MYI
 
5832
t1#P#partd#SP#partdsp0.MYD
 
5833
t1#P#partd#SP#partdsp0.MYI
 
5834
t1#P#partd#SP#partdsp1.MYD
 
5835
t1#P#partd#SP#partdsp1.MYI
 
5836
t1.frm
 
5837
t1.par
 
5838
 
 
5839
# check prerequisites-1 success:    1
 
5840
# check COUNT(*) success:    1
 
5841
# check MIN/MAX(f_int1) success:    1
 
5842
# check MIN/MAX(f_int2) success:    1
 
5843
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5844
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5845
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5846
WHERE f_int1 IN (2,3);
 
5847
# check prerequisites-3 success:    1
 
5848
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5849
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5850
# check read via f_int1 success: 1
 
5851
# check read via f_int2 success: 1
 
5852
        
 
5853
# check multiple-1 success:     1
 
5854
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5855
        
 
5856
# check multiple-2 success:     1
 
5857
INSERT INTO t1 SELECT * FROM t0_template
 
5858
WHERE MOD(f_int1,3) = 0;
 
5859
        
 
5860
# check multiple-3 success:     1
 
5861
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5862
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5863
AND @max_row_div2 + @max_row_div4;
 
5864
        
 
5865
# check multiple-4 success:     1
 
5866
DELETE FROM t1
 
5867
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5868
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5869
        
 
5870
# check multiple-5 success:     1
 
5871
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5872
INSERT INTO t1
 
5873
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5874
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5875
f_charbig = '#SINGLE#';
 
5876
        
 
5877
# check single-1 success:       1
 
5878
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5879
INSERT INTO t1
 
5880
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5881
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5882
f_charbig = '#SINGLE#';
 
5883
        
 
5884
# check single-2 success:       1
 
5885
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5886
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5887
UPDATE t1 SET f_int1 = @cur_value2
 
5888
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5889
        
 
5890
# check single-3 success:       1
 
5891
SET @cur_value1= -1;
 
5892
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5893
UPDATE t1 SET f_int1 = @cur_value1
 
5894
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5895
        
 
5896
# check single-4 success:       1
 
5897
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5898
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5899
        
 
5900
# check single-5 success:       1
 
5901
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5902
        
 
5903
# check single-6 success:       1
 
5904
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5905
ERROR HY000: Table has no partition for value 2147483647
 
5906
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5907
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5908
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5909
f_charbig = '#NULL#';
 
5910
INSERT INTO t1
 
5911
SET f_int1 = NULL , f_int2 = -@max_row,
 
5912
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5913
f_charbig = '#NULL#';
 
5914
# check null success:    1
 
5915
        
 
5916
# check null-1 success:         1
 
5917
UPDATE t1 SET f_int1 = -@max_row
 
5918
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5919
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5920
        
 
5921
# check null-2 success:         1
 
5922
UPDATE t1 SET f_int1 = NULL
 
5923
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5924
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5925
        
 
5926
# check null-3 success:         1
 
5927
DELETE FROM t1
 
5928
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5929
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5930
        
 
5931
# check null-4 success:         1
 
5932
DELETE FROM t1
 
5933
WHERE f_int1 = 0 AND f_int2 = 0
 
5934
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5935
AND f_charbig = '#NULL#';
 
5936
SET AUTOCOMMIT= 0;
 
5937
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5938
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5939
FROM t0_template source_tab
 
5940
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5941
        
 
5942
# check transactions-1 success:         1
 
5943
COMMIT WORK;
 
5944
        
 
5945
# check transactions-2 success:         1
 
5946
ROLLBACK WORK;
 
5947
        
 
5948
# check transactions-3 success:         1
 
5949
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5950
COMMIT WORK;
 
5951
ROLLBACK WORK;
 
5952
        
 
5953
# check transactions-4 success:         1
 
5954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5955
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5956
FROM t0_template source_tab
 
5957
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5958
        
 
5959
# check transactions-5 success:         1
 
5960
ROLLBACK WORK;
 
5961
Warnings:
 
5962
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5963
        
 
5964
# check transactions-6 success:         1
 
5965
# INFO: Storage engine used for t1 seems to be not transactional.
 
5966
COMMIT;
 
5967
        
 
5968
# check transactions-7 success:         1
 
5969
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5970
COMMIT WORK;
 
5971
SET @@session.sql_mode = 'traditional';
 
5972
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5973
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5974
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5975
'', '', 'was inserted' FROM t0_template
 
5976
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5977
ERROR 22012: Division by 0
 
5978
COMMIT;
 
5979
        
 
5980
# check transactions-8 success:         1
 
5981
# INFO: Storage engine used for t1 seems to be unable to revert
 
5982
#       changes made by the failing statement.
 
5983
SET @@session.sql_mode = '';
 
5984
SET AUTOCOMMIT= 1;
 
5985
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5986
COMMIT WORK;
 
5987
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5988
        
 
5989
# check special-1 success:      1
 
5990
UPDATE t1 SET f_charbig = '';
 
5991
        
 
5992
# check special-2 success:      1
 
5993
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5994
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5995
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5997
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5998
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5999
'just inserted' FROM t0_template
 
6000
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6001
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6002
BEGIN
 
6003
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6004
f_charbig = 'updated by trigger'
 
6005
      WHERE f_int1 = new.f_int1;
 
6006
END|
 
6007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6008
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6010
        
 
6011
# check trigger-1 success:      1
 
6012
DROP TRIGGER trg_1;
 
6013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6015
f_charbig = 'just inserted'
 
6016
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6017
DELETE FROM t0_aux
 
6018
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6021
'just inserted' FROM t0_template
 
6022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6023
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6024
BEGIN
 
6025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6026
f_charbig = 'updated by trigger'
 
6027
      WHERE f_int1 = new.f_int1;
 
6028
END|
 
6029
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6030
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6032
        
 
6033
# check trigger-2 success:      1
 
6034
DROP TRIGGER trg_1;
 
6035
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6036
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6037
f_charbig = 'just inserted'
 
6038
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6039
DELETE FROM t0_aux
 
6040
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6041
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6042
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6043
'just inserted' FROM t0_template
 
6044
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6045
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6046
BEGIN
 
6047
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6048
f_charbig = 'updated by trigger'
 
6049
      WHERE f_int1 = new.f_int1;
 
6050
END|
 
6051
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6052
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6053
        
 
6054
# check trigger-3 success:      1
 
6055
DROP TRIGGER trg_1;
 
6056
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6057
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6058
f_charbig = 'just inserted'
 
6059
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6060
DELETE FROM t0_aux
 
6061
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6063
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6064
'just inserted' FROM t0_template
 
6065
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6066
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6067
BEGIN
 
6068
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6069
f_charbig = 'updated by trigger'
 
6070
      WHERE f_int1 = - old.f_int1;
 
6071
END|
 
6072
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6073
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6074
        
 
6075
# check trigger-4 success:      1
 
6076
DROP TRIGGER trg_1;
 
6077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6079
f_charbig = 'just inserted'
 
6080
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6081
DELETE FROM t0_aux
 
6082
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6083
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6084
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6085
'just inserted' FROM t0_template
 
6086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6087
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6088
BEGIN
 
6089
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6090
f_charbig = 'updated by trigger'
 
6091
      WHERE f_int1 = new.f_int1;
 
6092
END|
 
6093
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6094
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6095
        
 
6096
# check trigger-5 success:      1
 
6097
DROP TRIGGER trg_1;
 
6098
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6099
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6100
f_charbig = 'just inserted'
 
6101
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6102
DELETE FROM t0_aux
 
6103
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6105
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6106
'just inserted' FROM t0_template
 
6107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6108
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6109
BEGIN
 
6110
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6111
f_charbig = 'updated by trigger'
 
6112
      WHERE f_int1 = - old.f_int1;
 
6113
END|
 
6114
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6115
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6116
        
 
6117
# check trigger-6 success:      1
 
6118
DROP TRIGGER trg_1;
 
6119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6121
f_charbig = 'just inserted'
 
6122
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6123
DELETE FROM t0_aux
 
6124
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6127
'just inserted' FROM t0_template
 
6128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6129
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6130
BEGIN
 
6131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6132
f_charbig = 'updated by trigger'
 
6133
      WHERE f_int1 = - old.f_int1;
 
6134
END|
 
6135
DELETE FROM t0_aux
 
6136
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6137
        
 
6138
# check trigger-7 success:      1
 
6139
DROP TRIGGER trg_1;
 
6140
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6141
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6142
f_charbig = 'just inserted'
 
6143
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6144
DELETE FROM t0_aux
 
6145
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6147
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6148
'just inserted' FROM t0_template
 
6149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6150
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6151
BEGIN
 
6152
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6153
f_charbig = 'updated by trigger'
 
6154
      WHERE f_int1 = - old.f_int1;
 
6155
END|
 
6156
DELETE FROM t0_aux
 
6157
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6158
        
 
6159
# check trigger-8 success:      1
 
6160
DROP TRIGGER trg_1;
 
6161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6163
f_charbig = 'just inserted'
 
6164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6165
DELETE FROM t0_aux
 
6166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6167
DELETE FROM t1
 
6168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6169
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6170
BEGIN
 
6171
SET new.f_int1 = old.f_int1 + @max_row,
 
6172
new.f_int2 = old.f_int2 - @max_row,
 
6173
new.f_charbig = '####updated per update trigger####';
 
6174
END|
 
6175
UPDATE t1
 
6176
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6177
f_charbig = '####updated per update statement itself####';
 
6178
        
 
6179
# check trigger-9 success:      1
 
6180
DROP TRIGGER trg_2;
 
6181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6183
f_charbig = CONCAT('===',f_char1,'===');
 
6184
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6185
BEGIN
 
6186
SET new.f_int1 = new.f_int1 + @max_row,
 
6187
new.f_int2 = new.f_int2 - @max_row,
 
6188
new.f_charbig = '####updated per update trigger####';
 
6189
END|
 
6190
UPDATE t1
 
6191
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6192
f_charbig = '####updated per update statement itself####';
 
6193
        
 
6194
# check trigger-10 success:     1
 
6195
DROP TRIGGER trg_2;
 
6196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6198
f_charbig = CONCAT('===',f_char1,'===');
 
6199
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6200
BEGIN
 
6201
SET new.f_int1 = @my_max1 + @counter,
 
6202
new.f_int2 = @my_min2 - @counter,
 
6203
new.f_charbig = '####updated per insert trigger####';
 
6204
SET @counter = @counter + 1;
 
6205
END|
 
6206
SET @counter = 1;
 
6207
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6209
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6210
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6212
ORDER BY f_int1;
 
6213
DROP TRIGGER trg_3;
 
6214
        
 
6215
# check trigger-11 success:     1
 
6216
DELETE FROM t1
 
6217
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6218
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6219
AND f_charbig = '####updated per insert trigger####';
 
6220
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6221
BEGIN
 
6222
SET new.f_int1 = @my_max1 + @counter,
 
6223
new.f_int2 = @my_min2 - @counter,
 
6224
new.f_charbig = '####updated per insert trigger####';
 
6225
SET @counter = @counter + 1;
 
6226
END|
 
6227
SET @counter = 1;
 
6228
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6229
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6230
SELECT CAST(f_int1 AS CHAR),
 
6231
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6233
ORDER BY f_int1;
 
6234
DROP TRIGGER trg_3;
 
6235
        
 
6236
# check trigger-12 success:     1
 
6237
DELETE FROM t1
 
6238
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6239
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6240
AND f_charbig = '####updated per insert trigger####';
 
6241
ANALYZE  TABLE t1;
 
6242
Table   Op      Msg_type        Msg_text
 
6243
test.t1 analyze status  OK
 
6244
CHECK    TABLE t1 EXTENDED;
 
6245
Table   Op      Msg_type        Msg_text
 
6246
test.t1 check   status  OK
 
6247
CHECKSUM TABLE t1 EXTENDED;
 
6248
Table   Checksum
 
6249
test.t1 <some_value>
 
6250
OPTIMIZE TABLE t1;
 
6251
Table   Op      Msg_type        Msg_text
 
6252
test.t1 optimize        status  OK
 
6253
# check layout success:    1
 
6254
REPAIR   TABLE t1 EXTENDED;
 
6255
Table   Op      Msg_type        Msg_text
 
6256
test.t1 repair  status  OK
 
6257
# check layout success:    1
 
6258
TRUNCATE t1;
 
6259
        
 
6260
# check TRUNCATE success:       1
 
6261
# check layout success:    1
 
6262
# End usability test (inc/partition_check.inc)
 
6263
DROP TABLE t1;
 
6264
CREATE TABLE t1 (
 
6265
f_int1 INTEGER,
 
6266
f_int2 INTEGER,
 
6267
f_char1 CHAR(20),
 
6268
f_char2 CHAR(20),
 
6269
f_charbig VARCHAR(1000)
 
6270
 
 
6271
)
 
6272
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
6273
(PARTITION part1 VALUES LESS THAN (0)
 
6274
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
6275
PARTITION part2 VALUES LESS THAN (5)
 
6276
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
6277
PARTITION part3 VALUES LESS THAN (10)
 
6278
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
6279
PARTITION part4 VALUES LESS THAN (2147483646)
 
6280
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
6281
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6282
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
6283
# Start usability test (inc/partition_check.inc)
 
6284
create_command
 
6285
SHOW CREATE TABLE t1;
 
6286
Table   Create Table
 
6287
t1      CREATE TABLE `t1` (
 
6288
  `f_int1` int(11) DEFAULT NULL,
 
6289
  `f_int2` int(11) DEFAULT NULL,
 
6290
  `f_char1` char(20) DEFAULT NULL,
 
6291
  `f_char2` char(20) DEFAULT NULL,
 
6292
  `f_charbig` varchar(1000) DEFAULT NULL
 
6293
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
6294
/*!50100 PARTITION BY RANGE (f_int1)
 
6295
SUBPARTITION BY KEY (f_int2)
 
6296
(PARTITION part1 VALUES LESS THAN (0)
 
6297
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
6298
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
6299
 PARTITION part2 VALUES LESS THAN (5)
 
6300
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
6301
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
6302
 PARTITION part3 VALUES LESS THAN (10)
 
6303
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
6304
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
6305
 PARTITION part4 VALUES LESS THAN (2147483646)
 
6306
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
6307
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
6308
 
 
6309
unified filelist
 
6310
t1#P#part1#SP#subpart11.MYD
 
6311
t1#P#part1#SP#subpart11.MYI
 
6312
t1#P#part1#SP#subpart12.MYD
 
6313
t1#P#part1#SP#subpart12.MYI
 
6314
t1#P#part2#SP#subpart21.MYD
 
6315
t1#P#part2#SP#subpart21.MYI
 
6316
t1#P#part2#SP#subpart22.MYD
 
6317
t1#P#part2#SP#subpart22.MYI
 
6318
t1#P#part3#SP#subpart31.MYD
 
6319
t1#P#part3#SP#subpart31.MYI
 
6320
t1#P#part3#SP#subpart32.MYD
 
6321
t1#P#part3#SP#subpart32.MYI
 
6322
t1#P#part4#SP#subpart41.MYD
 
6323
t1#P#part4#SP#subpart41.MYI
 
6324
t1#P#part4#SP#subpart42.MYD
 
6325
t1#P#part4#SP#subpart42.MYI
 
6326
t1.frm
 
6327
t1.par
 
6328
 
 
6329
# check prerequisites-1 success:    1
 
6330
# check COUNT(*) success:    1
 
6331
# check MIN/MAX(f_int1) success:    1
 
6332
# check MIN/MAX(f_int2) success:    1
 
6333
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6334
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6335
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6336
WHERE f_int1 IN (2,3);
 
6337
# check prerequisites-3 success:    1
 
6338
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6339
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6340
# check read via f_int1 success: 1
 
6341
# check read via f_int2 success: 1
 
6342
        
 
6343
# check multiple-1 success:     1
 
6344
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6345
        
 
6346
# check multiple-2 success:     1
 
6347
INSERT INTO t1 SELECT * FROM t0_template
 
6348
WHERE MOD(f_int1,3) = 0;
 
6349
        
 
6350
# check multiple-3 success:     1
 
6351
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6352
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6353
AND @max_row_div2 + @max_row_div4;
 
6354
        
 
6355
# check multiple-4 success:     1
 
6356
DELETE FROM t1
 
6357
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6358
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6359
        
 
6360
# check multiple-5 success:     1
 
6361
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6362
INSERT INTO t1
 
6363
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6364
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6365
f_charbig = '#SINGLE#';
 
6366
        
 
6367
# check single-1 success:       1
 
6368
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6369
INSERT INTO t1
 
6370
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6371
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6372
f_charbig = '#SINGLE#';
 
6373
        
 
6374
# check single-2 success:       1
 
6375
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6376
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6377
UPDATE t1 SET f_int1 = @cur_value2
 
6378
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6379
        
 
6380
# check single-3 success:       1
 
6381
SET @cur_value1= -1;
 
6382
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6383
UPDATE t1 SET f_int1 = @cur_value1
 
6384
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6385
        
 
6386
# check single-4 success:       1
 
6387
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6388
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6389
        
 
6390
# check single-5 success:       1
 
6391
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6392
        
 
6393
# check single-6 success:       1
 
6394
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6395
ERROR HY000: Table has no partition for value 2147483647
 
6396
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6397
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6398
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6399
f_charbig = '#NULL#';
 
6400
INSERT INTO t1
 
6401
SET f_int1 = NULL , f_int2 = -@max_row,
 
6402
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6403
f_charbig = '#NULL#';
 
6404
# check null success:    1
 
6405
        
 
6406
# check null-1 success:         1
 
6407
UPDATE t1 SET f_int1 = -@max_row
 
6408
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6409
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6410
        
 
6411
# check null-2 success:         1
 
6412
UPDATE t1 SET f_int1 = NULL
 
6413
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6414
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6415
        
 
6416
# check null-3 success:         1
 
6417
DELETE FROM t1
 
6418
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6419
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6420
        
 
6421
# check null-4 success:         1
 
6422
DELETE FROM t1
 
6423
WHERE f_int1 = 0 AND f_int2 = 0
 
6424
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6425
AND f_charbig = '#NULL#';
 
6426
SET AUTOCOMMIT= 0;
 
6427
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6428
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6429
FROM t0_template source_tab
 
6430
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6431
        
 
6432
# check transactions-1 success:         1
 
6433
COMMIT WORK;
 
6434
        
 
6435
# check transactions-2 success:         1
 
6436
ROLLBACK WORK;
 
6437
        
 
6438
# check transactions-3 success:         1
 
6439
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6440
COMMIT WORK;
 
6441
ROLLBACK WORK;
 
6442
        
 
6443
# check transactions-4 success:         1
 
6444
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6445
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6446
FROM t0_template source_tab
 
6447
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6448
        
 
6449
# check transactions-5 success:         1
 
6450
ROLLBACK WORK;
 
6451
Warnings:
 
6452
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6453
        
 
6454
# check transactions-6 success:         1
 
6455
# INFO: Storage engine used for t1 seems to be not transactional.
 
6456
COMMIT;
 
6457
        
 
6458
# check transactions-7 success:         1
 
6459
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6460
COMMIT WORK;
 
6461
SET @@session.sql_mode = 'traditional';
 
6462
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6463
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6464
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6465
'', '', 'was inserted' FROM t0_template
 
6466
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6467
ERROR 22012: Division by 0
 
6468
COMMIT;
 
6469
        
 
6470
# check transactions-8 success:         1
 
6471
# INFO: Storage engine used for t1 seems to be unable to revert
 
6472
#       changes made by the failing statement.
 
6473
SET @@session.sql_mode = '';
 
6474
SET AUTOCOMMIT= 1;
 
6475
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6476
COMMIT WORK;
 
6477
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6478
        
 
6479
# check special-1 success:      1
 
6480
UPDATE t1 SET f_charbig = '';
 
6481
        
 
6482
# check special-2 success:      1
 
6483
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6484
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6485
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6487
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6488
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6489
'just inserted' FROM t0_template
 
6490
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6491
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6492
BEGIN
 
6493
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6494
f_charbig = 'updated by trigger'
 
6495
      WHERE f_int1 = new.f_int1;
 
6496
END|
 
6497
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6498
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6499
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6500
        
 
6501
# check trigger-1 success:      1
 
6502
DROP TRIGGER trg_1;
 
6503
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6504
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6505
f_charbig = 'just inserted'
 
6506
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6507
DELETE FROM t0_aux
 
6508
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6510
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6511
'just inserted' FROM t0_template
 
6512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6513
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6514
BEGIN
 
6515
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6516
f_charbig = 'updated by trigger'
 
6517
      WHERE f_int1 = new.f_int1;
 
6518
END|
 
6519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6520
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6522
        
 
6523
# check trigger-2 success:      1
 
6524
DROP TRIGGER trg_1;
 
6525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6527
f_charbig = 'just inserted'
 
6528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6529
DELETE FROM t0_aux
 
6530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6533
'just inserted' FROM t0_template
 
6534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6535
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6536
BEGIN
 
6537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6538
f_charbig = 'updated by trigger'
 
6539
      WHERE f_int1 = new.f_int1;
 
6540
END|
 
6541
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6542
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6543
        
 
6544
# check trigger-3 success:      1
 
6545
DROP TRIGGER trg_1;
 
6546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6548
f_charbig = 'just inserted'
 
6549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6550
DELETE FROM t0_aux
 
6551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6554
'just inserted' FROM t0_template
 
6555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6556
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6557
BEGIN
 
6558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6559
f_charbig = 'updated by trigger'
 
6560
      WHERE f_int1 = - old.f_int1;
 
6561
END|
 
6562
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6563
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6564
        
 
6565
# check trigger-4 success:      1
 
6566
DROP TRIGGER trg_1;
 
6567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6569
f_charbig = 'just inserted'
 
6570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6571
DELETE FROM t0_aux
 
6572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6573
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6574
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6575
'just inserted' FROM t0_template
 
6576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6577
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6578
BEGIN
 
6579
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6580
f_charbig = 'updated by trigger'
 
6581
      WHERE f_int1 = new.f_int1;
 
6582
END|
 
6583
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6584
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6585
        
 
6586
# check trigger-5 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 AFTER 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 = - old.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-6 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 DELETE 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
DELETE FROM t0_aux
 
6626
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6627
        
 
6628
# check trigger-7 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 DELETE 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 = - old.f_int1;
 
6645
END|
 
6646
DELETE FROM t0_aux
 
6647
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6648
        
 
6649
# check trigger-8 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
DELETE FROM t1
 
6658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6659
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6660
BEGIN
 
6661
SET new.f_int1 = old.f_int1 + @max_row,
 
6662
new.f_int2 = old.f_int2 - @max_row,
 
6663
new.f_charbig = '####updated per update trigger####';
 
6664
END|
 
6665
UPDATE t1
 
6666
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6667
f_charbig = '####updated per update statement itself####';
 
6668
        
 
6669
# check trigger-9 success:      1
 
6670
DROP TRIGGER trg_2;
 
6671
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6672
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6673
f_charbig = CONCAT('===',f_char1,'===');
 
6674
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6675
BEGIN
 
6676
SET new.f_int1 = new.f_int1 + @max_row,
 
6677
new.f_int2 = new.f_int2 - @max_row,
 
6678
new.f_charbig = '####updated per update trigger####';
 
6679
END|
 
6680
UPDATE t1
 
6681
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6682
f_charbig = '####updated per update statement itself####';
 
6683
        
 
6684
# check trigger-10 success:     1
 
6685
DROP TRIGGER trg_2;
 
6686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6688
f_charbig = CONCAT('===',f_char1,'===');
 
6689
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6690
BEGIN
 
6691
SET new.f_int1 = @my_max1 + @counter,
 
6692
new.f_int2 = @my_min2 - @counter,
 
6693
new.f_charbig = '####updated per insert trigger####';
 
6694
SET @counter = @counter + 1;
 
6695
END|
 
6696
SET @counter = 1;
 
6697
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6698
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6699
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6700
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6701
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6702
ORDER BY f_int1;
 
6703
DROP TRIGGER trg_3;
 
6704
        
 
6705
# check trigger-11 success:     1
 
6706
DELETE FROM t1
 
6707
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6708
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6709
AND f_charbig = '####updated per insert trigger####';
 
6710
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6711
BEGIN
 
6712
SET new.f_int1 = @my_max1 + @counter,
 
6713
new.f_int2 = @my_min2 - @counter,
 
6714
new.f_charbig = '####updated per insert trigger####';
 
6715
SET @counter = @counter + 1;
 
6716
END|
 
6717
SET @counter = 1;
 
6718
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6719
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6720
SELECT CAST(f_int1 AS CHAR),
 
6721
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6723
ORDER BY f_int1;
 
6724
DROP TRIGGER trg_3;
 
6725
        
 
6726
# check trigger-12 success:     1
 
6727
DELETE FROM t1
 
6728
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6729
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6730
AND f_charbig = '####updated per insert trigger####';
 
6731
ANALYZE  TABLE t1;
 
6732
Table   Op      Msg_type        Msg_text
 
6733
test.t1 analyze status  OK
 
6734
CHECK    TABLE t1 EXTENDED;
 
6735
Table   Op      Msg_type        Msg_text
 
6736
test.t1 check   status  OK
 
6737
CHECKSUM TABLE t1 EXTENDED;
 
6738
Table   Checksum
 
6739
test.t1 <some_value>
 
6740
OPTIMIZE TABLE t1;
 
6741
Table   Op      Msg_type        Msg_text
 
6742
test.t1 optimize        status  OK
 
6743
# check layout success:    1
 
6744
REPAIR   TABLE t1 EXTENDED;
 
6745
Table   Op      Msg_type        Msg_text
 
6746
test.t1 repair  status  OK
 
6747
# check layout success:    1
 
6748
TRUNCATE t1;
 
6749
        
 
6750
# check TRUNCATE success:       1
 
6751
# check layout success:    1
 
6752
# End usability test (inc/partition_check.inc)
 
6753
DROP TABLE t1;
 
6754
CREATE TABLE t1 (
 
6755
f_int1 INTEGER,
 
6756
f_int2 INTEGER,
 
6757
f_char1 CHAR(20),
 
6758
f_char2 CHAR(20),
 
6759
f_charbig VARCHAR(1000)
 
6760
 
 
6761
)
 
6762
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
6763
(PARTITION part1 VALUES IN (0)
 
6764
(SUBPARTITION sp11, SUBPARTITION sp12),
 
6765
PARTITION part2 VALUES IN (1)
 
6766
(SUBPARTITION sp21, SUBPARTITION sp22),
 
6767
PARTITION part3 VALUES IN (2)
 
6768
(SUBPARTITION sp31, SUBPARTITION sp32),
 
6769
PARTITION part4 VALUES IN (NULL)
 
6770
(SUBPARTITION sp41, SUBPARTITION sp42));
 
6771
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6772
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
6773
# Start usability test (inc/partition_check.inc)
 
6774
create_command
 
6775
SHOW CREATE TABLE t1;
 
6776
Table   Create Table
 
6777
t1      CREATE TABLE `t1` (
 
6778
  `f_int1` int(11) DEFAULT NULL,
 
6779
  `f_int2` int(11) DEFAULT NULL,
 
6780
  `f_char1` char(20) DEFAULT NULL,
 
6781
  `f_char2` char(20) DEFAULT NULL,
 
6782
  `f_charbig` varchar(1000) DEFAULT NULL
 
6783
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
6784
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
6785
SUBPARTITION BY HASH (f_int2 + 1)
 
6786
(PARTITION part1 VALUES IN (0)
 
6787
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
6788
  SUBPARTITION sp12 ENGINE = MyISAM),
 
6789
 PARTITION part2 VALUES IN (1)
 
6790
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
6791
  SUBPARTITION sp22 ENGINE = MyISAM),
 
6792
 PARTITION part3 VALUES IN (2)
 
6793
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
6794
  SUBPARTITION sp32 ENGINE = MyISAM),
 
6795
 PARTITION part4 VALUES IN (NULL)
 
6796
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
6797
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
6798
 
 
6799
unified filelist
 
6800
t1#P#part1#SP#sp11.MYD
 
6801
t1#P#part1#SP#sp11.MYI
 
6802
t1#P#part1#SP#sp12.MYD
 
6803
t1#P#part1#SP#sp12.MYI
 
6804
t1#P#part2#SP#sp21.MYD
 
6805
t1#P#part2#SP#sp21.MYI
 
6806
t1#P#part2#SP#sp22.MYD
 
6807
t1#P#part2#SP#sp22.MYI
 
6808
t1#P#part3#SP#sp31.MYD
 
6809
t1#P#part3#SP#sp31.MYI
 
6810
t1#P#part3#SP#sp32.MYD
 
6811
t1#P#part3#SP#sp32.MYI
 
6812
t1#P#part4#SP#sp41.MYD
 
6813
t1#P#part4#SP#sp41.MYI
 
6814
t1#P#part4#SP#sp42.MYD
 
6815
t1#P#part4#SP#sp42.MYI
 
6816
t1.frm
 
6817
t1.par
 
6818
 
 
6819
# check prerequisites-1 success:    1
 
6820
# check COUNT(*) success:    1
 
6821
# check MIN/MAX(f_int1) success:    1
 
6822
# check MIN/MAX(f_int2) success:    1
 
6823
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6824
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6825
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6826
WHERE f_int1 IN (2,3);
 
6827
# check prerequisites-3 success:    1
 
6828
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6829
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6830
# check read via f_int1 success: 1
 
6831
# check read via f_int2 success: 1
 
6832
        
 
6833
# check multiple-1 success:     1
 
6834
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6835
        
 
6836
# check multiple-2 success:     1
 
6837
INSERT INTO t1 SELECT * FROM t0_template
 
6838
WHERE MOD(f_int1,3) = 0;
 
6839
        
 
6840
# check multiple-3 success:     1
 
6841
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6842
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6843
AND @max_row_div2 + @max_row_div4;
 
6844
        
 
6845
# check multiple-4 success:     1
 
6846
DELETE FROM t1
 
6847
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6848
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6849
        
 
6850
# check multiple-5 success:     1
 
6851
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6852
INSERT INTO t1
 
6853
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6854
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6855
f_charbig = '#SINGLE#';
 
6856
        
 
6857
# check single-1 success:       1
 
6858
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6859
INSERT INTO t1
 
6860
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6861
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6862
f_charbig = '#SINGLE#';
 
6863
        
 
6864
# check single-2 success:       1
 
6865
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6866
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6867
UPDATE t1 SET f_int1 = @cur_value2
 
6868
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6869
        
 
6870
# check single-3 success:       1
 
6871
SET @cur_value1= -1;
 
6872
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6873
UPDATE t1 SET f_int1 = @cur_value1
 
6874
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6875
        
 
6876
# check single-4 success:       1
 
6877
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6878
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6879
        
 
6880
# check single-5 success:       1
 
6881
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6882
        
 
6883
# check single-6 success:       1
 
6884
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6885
        
 
6886
# check single-7 success:       1
 
6887
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6888
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6889
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6890
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6891
f_charbig = '#NULL#';
 
6892
INSERT INTO t1
 
6893
SET f_int1 = NULL , f_int2 = -@max_row,
 
6894
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6895
f_charbig = '#NULL#';
 
6896
# check null success:    1
 
6897
        
 
6898
# check null-1 success:         1
 
6899
UPDATE t1 SET f_int1 = -@max_row
 
6900
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6901
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6902
        
 
6903
# check null-2 success:         1
 
6904
UPDATE t1 SET f_int1 = NULL
 
6905
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6906
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6907
        
 
6908
# check null-3 success:         1
 
6909
DELETE FROM t1
 
6910
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6911
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6912
        
 
6913
# check null-4 success:         1
 
6914
DELETE FROM t1
 
6915
WHERE f_int1 = 0 AND f_int2 = 0
 
6916
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6917
AND f_charbig = '#NULL#';
 
6918
SET AUTOCOMMIT= 0;
 
6919
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6920
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6921
FROM t0_template source_tab
 
6922
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6923
        
 
6924
# check transactions-1 success:         1
 
6925
COMMIT WORK;
 
6926
        
 
6927
# check transactions-2 success:         1
 
6928
ROLLBACK WORK;
 
6929
        
 
6930
# check transactions-3 success:         1
 
6931
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6932
COMMIT WORK;
 
6933
ROLLBACK WORK;
 
6934
        
 
6935
# check transactions-4 success:         1
 
6936
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6937
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6938
FROM t0_template source_tab
 
6939
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6940
        
 
6941
# check transactions-5 success:         1
 
6942
ROLLBACK WORK;
 
6943
Warnings:
 
6944
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6945
        
 
6946
# check transactions-6 success:         1
 
6947
# INFO: Storage engine used for t1 seems to be not transactional.
 
6948
COMMIT;
 
6949
        
 
6950
# check transactions-7 success:         1
 
6951
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6952
COMMIT WORK;
 
6953
SET @@session.sql_mode = 'traditional';
 
6954
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6955
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6956
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6957
'', '', 'was inserted' FROM t0_template
 
6958
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6959
ERROR 22012: Division by 0
 
6960
COMMIT;
 
6961
        
 
6962
# check transactions-8 success:         1
 
6963
# INFO: Storage engine used for t1 seems to be unable to revert
 
6964
#       changes made by the failing statement.
 
6965
SET @@session.sql_mode = '';
 
6966
SET AUTOCOMMIT= 1;
 
6967
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6968
COMMIT WORK;
 
6969
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6970
        
 
6971
# check special-1 success:      1
 
6972
UPDATE t1 SET f_charbig = '';
 
6973
        
 
6974
# check special-2 success:      1
 
6975
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6976
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6977
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6979
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6980
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6981
'just inserted' FROM t0_template
 
6982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6983
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6984
BEGIN
 
6985
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6986
f_charbig = 'updated by trigger'
 
6987
      WHERE f_int1 = new.f_int1;
 
6988
END|
 
6989
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6990
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6991
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6992
        
 
6993
# check trigger-1 success:      1
 
6994
DROP TRIGGER trg_1;
 
6995
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6996
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6997
f_charbig = 'just inserted'
 
6998
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6999
DELETE FROM t0_aux
 
7000
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7001
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7002
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7003
'just inserted' FROM t0_template
 
7004
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7005
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7006
BEGIN
 
7007
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7008
f_charbig = 'updated by trigger'
 
7009
      WHERE f_int1 = new.f_int1;
 
7010
END|
 
7011
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7012
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7013
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7014
        
 
7015
# check trigger-2 success:      1
 
7016
DROP TRIGGER trg_1;
 
7017
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7018
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7019
f_charbig = 'just inserted'
 
7020
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7021
DELETE FROM t0_aux
 
7022
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7023
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7024
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7025
'just inserted' FROM t0_template
 
7026
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7027
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7028
BEGIN
 
7029
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7030
f_charbig = 'updated by trigger'
 
7031
      WHERE f_int1 = new.f_int1;
 
7032
END|
 
7033
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7034
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7035
        
 
7036
# check trigger-3 success:      1
 
7037
DROP TRIGGER trg_1;
 
7038
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7039
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7040
f_charbig = 'just inserted'
 
7041
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7042
DELETE FROM t0_aux
 
7043
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7044
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7045
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7046
'just inserted' FROM t0_template
 
7047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7048
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7049
BEGIN
 
7050
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7051
f_charbig = 'updated by trigger'
 
7052
      WHERE f_int1 = - old.f_int1;
 
7053
END|
 
7054
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7055
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7056
        
 
7057
# check trigger-4 success:      1
 
7058
DROP TRIGGER trg_1;
 
7059
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7060
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7061
f_charbig = 'just inserted'
 
7062
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7063
DELETE FROM t0_aux
 
7064
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7065
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7066
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7067
'just inserted' FROM t0_template
 
7068
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7069
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7070
BEGIN
 
7071
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7072
f_charbig = 'updated by trigger'
 
7073
      WHERE f_int1 = new.f_int1;
 
7074
END|
 
7075
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7076
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7077
        
 
7078
# check trigger-5 success:      1
 
7079
DROP TRIGGER trg_1;
 
7080
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7081
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7082
f_charbig = 'just inserted'
 
7083
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7084
DELETE FROM t0_aux
 
7085
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7086
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7087
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7088
'just inserted' FROM t0_template
 
7089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7090
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7091
BEGIN
 
7092
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7093
f_charbig = 'updated by trigger'
 
7094
      WHERE f_int1 = - old.f_int1;
 
7095
END|
 
7096
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7097
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7098
        
 
7099
# check trigger-6 success:      1
 
7100
DROP TRIGGER trg_1;
 
7101
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7102
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7103
f_charbig = 'just inserted'
 
7104
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7105
DELETE FROM t0_aux
 
7106
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7107
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7108
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7109
'just inserted' FROM t0_template
 
7110
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7111
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7112
BEGIN
 
7113
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7114
f_charbig = 'updated by trigger'
 
7115
      WHERE f_int1 = - old.f_int1;
 
7116
END|
 
7117
DELETE FROM t0_aux
 
7118
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7119
        
 
7120
# check trigger-7 success:      1
 
7121
DROP TRIGGER trg_1;
 
7122
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7123
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7124
f_charbig = 'just inserted'
 
7125
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7126
DELETE FROM t0_aux
 
7127
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7128
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7129
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7130
'just inserted' FROM t0_template
 
7131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7132
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7133
BEGIN
 
7134
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7135
f_charbig = 'updated by trigger'
 
7136
      WHERE f_int1 = - old.f_int1;
 
7137
END|
 
7138
DELETE FROM t0_aux
 
7139
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7140
        
 
7141
# check trigger-8 success:      1
 
7142
DROP TRIGGER trg_1;
 
7143
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7144
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7145
f_charbig = 'just inserted'
 
7146
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7147
DELETE FROM t0_aux
 
7148
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7149
DELETE FROM t1
 
7150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7151
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7152
BEGIN
 
7153
SET new.f_int1 = old.f_int1 + @max_row,
 
7154
new.f_int2 = old.f_int2 - @max_row,
 
7155
new.f_charbig = '####updated per update trigger####';
 
7156
END|
 
7157
UPDATE t1
 
7158
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7159
f_charbig = '####updated per update statement itself####';
 
7160
        
 
7161
# check trigger-9 success:      1
 
7162
DROP TRIGGER trg_2;
 
7163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7165
f_charbig = CONCAT('===',f_char1,'===');
 
7166
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7167
BEGIN
 
7168
SET new.f_int1 = new.f_int1 + @max_row,
 
7169
new.f_int2 = new.f_int2 - @max_row,
 
7170
new.f_charbig = '####updated per update trigger####';
 
7171
END|
 
7172
UPDATE t1
 
7173
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7174
f_charbig = '####updated per update statement itself####';
 
7175
        
 
7176
# check trigger-10 success:     1
 
7177
DROP TRIGGER trg_2;
 
7178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7180
f_charbig = CONCAT('===',f_char1,'===');
 
7181
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7182
BEGIN
 
7183
SET new.f_int1 = @my_max1 + @counter,
 
7184
new.f_int2 = @my_min2 - @counter,
 
7185
new.f_charbig = '####updated per insert trigger####';
 
7186
SET @counter = @counter + 1;
 
7187
END|
 
7188
SET @counter = 1;
 
7189
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7190
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7191
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7192
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7194
ORDER BY f_int1;
 
7195
DROP TRIGGER trg_3;
 
7196
        
 
7197
# check trigger-11 success:     1
 
7198
DELETE FROM t1
 
7199
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7200
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7201
AND f_charbig = '####updated per insert trigger####';
 
7202
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7203
BEGIN
 
7204
SET new.f_int1 = @my_max1 + @counter,
 
7205
new.f_int2 = @my_min2 - @counter,
 
7206
new.f_charbig = '####updated per insert trigger####';
 
7207
SET @counter = @counter + 1;
 
7208
END|
 
7209
SET @counter = 1;
 
7210
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7211
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7212
SELECT CAST(f_int1 AS CHAR),
 
7213
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7215
ORDER BY f_int1;
 
7216
DROP TRIGGER trg_3;
 
7217
        
 
7218
# check trigger-12 success:     1
 
7219
DELETE FROM t1
 
7220
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7221
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7222
AND f_charbig = '####updated per insert trigger####';
 
7223
ANALYZE  TABLE t1;
 
7224
Table   Op      Msg_type        Msg_text
 
7225
test.t1 analyze status  OK
 
7226
CHECK    TABLE t1 EXTENDED;
 
7227
Table   Op      Msg_type        Msg_text
 
7228
test.t1 check   status  OK
 
7229
CHECKSUM TABLE t1 EXTENDED;
 
7230
Table   Checksum
 
7231
test.t1 <some_value>
 
7232
OPTIMIZE TABLE t1;
 
7233
Table   Op      Msg_type        Msg_text
 
7234
test.t1 optimize        status  OK
 
7235
# check layout success:    1
 
7236
REPAIR   TABLE t1 EXTENDED;
 
7237
Table   Op      Msg_type        Msg_text
 
7238
test.t1 repair  status  OK
 
7239
# check layout success:    1
 
7240
TRUNCATE t1;
 
7241
        
 
7242
# check TRUNCATE success:       1
 
7243
# check layout success:    1
 
7244
# End usability test (inc/partition_check.inc)
 
7245
DROP TABLE t1;
 
7246
CREATE TABLE t1 (
 
7247
f_int1 INTEGER,
 
7248
f_int2 INTEGER,
 
7249
f_char1 CHAR(20),
 
7250
f_char2 CHAR(20),
 
7251
f_charbig VARCHAR(1000)
 
7252
 
 
7253
)
 
7254
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7255
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
7256
(PARTITION part1 VALUES IN (0),
 
7257
PARTITION part2 VALUES IN (1),
 
7258
PARTITION part3 VALUES IN (NULL));
 
7259
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7260
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
7261
# Start usability test (inc/partition_check.inc)
 
7262
create_command
 
7263
SHOW CREATE TABLE t1;
 
7264
Table   Create Table
 
7265
t1      CREATE TABLE `t1` (
 
7266
  `f_int1` int(11) DEFAULT NULL,
 
7267
  `f_int2` int(11) DEFAULT NULL,
 
7268
  `f_char1` char(20) DEFAULT NULL,
 
7269
  `f_char2` char(20) DEFAULT NULL,
 
7270
  `f_charbig` varchar(1000) DEFAULT NULL
 
7271
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
7272
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
7273
SUBPARTITION BY KEY (f_int2)
 
7274
SUBPARTITIONS 3
 
7275
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
7276
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
7277
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
7278
 
 
7279
unified filelist
 
7280
t1#P#part1#SP#part1sp0.MYD
 
7281
t1#P#part1#SP#part1sp0.MYI
 
7282
t1#P#part1#SP#part1sp1.MYD
 
7283
t1#P#part1#SP#part1sp1.MYI
 
7284
t1#P#part1#SP#part1sp2.MYD
 
7285
t1#P#part1#SP#part1sp2.MYI
 
7286
t1#P#part2#SP#part2sp0.MYD
 
7287
t1#P#part2#SP#part2sp0.MYI
 
7288
t1#P#part2#SP#part2sp1.MYD
 
7289
t1#P#part2#SP#part2sp1.MYI
 
7290
t1#P#part2#SP#part2sp2.MYD
 
7291
t1#P#part2#SP#part2sp2.MYI
 
7292
t1#P#part3#SP#part3sp0.MYD
 
7293
t1#P#part3#SP#part3sp0.MYI
 
7294
t1#P#part3#SP#part3sp1.MYD
 
7295
t1#P#part3#SP#part3sp1.MYI
 
7296
t1#P#part3#SP#part3sp2.MYD
 
7297
t1#P#part3#SP#part3sp2.MYI
 
7298
t1.frm
 
7299
t1.par
 
7300
 
 
7301
# check prerequisites-1 success:    1
 
7302
# check COUNT(*) success:    1
 
7303
# check MIN/MAX(f_int1) success:    1
 
7304
# check MIN/MAX(f_int2) success:    1
 
7305
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7306
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7307
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7308
WHERE f_int1 IN (2,3);
 
7309
# check prerequisites-3 success:    1
 
7310
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7311
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
7312
# check read via f_int1 success: 1
 
7313
# check read via f_int2 success: 1
 
7314
        
 
7315
# check multiple-1 success:     1
 
7316
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7317
        
 
7318
# check multiple-2 success:     1
 
7319
INSERT INTO t1 SELECT * FROM t0_template
 
7320
WHERE MOD(f_int1,3) = 0;
 
7321
        
 
7322
# check multiple-3 success:     1
 
7323
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7324
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7325
AND @max_row_div2 + @max_row_div4;
 
7326
        
 
7327
# check multiple-4 success:     1
 
7328
DELETE FROM t1
 
7329
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7330
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7331
        
 
7332
# check multiple-5 success:     1
 
7333
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7334
INSERT INTO t1
 
7335
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7336
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7337
f_charbig = '#SINGLE#';
 
7338
        
 
7339
# check single-1 success:       1
 
7340
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7341
INSERT INTO t1
 
7342
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7343
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7344
f_charbig = '#SINGLE#';
 
7345
        
 
7346
# check single-2 success:       1
 
7347
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7348
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7349
UPDATE t1 SET f_int1 = @cur_value2
 
7350
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7351
        
 
7352
# check single-3 success:       1
 
7353
SET @cur_value1= -1;
 
7354
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7355
UPDATE t1 SET f_int1 = @cur_value1
 
7356
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7357
        
 
7358
# check single-4 success:       1
 
7359
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7360
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7361
        
 
7362
# check single-5 success:       1
 
7363
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7364
        
 
7365
# check single-6 success:       1
 
7366
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7367
        
 
7368
# check single-7 success:       1
 
7369
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7370
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7371
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7372
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7373
f_charbig = '#NULL#';
 
7374
INSERT INTO t1
 
7375
SET f_int1 = NULL , f_int2 = -@max_row,
 
7376
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7377
f_charbig = '#NULL#';
 
7378
# check null success:    1
 
7379
        
 
7380
# check null-1 success:         1
 
7381
UPDATE t1 SET f_int1 = -@max_row
 
7382
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7383
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7384
        
 
7385
# check null-2 success:         1
 
7386
UPDATE t1 SET f_int1 = NULL
 
7387
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7388
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7389
        
 
7390
# check null-3 success:         1
 
7391
DELETE FROM t1
 
7392
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7393
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7394
        
 
7395
# check null-4 success:         1
 
7396
DELETE FROM t1
 
7397
WHERE f_int1 = 0 AND f_int2 = 0
 
7398
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7399
AND f_charbig = '#NULL#';
 
7400
SET AUTOCOMMIT= 0;
 
7401
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7402
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7403
FROM t0_template source_tab
 
7404
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7405
        
 
7406
# check transactions-1 success:         1
 
7407
COMMIT WORK;
 
7408
        
 
7409
# check transactions-2 success:         1
 
7410
ROLLBACK WORK;
 
7411
        
 
7412
# check transactions-3 success:         1
 
7413
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7414
COMMIT WORK;
 
7415
ROLLBACK WORK;
 
7416
        
 
7417
# check transactions-4 success:         1
 
7418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7419
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7420
FROM t0_template source_tab
 
7421
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7422
        
 
7423
# check transactions-5 success:         1
 
7424
ROLLBACK WORK;
 
7425
Warnings:
 
7426
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7427
        
 
7428
# check transactions-6 success:         1
 
7429
# INFO: Storage engine used for t1 seems to be not transactional.
 
7430
COMMIT;
 
7431
        
 
7432
# check transactions-7 success:         1
 
7433
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7434
COMMIT WORK;
 
7435
SET @@session.sql_mode = 'traditional';
 
7436
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7437
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7438
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7439
'', '', 'was inserted' FROM t0_template
 
7440
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7441
ERROR 22012: Division by 0
 
7442
COMMIT;
 
7443
        
 
7444
# check transactions-8 success:         1
 
7445
# INFO: Storage engine used for t1 seems to be unable to revert
 
7446
#       changes made by the failing statement.
 
7447
SET @@session.sql_mode = '';
 
7448
SET AUTOCOMMIT= 1;
 
7449
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7450
COMMIT WORK;
 
7451
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7452
        
 
7453
# check special-1 success:      1
 
7454
UPDATE t1 SET f_charbig = '';
 
7455
        
 
7456
# check special-2 success:      1
 
7457
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7458
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7459
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7463
'just inserted' FROM t0_template
 
7464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7465
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7466
BEGIN
 
7467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7468
f_charbig = 'updated by trigger'
 
7469
      WHERE f_int1 = new.f_int1;
 
7470
END|
 
7471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7472
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7474
        
 
7475
# check trigger-1 success:      1
 
7476
DROP TRIGGER trg_1;
 
7477
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7478
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7479
f_charbig = 'just inserted'
 
7480
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7481
DELETE FROM t0_aux
 
7482
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7483
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7484
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7485
'just inserted' FROM t0_template
 
7486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7487
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7488
BEGIN
 
7489
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7490
f_charbig = 'updated by trigger'
 
7491
      WHERE f_int1 = new.f_int1;
 
7492
END|
 
7493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7494
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7496
        
 
7497
# check trigger-2 success:      1
 
7498
DROP TRIGGER trg_1;
 
7499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7501
f_charbig = 'just inserted'
 
7502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7503
DELETE FROM t0_aux
 
7504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7507
'just inserted' FROM t0_template
 
7508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7509
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7510
BEGIN
 
7511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7512
f_charbig = 'updated by trigger'
 
7513
      WHERE f_int1 = new.f_int1;
 
7514
END|
 
7515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7517
        
 
7518
# check trigger-3 success:      1
 
7519
DROP TRIGGER trg_1;
 
7520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7522
f_charbig = 'just inserted'
 
7523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7524
DELETE FROM t0_aux
 
7525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7528
'just inserted' FROM t0_template
 
7529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7530
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7531
BEGIN
 
7532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7533
f_charbig = 'updated by trigger'
 
7534
      WHERE f_int1 = - old.f_int1;
 
7535
END|
 
7536
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7538
        
 
7539
# check trigger-4 success:      1
 
7540
DROP TRIGGER trg_1;
 
7541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7543
f_charbig = 'just inserted'
 
7544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7545
DELETE FROM t0_aux
 
7546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7549
'just inserted' FROM t0_template
 
7550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7551
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7552
BEGIN
 
7553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7554
f_charbig = 'updated by trigger'
 
7555
      WHERE f_int1 = new.f_int1;
 
7556
END|
 
7557
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7559
        
 
7560
# check trigger-5 success:      1
 
7561
DROP TRIGGER trg_1;
 
7562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7564
f_charbig = 'just inserted'
 
7565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7566
DELETE FROM t0_aux
 
7567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7570
'just inserted' FROM t0_template
 
7571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7572
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7573
BEGIN
 
7574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7575
f_charbig = 'updated by trigger'
 
7576
      WHERE f_int1 = - old.f_int1;
 
7577
END|
 
7578
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7580
        
 
7581
# check trigger-6 success:      1
 
7582
DROP TRIGGER trg_1;
 
7583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7585
f_charbig = 'just inserted'
 
7586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7587
DELETE FROM t0_aux
 
7588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7590
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7591
'just inserted' FROM t0_template
 
7592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7593
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7594
BEGIN
 
7595
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7596
f_charbig = 'updated by trigger'
 
7597
      WHERE f_int1 = - old.f_int1;
 
7598
END|
 
7599
DELETE FROM t0_aux
 
7600
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7601
        
 
7602
# check trigger-7 success:      1
 
7603
DROP TRIGGER trg_1;
 
7604
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7605
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7606
f_charbig = 'just inserted'
 
7607
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7608
DELETE FROM t0_aux
 
7609
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7611
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7612
'just inserted' FROM t0_template
 
7613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7614
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7615
BEGIN
 
7616
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7617
f_charbig = 'updated by trigger'
 
7618
      WHERE f_int1 = - old.f_int1;
 
7619
END|
 
7620
DELETE FROM t0_aux
 
7621
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7622
        
 
7623
# check trigger-8 success:      1
 
7624
DROP TRIGGER trg_1;
 
7625
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7626
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7627
f_charbig = 'just inserted'
 
7628
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7629
DELETE FROM t0_aux
 
7630
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7631
DELETE FROM t1
 
7632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7633
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7634
BEGIN
 
7635
SET new.f_int1 = old.f_int1 + @max_row,
 
7636
new.f_int2 = old.f_int2 - @max_row,
 
7637
new.f_charbig = '####updated per update trigger####';
 
7638
END|
 
7639
UPDATE t1
 
7640
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7641
f_charbig = '####updated per update statement itself####';
 
7642
        
 
7643
# check trigger-9 success:      1
 
7644
DROP TRIGGER trg_2;
 
7645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7647
f_charbig = CONCAT('===',f_char1,'===');
 
7648
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7649
BEGIN
 
7650
SET new.f_int1 = new.f_int1 + @max_row,
 
7651
new.f_int2 = new.f_int2 - @max_row,
 
7652
new.f_charbig = '####updated per update trigger####';
 
7653
END|
 
7654
UPDATE t1
 
7655
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7656
f_charbig = '####updated per update statement itself####';
 
7657
        
 
7658
# check trigger-10 success:     1
 
7659
DROP TRIGGER trg_2;
 
7660
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7661
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7662
f_charbig = CONCAT('===',f_char1,'===');
 
7663
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7664
BEGIN
 
7665
SET new.f_int1 = @my_max1 + @counter,
 
7666
new.f_int2 = @my_min2 - @counter,
 
7667
new.f_charbig = '####updated per insert trigger####';
 
7668
SET @counter = @counter + 1;
 
7669
END|
 
7670
SET @counter = 1;
 
7671
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7672
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7673
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7674
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7676
ORDER BY f_int1;
 
7677
DROP TRIGGER trg_3;
 
7678
        
 
7679
# check trigger-11 success:     1
 
7680
DELETE FROM t1
 
7681
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7682
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7683
AND f_charbig = '####updated per insert trigger####';
 
7684
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7685
BEGIN
 
7686
SET new.f_int1 = @my_max1 + @counter,
 
7687
new.f_int2 = @my_min2 - @counter,
 
7688
new.f_charbig = '####updated per insert trigger####';
 
7689
SET @counter = @counter + 1;
 
7690
END|
 
7691
SET @counter = 1;
 
7692
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7693
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7694
SELECT CAST(f_int1 AS CHAR),
 
7695
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7696
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7697
ORDER BY f_int1;
 
7698
DROP TRIGGER trg_3;
 
7699
        
 
7700
# check trigger-12 success:     1
 
7701
DELETE FROM t1
 
7702
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7703
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7704
AND f_charbig = '####updated per insert trigger####';
 
7705
ANALYZE  TABLE t1;
 
7706
Table   Op      Msg_type        Msg_text
 
7707
test.t1 analyze status  OK
 
7708
CHECK    TABLE t1 EXTENDED;
 
7709
Table   Op      Msg_type        Msg_text
 
7710
test.t1 check   status  OK
 
7711
CHECKSUM TABLE t1 EXTENDED;
 
7712
Table   Checksum
 
7713
test.t1 <some_value>
 
7714
OPTIMIZE TABLE t1;
 
7715
Table   Op      Msg_type        Msg_text
 
7716
test.t1 optimize        status  OK
 
7717
# check layout success:    1
 
7718
REPAIR   TABLE t1 EXTENDED;
 
7719
Table   Op      Msg_type        Msg_text
 
7720
test.t1 repair  status  OK
 
7721
# check layout success:    1
 
7722
TRUNCATE t1;
 
7723
        
 
7724
# check TRUNCATE success:       1
 
7725
# check layout success:    1
 
7726
# End usability test (inc/partition_check.inc)
 
7727
DROP TABLE t1;
 
7728
#------------------------------------------------------------------------
 
7729
#  2   Tables with PRIMARY KEY and/or UNIQUE INDEXes
 
7730
#        The partitioning function contains one column.
 
7731
#------------------------------------------------------------------------
 
7732
#  2.5 PRIMARY KEY + UNIQUE INDEX consisting of two columns
 
7733
DROP TABLE IF EXISTS t1;
 
7734
CREATE TABLE t1 (
 
7735
f_int1 INTEGER,
 
7736
f_int2 INTEGER,
 
7737
f_char1 CHAR(20),
 
7738
f_char2 CHAR(20),
 
7739
f_charbig VARCHAR(1000)
 
7740
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
7741
)
 
7742
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
7743
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7744
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
7745
# Start usability test (inc/partition_check.inc)
 
7746
create_command
 
7747
SHOW CREATE TABLE t1;
 
7748
Table   Create Table
 
7749
t1      CREATE TABLE `t1` (
 
7750
  `f_int1` int(11) DEFAULT NULL,
 
7751
  `f_int2` int(11) DEFAULT NULL,
 
7752
  `f_char1` char(20) DEFAULT NULL,
 
7753
  `f_char2` char(20) DEFAULT NULL,
 
7754
  `f_charbig` varchar(1000) DEFAULT NULL,
 
7755
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
7756
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
7757
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
7758
/*!50100 PARTITION BY HASH (f_int1)
 
7759
PARTITIONS 2 */
 
7760
 
 
7761
unified filelist
 
7762
t1#P#p0.MYD
 
7763
t1#P#p0.MYI
 
7764
t1#P#p1.MYD
 
7765
t1#P#p1.MYI
 
7766
t1.frm
 
7767
t1.par
 
7768
 
 
7769
# check prerequisites-1 success:    1
 
7770
# check COUNT(*) success:    1
 
7771
# check MIN/MAX(f_int1) success:    1
 
7772
# check MIN/MAX(f_int2) success:    1
 
7773
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7774
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7775
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7776
WHERE f_int1 IN (2,3);
 
7777
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
7778
# check prerequisites-3 success:    1
 
7779
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7781
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7782
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7783
WHERE f_int1 IN (2,3);
 
7784
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7785
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7786
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7787
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7788
WHERE f_int1 IN (2,3);
 
7789
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7790
# check read via f_int1 success: 1
 
7791
# check read via f_int2 success: 1
 
7792
        
 
7793
# check multiple-1 success:     1
 
7794
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7795
        
 
7796
# check multiple-2 success:     1
 
7797
INSERT INTO t1 SELECT * FROM t0_template
 
7798
WHERE MOD(f_int1,3) = 0;
 
7799
        
 
7800
# check multiple-3 success:     1
 
7801
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7802
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7803
AND @max_row_div2 + @max_row_div4;
 
7804
        
 
7805
# check multiple-4 success:     1
 
7806
DELETE FROM t1
 
7807
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7808
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7809
        
 
7810
# check multiple-5 success:     1
 
7811
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7812
WHERE MOD(f_int1,3) = 0
 
7813
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7814
SELECT COUNT(*) INTO @clash_count
 
7815
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7816
WHERE MOD(f_int1,3) = 0
 
7817
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7818
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7819
INSERT INTO t1
 
7820
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7821
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7822
f_charbig = '#SINGLE#';
 
7823
        
 
7824
# check single-1 success:       1
 
7825
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7826
INSERT INTO t1
 
7827
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7828
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7829
f_charbig = '#SINGLE#';
 
7830
        
 
7831
# check single-2 success:       1
 
7832
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7833
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7834
UPDATE t1 SET f_int1 = @cur_value2
 
7835
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7836
        
 
7837
# check single-3 success:       1
 
7838
SET @cur_value1= -1;
 
7839
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7840
UPDATE t1 SET f_int1 = @cur_value1
 
7841
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7842
        
 
7843
# check single-4 success:       1
 
7844
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7845
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7846
        
 
7847
# check single-5 success:       1
 
7848
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7849
        
 
7850
# check single-6 success:       1
 
7851
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7852
        
 
7853
# check single-7 success:       1
 
7854
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7855
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7856
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7857
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7858
f_charbig = '#NULL#';
 
7859
INSERT INTO t1
 
7860
SET f_int1 = NULL , f_int2 = -@max_row,
 
7861
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7862
f_charbig = '#NULL#';
 
7863
# check null success:    1
 
7864
        
 
7865
# check null-1 success:         1
 
7866
UPDATE t1 SET f_int1 = -@max_row
 
7867
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7868
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7869
        
 
7870
# check null-2 success:         1
 
7871
UPDATE t1 SET f_int1 = NULL
 
7872
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7873
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7874
        
 
7875
# check null-3 success:         1
 
7876
DELETE FROM t1
 
7877
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7878
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7879
        
 
7880
# check null-4 success:         1
 
7881
DELETE FROM t1
 
7882
WHERE f_int1 = 0 AND f_int2 = 0
 
7883
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7884
AND f_charbig = '#NULL#';
 
7885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7886
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7887
   FROM t0_template source_tab
 
7888
WHERE MOD(f_int1,3) = 0
 
7889
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7890
ON DUPLICATE KEY
 
7891
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7892
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7893
f_charbig = 'was updated';
 
7894
        
 
7895
# check unique-1-a success:     1
 
7896
        
 
7897
# check unique-1-b success:     1
 
7898
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7899
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7900
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7901
f_charbig = CONCAT('===',f_char1,'===')
 
7902
WHERE f_charbig = 'was updated';
 
7903
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7904
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7905
   FROM t0_template source_tab
 
7906
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7907
        
 
7908
# check replace success:        1
 
7909
DELETE FROM t1
 
7910
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7911
DELETE FROM t1
 
7912
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7913
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7914
UPDATE t1 SET f_int2 = f_int1,
 
7915
f_char1 = CAST(f_int1 AS CHAR),
 
7916
f_char2 = CAST(f_int1 AS CHAR),
 
7917
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7918
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7919
SET AUTOCOMMIT= 0;
 
7920
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7921
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7922
FROM t0_template source_tab
 
7923
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7924
        
 
7925
# check transactions-1 success:         1
 
7926
COMMIT WORK;
 
7927
        
 
7928
# check transactions-2 success:         1
 
7929
ROLLBACK WORK;
 
7930
        
 
7931
# check transactions-3 success:         1
 
7932
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7933
COMMIT WORK;
 
7934
ROLLBACK WORK;
 
7935
        
 
7936
# check transactions-4 success:         1
 
7937
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7938
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7939
FROM t0_template source_tab
 
7940
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7941
        
 
7942
# check transactions-5 success:         1
 
7943
ROLLBACK WORK;
 
7944
Warnings:
 
7945
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7946
        
 
7947
# check transactions-6 success:         1
 
7948
# INFO: Storage engine used for t1 seems to be not transactional.
 
7949
COMMIT;
 
7950
        
 
7951
# check transactions-7 success:         1
 
7952
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7953
COMMIT WORK;
 
7954
SET @@session.sql_mode = 'traditional';
 
7955
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7957
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7958
'', '', 'was inserted' FROM t0_template
 
7959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7960
ERROR 22012: Division by 0
 
7961
COMMIT;
 
7962
        
 
7963
# check transactions-8 success:         1
 
7964
# INFO: Storage engine used for t1 seems to be unable to revert
 
7965
#       changes made by the failing statement.
 
7966
SET @@session.sql_mode = '';
 
7967
SET AUTOCOMMIT= 1;
 
7968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7969
COMMIT WORK;
 
7970
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7971
        
 
7972
# check special-1 success:      1
 
7973
UPDATE t1 SET f_charbig = '';
 
7974
        
 
7975
# check special-2 success:      1
 
7976
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7977
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7978
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7980
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7981
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7982
'just inserted' FROM t0_template
 
7983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7984
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7985
BEGIN
 
7986
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7987
f_charbig = 'updated by trigger'
 
7988
      WHERE f_int1 = new.f_int1;
 
7989
END|
 
7990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7991
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7993
        
 
7994
# check trigger-1 success:      1
 
7995
DROP TRIGGER trg_1;
 
7996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7998
f_charbig = 'just inserted'
 
7999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8000
DELETE FROM t0_aux
 
8001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8003
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8004
'just inserted' FROM t0_template
 
8005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8006
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8007
BEGIN
 
8008
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8009
f_charbig = 'updated by trigger'
 
8010
      WHERE f_int1 = new.f_int1;
 
8011
END|
 
8012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8013
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8015
        
 
8016
# check trigger-2 success:      1
 
8017
DROP TRIGGER trg_1;
 
8018
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8019
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8020
f_charbig = 'just inserted'
 
8021
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8022
DELETE FROM t0_aux
 
8023
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8026
'just inserted' FROM t0_template
 
8027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8028
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8029
BEGIN
 
8030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8031
f_charbig = 'updated by trigger'
 
8032
      WHERE f_int1 = new.f_int1;
 
8033
END|
 
8034
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8035
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8036
        
 
8037
# check trigger-3 success:      1
 
8038
DROP TRIGGER trg_1;
 
8039
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8040
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8041
f_charbig = 'just inserted'
 
8042
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8043
DELETE FROM t0_aux
 
8044
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8045
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8046
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8047
'just inserted' FROM t0_template
 
8048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8049
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8050
BEGIN
 
8051
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8052
f_charbig = 'updated by trigger'
 
8053
      WHERE f_int1 = - old.f_int1;
 
8054
END|
 
8055
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8056
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8057
        
 
8058
# check trigger-4 success:      1
 
8059
DROP TRIGGER trg_1;
 
8060
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8061
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8062
f_charbig = 'just inserted'
 
8063
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8064
DELETE FROM t0_aux
 
8065
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8066
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8067
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8068
'just inserted' FROM t0_template
 
8069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8070
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8071
BEGIN
 
8072
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8073
f_charbig = 'updated by trigger'
 
8074
      WHERE f_int1 = new.f_int1;
 
8075
END|
 
8076
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8077
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8078
        
 
8079
# check trigger-5 success:      1
 
8080
DROP TRIGGER trg_1;
 
8081
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8082
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8083
f_charbig = 'just inserted'
 
8084
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8085
DELETE FROM t0_aux
 
8086
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8088
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8089
'just inserted' FROM t0_template
 
8090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8091
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8092
BEGIN
 
8093
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8094
f_charbig = 'updated by trigger'
 
8095
      WHERE f_int1 = - old.f_int1;
 
8096
END|
 
8097
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8098
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8099
        
 
8100
# check trigger-6 success:      1
 
8101
DROP TRIGGER trg_1;
 
8102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8104
f_charbig = 'just inserted'
 
8105
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8106
DELETE FROM t0_aux
 
8107
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8108
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8109
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8110
'just inserted' FROM t0_template
 
8111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8112
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8113
BEGIN
 
8114
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8115
f_charbig = 'updated by trigger'
 
8116
      WHERE f_int1 = - old.f_int1;
 
8117
END|
 
8118
DELETE FROM t0_aux
 
8119
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8120
        
 
8121
# check trigger-7 success:      1
 
8122
DROP TRIGGER trg_1;
 
8123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8125
f_charbig = 'just inserted'
 
8126
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8127
DELETE FROM t0_aux
 
8128
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8131
'just inserted' FROM t0_template
 
8132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8133
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8134
BEGIN
 
8135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8136
f_charbig = 'updated by trigger'
 
8137
      WHERE f_int1 = - old.f_int1;
 
8138
END|
 
8139
DELETE FROM t0_aux
 
8140
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8141
        
 
8142
# check trigger-8 success:      1
 
8143
DROP TRIGGER trg_1;
 
8144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8146
f_charbig = 'just inserted'
 
8147
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8148
DELETE FROM t0_aux
 
8149
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8150
DELETE FROM t1
 
8151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8152
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8153
BEGIN
 
8154
SET new.f_int1 = old.f_int1 + @max_row,
 
8155
new.f_int2 = old.f_int2 - @max_row,
 
8156
new.f_charbig = '####updated per update trigger####';
 
8157
END|
 
8158
UPDATE t1
 
8159
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8160
f_charbig = '####updated per update statement itself####';
 
8161
        
 
8162
# check trigger-9 success:      1
 
8163
DROP TRIGGER trg_2;
 
8164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8166
f_charbig = CONCAT('===',f_char1,'===');
 
8167
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8168
BEGIN
 
8169
SET new.f_int1 = new.f_int1 + @max_row,
 
8170
new.f_int2 = new.f_int2 - @max_row,
 
8171
new.f_charbig = '####updated per update trigger####';
 
8172
END|
 
8173
UPDATE t1
 
8174
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8175
f_charbig = '####updated per update statement itself####';
 
8176
        
 
8177
# check trigger-10 success:     1
 
8178
DROP TRIGGER trg_2;
 
8179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8181
f_charbig = CONCAT('===',f_char1,'===');
 
8182
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8183
BEGIN
 
8184
SET new.f_int1 = @my_max1 + @counter,
 
8185
new.f_int2 = @my_min2 - @counter,
 
8186
new.f_charbig = '####updated per insert trigger####';
 
8187
SET @counter = @counter + 1;
 
8188
END|
 
8189
SET @counter = 1;
 
8190
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8192
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8193
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8195
ORDER BY f_int1;
 
8196
DROP TRIGGER trg_3;
 
8197
        
 
8198
# check trigger-11 success:     1
 
8199
DELETE FROM t1
 
8200
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8201
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8202
AND f_charbig = '####updated per insert trigger####';
 
8203
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8204
BEGIN
 
8205
SET new.f_int1 = @my_max1 + @counter,
 
8206
new.f_int2 = @my_min2 - @counter,
 
8207
new.f_charbig = '####updated per insert trigger####';
 
8208
SET @counter = @counter + 1;
 
8209
END|
 
8210
SET @counter = 1;
 
8211
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8212
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8213
SELECT CAST(f_int1 AS CHAR),
 
8214
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8216
ORDER BY f_int1;
 
8217
DROP TRIGGER trg_3;
 
8218
        
 
8219
# check trigger-12 success:     1
 
8220
DELETE FROM t1
 
8221
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8222
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8223
AND f_charbig = '####updated per insert trigger####';
 
8224
ANALYZE  TABLE t1;
 
8225
Table   Op      Msg_type        Msg_text
 
8226
test.t1 analyze status  OK
 
8227
CHECK    TABLE t1 EXTENDED;
 
8228
Table   Op      Msg_type        Msg_text
 
8229
test.t1 check   status  OK
 
8230
CHECKSUM TABLE t1 EXTENDED;
 
8231
Table   Checksum
 
8232
test.t1 <some_value>
 
8233
OPTIMIZE TABLE t1;
 
8234
Table   Op      Msg_type        Msg_text
 
8235
test.t1 optimize        status  OK
 
8236
# check layout success:    1
 
8237
REPAIR   TABLE t1 EXTENDED;
 
8238
Table   Op      Msg_type        Msg_text
 
8239
test.t1 repair  status  OK
 
8240
# check layout success:    1
 
8241
TRUNCATE t1;
 
8242
        
 
8243
# check TRUNCATE success:       1
 
8244
# check layout success:    1
 
8245
# End usability test (inc/partition_check.inc)
 
8246
DROP TABLE t1;
 
8247
CREATE TABLE t1 (
 
8248
f_int1 INTEGER,
 
8249
f_int2 INTEGER,
 
8250
f_char1 CHAR(20),
 
8251
f_char2 CHAR(20),
 
8252
f_charbig VARCHAR(1000)
 
8253
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
8254
)
 
8255
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
8256
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8257
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
8258
# Start usability test (inc/partition_check.inc)
 
8259
create_command
 
8260
SHOW CREATE TABLE t1;
 
8261
Table   Create Table
 
8262
t1      CREATE TABLE `t1` (
 
8263
  `f_int1` int(11) DEFAULT NULL,
 
8264
  `f_int2` int(11) DEFAULT NULL,
 
8265
  `f_char1` char(20) DEFAULT NULL,
 
8266
  `f_char2` char(20) DEFAULT NULL,
 
8267
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8268
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
8269
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
8270
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
8271
/*!50100 PARTITION BY KEY (f_int1)
 
8272
PARTITIONS 5 */
 
8273
 
 
8274
unified filelist
 
8275
t1#P#p0.MYD
 
8276
t1#P#p0.MYI
 
8277
t1#P#p1.MYD
 
8278
t1#P#p1.MYI
 
8279
t1#P#p2.MYD
 
8280
t1#P#p2.MYI
 
8281
t1#P#p3.MYD
 
8282
t1#P#p3.MYI
 
8283
t1#P#p4.MYD
 
8284
t1#P#p4.MYI
 
8285
t1.frm
 
8286
t1.par
 
8287
 
 
8288
# check prerequisites-1 success:    1
 
8289
# check COUNT(*) success:    1
 
8290
# check MIN/MAX(f_int1) success:    1
 
8291
# check MIN/MAX(f_int2) success:    1
 
8292
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8293
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8294
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8295
WHERE f_int1 IN (2,3);
 
8296
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
8297
# check prerequisites-3 success:    1
 
8298
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8299
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8300
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8301
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8302
WHERE f_int1 IN (2,3);
 
8303
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8304
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8305
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8306
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8307
WHERE f_int1 IN (2,3);
 
8308
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8309
# check read via f_int1 success: 1
 
8310
# check read via f_int2 success: 1
 
8311
        
 
8312
# check multiple-1 success:     1
 
8313
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8314
        
 
8315
# check multiple-2 success:     1
 
8316
INSERT INTO t1 SELECT * FROM t0_template
 
8317
WHERE MOD(f_int1,3) = 0;
 
8318
        
 
8319
# check multiple-3 success:     1
 
8320
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8321
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8322
AND @max_row_div2 + @max_row_div4;
 
8323
        
 
8324
# check multiple-4 success:     1
 
8325
DELETE FROM t1
 
8326
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8327
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8328
        
 
8329
# check multiple-5 success:     1
 
8330
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8331
WHERE MOD(f_int1,3) = 0
 
8332
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8333
SELECT COUNT(*) INTO @clash_count
 
8334
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8335
WHERE MOD(f_int1,3) = 0
 
8336
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8337
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8338
INSERT INTO t1
 
8339
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8340
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8341
f_charbig = '#SINGLE#';
 
8342
        
 
8343
# check single-1 success:       1
 
8344
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8345
INSERT INTO t1
 
8346
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8347
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8348
f_charbig = '#SINGLE#';
 
8349
        
 
8350
# check single-2 success:       1
 
8351
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8352
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8353
UPDATE t1 SET f_int1 = @cur_value2
 
8354
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8355
        
 
8356
# check single-3 success:       1
 
8357
SET @cur_value1= -1;
 
8358
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8359
UPDATE t1 SET f_int1 = @cur_value1
 
8360
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8361
        
 
8362
# check single-4 success:       1
 
8363
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8364
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8365
        
 
8366
# check single-5 success:       1
 
8367
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8368
        
 
8369
# check single-6 success:       1
 
8370
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8371
        
 
8372
# check single-7 success:       1
 
8373
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8374
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8375
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8376
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8377
f_charbig = '#NULL#';
 
8378
INSERT INTO t1
 
8379
SET f_int1 = NULL , f_int2 = -@max_row,
 
8380
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8381
f_charbig = '#NULL#';
 
8382
# check null success:    1
 
8383
        
 
8384
# check null-1 success:         1
 
8385
UPDATE t1 SET f_int1 = -@max_row
 
8386
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8387
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8388
        
 
8389
# check null-2 success:         1
 
8390
UPDATE t1 SET f_int1 = NULL
 
8391
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8392
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8393
        
 
8394
# check null-3 success:         1
 
8395
DELETE FROM t1
 
8396
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8397
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8398
        
 
8399
# check null-4 success:         1
 
8400
DELETE FROM t1
 
8401
WHERE f_int1 = 0 AND f_int2 = 0
 
8402
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8403
AND f_charbig = '#NULL#';
 
8404
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8405
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8406
   FROM t0_template source_tab
 
8407
WHERE MOD(f_int1,3) = 0
 
8408
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8409
ON DUPLICATE KEY
 
8410
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8411
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8412
f_charbig = 'was updated';
 
8413
        
 
8414
# check unique-1-a success:     1
 
8415
        
 
8416
# check unique-1-b success:     1
 
8417
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8418
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8419
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8420
f_charbig = CONCAT('===',f_char1,'===')
 
8421
WHERE f_charbig = 'was updated';
 
8422
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8423
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8424
   FROM t0_template source_tab
 
8425
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8426
        
 
8427
# check replace success:        1
 
8428
DELETE FROM t1
 
8429
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8430
DELETE FROM t1
 
8431
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8432
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8433
UPDATE t1 SET f_int2 = f_int1,
 
8434
f_char1 = CAST(f_int1 AS CHAR),
 
8435
f_char2 = CAST(f_int1 AS CHAR),
 
8436
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8437
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8438
SET AUTOCOMMIT= 0;
 
8439
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8440
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8441
FROM t0_template source_tab
 
8442
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8443
        
 
8444
# check transactions-1 success:         1
 
8445
COMMIT WORK;
 
8446
        
 
8447
# check transactions-2 success:         1
 
8448
ROLLBACK WORK;
 
8449
        
 
8450
# check transactions-3 success:         1
 
8451
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8452
COMMIT WORK;
 
8453
ROLLBACK WORK;
 
8454
        
 
8455
# check transactions-4 success:         1
 
8456
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8457
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8458
FROM t0_template source_tab
 
8459
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8460
        
 
8461
# check transactions-5 success:         1
 
8462
ROLLBACK WORK;
 
8463
Warnings:
 
8464
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8465
        
 
8466
# check transactions-6 success:         1
 
8467
# INFO: Storage engine used for t1 seems to be not transactional.
 
8468
COMMIT;
 
8469
        
 
8470
# check transactions-7 success:         1
 
8471
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8472
COMMIT WORK;
 
8473
SET @@session.sql_mode = 'traditional';
 
8474
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8475
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8476
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8477
'', '', 'was inserted' FROM t0_template
 
8478
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8479
ERROR 22012: Division by 0
 
8480
COMMIT;
 
8481
        
 
8482
# check transactions-8 success:         1
 
8483
# INFO: Storage engine used for t1 seems to be unable to revert
 
8484
#       changes made by the failing statement.
 
8485
SET @@session.sql_mode = '';
 
8486
SET AUTOCOMMIT= 1;
 
8487
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8488
COMMIT WORK;
 
8489
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8490
        
 
8491
# check special-1 success:      1
 
8492
UPDATE t1 SET f_charbig = '';
 
8493
        
 
8494
# check special-2 success:      1
 
8495
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8496
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8497
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8498
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8499
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8500
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8501
'just inserted' FROM t0_template
 
8502
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8503
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8504
BEGIN
 
8505
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8506
f_charbig = 'updated by trigger'
 
8507
      WHERE f_int1 = new.f_int1;
 
8508
END|
 
8509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8510
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8511
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8512
        
 
8513
# check trigger-1 success:      1
 
8514
DROP TRIGGER trg_1;
 
8515
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8516
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8517
f_charbig = 'just inserted'
 
8518
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8519
DELETE FROM t0_aux
 
8520
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8521
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8522
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8523
'just inserted' FROM t0_template
 
8524
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8525
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8526
BEGIN
 
8527
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8528
f_charbig = 'updated by trigger'
 
8529
      WHERE f_int1 = new.f_int1;
 
8530
END|
 
8531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8532
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8534
        
 
8535
# check trigger-2 success:      1
 
8536
DROP TRIGGER trg_1;
 
8537
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8538
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8539
f_charbig = 'just inserted'
 
8540
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8541
DELETE FROM t0_aux
 
8542
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8543
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8544
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8545
'just inserted' FROM t0_template
 
8546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8547
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8548
BEGIN
 
8549
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8550
f_charbig = 'updated by trigger'
 
8551
      WHERE f_int1 = new.f_int1;
 
8552
END|
 
8553
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8554
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8555
        
 
8556
# check trigger-3 success:      1
 
8557
DROP TRIGGER trg_1;
 
8558
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8559
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8560
f_charbig = 'just inserted'
 
8561
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8562
DELETE FROM t0_aux
 
8563
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8565
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8566
'just inserted' FROM t0_template
 
8567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8568
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8569
BEGIN
 
8570
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8571
f_charbig = 'updated by trigger'
 
8572
      WHERE f_int1 = - old.f_int1;
 
8573
END|
 
8574
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8575
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8576
        
 
8577
# check trigger-4 success:      1
 
8578
DROP TRIGGER trg_1;
 
8579
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8580
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8581
f_charbig = 'just inserted'
 
8582
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8583
DELETE FROM t0_aux
 
8584
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8585
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8586
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8587
'just inserted' FROM t0_template
 
8588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8589
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8590
BEGIN
 
8591
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8592
f_charbig = 'updated by trigger'
 
8593
      WHERE f_int1 = new.f_int1;
 
8594
END|
 
8595
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8596
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8597
        
 
8598
# check trigger-5 success:      1
 
8599
DROP TRIGGER trg_1;
 
8600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8602
f_charbig = 'just inserted'
 
8603
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8604
DELETE FROM t0_aux
 
8605
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8608
'just inserted' FROM t0_template
 
8609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8610
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8611
BEGIN
 
8612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8613
f_charbig = 'updated by trigger'
 
8614
      WHERE f_int1 = - old.f_int1;
 
8615
END|
 
8616
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8617
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8618
        
 
8619
# check trigger-6 success:      1
 
8620
DROP TRIGGER trg_1;
 
8621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8623
f_charbig = 'just inserted'
 
8624
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8625
DELETE FROM t0_aux
 
8626
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8628
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8629
'just inserted' FROM t0_template
 
8630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8631
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8632
BEGIN
 
8633
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8634
f_charbig = 'updated by trigger'
 
8635
      WHERE f_int1 = - old.f_int1;
 
8636
END|
 
8637
DELETE FROM t0_aux
 
8638
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8639
        
 
8640
# check trigger-7 success:      1
 
8641
DROP TRIGGER trg_1;
 
8642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8644
f_charbig = 'just inserted'
 
8645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8646
DELETE FROM t0_aux
 
8647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8650
'just inserted' FROM t0_template
 
8651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8652
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8653
BEGIN
 
8654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8655
f_charbig = 'updated by trigger'
 
8656
      WHERE f_int1 = - old.f_int1;
 
8657
END|
 
8658
DELETE FROM t0_aux
 
8659
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8660
        
 
8661
# check trigger-8 success:      1
 
8662
DROP TRIGGER trg_1;
 
8663
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8664
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8665
f_charbig = 'just inserted'
 
8666
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8667
DELETE FROM t0_aux
 
8668
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8669
DELETE FROM t1
 
8670
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8671
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8672
BEGIN
 
8673
SET new.f_int1 = old.f_int1 + @max_row,
 
8674
new.f_int2 = old.f_int2 - @max_row,
 
8675
new.f_charbig = '####updated per update trigger####';
 
8676
END|
 
8677
UPDATE t1
 
8678
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8679
f_charbig = '####updated per update statement itself####';
 
8680
        
 
8681
# check trigger-9 success:      1
 
8682
DROP TRIGGER trg_2;
 
8683
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8684
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8685
f_charbig = CONCAT('===',f_char1,'===');
 
8686
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8687
BEGIN
 
8688
SET new.f_int1 = new.f_int1 + @max_row,
 
8689
new.f_int2 = new.f_int2 - @max_row,
 
8690
new.f_charbig = '####updated per update trigger####';
 
8691
END|
 
8692
UPDATE t1
 
8693
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8694
f_charbig = '####updated per update statement itself####';
 
8695
        
 
8696
# check trigger-10 success:     1
 
8697
DROP TRIGGER trg_2;
 
8698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8700
f_charbig = CONCAT('===',f_char1,'===');
 
8701
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8702
BEGIN
 
8703
SET new.f_int1 = @my_max1 + @counter,
 
8704
new.f_int2 = @my_min2 - @counter,
 
8705
new.f_charbig = '####updated per insert trigger####';
 
8706
SET @counter = @counter + 1;
 
8707
END|
 
8708
SET @counter = 1;
 
8709
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8710
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8711
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8712
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8714
ORDER BY f_int1;
 
8715
DROP TRIGGER trg_3;
 
8716
        
 
8717
# check trigger-11 success:     1
 
8718
DELETE FROM t1
 
8719
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8720
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8721
AND f_charbig = '####updated per insert trigger####';
 
8722
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8723
BEGIN
 
8724
SET new.f_int1 = @my_max1 + @counter,
 
8725
new.f_int2 = @my_min2 - @counter,
 
8726
new.f_charbig = '####updated per insert trigger####';
 
8727
SET @counter = @counter + 1;
 
8728
END|
 
8729
SET @counter = 1;
 
8730
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8731
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8732
SELECT CAST(f_int1 AS CHAR),
 
8733
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8734
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8735
ORDER BY f_int1;
 
8736
DROP TRIGGER trg_3;
 
8737
        
 
8738
# check trigger-12 success:     1
 
8739
DELETE FROM t1
 
8740
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8741
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8742
AND f_charbig = '####updated per insert trigger####';
 
8743
ANALYZE  TABLE t1;
 
8744
Table   Op      Msg_type        Msg_text
 
8745
test.t1 analyze status  OK
 
8746
CHECK    TABLE t1 EXTENDED;
 
8747
Table   Op      Msg_type        Msg_text
 
8748
test.t1 check   status  OK
 
8749
CHECKSUM TABLE t1 EXTENDED;
 
8750
Table   Checksum
 
8751
test.t1 <some_value>
 
8752
OPTIMIZE TABLE t1;
 
8753
Table   Op      Msg_type        Msg_text
 
8754
test.t1 optimize        status  OK
 
8755
# check layout success:    1
 
8756
REPAIR   TABLE t1 EXTENDED;
 
8757
Table   Op      Msg_type        Msg_text
 
8758
test.t1 repair  status  OK
 
8759
# check layout success:    1
 
8760
TRUNCATE t1;
 
8761
        
 
8762
# check TRUNCATE success:       1
 
8763
# check layout success:    1
 
8764
# End usability test (inc/partition_check.inc)
 
8765
DROP TABLE t1;
 
8766
CREATE TABLE t1 (
 
8767
f_int1 INTEGER,
 
8768
f_int2 INTEGER,
 
8769
f_char1 CHAR(20),
 
8770
f_char2 CHAR(20),
 
8771
f_charbig VARCHAR(1000)
 
8772
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
8773
)
 
8774
PARTITION BY LIST(MOD(f_int1,4))
 
8775
(PARTITION part_3 VALUES IN (-3),
 
8776
PARTITION part_2 VALUES IN (-2),
 
8777
PARTITION part_1 VALUES IN (-1),
 
8778
PARTITION part_N VALUES IN (NULL),
 
8779
PARTITION part0 VALUES IN (0),
 
8780
PARTITION part1 VALUES IN (1),
 
8781
PARTITION part2 VALUES IN (2),
 
8782
PARTITION part3 VALUES IN (3));
 
8783
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8784
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
8785
# Start usability test (inc/partition_check.inc)
 
8786
create_command
 
8787
SHOW CREATE TABLE t1;
 
8788
Table   Create Table
 
8789
t1      CREATE TABLE `t1` (
 
8790
  `f_int1` int(11) DEFAULT NULL,
 
8791
  `f_int2` int(11) DEFAULT NULL,
 
8792
  `f_char1` char(20) DEFAULT NULL,
 
8793
  `f_char2` char(20) DEFAULT NULL,
 
8794
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8795
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
8796
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
8797
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
8798
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
8799
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
8800
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
8801
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
8802
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
8803
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
8804
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
8805
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
8806
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
8807
 
 
8808
unified filelist
 
8809
t1#P#part0.MYD
 
8810
t1#P#part0.MYI
 
8811
t1#P#part1.MYD
 
8812
t1#P#part1.MYI
 
8813
t1#P#part2.MYD
 
8814
t1#P#part2.MYI
 
8815
t1#P#part3.MYD
 
8816
t1#P#part3.MYI
 
8817
t1#P#part_1.MYD
 
8818
t1#P#part_1.MYI
 
8819
t1#P#part_2.MYD
 
8820
t1#P#part_2.MYI
 
8821
t1#P#part_3.MYD
 
8822
t1#P#part_3.MYI
 
8823
t1#P#part_N.MYD
 
8824
t1#P#part_N.MYI
 
8825
t1.frm
 
8826
t1.par
 
8827
 
 
8828
# check prerequisites-1 success:    1
 
8829
# check COUNT(*) success:    1
 
8830
# check MIN/MAX(f_int1) success:    1
 
8831
# check MIN/MAX(f_int2) success:    1
 
8832
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8833
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8834
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8835
WHERE f_int1 IN (2,3);
 
8836
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
8837
# check prerequisites-3 success:    1
 
8838
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8839
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8840
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8841
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8842
WHERE f_int1 IN (2,3);
 
8843
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8844
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8845
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8846
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8847
WHERE f_int1 IN (2,3);
 
8848
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8849
# check read via f_int1 success: 1
 
8850
# check read via f_int2 success: 1
 
8851
        
 
8852
# check multiple-1 success:     1
 
8853
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8854
        
 
8855
# check multiple-2 success:     1
 
8856
INSERT INTO t1 SELECT * FROM t0_template
 
8857
WHERE MOD(f_int1,3) = 0;
 
8858
        
 
8859
# check multiple-3 success:     1
 
8860
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8861
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8862
AND @max_row_div2 + @max_row_div4;
 
8863
        
 
8864
# check multiple-4 success:     1
 
8865
DELETE FROM t1
 
8866
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8867
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8868
        
 
8869
# check multiple-5 success:     1
 
8870
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8871
WHERE MOD(f_int1,3) = 0
 
8872
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8873
SELECT COUNT(*) INTO @clash_count
 
8874
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8875
WHERE MOD(f_int1,3) = 0
 
8876
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8877
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8878
INSERT INTO t1
 
8879
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8880
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8881
f_charbig = '#SINGLE#';
 
8882
        
 
8883
# check single-1 success:       1
 
8884
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8885
INSERT INTO t1
 
8886
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8887
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8888
f_charbig = '#SINGLE#';
 
8889
        
 
8890
# check single-2 success:       1
 
8891
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8892
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8893
UPDATE t1 SET f_int1 = @cur_value2
 
8894
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8895
        
 
8896
# check single-3 success:       1
 
8897
SET @cur_value1= -1;
 
8898
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8899
UPDATE t1 SET f_int1 = @cur_value1
 
8900
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8901
        
 
8902
# check single-4 success:       1
 
8903
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8904
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8905
        
 
8906
# check single-5 success:       1
 
8907
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8908
        
 
8909
# check single-6 success:       1
 
8910
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8911
        
 
8912
# check single-7 success:       1
 
8913
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8914
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8915
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8916
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8917
f_charbig = '#NULL#';
 
8918
INSERT INTO t1
 
8919
SET f_int1 = NULL , f_int2 = -@max_row,
 
8920
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8921
f_charbig = '#NULL#';
 
8922
# check null success:    1
 
8923
        
 
8924
# check null-1 success:         1
 
8925
UPDATE t1 SET f_int1 = -@max_row
 
8926
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8927
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8928
        
 
8929
# check null-2 success:         1
 
8930
UPDATE t1 SET f_int1 = NULL
 
8931
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8932
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8933
        
 
8934
# check null-3 success:         1
 
8935
DELETE FROM t1
 
8936
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8937
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8938
        
 
8939
# check null-4 success:         1
 
8940
DELETE FROM t1
 
8941
WHERE f_int1 = 0 AND f_int2 = 0
 
8942
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8943
AND f_charbig = '#NULL#';
 
8944
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8945
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8946
   FROM t0_template source_tab
 
8947
WHERE MOD(f_int1,3) = 0
 
8948
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8949
ON DUPLICATE KEY
 
8950
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8951
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8952
f_charbig = 'was updated';
 
8953
        
 
8954
# check unique-1-a success:     1
 
8955
        
 
8956
# check unique-1-b success:     1
 
8957
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8958
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8959
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8960
f_charbig = CONCAT('===',f_char1,'===')
 
8961
WHERE f_charbig = 'was updated';
 
8962
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8963
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8964
   FROM t0_template source_tab
 
8965
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8966
        
 
8967
# check replace success:        1
 
8968
DELETE FROM t1
 
8969
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8970
DELETE FROM t1
 
8971
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8972
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8973
UPDATE t1 SET f_int2 = f_int1,
 
8974
f_char1 = CAST(f_int1 AS CHAR),
 
8975
f_char2 = CAST(f_int1 AS CHAR),
 
8976
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8977
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8978
SET AUTOCOMMIT= 0;
 
8979
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8980
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8981
FROM t0_template source_tab
 
8982
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8983
        
 
8984
# check transactions-1 success:         1
 
8985
COMMIT WORK;
 
8986
        
 
8987
# check transactions-2 success:         1
 
8988
ROLLBACK WORK;
 
8989
        
 
8990
# check transactions-3 success:         1
 
8991
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8992
COMMIT WORK;
 
8993
ROLLBACK WORK;
 
8994
        
 
8995
# check transactions-4 success:         1
 
8996
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8997
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8998
FROM t0_template source_tab
 
8999
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9000
        
 
9001
# check transactions-5 success:         1
 
9002
ROLLBACK WORK;
 
9003
Warnings:
 
9004
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
9005
        
 
9006
# check transactions-6 success:         1
 
9007
# INFO: Storage engine used for t1 seems to be not transactional.
 
9008
COMMIT;
 
9009
        
 
9010
# check transactions-7 success:         1
 
9011
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9012
COMMIT WORK;
 
9013
SET @@session.sql_mode = 'traditional';
 
9014
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9015
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9016
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9017
'', '', 'was inserted' FROM t0_template
 
9018
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9019
ERROR 22012: Division by 0
 
9020
COMMIT;
 
9021
        
 
9022
# check transactions-8 success:         1
 
9023
# INFO: Storage engine used for t1 seems to be unable to revert
 
9024
#       changes made by the failing statement.
 
9025
SET @@session.sql_mode = '';
 
9026
SET AUTOCOMMIT= 1;
 
9027
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9028
COMMIT WORK;
 
9029
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9030
        
 
9031
# check special-1 success:      1
 
9032
UPDATE t1 SET f_charbig = '';
 
9033
        
 
9034
# check special-2 success:      1
 
9035
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9036
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9037
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9040
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9041
'just inserted' FROM t0_template
 
9042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9043
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9044
BEGIN
 
9045
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9046
f_charbig = 'updated by trigger'
 
9047
      WHERE f_int1 = new.f_int1;
 
9048
END|
 
9049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9050
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9052
        
 
9053
# check trigger-1 success:      1
 
9054
DROP TRIGGER trg_1;
 
9055
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9056
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9057
f_charbig = 'just inserted'
 
9058
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9059
DELETE FROM t0_aux
 
9060
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9063
'just inserted' FROM t0_template
 
9064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9065
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9066
BEGIN
 
9067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9068
f_charbig = 'updated by trigger'
 
9069
      WHERE f_int1 = new.f_int1;
 
9070
END|
 
9071
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9072
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9074
        
 
9075
# check trigger-2 success:      1
 
9076
DROP TRIGGER trg_1;
 
9077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9079
f_charbig = 'just inserted'
 
9080
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9081
DELETE FROM t0_aux
 
9082
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9083
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9084
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9085
'just inserted' FROM t0_template
 
9086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9087
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9088
BEGIN
 
9089
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9090
f_charbig = 'updated by trigger'
 
9091
      WHERE f_int1 = new.f_int1;
 
9092
END|
 
9093
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9094
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9095
        
 
9096
# check trigger-3 success:      1
 
9097
DROP TRIGGER trg_1;
 
9098
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9099
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9100
f_charbig = 'just inserted'
 
9101
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9102
DELETE FROM t0_aux
 
9103
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9105
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9106
'just inserted' FROM t0_template
 
9107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9108
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9109
BEGIN
 
9110
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9111
f_charbig = 'updated by trigger'
 
9112
      WHERE f_int1 = - old.f_int1;
 
9113
END|
 
9114
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9115
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9116
        
 
9117
# check trigger-4 success:      1
 
9118
DROP TRIGGER trg_1;
 
9119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9121
f_charbig = 'just inserted'
 
9122
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9123
DELETE FROM t0_aux
 
9124
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9127
'just inserted' FROM t0_template
 
9128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9129
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9130
BEGIN
 
9131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9132
f_charbig = 'updated by trigger'
 
9133
      WHERE f_int1 = new.f_int1;
 
9134
END|
 
9135
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9136
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9137
        
 
9138
# check trigger-5 success:      1
 
9139
DROP TRIGGER trg_1;
 
9140
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9141
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9142
f_charbig = 'just inserted'
 
9143
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9144
DELETE FROM t0_aux
 
9145
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9147
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9148
'just inserted' FROM t0_template
 
9149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9150
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9151
BEGIN
 
9152
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9153
f_charbig = 'updated by trigger'
 
9154
      WHERE f_int1 = - old.f_int1;
 
9155
END|
 
9156
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9157
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9158
        
 
9159
# check trigger-6 success:      1
 
9160
DROP TRIGGER trg_1;
 
9161
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9162
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9163
f_charbig = 'just inserted'
 
9164
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9165
DELETE FROM t0_aux
 
9166
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9168
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9169
'just inserted' FROM t0_template
 
9170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9171
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9172
BEGIN
 
9173
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9174
f_charbig = 'updated by trigger'
 
9175
      WHERE f_int1 = - old.f_int1;
 
9176
END|
 
9177
DELETE FROM t0_aux
 
9178
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9179
        
 
9180
# check trigger-7 success:      1
 
9181
DROP TRIGGER trg_1;
 
9182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9184
f_charbig = 'just inserted'
 
9185
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9186
DELETE FROM t0_aux
 
9187
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9189
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9190
'just inserted' FROM t0_template
 
9191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9192
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9193
BEGIN
 
9194
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9195
f_charbig = 'updated by trigger'
 
9196
      WHERE f_int1 = - old.f_int1;
 
9197
END|
 
9198
DELETE FROM t0_aux
 
9199
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9200
        
 
9201
# check trigger-8 success:      1
 
9202
DROP TRIGGER trg_1;
 
9203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9205
f_charbig = 'just inserted'
 
9206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9207
DELETE FROM t0_aux
 
9208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9209
DELETE FROM t1
 
9210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9211
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9212
BEGIN
 
9213
SET new.f_int1 = old.f_int1 + @max_row,
 
9214
new.f_int2 = old.f_int2 - @max_row,
 
9215
new.f_charbig = '####updated per update trigger####';
 
9216
END|
 
9217
UPDATE t1
 
9218
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9219
f_charbig = '####updated per update statement itself####';
 
9220
        
 
9221
# check trigger-9 success:      1
 
9222
DROP TRIGGER trg_2;
 
9223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9225
f_charbig = CONCAT('===',f_char1,'===');
 
9226
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9227
BEGIN
 
9228
SET new.f_int1 = new.f_int1 + @max_row,
 
9229
new.f_int2 = new.f_int2 - @max_row,
 
9230
new.f_charbig = '####updated per update trigger####';
 
9231
END|
 
9232
UPDATE t1
 
9233
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9234
f_charbig = '####updated per update statement itself####';
 
9235
        
 
9236
# check trigger-10 success:     1
 
9237
DROP TRIGGER trg_2;
 
9238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9240
f_charbig = CONCAT('===',f_char1,'===');
 
9241
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9242
BEGIN
 
9243
SET new.f_int1 = @my_max1 + @counter,
 
9244
new.f_int2 = @my_min2 - @counter,
 
9245
new.f_charbig = '####updated per insert trigger####';
 
9246
SET @counter = @counter + 1;
 
9247
END|
 
9248
SET @counter = 1;
 
9249
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9250
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9251
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9252
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9253
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9254
ORDER BY f_int1;
 
9255
DROP TRIGGER trg_3;
 
9256
        
 
9257
# check trigger-11 success:     1
 
9258
DELETE FROM t1
 
9259
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9260
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9261
AND f_charbig = '####updated per insert trigger####';
 
9262
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9263
BEGIN
 
9264
SET new.f_int1 = @my_max1 + @counter,
 
9265
new.f_int2 = @my_min2 - @counter,
 
9266
new.f_charbig = '####updated per insert trigger####';
 
9267
SET @counter = @counter + 1;
 
9268
END|
 
9269
SET @counter = 1;
 
9270
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9271
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9272
SELECT CAST(f_int1 AS CHAR),
 
9273
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9275
ORDER BY f_int1;
 
9276
DROP TRIGGER trg_3;
 
9277
        
 
9278
# check trigger-12 success:     1
 
9279
DELETE FROM t1
 
9280
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9281
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9282
AND f_charbig = '####updated per insert trigger####';
 
9283
ANALYZE  TABLE t1;
 
9284
Table   Op      Msg_type        Msg_text
 
9285
test.t1 analyze status  OK
 
9286
CHECK    TABLE t1 EXTENDED;
 
9287
Table   Op      Msg_type        Msg_text
 
9288
test.t1 check   status  OK
 
9289
CHECKSUM TABLE t1 EXTENDED;
 
9290
Table   Checksum
 
9291
test.t1 <some_value>
 
9292
OPTIMIZE TABLE t1;
 
9293
Table   Op      Msg_type        Msg_text
 
9294
test.t1 optimize        status  OK
 
9295
# check layout success:    1
 
9296
REPAIR   TABLE t1 EXTENDED;
 
9297
Table   Op      Msg_type        Msg_text
 
9298
test.t1 repair  status  OK
 
9299
# check layout success:    1
 
9300
TRUNCATE t1;
 
9301
        
 
9302
# check TRUNCATE success:       1
 
9303
# check layout success:    1
 
9304
# End usability test (inc/partition_check.inc)
 
9305
DROP TABLE t1;
 
9306
CREATE TABLE t1 (
 
9307
f_int1 INTEGER,
 
9308
f_int2 INTEGER,
 
9309
f_char1 CHAR(20),
 
9310
f_char2 CHAR(20),
 
9311
f_charbig VARCHAR(1000)
 
9312
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
9313
)
 
9314
PARTITION BY RANGE(f_int1)
 
9315
(PARTITION parta VALUES LESS THAN (0),
 
9316
PARTITION partb VALUES LESS THAN (5),
 
9317
PARTITION partc VALUES LESS THAN (10),
 
9318
PARTITION partd VALUES LESS THAN (10 + 5),
 
9319
PARTITION parte VALUES LESS THAN (20),
 
9320
PARTITION partf VALUES LESS THAN (2147483646));
 
9321
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9322
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
9323
# Start usability test (inc/partition_check.inc)
 
9324
create_command
 
9325
SHOW CREATE TABLE t1;
 
9326
Table   Create Table
 
9327
t1      CREATE TABLE `t1` (
 
9328
  `f_int1` int(11) DEFAULT NULL,
 
9329
  `f_int2` int(11) DEFAULT NULL,
 
9330
  `f_char1` char(20) DEFAULT NULL,
 
9331
  `f_char2` char(20) DEFAULT NULL,
 
9332
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9333
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
9334
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
9335
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
9336
/*!50100 PARTITION BY RANGE (f_int1)
 
9337
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
9338
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
9339
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
9340
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
9341
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
9342
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
9343
 
 
9344
unified filelist
 
9345
t1#P#parta.MYD
 
9346
t1#P#parta.MYI
 
9347
t1#P#partb.MYD
 
9348
t1#P#partb.MYI
 
9349
t1#P#partc.MYD
 
9350
t1#P#partc.MYI
 
9351
t1#P#partd.MYD
 
9352
t1#P#partd.MYI
 
9353
t1#P#parte.MYD
 
9354
t1#P#parte.MYI
 
9355
t1#P#partf.MYD
 
9356
t1#P#partf.MYI
 
9357
t1.frm
 
9358
t1.par
 
9359
 
 
9360
# check prerequisites-1 success:    1
 
9361
# check COUNT(*) success:    1
 
9362
# check MIN/MAX(f_int1) success:    1
 
9363
# check MIN/MAX(f_int2) success:    1
 
9364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9366
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9367
WHERE f_int1 IN (2,3);
 
9368
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
9369
# check prerequisites-3 success:    1
 
9370
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9372
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9373
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9374
WHERE f_int1 IN (2,3);
 
9375
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9377
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9378
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9379
WHERE f_int1 IN (2,3);
 
9380
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9381
# check read via f_int1 success: 1
 
9382
# check read via f_int2 success: 1
 
9383
        
 
9384
# check multiple-1 success:     1
 
9385
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9386
        
 
9387
# check multiple-2 success:     1
 
9388
INSERT INTO t1 SELECT * FROM t0_template
 
9389
WHERE MOD(f_int1,3) = 0;
 
9390
        
 
9391
# check multiple-3 success:     1
 
9392
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9393
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9394
AND @max_row_div2 + @max_row_div4;
 
9395
        
 
9396
# check multiple-4 success:     1
 
9397
DELETE FROM t1
 
9398
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9399
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9400
        
 
9401
# check multiple-5 success:     1
 
9402
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9403
WHERE MOD(f_int1,3) = 0
 
9404
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9405
SELECT COUNT(*) INTO @clash_count
 
9406
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9407
WHERE MOD(f_int1,3) = 0
 
9408
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9409
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9410
INSERT INTO t1
 
9411
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9412
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9413
f_charbig = '#SINGLE#';
 
9414
        
 
9415
# check single-1 success:       1
 
9416
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9417
INSERT INTO t1
 
9418
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9419
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9420
f_charbig = '#SINGLE#';
 
9421
        
 
9422
# check single-2 success:       1
 
9423
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9424
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9425
UPDATE t1 SET f_int1 = @cur_value2
 
9426
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9427
        
 
9428
# check single-3 success:       1
 
9429
SET @cur_value1= -1;
 
9430
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9431
UPDATE t1 SET f_int1 = @cur_value1
 
9432
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9433
        
 
9434
# check single-4 success:       1
 
9435
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9436
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9437
        
 
9438
# check single-5 success:       1
 
9439
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9440
        
 
9441
# check single-6 success:       1
 
9442
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9443
ERROR HY000: Table has no partition for value 2147483647
 
9444
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9445
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9446
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9447
f_charbig = '#NULL#';
 
9448
INSERT INTO t1
 
9449
SET f_int1 = NULL , f_int2 = -@max_row,
 
9450
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9451
f_charbig = '#NULL#';
 
9452
# check null success:    1
 
9453
        
 
9454
# check null-1 success:         1
 
9455
UPDATE t1 SET f_int1 = -@max_row
 
9456
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9457
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9458
        
 
9459
# check null-2 success:         1
 
9460
UPDATE t1 SET f_int1 = NULL
 
9461
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9462
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9463
        
 
9464
# check null-3 success:         1
 
9465
DELETE FROM t1
 
9466
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9467
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9468
        
 
9469
# check null-4 success:         1
 
9470
DELETE FROM t1
 
9471
WHERE f_int1 = 0 AND f_int2 = 0
 
9472
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9473
AND f_charbig = '#NULL#';
 
9474
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9475
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9476
   FROM t0_template source_tab
 
9477
WHERE MOD(f_int1,3) = 0
 
9478
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
9479
ON DUPLICATE KEY
 
9480
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
9481
f_int2 = 2 * @max_row + source_tab.f_int1,
 
9482
f_charbig = 'was updated';
 
9483
        
 
9484
# check unique-1-a success:     1
 
9485
        
 
9486
# check unique-1-b success:     1
 
9487
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9490
f_charbig = CONCAT('===',f_char1,'===')
 
9491
WHERE f_charbig = 'was updated';
 
9492
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9493
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
9494
   FROM t0_template source_tab
 
9495
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9496
        
 
9497
# check replace success:        1
 
9498
DELETE FROM t1
 
9499
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
9500
DELETE FROM t1
 
9501
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
9502
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
9503
UPDATE t1 SET f_int2 = f_int1,
 
9504
f_char1 = CAST(f_int1 AS CHAR),
 
9505
f_char2 = CAST(f_int1 AS CHAR),
 
9506
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
9507
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
9508
SET AUTOCOMMIT= 0;
 
9509
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9510
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9511
FROM t0_template source_tab
 
9512
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9513
        
 
9514
# check transactions-1 success:         1
 
9515
COMMIT WORK;
 
9516
        
 
9517
# check transactions-2 success:         1
 
9518
ROLLBACK WORK;
 
9519
        
 
9520
# check transactions-3 success:         1
 
9521
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9522
COMMIT WORK;
 
9523
ROLLBACK WORK;
 
9524
        
 
9525
# check transactions-4 success:         1
 
9526
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9527
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9528
FROM t0_template source_tab
 
9529
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9530
        
 
9531
# check transactions-5 success:         1
 
9532
ROLLBACK WORK;
 
9533
Warnings:
 
9534
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
9535
        
 
9536
# check transactions-6 success:         1
 
9537
# INFO: Storage engine used for t1 seems to be not transactional.
 
9538
COMMIT;
 
9539
        
 
9540
# check transactions-7 success:         1
 
9541
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9542
COMMIT WORK;
 
9543
SET @@session.sql_mode = 'traditional';
 
9544
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9545
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9546
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9547
'', '', 'was inserted' FROM t0_template
 
9548
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9549
ERROR 22012: Division by 0
 
9550
COMMIT;
 
9551
        
 
9552
# check transactions-8 success:         1
 
9553
# INFO: Storage engine used for t1 seems to be unable to revert
 
9554
#       changes made by the failing statement.
 
9555
SET @@session.sql_mode = '';
 
9556
SET AUTOCOMMIT= 1;
 
9557
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9558
COMMIT WORK;
 
9559
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9560
        
 
9561
# check special-1 success:      1
 
9562
UPDATE t1 SET f_charbig = '';
 
9563
        
 
9564
# check special-2 success:      1
 
9565
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9566
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9567
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9570
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9571
'just inserted' FROM t0_template
 
9572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9573
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9574
BEGIN
 
9575
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9576
f_charbig = 'updated by trigger'
 
9577
      WHERE f_int1 = new.f_int1;
 
9578
END|
 
9579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9580
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9582
        
 
9583
# check trigger-1 success:      1
 
9584
DROP TRIGGER trg_1;
 
9585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9587
f_charbig = 'just inserted'
 
9588
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9589
DELETE FROM t0_aux
 
9590
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9592
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9593
'just inserted' FROM t0_template
 
9594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9595
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9596
BEGIN
 
9597
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9598
f_charbig = 'updated by trigger'
 
9599
      WHERE f_int1 = new.f_int1;
 
9600
END|
 
9601
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9602
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9604
        
 
9605
# check trigger-2 success:      1
 
9606
DROP TRIGGER trg_1;
 
9607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9609
f_charbig = 'just inserted'
 
9610
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9611
DELETE FROM t0_aux
 
9612
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9613
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9614
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9615
'just inserted' FROM t0_template
 
9616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9617
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9618
BEGIN
 
9619
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9620
f_charbig = 'updated by trigger'
 
9621
      WHERE f_int1 = new.f_int1;
 
9622
END|
 
9623
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9624
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9625
        
 
9626
# check trigger-3 success:      1
 
9627
DROP TRIGGER trg_1;
 
9628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9630
f_charbig = 'just inserted'
 
9631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9632
DELETE FROM t0_aux
 
9633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9636
'just inserted' FROM t0_template
 
9637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9638
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9639
BEGIN
 
9640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9641
f_charbig = 'updated by trigger'
 
9642
      WHERE f_int1 = - old.f_int1;
 
9643
END|
 
9644
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9646
        
 
9647
# check trigger-4 success:      1
 
9648
DROP TRIGGER trg_1;
 
9649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9651
f_charbig = 'just inserted'
 
9652
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9653
DELETE FROM t0_aux
 
9654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9655
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9656
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9657
'just inserted' FROM t0_template
 
9658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9659
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9660
BEGIN
 
9661
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9662
f_charbig = 'updated by trigger'
 
9663
      WHERE f_int1 = new.f_int1;
 
9664
END|
 
9665
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9666
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9667
        
 
9668
# check trigger-5 success:      1
 
9669
DROP TRIGGER trg_1;
 
9670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9672
f_charbig = 'just inserted'
 
9673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9674
DELETE FROM t0_aux
 
9675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9678
'just inserted' FROM t0_template
 
9679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9680
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9681
BEGIN
 
9682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9683
f_charbig = 'updated by trigger'
 
9684
      WHERE f_int1 = - old.f_int1;
 
9685
END|
 
9686
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9687
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9688
        
 
9689
# check trigger-6 success:      1
 
9690
DROP TRIGGER trg_1;
 
9691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9693
f_charbig = 'just inserted'
 
9694
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9695
DELETE FROM t0_aux
 
9696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9699
'just inserted' FROM t0_template
 
9700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9701
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9702
BEGIN
 
9703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9704
f_charbig = 'updated by trigger'
 
9705
      WHERE f_int1 = - old.f_int1;
 
9706
END|
 
9707
DELETE FROM t0_aux
 
9708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9709
        
 
9710
# check trigger-7 success:      1
 
9711
DROP TRIGGER trg_1;
 
9712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9714
f_charbig = 'just inserted'
 
9715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9716
DELETE FROM t0_aux
 
9717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9720
'just inserted' FROM t0_template
 
9721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9722
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9723
BEGIN
 
9724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9725
f_charbig = 'updated by trigger'
 
9726
      WHERE f_int1 = - old.f_int1;
 
9727
END|
 
9728
DELETE FROM t0_aux
 
9729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9730
        
 
9731
# check trigger-8 success:      1
 
9732
DROP TRIGGER trg_1;
 
9733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9735
f_charbig = 'just inserted'
 
9736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9737
DELETE FROM t0_aux
 
9738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9739
DELETE FROM t1
 
9740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9741
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9742
BEGIN
 
9743
SET new.f_int1 = old.f_int1 + @max_row,
 
9744
new.f_int2 = old.f_int2 - @max_row,
 
9745
new.f_charbig = '####updated per update trigger####';
 
9746
END|
 
9747
UPDATE t1
 
9748
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9749
f_charbig = '####updated per update statement itself####';
 
9750
        
 
9751
# check trigger-9 success:      1
 
9752
DROP TRIGGER trg_2;
 
9753
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9754
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9755
f_charbig = CONCAT('===',f_char1,'===');
 
9756
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9757
BEGIN
 
9758
SET new.f_int1 = new.f_int1 + @max_row,
 
9759
new.f_int2 = new.f_int2 - @max_row,
 
9760
new.f_charbig = '####updated per update trigger####';
 
9761
END|
 
9762
UPDATE t1
 
9763
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9764
f_charbig = '####updated per update statement itself####';
 
9765
        
 
9766
# check trigger-10 success:     1
 
9767
DROP TRIGGER trg_2;
 
9768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9770
f_charbig = CONCAT('===',f_char1,'===');
 
9771
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9772
BEGIN
 
9773
SET new.f_int1 = @my_max1 + @counter,
 
9774
new.f_int2 = @my_min2 - @counter,
 
9775
new.f_charbig = '####updated per insert trigger####';
 
9776
SET @counter = @counter + 1;
 
9777
END|
 
9778
SET @counter = 1;
 
9779
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9781
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9782
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9784
ORDER BY f_int1;
 
9785
DROP TRIGGER trg_3;
 
9786
        
 
9787
# check trigger-11 success:     1
 
9788
DELETE FROM t1
 
9789
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9790
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9791
AND f_charbig = '####updated per insert trigger####';
 
9792
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9793
BEGIN
 
9794
SET new.f_int1 = @my_max1 + @counter,
 
9795
new.f_int2 = @my_min2 - @counter,
 
9796
new.f_charbig = '####updated per insert trigger####';
 
9797
SET @counter = @counter + 1;
 
9798
END|
 
9799
SET @counter = 1;
 
9800
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9801
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9802
SELECT CAST(f_int1 AS CHAR),
 
9803
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9804
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9805
ORDER BY f_int1;
 
9806
DROP TRIGGER trg_3;
 
9807
        
 
9808
# check trigger-12 success:     1
 
9809
DELETE FROM t1
 
9810
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9811
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9812
AND f_charbig = '####updated per insert trigger####';
 
9813
ANALYZE  TABLE t1;
 
9814
Table   Op      Msg_type        Msg_text
 
9815
test.t1 analyze status  OK
 
9816
CHECK    TABLE t1 EXTENDED;
 
9817
Table   Op      Msg_type        Msg_text
 
9818
test.t1 check   status  OK
 
9819
CHECKSUM TABLE t1 EXTENDED;
 
9820
Table   Checksum
 
9821
test.t1 <some_value>
 
9822
OPTIMIZE TABLE t1;
 
9823
Table   Op      Msg_type        Msg_text
 
9824
test.t1 optimize        status  OK
 
9825
# check layout success:    1
 
9826
REPAIR   TABLE t1 EXTENDED;
 
9827
Table   Op      Msg_type        Msg_text
 
9828
test.t1 repair  status  OK
 
9829
# check layout success:    1
 
9830
TRUNCATE t1;
 
9831
        
 
9832
# check TRUNCATE success:       1
 
9833
# check layout success:    1
 
9834
# End usability test (inc/partition_check.inc)
 
9835
DROP TABLE t1;
 
9836
CREATE TABLE t1 (
 
9837
f_int1 INTEGER,
 
9838
f_int2 INTEGER,
 
9839
f_char1 CHAR(20),
 
9840
f_char2 CHAR(20),
 
9841
f_charbig VARCHAR(1000)
 
9842
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
9843
)
 
9844
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
9845
(PARTITION parta VALUES LESS THAN (0),
 
9846
PARTITION partb VALUES LESS THAN (5),
 
9847
PARTITION partc VALUES LESS THAN (10),
 
9848
PARTITION partd VALUES LESS THAN (2147483646));
 
9849
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9850
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
9851
# Start usability test (inc/partition_check.inc)
 
9852
create_command
 
9853
SHOW CREATE TABLE t1;
 
9854
Table   Create Table
 
9855
t1      CREATE TABLE `t1` (
 
9856
  `f_int1` int(11) DEFAULT NULL,
 
9857
  `f_int2` int(11) DEFAULT NULL,
 
9858
  `f_char1` char(20) DEFAULT NULL,
 
9859
  `f_char2` char(20) DEFAULT NULL,
 
9860
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9861
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
9862
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
9863
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
9864
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
9865
SUBPARTITION BY HASH (f_int1)
 
9866
SUBPARTITIONS 2
 
9867
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
9868
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
9869
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
9870
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
9871
 
 
9872
unified filelist
 
9873
t1#P#parta#SP#partasp0.MYD
 
9874
t1#P#parta#SP#partasp0.MYI
 
9875
t1#P#parta#SP#partasp1.MYD
 
9876
t1#P#parta#SP#partasp1.MYI
 
9877
t1#P#partb#SP#partbsp0.MYD
 
9878
t1#P#partb#SP#partbsp0.MYI
 
9879
t1#P#partb#SP#partbsp1.MYD
 
9880
t1#P#partb#SP#partbsp1.MYI
 
9881
t1#P#partc#SP#partcsp0.MYD
 
9882
t1#P#partc#SP#partcsp0.MYI
 
9883
t1#P#partc#SP#partcsp1.MYD
 
9884
t1#P#partc#SP#partcsp1.MYI
 
9885
t1#P#partd#SP#partdsp0.MYD
 
9886
t1#P#partd#SP#partdsp0.MYI
 
9887
t1#P#partd#SP#partdsp1.MYD
 
9888
t1#P#partd#SP#partdsp1.MYI
 
9889
t1.frm
 
9890
t1.par
 
9891
 
 
9892
# check prerequisites-1 success:    1
 
9893
# check COUNT(*) success:    1
 
9894
# check MIN/MAX(f_int1) success:    1
 
9895
# check MIN/MAX(f_int2) success:    1
 
9896
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9897
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9898
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9899
WHERE f_int1 IN (2,3);
 
9900
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
9901
# check prerequisites-3 success:    1
 
9902
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9903
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9904
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9905
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9906
WHERE f_int1 IN (2,3);
 
9907
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9908
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9909
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9910
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9911
WHERE f_int1 IN (2,3);
 
9912
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9913
# check read via f_int1 success: 1
 
9914
# check read via f_int2 success: 1
 
9915
        
 
9916
# check multiple-1 success:     1
 
9917
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9918
        
 
9919
# check multiple-2 success:     1
 
9920
INSERT INTO t1 SELECT * FROM t0_template
 
9921
WHERE MOD(f_int1,3) = 0;
 
9922
        
 
9923
# check multiple-3 success:     1
 
9924
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9925
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9926
AND @max_row_div2 + @max_row_div4;
 
9927
        
 
9928
# check multiple-4 success:     1
 
9929
DELETE FROM t1
 
9930
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9931
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9932
        
 
9933
# check multiple-5 success:     1
 
9934
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9935
WHERE MOD(f_int1,3) = 0
 
9936
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9937
SELECT COUNT(*) INTO @clash_count
 
9938
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9939
WHERE MOD(f_int1,3) = 0
 
9940
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9941
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9942
INSERT INTO t1
 
9943
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9944
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9945
f_charbig = '#SINGLE#';
 
9946
        
 
9947
# check single-1 success:       1
 
9948
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9949
INSERT INTO t1
 
9950
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9951
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9952
f_charbig = '#SINGLE#';
 
9953
        
 
9954
# check single-2 success:       1
 
9955
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9956
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9957
UPDATE t1 SET f_int1 = @cur_value2
 
9958
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9959
        
 
9960
# check single-3 success:       1
 
9961
SET @cur_value1= -1;
 
9962
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9963
UPDATE t1 SET f_int1 = @cur_value1
 
9964
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9965
        
 
9966
# check single-4 success:       1
 
9967
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9968
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9969
        
 
9970
# check single-5 success:       1
 
9971
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9972
        
 
9973
# check single-6 success:       1
 
9974
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9975
        
 
9976
# check single-7 success:       1
 
9977
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9978
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9979
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9980
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9981
f_charbig = '#NULL#';
 
9982
INSERT INTO t1
 
9983
SET f_int1 = NULL , f_int2 = -@max_row,
 
9984
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9985
f_charbig = '#NULL#';
 
9986
# check null success:    1
 
9987
        
 
9988
# check null-1 success:         1
 
9989
UPDATE t1 SET f_int1 = -@max_row
 
9990
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9991
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9992
        
 
9993
# check null-2 success:         1
 
9994
UPDATE t1 SET f_int1 = NULL
 
9995
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9996
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9997
        
 
9998
# check null-3 success:         1
 
9999
DELETE FROM t1
 
10000
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10001
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10002
        
 
10003
# check null-4 success:         1
 
10004
DELETE FROM t1
 
10005
WHERE f_int1 = 0 AND f_int2 = 0
 
10006
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10007
AND f_charbig = '#NULL#';
 
10008
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10009
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10010
   FROM t0_template source_tab
 
10011
WHERE MOD(f_int1,3) = 0
 
10012
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10013
ON DUPLICATE KEY
 
10014
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10015
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10016
f_charbig = 'was updated';
 
10017
        
 
10018
# check unique-1-a success:     1
 
10019
        
 
10020
# check unique-1-b success:     1
 
10021
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10024
f_charbig = CONCAT('===',f_char1,'===')
 
10025
WHERE f_charbig = 'was updated';
 
10026
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10027
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10028
   FROM t0_template source_tab
 
10029
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10030
        
 
10031
# check replace success:        1
 
10032
DELETE FROM t1
 
10033
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10034
DELETE FROM t1
 
10035
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10036
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10037
UPDATE t1 SET f_int2 = f_int1,
 
10038
f_char1 = CAST(f_int1 AS CHAR),
 
10039
f_char2 = CAST(f_int1 AS CHAR),
 
10040
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10041
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10042
SET AUTOCOMMIT= 0;
 
10043
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10044
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10045
FROM t0_template source_tab
 
10046
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10047
        
 
10048
# check transactions-1 success:         1
 
10049
COMMIT WORK;
 
10050
        
 
10051
# check transactions-2 success:         1
 
10052
ROLLBACK WORK;
 
10053
        
 
10054
# check transactions-3 success:         1
 
10055
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10056
COMMIT WORK;
 
10057
ROLLBACK WORK;
 
10058
        
 
10059
# check transactions-4 success:         1
 
10060
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10061
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10062
FROM t0_template source_tab
 
10063
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10064
        
 
10065
# check transactions-5 success:         1
 
10066
ROLLBACK WORK;
 
10067
Warnings:
 
10068
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
10069
        
 
10070
# check transactions-6 success:         1
 
10071
# INFO: Storage engine used for t1 seems to be not transactional.
 
10072
COMMIT;
 
10073
        
 
10074
# check transactions-7 success:         1
 
10075
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10076
COMMIT WORK;
 
10077
SET @@session.sql_mode = 'traditional';
 
10078
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10079
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10080
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10081
'', '', 'was inserted' FROM t0_template
 
10082
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10083
ERROR 22012: Division by 0
 
10084
COMMIT;
 
10085
        
 
10086
# check transactions-8 success:         1
 
10087
# INFO: Storage engine used for t1 seems to be unable to revert
 
10088
#       changes made by the failing statement.
 
10089
SET @@session.sql_mode = '';
 
10090
SET AUTOCOMMIT= 1;
 
10091
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10092
COMMIT WORK;
 
10093
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10094
        
 
10095
# check special-1 success:      1
 
10096
UPDATE t1 SET f_charbig = '';
 
10097
        
 
10098
# check special-2 success:      1
 
10099
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10100
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10101
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10103
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10104
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10105
'just inserted' FROM t0_template
 
10106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10107
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10108
BEGIN
 
10109
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10110
f_charbig = 'updated by trigger'
 
10111
      WHERE f_int1 = new.f_int1;
 
10112
END|
 
10113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10114
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10116
        
 
10117
# check trigger-1 success:      1
 
10118
DROP TRIGGER trg_1;
 
10119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10121
f_charbig = 'just inserted'
 
10122
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10123
DELETE FROM t0_aux
 
10124
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10126
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10127
'just inserted' FROM t0_template
 
10128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10129
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10130
BEGIN
 
10131
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10132
f_charbig = 'updated by trigger'
 
10133
      WHERE f_int1 = new.f_int1;
 
10134
END|
 
10135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10136
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10138
        
 
10139
# check trigger-2 success:      1
 
10140
DROP TRIGGER trg_1;
 
10141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10143
f_charbig = 'just inserted'
 
10144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10145
DELETE FROM t0_aux
 
10146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10149
'just inserted' FROM t0_template
 
10150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10151
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10152
BEGIN
 
10153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10154
f_charbig = 'updated by trigger'
 
10155
      WHERE f_int1 = new.f_int1;
 
10156
END|
 
10157
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10159
        
 
10160
# check trigger-3 success:      1
 
10161
DROP TRIGGER trg_1;
 
10162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10164
f_charbig = 'just inserted'
 
10165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10166
DELETE FROM t0_aux
 
10167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10170
'just inserted' FROM t0_template
 
10171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10172
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10173
BEGIN
 
10174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10175
f_charbig = 'updated by trigger'
 
10176
      WHERE f_int1 = - old.f_int1;
 
10177
END|
 
10178
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10180
        
 
10181
# check trigger-4 success:      1
 
10182
DROP TRIGGER trg_1;
 
10183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10185
f_charbig = 'just inserted'
 
10186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10187
DELETE FROM t0_aux
 
10188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10191
'just inserted' FROM t0_template
 
10192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10193
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10194
BEGIN
 
10195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10196
f_charbig = 'updated by trigger'
 
10197
      WHERE f_int1 = new.f_int1;
 
10198
END|
 
10199
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10201
        
 
10202
# check trigger-5 success:      1
 
10203
DROP TRIGGER trg_1;
 
10204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10206
f_charbig = 'just inserted'
 
10207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10208
DELETE FROM t0_aux
 
10209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10211
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10212
'just inserted' FROM t0_template
 
10213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10214
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10215
BEGIN
 
10216
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10217
f_charbig = 'updated by trigger'
 
10218
      WHERE f_int1 = - old.f_int1;
 
10219
END|
 
10220
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10221
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10222
        
 
10223
# check trigger-6 success:      1
 
10224
DROP TRIGGER trg_1;
 
10225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10227
f_charbig = 'just inserted'
 
10228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10229
DELETE FROM t0_aux
 
10230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10232
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10233
'just inserted' FROM t0_template
 
10234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10235
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10236
BEGIN
 
10237
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10238
f_charbig = 'updated by trigger'
 
10239
      WHERE f_int1 = - old.f_int1;
 
10240
END|
 
10241
DELETE FROM t0_aux
 
10242
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10243
        
 
10244
# check trigger-7 success:      1
 
10245
DROP TRIGGER trg_1;
 
10246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10248
f_charbig = 'just inserted'
 
10249
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10250
DELETE FROM t0_aux
 
10251
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10252
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10253
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10254
'just inserted' FROM t0_template
 
10255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10256
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10257
BEGIN
 
10258
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10259
f_charbig = 'updated by trigger'
 
10260
      WHERE f_int1 = - old.f_int1;
 
10261
END|
 
10262
DELETE FROM t0_aux
 
10263
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10264
        
 
10265
# check trigger-8 success:      1
 
10266
DROP TRIGGER trg_1;
 
10267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10269
f_charbig = 'just inserted'
 
10270
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10271
DELETE FROM t0_aux
 
10272
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10273
DELETE FROM t1
 
10274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10275
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10276
BEGIN
 
10277
SET new.f_int1 = old.f_int1 + @max_row,
 
10278
new.f_int2 = old.f_int2 - @max_row,
 
10279
new.f_charbig = '####updated per update trigger####';
 
10280
END|
 
10281
UPDATE t1
 
10282
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10283
f_charbig = '####updated per update statement itself####';
 
10284
        
 
10285
# check trigger-9 success:      1
 
10286
DROP TRIGGER trg_2;
 
10287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10289
f_charbig = CONCAT('===',f_char1,'===');
 
10290
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10291
BEGIN
 
10292
SET new.f_int1 = new.f_int1 + @max_row,
 
10293
new.f_int2 = new.f_int2 - @max_row,
 
10294
new.f_charbig = '####updated per update trigger####';
 
10295
END|
 
10296
UPDATE t1
 
10297
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10298
f_charbig = '####updated per update statement itself####';
 
10299
        
 
10300
# check trigger-10 success:     1
 
10301
DROP TRIGGER trg_2;
 
10302
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10303
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10304
f_charbig = CONCAT('===',f_char1,'===');
 
10305
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10306
BEGIN
 
10307
SET new.f_int1 = @my_max1 + @counter,
 
10308
new.f_int2 = @my_min2 - @counter,
 
10309
new.f_charbig = '####updated per insert trigger####';
 
10310
SET @counter = @counter + 1;
 
10311
END|
 
10312
SET @counter = 1;
 
10313
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10314
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10315
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10316
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10318
ORDER BY f_int1;
 
10319
DROP TRIGGER trg_3;
 
10320
        
 
10321
# check trigger-11 success:     1
 
10322
DELETE FROM t1
 
10323
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10324
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10325
AND f_charbig = '####updated per insert trigger####';
 
10326
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10327
BEGIN
 
10328
SET new.f_int1 = @my_max1 + @counter,
 
10329
new.f_int2 = @my_min2 - @counter,
 
10330
new.f_charbig = '####updated per insert trigger####';
 
10331
SET @counter = @counter + 1;
 
10332
END|
 
10333
SET @counter = 1;
 
10334
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10335
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10336
SELECT CAST(f_int1 AS CHAR),
 
10337
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10339
ORDER BY f_int1;
 
10340
DROP TRIGGER trg_3;
 
10341
        
 
10342
# check trigger-12 success:     1
 
10343
DELETE FROM t1
 
10344
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10345
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10346
AND f_charbig = '####updated per insert trigger####';
 
10347
ANALYZE  TABLE t1;
 
10348
Table   Op      Msg_type        Msg_text
 
10349
test.t1 analyze status  OK
 
10350
CHECK    TABLE t1 EXTENDED;
 
10351
Table   Op      Msg_type        Msg_text
 
10352
test.t1 check   status  OK
 
10353
CHECKSUM TABLE t1 EXTENDED;
 
10354
Table   Checksum
 
10355
test.t1 <some_value>
 
10356
OPTIMIZE TABLE t1;
 
10357
Table   Op      Msg_type        Msg_text
 
10358
test.t1 optimize        status  OK
 
10359
# check layout success:    1
 
10360
REPAIR   TABLE t1 EXTENDED;
 
10361
Table   Op      Msg_type        Msg_text
 
10362
test.t1 repair  status  OK
 
10363
# check layout success:    1
 
10364
TRUNCATE t1;
 
10365
        
 
10366
# check TRUNCATE success:       1
 
10367
# check layout success:    1
 
10368
# End usability test (inc/partition_check.inc)
 
10369
DROP TABLE t1;
 
10370
CREATE TABLE t1 (
 
10371
f_int1 INTEGER,
 
10372
f_int2 INTEGER,
 
10373
f_char1 CHAR(20),
 
10374
f_char2 CHAR(20),
 
10375
f_charbig VARCHAR(1000)
 
10376
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
10377
)
 
10378
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
10379
(PARTITION part1 VALUES LESS THAN (0)
 
10380
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
10381
PARTITION part2 VALUES LESS THAN (5)
 
10382
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
10383
PARTITION part3 VALUES LESS THAN (10)
 
10384
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
10385
PARTITION part4 VALUES LESS THAN (2147483646)
 
10386
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
10387
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10388
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
10389
# Start usability test (inc/partition_check.inc)
 
10390
create_command
 
10391
SHOW CREATE TABLE t1;
 
10392
Table   Create Table
 
10393
t1      CREATE TABLE `t1` (
 
10394
  `f_int1` int(11) DEFAULT NULL,
 
10395
  `f_int2` int(11) DEFAULT NULL,
 
10396
  `f_char1` char(20) DEFAULT NULL,
 
10397
  `f_char2` char(20) DEFAULT NULL,
 
10398
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10399
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
10400
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
10401
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
10402
/*!50100 PARTITION BY RANGE (f_int1)
 
10403
SUBPARTITION BY KEY (f_int1)
 
10404
(PARTITION part1 VALUES LESS THAN (0)
 
10405
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
10406
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
10407
 PARTITION part2 VALUES LESS THAN (5)
 
10408
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
10409
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
10410
 PARTITION part3 VALUES LESS THAN (10)
 
10411
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
10412
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
10413
 PARTITION part4 VALUES LESS THAN (2147483646)
 
10414
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
10415
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
10416
 
 
10417
unified filelist
 
10418
t1#P#part1#SP#subpart11.MYD
 
10419
t1#P#part1#SP#subpart11.MYI
 
10420
t1#P#part1#SP#subpart12.MYD
 
10421
t1#P#part1#SP#subpart12.MYI
 
10422
t1#P#part2#SP#subpart21.MYD
 
10423
t1#P#part2#SP#subpart21.MYI
 
10424
t1#P#part2#SP#subpart22.MYD
 
10425
t1#P#part2#SP#subpart22.MYI
 
10426
t1#P#part3#SP#subpart31.MYD
 
10427
t1#P#part3#SP#subpart31.MYI
 
10428
t1#P#part3#SP#subpart32.MYD
 
10429
t1#P#part3#SP#subpart32.MYI
 
10430
t1#P#part4#SP#subpart41.MYD
 
10431
t1#P#part4#SP#subpart41.MYI
 
10432
t1#P#part4#SP#subpart42.MYD
 
10433
t1#P#part4#SP#subpart42.MYI
 
10434
t1.frm
 
10435
t1.par
 
10436
 
 
10437
# check prerequisites-1 success:    1
 
10438
# check COUNT(*) success:    1
 
10439
# check MIN/MAX(f_int1) success:    1
 
10440
# check MIN/MAX(f_int2) success:    1
 
10441
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10442
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10443
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10444
WHERE f_int1 IN (2,3);
 
10445
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
10446
# check prerequisites-3 success:    1
 
10447
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10448
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10449
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10450
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10451
WHERE f_int1 IN (2,3);
 
10452
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10453
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10454
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10455
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10456
WHERE f_int1 IN (2,3);
 
10457
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10458
# check read via f_int1 success: 1
 
10459
# check read via f_int2 success: 1
 
10460
        
 
10461
# check multiple-1 success:     1
 
10462
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10463
        
 
10464
# check multiple-2 success:     1
 
10465
INSERT INTO t1 SELECT * FROM t0_template
 
10466
WHERE MOD(f_int1,3) = 0;
 
10467
        
 
10468
# check multiple-3 success:     1
 
10469
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10470
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10471
AND @max_row_div2 + @max_row_div4;
 
10472
        
 
10473
# check multiple-4 success:     1
 
10474
DELETE FROM t1
 
10475
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10476
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10477
        
 
10478
# check multiple-5 success:     1
 
10479
SELECT COUNT(*) INTO @try_count FROM t0_template
 
10480
WHERE MOD(f_int1,3) = 0
 
10481
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10482
SELECT COUNT(*) INTO @clash_count
 
10483
FROM t1 INNER JOIN t0_template USING(f_int1)
 
10484
WHERE MOD(f_int1,3) = 0
 
10485
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10486
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10487
INSERT INTO t1
 
10488
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10489
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10490
f_charbig = '#SINGLE#';
 
10491
        
 
10492
# check single-1 success:       1
 
10493
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10494
INSERT INTO t1
 
10495
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10496
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10497
f_charbig = '#SINGLE#';
 
10498
        
 
10499
# check single-2 success:       1
 
10500
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10501
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10502
UPDATE t1 SET f_int1 = @cur_value2
 
10503
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10504
        
 
10505
# check single-3 success:       1
 
10506
SET @cur_value1= -1;
 
10507
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10508
UPDATE t1 SET f_int1 = @cur_value1
 
10509
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10510
        
 
10511
# check single-4 success:       1
 
10512
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10513
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10514
        
 
10515
# check single-5 success:       1
 
10516
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10517
        
 
10518
# check single-6 success:       1
 
10519
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10520
ERROR HY000: Table has no partition for value 2147483647
 
10521
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10522
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10523
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10524
f_charbig = '#NULL#';
 
10525
INSERT INTO t1
 
10526
SET f_int1 = NULL , f_int2 = -@max_row,
 
10527
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10528
f_charbig = '#NULL#';
 
10529
# check null success:    1
 
10530
        
 
10531
# check null-1 success:         1
 
10532
UPDATE t1 SET f_int1 = -@max_row
 
10533
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10534
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10535
        
 
10536
# check null-2 success:         1
 
10537
UPDATE t1 SET f_int1 = NULL
 
10538
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10539
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10540
        
 
10541
# check null-3 success:         1
 
10542
DELETE FROM t1
 
10543
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10544
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10545
        
 
10546
# check null-4 success:         1
 
10547
DELETE FROM t1
 
10548
WHERE f_int1 = 0 AND f_int2 = 0
 
10549
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10550
AND f_charbig = '#NULL#';
 
10551
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10552
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10553
   FROM t0_template source_tab
 
10554
WHERE MOD(f_int1,3) = 0
 
10555
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10556
ON DUPLICATE KEY
 
10557
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10558
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10559
f_charbig = 'was updated';
 
10560
        
 
10561
# check unique-1-a success:     1
 
10562
        
 
10563
# check unique-1-b success:     1
 
10564
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10567
f_charbig = CONCAT('===',f_char1,'===')
 
10568
WHERE f_charbig = 'was updated';
 
10569
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10570
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10571
   FROM t0_template source_tab
 
10572
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10573
        
 
10574
# check replace success:        1
 
10575
DELETE FROM t1
 
10576
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10577
DELETE FROM t1
 
10578
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10579
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10580
UPDATE t1 SET f_int2 = f_int1,
 
10581
f_char1 = CAST(f_int1 AS CHAR),
 
10582
f_char2 = CAST(f_int1 AS CHAR),
 
10583
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10584
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10585
SET AUTOCOMMIT= 0;
 
10586
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10587
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10588
FROM t0_template source_tab
 
10589
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10590
        
 
10591
# check transactions-1 success:         1
 
10592
COMMIT WORK;
 
10593
        
 
10594
# check transactions-2 success:         1
 
10595
ROLLBACK WORK;
 
10596
        
 
10597
# check transactions-3 success:         1
 
10598
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10599
COMMIT WORK;
 
10600
ROLLBACK WORK;
 
10601
        
 
10602
# check transactions-4 success:         1
 
10603
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10604
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10605
FROM t0_template source_tab
 
10606
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10607
        
 
10608
# check transactions-5 success:         1
 
10609
ROLLBACK WORK;
 
10610
Warnings:
 
10611
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
10612
        
 
10613
# check transactions-6 success:         1
 
10614
# INFO: Storage engine used for t1 seems to be not transactional.
 
10615
COMMIT;
 
10616
        
 
10617
# check transactions-7 success:         1
 
10618
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10619
COMMIT WORK;
 
10620
SET @@session.sql_mode = 'traditional';
 
10621
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10622
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10623
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10624
'', '', 'was inserted' FROM t0_template
 
10625
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10626
ERROR 22012: Division by 0
 
10627
COMMIT;
 
10628
        
 
10629
# check transactions-8 success:         1
 
10630
# INFO: Storage engine used for t1 seems to be unable to revert
 
10631
#       changes made by the failing statement.
 
10632
SET @@session.sql_mode = '';
 
10633
SET AUTOCOMMIT= 1;
 
10634
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10635
COMMIT WORK;
 
10636
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10637
        
 
10638
# check special-1 success:      1
 
10639
UPDATE t1 SET f_charbig = '';
 
10640
        
 
10641
# check special-2 success:      1
 
10642
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10643
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10644
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10645
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10648
'just inserted' FROM t0_template
 
10649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10650
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10651
BEGIN
 
10652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10653
f_charbig = 'updated by trigger'
 
10654
      WHERE f_int1 = new.f_int1;
 
10655
END|
 
10656
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10657
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10659
        
 
10660
# check trigger-1 success:      1
 
10661
DROP TRIGGER trg_1;
 
10662
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10663
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10664
f_charbig = 'just inserted'
 
10665
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10666
DELETE FROM t0_aux
 
10667
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10668
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10669
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10670
'just inserted' FROM t0_template
 
10671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10672
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10673
BEGIN
 
10674
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10675
f_charbig = 'updated by trigger'
 
10676
      WHERE f_int1 = new.f_int1;
 
10677
END|
 
10678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10679
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10681
        
 
10682
# check trigger-2 success:      1
 
10683
DROP TRIGGER trg_1;
 
10684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10686
f_charbig = 'just inserted'
 
10687
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10688
DELETE FROM t0_aux
 
10689
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10690
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10691
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10692
'just inserted' FROM t0_template
 
10693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10694
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10695
BEGIN
 
10696
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10697
f_charbig = 'updated by trigger'
 
10698
      WHERE f_int1 = new.f_int1;
 
10699
END|
 
10700
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10701
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10702
        
 
10703
# check trigger-3 success:      1
 
10704
DROP TRIGGER trg_1;
 
10705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10707
f_charbig = 'just inserted'
 
10708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10709
DELETE FROM t0_aux
 
10710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10711
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10712
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10713
'just inserted' FROM t0_template
 
10714
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10715
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10716
BEGIN
 
10717
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10718
f_charbig = 'updated by trigger'
 
10719
      WHERE f_int1 = - old.f_int1;
 
10720
END|
 
10721
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10722
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10723
        
 
10724
# check trigger-4 success:      1
 
10725
DROP TRIGGER trg_1;
 
10726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10728
f_charbig = 'just inserted'
 
10729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10730
DELETE FROM t0_aux
 
10731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10734
'just inserted' FROM t0_template
 
10735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10736
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10737
BEGIN
 
10738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10739
f_charbig = 'updated by trigger'
 
10740
      WHERE f_int1 = new.f_int1;
 
10741
END|
 
10742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10744
        
 
10745
# check trigger-5 success:      1
 
10746
DROP TRIGGER trg_1;
 
10747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10749
f_charbig = 'just inserted'
 
10750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10751
DELETE FROM t0_aux
 
10752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10755
'just inserted' FROM t0_template
 
10756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10757
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10758
BEGIN
 
10759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10760
f_charbig = 'updated by trigger'
 
10761
      WHERE f_int1 = - old.f_int1;
 
10762
END|
 
10763
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10765
        
 
10766
# check trigger-6 success:      1
 
10767
DROP TRIGGER trg_1;
 
10768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10770
f_charbig = 'just inserted'
 
10771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10772
DELETE FROM t0_aux
 
10773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10776
'just inserted' FROM t0_template
 
10777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10778
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10779
BEGIN
 
10780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10781
f_charbig = 'updated by trigger'
 
10782
      WHERE f_int1 = - old.f_int1;
 
10783
END|
 
10784
DELETE FROM t0_aux
 
10785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10786
        
 
10787
# check trigger-7 success:      1
 
10788
DROP TRIGGER trg_1;
 
10789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10791
f_charbig = 'just inserted'
 
10792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10793
DELETE FROM t0_aux
 
10794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10797
'just inserted' FROM t0_template
 
10798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10799
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10800
BEGIN
 
10801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10802
f_charbig = 'updated by trigger'
 
10803
      WHERE f_int1 = - old.f_int1;
 
10804
END|
 
10805
DELETE FROM t0_aux
 
10806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10807
        
 
10808
# check trigger-8 success:      1
 
10809
DROP TRIGGER trg_1;
 
10810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10812
f_charbig = 'just inserted'
 
10813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10814
DELETE FROM t0_aux
 
10815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10816
DELETE FROM t1
 
10817
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10818
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10819
BEGIN
 
10820
SET new.f_int1 = old.f_int1 + @max_row,
 
10821
new.f_int2 = old.f_int2 - @max_row,
 
10822
new.f_charbig = '####updated per update trigger####';
 
10823
END|
 
10824
UPDATE t1
 
10825
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10826
f_charbig = '####updated per update statement itself####';
 
10827
        
 
10828
# check trigger-9 success:      1
 
10829
DROP TRIGGER trg_2;
 
10830
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10831
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10832
f_charbig = CONCAT('===',f_char1,'===');
 
10833
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10834
BEGIN
 
10835
SET new.f_int1 = new.f_int1 + @max_row,
 
10836
new.f_int2 = new.f_int2 - @max_row,
 
10837
new.f_charbig = '####updated per update trigger####';
 
10838
END|
 
10839
UPDATE t1
 
10840
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10841
f_charbig = '####updated per update statement itself####';
 
10842
        
 
10843
# check trigger-10 success:     1
 
10844
DROP TRIGGER trg_2;
 
10845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10847
f_charbig = CONCAT('===',f_char1,'===');
 
10848
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10849
BEGIN
 
10850
SET new.f_int1 = @my_max1 + @counter,
 
10851
new.f_int2 = @my_min2 - @counter,
 
10852
new.f_charbig = '####updated per insert trigger####';
 
10853
SET @counter = @counter + 1;
 
10854
END|
 
10855
SET @counter = 1;
 
10856
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10857
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10858
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10859
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10860
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10861
ORDER BY f_int1;
 
10862
DROP TRIGGER trg_3;
 
10863
        
 
10864
# check trigger-11 success:     1
 
10865
DELETE FROM t1
 
10866
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10867
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10868
AND f_charbig = '####updated per insert trigger####';
 
10869
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10870
BEGIN
 
10871
SET new.f_int1 = @my_max1 + @counter,
 
10872
new.f_int2 = @my_min2 - @counter,
 
10873
new.f_charbig = '####updated per insert trigger####';
 
10874
SET @counter = @counter + 1;
 
10875
END|
 
10876
SET @counter = 1;
 
10877
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10878
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10879
SELECT CAST(f_int1 AS CHAR),
 
10880
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10882
ORDER BY f_int1;
 
10883
DROP TRIGGER trg_3;
 
10884
        
 
10885
# check trigger-12 success:     1
 
10886
DELETE FROM t1
 
10887
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10888
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10889
AND f_charbig = '####updated per insert trigger####';
 
10890
ANALYZE  TABLE t1;
 
10891
Table   Op      Msg_type        Msg_text
 
10892
test.t1 analyze status  OK
 
10893
CHECK    TABLE t1 EXTENDED;
 
10894
Table   Op      Msg_type        Msg_text
 
10895
test.t1 check   status  OK
 
10896
CHECKSUM TABLE t1 EXTENDED;
 
10897
Table   Checksum
 
10898
test.t1 <some_value>
 
10899
OPTIMIZE TABLE t1;
 
10900
Table   Op      Msg_type        Msg_text
 
10901
test.t1 optimize        status  OK
 
10902
# check layout success:    1
 
10903
REPAIR   TABLE t1 EXTENDED;
 
10904
Table   Op      Msg_type        Msg_text
 
10905
test.t1 repair  status  OK
 
10906
# check layout success:    1
 
10907
TRUNCATE t1;
 
10908
        
 
10909
# check TRUNCATE success:       1
 
10910
# check layout success:    1
 
10911
# End usability test (inc/partition_check.inc)
 
10912
DROP TABLE t1;
 
10913
CREATE TABLE t1 (
 
10914
f_int1 INTEGER,
 
10915
f_int2 INTEGER,
 
10916
f_char1 CHAR(20),
 
10917
f_char2 CHAR(20),
 
10918
f_charbig VARCHAR(1000)
 
10919
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
10920
)
 
10921
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
10922
(PARTITION part1 VALUES IN (0)
 
10923
(SUBPARTITION sp11,
 
10924
SUBPARTITION sp12),
 
10925
PARTITION part2 VALUES IN (1)
 
10926
(SUBPARTITION sp21,
 
10927
SUBPARTITION sp22),
 
10928
PARTITION part3 VALUES IN (2)
 
10929
(SUBPARTITION sp31, 
 
10930
SUBPARTITION sp32),
 
10931
PARTITION part4 VALUES IN (NULL)
 
10932
(SUBPARTITION sp41,
 
10933
SUBPARTITION sp42));
 
10934
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10935
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
10936
# Start usability test (inc/partition_check.inc)
 
10937
create_command
 
10938
SHOW CREATE TABLE t1;
 
10939
Table   Create Table
 
10940
t1      CREATE TABLE `t1` (
 
10941
  `f_int1` int(11) DEFAULT NULL,
 
10942
  `f_int2` int(11) DEFAULT NULL,
 
10943
  `f_char1` char(20) DEFAULT NULL,
 
10944
  `f_char2` char(20) DEFAULT NULL,
 
10945
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10946
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
10947
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
10948
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
10949
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
10950
SUBPARTITION BY HASH (f_int1 + 1)
 
10951
(PARTITION part1 VALUES IN (0)
 
10952
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
10953
  SUBPARTITION sp12 ENGINE = MyISAM),
 
10954
 PARTITION part2 VALUES IN (1)
 
10955
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
10956
  SUBPARTITION sp22 ENGINE = MyISAM),
 
10957
 PARTITION part3 VALUES IN (2)
 
10958
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
10959
  SUBPARTITION sp32 ENGINE = MyISAM),
 
10960
 PARTITION part4 VALUES IN (NULL)
 
10961
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
10962
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
10963
 
 
10964
unified filelist
 
10965
t1#P#part1#SP#sp11.MYD
 
10966
t1#P#part1#SP#sp11.MYI
 
10967
t1#P#part1#SP#sp12.MYD
 
10968
t1#P#part1#SP#sp12.MYI
 
10969
t1#P#part2#SP#sp21.MYD
 
10970
t1#P#part2#SP#sp21.MYI
 
10971
t1#P#part2#SP#sp22.MYD
 
10972
t1#P#part2#SP#sp22.MYI
 
10973
t1#P#part3#SP#sp31.MYD
 
10974
t1#P#part3#SP#sp31.MYI
 
10975
t1#P#part3#SP#sp32.MYD
 
10976
t1#P#part3#SP#sp32.MYI
 
10977
t1#P#part4#SP#sp41.MYD
 
10978
t1#P#part4#SP#sp41.MYI
 
10979
t1#P#part4#SP#sp42.MYD
 
10980
t1#P#part4#SP#sp42.MYI
 
10981
t1.frm
 
10982
t1.par
 
10983
 
 
10984
# check prerequisites-1 success:    1
 
10985
# check COUNT(*) success:    1
 
10986
# check MIN/MAX(f_int1) success:    1
 
10987
# check MIN/MAX(f_int2) success:    1
 
10988
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10989
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10990
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10991
WHERE f_int1 IN (2,3);
 
10992
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
10993
# check prerequisites-3 success:    1
 
10994
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10995
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10996
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10997
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10998
WHERE f_int1 IN (2,3);
 
10999
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11000
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11001
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11002
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11003
WHERE f_int1 IN (2,3);
 
11004
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11005
# check read via f_int1 success: 1
 
11006
# check read via f_int2 success: 1
 
11007
        
 
11008
# check multiple-1 success:     1
 
11009
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11010
        
 
11011
# check multiple-2 success:     1
 
11012
INSERT INTO t1 SELECT * FROM t0_template
 
11013
WHERE MOD(f_int1,3) = 0;
 
11014
        
 
11015
# check multiple-3 success:     1
 
11016
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11017
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11018
AND @max_row_div2 + @max_row_div4;
 
11019
        
 
11020
# check multiple-4 success:     1
 
11021
DELETE FROM t1
 
11022
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11023
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11024
        
 
11025
# check multiple-5 success:     1
 
11026
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11027
WHERE MOD(f_int1,3) = 0
 
11028
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11029
SELECT COUNT(*) INTO @clash_count
 
11030
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11031
WHERE MOD(f_int1,3) = 0
 
11032
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11033
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11034
INSERT INTO t1
 
11035
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11036
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11037
f_charbig = '#SINGLE#';
 
11038
        
 
11039
# check single-1 success:       1
 
11040
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11041
INSERT INTO t1
 
11042
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11043
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11044
f_charbig = '#SINGLE#';
 
11045
        
 
11046
# check single-2 success:       1
 
11047
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11048
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11049
UPDATE t1 SET f_int1 = @cur_value2
 
11050
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11051
        
 
11052
# check single-3 success:       1
 
11053
SET @cur_value1= -1;
 
11054
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11055
UPDATE t1 SET f_int1 = @cur_value1
 
11056
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11057
        
 
11058
# check single-4 success:       1
 
11059
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11060
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11061
        
 
11062
# check single-5 success:       1
 
11063
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11064
        
 
11065
# check single-6 success:       1
 
11066
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11067
        
 
11068
# check single-7 success:       1
 
11069
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11070
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11071
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11072
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11073
f_charbig = '#NULL#';
 
11074
INSERT INTO t1
 
11075
SET f_int1 = NULL , f_int2 = -@max_row,
 
11076
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11077
f_charbig = '#NULL#';
 
11078
# check null success:    1
 
11079
        
 
11080
# check null-1 success:         1
 
11081
UPDATE t1 SET f_int1 = -@max_row
 
11082
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11083
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11084
        
 
11085
# check null-2 success:         1
 
11086
UPDATE t1 SET f_int1 = NULL
 
11087
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11088
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11089
        
 
11090
# check null-3 success:         1
 
11091
DELETE FROM t1
 
11092
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11093
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11094
        
 
11095
# check null-4 success:         1
 
11096
DELETE FROM t1
 
11097
WHERE f_int1 = 0 AND f_int2 = 0
 
11098
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11099
AND f_charbig = '#NULL#';
 
11100
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11101
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11102
   FROM t0_template source_tab
 
11103
WHERE MOD(f_int1,3) = 0
 
11104
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
11105
ON DUPLICATE KEY
 
11106
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
11107
f_int2 = 2 * @max_row + source_tab.f_int1,
 
11108
f_charbig = 'was updated';
 
11109
        
 
11110
# check unique-1-a success:     1
 
11111
        
 
11112
# check unique-1-b success:     1
 
11113
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11116
f_charbig = CONCAT('===',f_char1,'===')
 
11117
WHERE f_charbig = 'was updated';
 
11118
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11119
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
11120
   FROM t0_template source_tab
 
11121
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11122
        
 
11123
# check replace success:        1
 
11124
DELETE FROM t1
 
11125
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
11126
DELETE FROM t1
 
11127
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
11128
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
11129
UPDATE t1 SET f_int2 = f_int1,
 
11130
f_char1 = CAST(f_int1 AS CHAR),
 
11131
f_char2 = CAST(f_int1 AS CHAR),
 
11132
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
11133
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
11134
SET AUTOCOMMIT= 0;
 
11135
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11136
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11137
FROM t0_template source_tab
 
11138
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11139
        
 
11140
# check transactions-1 success:         1
 
11141
COMMIT WORK;
 
11142
        
 
11143
# check transactions-2 success:         1
 
11144
ROLLBACK WORK;
 
11145
        
 
11146
# check transactions-3 success:         1
 
11147
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11148
COMMIT WORK;
 
11149
ROLLBACK WORK;
 
11150
        
 
11151
# check transactions-4 success:         1
 
11152
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11153
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11154
FROM t0_template source_tab
 
11155
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11156
        
 
11157
# check transactions-5 success:         1
 
11158
ROLLBACK WORK;
 
11159
Warnings:
 
11160
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11161
        
 
11162
# check transactions-6 success:         1
 
11163
# INFO: Storage engine used for t1 seems to be not transactional.
 
11164
COMMIT;
 
11165
        
 
11166
# check transactions-7 success:         1
 
11167
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11168
COMMIT WORK;
 
11169
SET @@session.sql_mode = 'traditional';
 
11170
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11171
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11172
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11173
'', '', 'was inserted' FROM t0_template
 
11174
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11175
ERROR 22012: Division by 0
 
11176
COMMIT;
 
11177
        
 
11178
# check transactions-8 success:         1
 
11179
# INFO: Storage engine used for t1 seems to be unable to revert
 
11180
#       changes made by the failing statement.
 
11181
SET @@session.sql_mode = '';
 
11182
SET AUTOCOMMIT= 1;
 
11183
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11184
COMMIT WORK;
 
11185
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11186
        
 
11187
# check special-1 success:      1
 
11188
UPDATE t1 SET f_charbig = '';
 
11189
        
 
11190
# check special-2 success:      1
 
11191
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11192
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11193
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11195
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11196
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11197
'just inserted' FROM t0_template
 
11198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11199
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11200
BEGIN
 
11201
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11202
f_charbig = 'updated by trigger'
 
11203
      WHERE f_int1 = new.f_int1;
 
11204
END|
 
11205
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11206
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11207
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11208
        
 
11209
# check trigger-1 success:      1
 
11210
DROP TRIGGER trg_1;
 
11211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11213
f_charbig = 'just inserted'
 
11214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11215
DELETE FROM t0_aux
 
11216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11218
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11219
'just inserted' FROM t0_template
 
11220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11221
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11222
BEGIN
 
11223
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11224
f_charbig = 'updated by trigger'
 
11225
      WHERE f_int1 = new.f_int1;
 
11226
END|
 
11227
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11228
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11230
        
 
11231
# check trigger-2 success:      1
 
11232
DROP TRIGGER trg_1;
 
11233
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11234
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11235
f_charbig = 'just inserted'
 
11236
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11237
DELETE FROM t0_aux
 
11238
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11240
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11241
'just inserted' FROM t0_template
 
11242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11243
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11244
BEGIN
 
11245
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11246
f_charbig = 'updated by trigger'
 
11247
      WHERE f_int1 = new.f_int1;
 
11248
END|
 
11249
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11250
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11251
        
 
11252
# check trigger-3 success:      1
 
11253
DROP TRIGGER trg_1;
 
11254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11256
f_charbig = 'just inserted'
 
11257
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11258
DELETE FROM t0_aux
 
11259
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11262
'just inserted' FROM t0_template
 
11263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11264
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11265
BEGIN
 
11266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11267
f_charbig = 'updated by trigger'
 
11268
      WHERE f_int1 = - old.f_int1;
 
11269
END|
 
11270
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11271
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11272
        
 
11273
# check trigger-4 success:      1
 
11274
DROP TRIGGER trg_1;
 
11275
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11276
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11277
f_charbig = 'just inserted'
 
11278
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11279
DELETE FROM t0_aux
 
11280
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11282
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11283
'just inserted' FROM t0_template
 
11284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11285
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11286
BEGIN
 
11287
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11288
f_charbig = 'updated by trigger'
 
11289
      WHERE f_int1 = new.f_int1;
 
11290
END|
 
11291
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11292
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11293
        
 
11294
# check trigger-5 success:      1
 
11295
DROP TRIGGER trg_1;
 
11296
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11297
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11298
f_charbig = 'just inserted'
 
11299
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11300
DELETE FROM t0_aux
 
11301
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11302
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11303
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11304
'just inserted' FROM t0_template
 
11305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11306
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11307
BEGIN
 
11308
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11309
f_charbig = 'updated by trigger'
 
11310
      WHERE f_int1 = - old.f_int1;
 
11311
END|
 
11312
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11313
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11314
        
 
11315
# check trigger-6 success:      1
 
11316
DROP TRIGGER trg_1;
 
11317
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11318
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11319
f_charbig = 'just inserted'
 
11320
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11321
DELETE FROM t0_aux
 
11322
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11323
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11324
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11325
'just inserted' FROM t0_template
 
11326
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11327
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11328
BEGIN
 
11329
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11330
f_charbig = 'updated by trigger'
 
11331
      WHERE f_int1 = - old.f_int1;
 
11332
END|
 
11333
DELETE FROM t0_aux
 
11334
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11335
        
 
11336
# check trigger-7 success:      1
 
11337
DROP TRIGGER trg_1;
 
11338
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11339
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11340
f_charbig = 'just inserted'
 
11341
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11342
DELETE FROM t0_aux
 
11343
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11344
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11345
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11346
'just inserted' FROM t0_template
 
11347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11348
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11349
BEGIN
 
11350
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11351
f_charbig = 'updated by trigger'
 
11352
      WHERE f_int1 = - old.f_int1;
 
11353
END|
 
11354
DELETE FROM t0_aux
 
11355
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11356
        
 
11357
# check trigger-8 success:      1
 
11358
DROP TRIGGER trg_1;
 
11359
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11360
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11361
f_charbig = 'just inserted'
 
11362
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11363
DELETE FROM t0_aux
 
11364
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11365
DELETE FROM t1
 
11366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11367
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11368
BEGIN
 
11369
SET new.f_int1 = old.f_int1 + @max_row,
 
11370
new.f_int2 = old.f_int2 - @max_row,
 
11371
new.f_charbig = '####updated per update trigger####';
 
11372
END|
 
11373
UPDATE t1
 
11374
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11375
f_charbig = '####updated per update statement itself####';
 
11376
        
 
11377
# check trigger-9 success:      1
 
11378
DROP TRIGGER trg_2;
 
11379
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11380
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11381
f_charbig = CONCAT('===',f_char1,'===');
 
11382
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11383
BEGIN
 
11384
SET new.f_int1 = new.f_int1 + @max_row,
 
11385
new.f_int2 = new.f_int2 - @max_row,
 
11386
new.f_charbig = '####updated per update trigger####';
 
11387
END|
 
11388
UPDATE t1
 
11389
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11390
f_charbig = '####updated per update statement itself####';
 
11391
        
 
11392
# check trigger-10 success:     1
 
11393
DROP TRIGGER trg_2;
 
11394
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11395
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11396
f_charbig = CONCAT('===',f_char1,'===');
 
11397
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11398
BEGIN
 
11399
SET new.f_int1 = @my_max1 + @counter,
 
11400
new.f_int2 = @my_min2 - @counter,
 
11401
new.f_charbig = '####updated per insert trigger####';
 
11402
SET @counter = @counter + 1;
 
11403
END|
 
11404
SET @counter = 1;
 
11405
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11406
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11407
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11408
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11410
ORDER BY f_int1;
 
11411
DROP TRIGGER trg_3;
 
11412
        
 
11413
# check trigger-11 success:     1
 
11414
DELETE FROM t1
 
11415
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11416
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11417
AND f_charbig = '####updated per insert trigger####';
 
11418
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11419
BEGIN
 
11420
SET new.f_int1 = @my_max1 + @counter,
 
11421
new.f_int2 = @my_min2 - @counter,
 
11422
new.f_charbig = '####updated per insert trigger####';
 
11423
SET @counter = @counter + 1;
 
11424
END|
 
11425
SET @counter = 1;
 
11426
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11427
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11428
SELECT CAST(f_int1 AS CHAR),
 
11429
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11430
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11431
ORDER BY f_int1;
 
11432
DROP TRIGGER trg_3;
 
11433
        
 
11434
# check trigger-12 success:     1
 
11435
DELETE FROM t1
 
11436
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11437
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11438
AND f_charbig = '####updated per insert trigger####';
 
11439
ANALYZE  TABLE t1;
 
11440
Table   Op      Msg_type        Msg_text
 
11441
test.t1 analyze status  OK
 
11442
CHECK    TABLE t1 EXTENDED;
 
11443
Table   Op      Msg_type        Msg_text
 
11444
test.t1 check   status  OK
 
11445
CHECKSUM TABLE t1 EXTENDED;
 
11446
Table   Checksum
 
11447
test.t1 <some_value>
 
11448
OPTIMIZE TABLE t1;
 
11449
Table   Op      Msg_type        Msg_text
 
11450
test.t1 optimize        status  OK
 
11451
# check layout success:    1
 
11452
REPAIR   TABLE t1 EXTENDED;
 
11453
Table   Op      Msg_type        Msg_text
 
11454
test.t1 repair  status  OK
 
11455
# check layout success:    1
 
11456
TRUNCATE t1;
 
11457
        
 
11458
# check TRUNCATE success:       1
 
11459
# check layout success:    1
 
11460
# End usability test (inc/partition_check.inc)
 
11461
DROP TABLE t1;
 
11462
CREATE TABLE t1 (
 
11463
f_int1 INTEGER,
 
11464
f_int2 INTEGER,
 
11465
f_char1 CHAR(20),
 
11466
f_char2 CHAR(20),
 
11467
f_charbig VARCHAR(1000)
 
11468
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
11469
)
 
11470
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
11471
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
11472
(PARTITION part1 VALUES IN (0),
 
11473
PARTITION part2 VALUES IN (1),
 
11474
PARTITION part3 VALUES IN (NULL));
 
11475
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11476
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
11477
# Start usability test (inc/partition_check.inc)
 
11478
create_command
 
11479
SHOW CREATE TABLE t1;
 
11480
Table   Create Table
 
11481
t1      CREATE TABLE `t1` (
 
11482
  `f_int1` int(11) DEFAULT NULL,
 
11483
  `f_int2` int(11) DEFAULT NULL,
 
11484
  `f_char1` char(20) DEFAULT NULL,
 
11485
  `f_char2` char(20) DEFAULT NULL,
 
11486
  `f_charbig` varchar(1000) DEFAULT NULL,
 
11487
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
11488
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
11489
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
11490
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
11491
SUBPARTITION BY KEY (f_int1)
 
11492
SUBPARTITIONS 3
 
11493
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
11494
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
11495
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
11496
 
 
11497
unified filelist
 
11498
t1#P#part1#SP#part1sp0.MYD
 
11499
t1#P#part1#SP#part1sp0.MYI
 
11500
t1#P#part1#SP#part1sp1.MYD
 
11501
t1#P#part1#SP#part1sp1.MYI
 
11502
t1#P#part1#SP#part1sp2.MYD
 
11503
t1#P#part1#SP#part1sp2.MYI
 
11504
t1#P#part2#SP#part2sp0.MYD
 
11505
t1#P#part2#SP#part2sp0.MYI
 
11506
t1#P#part2#SP#part2sp1.MYD
 
11507
t1#P#part2#SP#part2sp1.MYI
 
11508
t1#P#part2#SP#part2sp2.MYD
 
11509
t1#P#part2#SP#part2sp2.MYI
 
11510
t1#P#part3#SP#part3sp0.MYD
 
11511
t1#P#part3#SP#part3sp0.MYI
 
11512
t1#P#part3#SP#part3sp1.MYD
 
11513
t1#P#part3#SP#part3sp1.MYI
 
11514
t1#P#part3#SP#part3sp2.MYD
 
11515
t1#P#part3#SP#part3sp2.MYI
 
11516
t1.frm
 
11517
t1.par
 
11518
 
 
11519
# check prerequisites-1 success:    1
 
11520
# check COUNT(*) success:    1
 
11521
# check MIN/MAX(f_int1) success:    1
 
11522
# check MIN/MAX(f_int2) success:    1
 
11523
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11524
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11525
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11526
WHERE f_int1 IN (2,3);
 
11527
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
11528
# check prerequisites-3 success:    1
 
11529
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
11530
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11531
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11532
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11533
WHERE f_int1 IN (2,3);
 
11534
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11535
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11536
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11537
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11538
WHERE f_int1 IN (2,3);
 
11539
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11540
# check read via f_int1 success: 1
 
11541
# check read via f_int2 success: 1
 
11542
        
 
11543
# check multiple-1 success:     1
 
11544
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11545
        
 
11546
# check multiple-2 success:     1
 
11547
INSERT INTO t1 SELECT * FROM t0_template
 
11548
WHERE MOD(f_int1,3) = 0;
 
11549
        
 
11550
# check multiple-3 success:     1
 
11551
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11552
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11553
AND @max_row_div2 + @max_row_div4;
 
11554
        
 
11555
# check multiple-4 success:     1
 
11556
DELETE FROM t1
 
11557
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11558
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11559
        
 
11560
# check multiple-5 success:     1
 
11561
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11562
WHERE MOD(f_int1,3) = 0
 
11563
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11564
SELECT COUNT(*) INTO @clash_count
 
11565
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11566
WHERE MOD(f_int1,3) = 0
 
11567
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11568
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11569
INSERT INTO t1
 
11570
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11571
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11572
f_charbig = '#SINGLE#';
 
11573
        
 
11574
# check single-1 success:       1
 
11575
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11576
INSERT INTO t1
 
11577
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11578
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11579
f_charbig = '#SINGLE#';
 
11580
        
 
11581
# check single-2 success:       1
 
11582
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11583
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11584
UPDATE t1 SET f_int1 = @cur_value2
 
11585
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11586
        
 
11587
# check single-3 success:       1
 
11588
SET @cur_value1= -1;
 
11589
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11590
UPDATE t1 SET f_int1 = @cur_value1
 
11591
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11592
        
 
11593
# check single-4 success:       1
 
11594
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11595
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11596
        
 
11597
# check single-5 success:       1
 
11598
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11599
        
 
11600
# check single-6 success:       1
 
11601
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11602
        
 
11603
# check single-7 success:       1
 
11604
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11605
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11606
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11607
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11608
f_charbig = '#NULL#';
 
11609
INSERT INTO t1
 
11610
SET f_int1 = NULL , f_int2 = -@max_row,
 
11611
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11612
f_charbig = '#NULL#';
 
11613
# check null success:    1
 
11614
        
 
11615
# check null-1 success:         1
 
11616
UPDATE t1 SET f_int1 = -@max_row
 
11617
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11618
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11619
        
 
11620
# check null-2 success:         1
 
11621
UPDATE t1 SET f_int1 = NULL
 
11622
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11623
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11624
        
 
11625
# check null-3 success:         1
 
11626
DELETE FROM t1
 
11627
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11628
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11629
        
 
11630
# check null-4 success:         1
 
11631
DELETE FROM t1
 
11632
WHERE f_int1 = 0 AND f_int2 = 0
 
11633
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11634
AND f_charbig = '#NULL#';
 
11635
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11636
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11637
   FROM t0_template source_tab
 
11638
WHERE MOD(f_int1,3) = 0
 
11639
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
11640
ON DUPLICATE KEY
 
11641
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
11642
f_int2 = 2 * @max_row + source_tab.f_int1,
 
11643
f_charbig = 'was updated';
 
11644
        
 
11645
# check unique-1-a success:     1
 
11646
        
 
11647
# check unique-1-b success:     1
 
11648
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11651
f_charbig = CONCAT('===',f_char1,'===')
 
11652
WHERE f_charbig = 'was updated';
 
11653
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11654
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
11655
   FROM t0_template source_tab
 
11656
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11657
        
 
11658
# check replace success:        1
 
11659
DELETE FROM t1
 
11660
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
11661
DELETE FROM t1
 
11662
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
11663
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
11664
UPDATE t1 SET f_int2 = f_int1,
 
11665
f_char1 = CAST(f_int1 AS CHAR),
 
11666
f_char2 = CAST(f_int1 AS CHAR),
 
11667
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
11668
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
11669
SET AUTOCOMMIT= 0;
 
11670
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11671
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11672
FROM t0_template source_tab
 
11673
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11674
        
 
11675
# check transactions-1 success:         1
 
11676
COMMIT WORK;
 
11677
        
 
11678
# check transactions-2 success:         1
 
11679
ROLLBACK WORK;
 
11680
        
 
11681
# check transactions-3 success:         1
 
11682
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11683
COMMIT WORK;
 
11684
ROLLBACK WORK;
 
11685
        
 
11686
# check transactions-4 success:         1
 
11687
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11688
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11689
FROM t0_template source_tab
 
11690
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11691
        
 
11692
# check transactions-5 success:         1
 
11693
ROLLBACK WORK;
 
11694
Warnings:
 
11695
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11696
        
 
11697
# check transactions-6 success:         1
 
11698
# INFO: Storage engine used for t1 seems to be not transactional.
 
11699
COMMIT;
 
11700
        
 
11701
# check transactions-7 success:         1
 
11702
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11703
COMMIT WORK;
 
11704
SET @@session.sql_mode = 'traditional';
 
11705
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11706
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11707
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11708
'', '', 'was inserted' FROM t0_template
 
11709
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11710
ERROR 22012: Division by 0
 
11711
COMMIT;
 
11712
        
 
11713
# check transactions-8 success:         1
 
11714
# INFO: Storage engine used for t1 seems to be unable to revert
 
11715
#       changes made by the failing statement.
 
11716
SET @@session.sql_mode = '';
 
11717
SET AUTOCOMMIT= 1;
 
11718
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11719
COMMIT WORK;
 
11720
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11721
        
 
11722
# check special-1 success:      1
 
11723
UPDATE t1 SET f_charbig = '';
 
11724
        
 
11725
# check special-2 success:      1
 
11726
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11727
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11728
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11730
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11731
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11732
'just inserted' FROM t0_template
 
11733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11734
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11735
BEGIN
 
11736
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11737
f_charbig = 'updated by trigger'
 
11738
      WHERE f_int1 = new.f_int1;
 
11739
END|
 
11740
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11741
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11743
        
 
11744
# check trigger-1 success:      1
 
11745
DROP TRIGGER trg_1;
 
11746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11748
f_charbig = 'just inserted'
 
11749
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11750
DELETE FROM t0_aux
 
11751
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11752
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11753
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11754
'just inserted' FROM t0_template
 
11755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11756
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11757
BEGIN
 
11758
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11759
f_charbig = 'updated by trigger'
 
11760
      WHERE f_int1 = new.f_int1;
 
11761
END|
 
11762
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11763
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11764
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11765
        
 
11766
# check trigger-2 success:      1
 
11767
DROP TRIGGER trg_1;
 
11768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11770
f_charbig = 'just inserted'
 
11771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11772
DELETE FROM t0_aux
 
11773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11776
'just inserted' FROM t0_template
 
11777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11778
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11779
BEGIN
 
11780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11781
f_charbig = 'updated by trigger'
 
11782
      WHERE f_int1 = new.f_int1;
 
11783
END|
 
11784
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11786
        
 
11787
# check trigger-3 success:      1
 
11788
DROP TRIGGER trg_1;
 
11789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11791
f_charbig = 'just inserted'
 
11792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11793
DELETE FROM t0_aux
 
11794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11797
'just inserted' FROM t0_template
 
11798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11799
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11800
BEGIN
 
11801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11802
f_charbig = 'updated by trigger'
 
11803
      WHERE f_int1 = - old.f_int1;
 
11804
END|
 
11805
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11807
        
 
11808
# check trigger-4 success:      1
 
11809
DROP TRIGGER trg_1;
 
11810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11812
f_charbig = 'just inserted'
 
11813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11814
DELETE FROM t0_aux
 
11815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11818
'just inserted' FROM t0_template
 
11819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11820
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11821
BEGIN
 
11822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11823
f_charbig = 'updated by trigger'
 
11824
      WHERE f_int1 = new.f_int1;
 
11825
END|
 
11826
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11828
        
 
11829
# check trigger-5 success:      1
 
11830
DROP TRIGGER trg_1;
 
11831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11833
f_charbig = 'just inserted'
 
11834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11835
DELETE FROM t0_aux
 
11836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11839
'just inserted' FROM t0_template
 
11840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11841
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11842
BEGIN
 
11843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11844
f_charbig = 'updated by trigger'
 
11845
      WHERE f_int1 = - old.f_int1;
 
11846
END|
 
11847
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11848
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11849
        
 
11850
# check trigger-6 success:      1
 
11851
DROP TRIGGER trg_1;
 
11852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11854
f_charbig = 'just inserted'
 
11855
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11856
DELETE FROM t0_aux
 
11857
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11858
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11859
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11860
'just inserted' FROM t0_template
 
11861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11862
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11863
BEGIN
 
11864
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11865
f_charbig = 'updated by trigger'
 
11866
      WHERE f_int1 = - old.f_int1;
 
11867
END|
 
11868
DELETE FROM t0_aux
 
11869
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11870
        
 
11871
# check trigger-7 success:      1
 
11872
DROP TRIGGER trg_1;
 
11873
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11874
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11875
f_charbig = 'just inserted'
 
11876
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11877
DELETE FROM t0_aux
 
11878
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11879
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11880
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11881
'just inserted' FROM t0_template
 
11882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11883
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11884
BEGIN
 
11885
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11886
f_charbig = 'updated by trigger'
 
11887
      WHERE f_int1 = - old.f_int1;
 
11888
END|
 
11889
DELETE FROM t0_aux
 
11890
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11891
        
 
11892
# check trigger-8 success:      1
 
11893
DROP TRIGGER trg_1;
 
11894
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11895
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11896
f_charbig = 'just inserted'
 
11897
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11898
DELETE FROM t0_aux
 
11899
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11900
DELETE FROM t1
 
11901
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11902
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11903
BEGIN
 
11904
SET new.f_int1 = old.f_int1 + @max_row,
 
11905
new.f_int2 = old.f_int2 - @max_row,
 
11906
new.f_charbig = '####updated per update trigger####';
 
11907
END|
 
11908
UPDATE t1
 
11909
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11910
f_charbig = '####updated per update statement itself####';
 
11911
        
 
11912
# check trigger-9 success:      1
 
11913
DROP TRIGGER trg_2;
 
11914
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11915
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11916
f_charbig = CONCAT('===',f_char1,'===');
 
11917
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11918
BEGIN
 
11919
SET new.f_int1 = new.f_int1 + @max_row,
 
11920
new.f_int2 = new.f_int2 - @max_row,
 
11921
new.f_charbig = '####updated per update trigger####';
 
11922
END|
 
11923
UPDATE t1
 
11924
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11925
f_charbig = '####updated per update statement itself####';
 
11926
        
 
11927
# check trigger-10 success:     1
 
11928
DROP TRIGGER trg_2;
 
11929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11931
f_charbig = CONCAT('===',f_char1,'===');
 
11932
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11933
BEGIN
 
11934
SET new.f_int1 = @my_max1 + @counter,
 
11935
new.f_int2 = @my_min2 - @counter,
 
11936
new.f_charbig = '####updated per insert trigger####';
 
11937
SET @counter = @counter + 1;
 
11938
END|
 
11939
SET @counter = 1;
 
11940
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11941
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11942
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11943
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11945
ORDER BY f_int1;
 
11946
DROP TRIGGER trg_3;
 
11947
        
 
11948
# check trigger-11 success:     1
 
11949
DELETE FROM t1
 
11950
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11951
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11952
AND f_charbig = '####updated per insert trigger####';
 
11953
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11954
BEGIN
 
11955
SET new.f_int1 = @my_max1 + @counter,
 
11956
new.f_int2 = @my_min2 - @counter,
 
11957
new.f_charbig = '####updated per insert trigger####';
 
11958
SET @counter = @counter + 1;
 
11959
END|
 
11960
SET @counter = 1;
 
11961
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11962
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11963
SELECT CAST(f_int1 AS CHAR),
 
11964
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11966
ORDER BY f_int1;
 
11967
DROP TRIGGER trg_3;
 
11968
        
 
11969
# check trigger-12 success:     1
 
11970
DELETE FROM t1
 
11971
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11972
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11973
AND f_charbig = '####updated per insert trigger####';
 
11974
ANALYZE  TABLE t1;
 
11975
Table   Op      Msg_type        Msg_text
 
11976
test.t1 analyze status  OK
 
11977
CHECK    TABLE t1 EXTENDED;
 
11978
Table   Op      Msg_type        Msg_text
 
11979
test.t1 check   status  OK
 
11980
CHECKSUM TABLE t1 EXTENDED;
 
11981
Table   Checksum
 
11982
test.t1 <some_value>
 
11983
OPTIMIZE TABLE t1;
 
11984
Table   Op      Msg_type        Msg_text
 
11985
test.t1 optimize        status  OK
 
11986
# check layout success:    1
 
11987
REPAIR   TABLE t1 EXTENDED;
 
11988
Table   Op      Msg_type        Msg_text
 
11989
test.t1 repair  status  OK
 
11990
# check layout success:    1
 
11991
TRUNCATE t1;
 
11992
        
 
11993
# check TRUNCATE success:       1
 
11994
# check layout success:    1
 
11995
# End usability test (inc/partition_check.inc)
 
11996
DROP TABLE t1;
 
11997
#------------------------------------------------------------------------
 
11998
#  3   Tables with PRIMARY KEY and/or UNIQUE INDEXes
 
11999
#        The partitioning function contains two columns.
 
12000
#------------------------------------------------------------------------
 
12001
#  3.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
 
12002
DROP TABLE IF EXISTS t1;
 
12003
CREATE TABLE t1 (
 
12004
f_int1 INTEGER,
 
12005
f_int2 INTEGER,
 
12006
f_char1 CHAR(20),
 
12007
f_char2 CHAR(20),
 
12008
f_charbig VARCHAR(1000)
 
12009
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
12010
)
 
12011
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
12012
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12013
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
12014
# Start usability test (inc/partition_check.inc)
 
12015
create_command
 
12016
SHOW CREATE TABLE t1;
 
12017
Table   Create Table
 
12018
t1      CREATE TABLE `t1` (
 
12019
  `f_int1` int(11) DEFAULT NULL,
 
12020
  `f_int2` int(11) DEFAULT NULL,
 
12021
  `f_char1` char(20) DEFAULT NULL,
 
12022
  `f_char2` char(20) DEFAULT NULL,
 
12023
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12024
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
12025
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
12026
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
12027
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
12028
PARTITIONS 2 */
 
12029
 
 
12030
unified filelist
 
12031
t1#P#p0.MYD
 
12032
t1#P#p0.MYI
 
12033
t1#P#p1.MYD
 
12034
t1#P#p1.MYI
 
12035
t1.frm
 
12036
t1.par
 
12037
 
 
12038
# check prerequisites-1 success:    1
 
12039
# check COUNT(*) success:    1
 
12040
# check MIN/MAX(f_int1) success:    1
 
12041
# check MIN/MAX(f_int2) success:    1
 
12042
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12043
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12044
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12045
WHERE f_int1 IN (2,3);
 
12046
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
12047
# check prerequisites-3 success:    1
 
12048
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12049
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12050
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12051
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12052
WHERE f_int1 IN (2,3);
 
12053
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12054
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12055
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12056
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12057
WHERE f_int1 IN (2,3);
 
12058
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12059
# check read via f_int1 success: 1
 
12060
# check read via f_int2 success: 1
 
12061
        
 
12062
# check multiple-1 success:     1
 
12063
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12064
        
 
12065
# check multiple-2 success:     1
 
12066
INSERT INTO t1 SELECT * FROM t0_template
 
12067
WHERE MOD(f_int1,3) = 0;
 
12068
        
 
12069
# check multiple-3 success:     1
 
12070
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12071
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12072
AND @max_row_div2 + @max_row_div4;
 
12073
        
 
12074
# check multiple-4 success:     1
 
12075
DELETE FROM t1
 
12076
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12077
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12078
        
 
12079
# check multiple-5 success:     1
 
12080
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12081
WHERE MOD(f_int1,3) = 0
 
12082
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12083
SELECT COUNT(*) INTO @clash_count
 
12084
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12085
WHERE MOD(f_int1,3) = 0
 
12086
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12087
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12088
INSERT INTO t1
 
12089
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12090
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12091
f_charbig = '#SINGLE#';
 
12092
        
 
12093
# check single-1 success:       1
 
12094
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12095
INSERT INTO t1
 
12096
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12097
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12098
f_charbig = '#SINGLE#';
 
12099
        
 
12100
# check single-2 success:       1
 
12101
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12102
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12103
UPDATE t1 SET f_int1 = @cur_value2
 
12104
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12105
        
 
12106
# check single-3 success:       1
 
12107
SET @cur_value1= -1;
 
12108
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12109
UPDATE t1 SET f_int1 = @cur_value1
 
12110
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12111
        
 
12112
# check single-4 success:       1
 
12113
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12114
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12115
        
 
12116
# check single-5 success:       1
 
12117
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12118
        
 
12119
# check single-6 success:       1
 
12120
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12121
        
 
12122
# check single-7 success:       1
 
12123
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12124
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12125
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12126
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12127
f_charbig = '#NULL#';
 
12128
INSERT INTO t1
 
12129
SET f_int1 = NULL , f_int2 = -@max_row,
 
12130
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12131
f_charbig = '#NULL#';
 
12132
# check null success:    1
 
12133
        
 
12134
# check null-1 success:         1
 
12135
UPDATE t1 SET f_int1 = -@max_row
 
12136
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12137
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12138
        
 
12139
# check null-2 success:         1
 
12140
UPDATE t1 SET f_int1 = NULL
 
12141
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12142
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12143
        
 
12144
# check null-3 success:         1
 
12145
DELETE FROM t1
 
12146
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12147
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12148
        
 
12149
# check null-4 success:         1
 
12150
DELETE FROM t1
 
12151
WHERE f_int1 = 0 AND f_int2 = 0
 
12152
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12153
AND f_charbig = '#NULL#';
 
12154
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12155
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12156
   FROM t0_template source_tab
 
12157
WHERE MOD(f_int1,3) = 0
 
12158
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12159
ON DUPLICATE KEY
 
12160
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12161
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12162
f_charbig = 'was updated';
 
12163
        
 
12164
# check unique-1-a success:     1
 
12165
        
 
12166
# check unique-1-b success:     1
 
12167
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12169
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12170
f_charbig = CONCAT('===',f_char1,'===')
 
12171
WHERE f_charbig = 'was updated';
 
12172
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12173
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
12174
   FROM t0_template source_tab
 
12175
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12176
        
 
12177
# check replace success:        1
 
12178
DELETE FROM t1
 
12179
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12180
DELETE FROM t1
 
12181
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12182
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12183
UPDATE t1 SET f_int2 = f_int1,
 
12184
f_char1 = CAST(f_int1 AS CHAR),
 
12185
f_char2 = CAST(f_int1 AS CHAR),
 
12186
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12187
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12188
SET AUTOCOMMIT= 0;
 
12189
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12190
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12191
FROM t0_template source_tab
 
12192
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12193
        
 
12194
# check transactions-1 success:         1
 
12195
COMMIT WORK;
 
12196
        
 
12197
# check transactions-2 success:         1
 
12198
ROLLBACK WORK;
 
12199
        
 
12200
# check transactions-3 success:         1
 
12201
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12202
COMMIT WORK;
 
12203
ROLLBACK WORK;
 
12204
        
 
12205
# check transactions-4 success:         1
 
12206
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12207
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12208
FROM t0_template source_tab
 
12209
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12210
        
 
12211
# check transactions-5 success:         1
 
12212
ROLLBACK WORK;
 
12213
Warnings:
 
12214
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12215
        
 
12216
# check transactions-6 success:         1
 
12217
# INFO: Storage engine used for t1 seems to be not transactional.
 
12218
COMMIT;
 
12219
        
 
12220
# check transactions-7 success:         1
 
12221
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12222
COMMIT WORK;
 
12223
SET @@session.sql_mode = 'traditional';
 
12224
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12225
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12226
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12227
'', '', 'was inserted' FROM t0_template
 
12228
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12229
ERROR 22012: Division by 0
 
12230
COMMIT;
 
12231
        
 
12232
# check transactions-8 success:         1
 
12233
# INFO: Storage engine used for t1 seems to be unable to revert
 
12234
#       changes made by the failing statement.
 
12235
SET @@session.sql_mode = '';
 
12236
SET AUTOCOMMIT= 1;
 
12237
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12238
COMMIT WORK;
 
12239
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12240
        
 
12241
# check special-1 success:      1
 
12242
UPDATE t1 SET f_charbig = '';
 
12243
        
 
12244
# check special-2 success:      1
 
12245
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12246
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12247
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12248
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12249
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12250
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12251
'just inserted' FROM t0_template
 
12252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12253
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12254
BEGIN
 
12255
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12256
f_charbig = 'updated by trigger'
 
12257
      WHERE f_int1 = new.f_int1;
 
12258
END|
 
12259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12260
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12262
        
 
12263
# check trigger-1 success:      1
 
12264
DROP TRIGGER trg_1;
 
12265
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12266
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12267
f_charbig = 'just inserted'
 
12268
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12269
DELETE FROM t0_aux
 
12270
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12272
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12273
'just inserted' FROM t0_template
 
12274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12275
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12276
BEGIN
 
12277
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12278
f_charbig = 'updated by trigger'
 
12279
      WHERE f_int1 = new.f_int1;
 
12280
END|
 
12281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12282
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12284
        
 
12285
# check trigger-2 success:      1
 
12286
DROP TRIGGER trg_1;
 
12287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12289
f_charbig = 'just inserted'
 
12290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12291
DELETE FROM t0_aux
 
12292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12295
'just inserted' FROM t0_template
 
12296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12297
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12298
BEGIN
 
12299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12300
f_charbig = 'updated by trigger'
 
12301
      WHERE f_int1 = new.f_int1;
 
12302
END|
 
12303
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12305
        
 
12306
# check trigger-3 success:      1
 
12307
DROP TRIGGER trg_1;
 
12308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12310
f_charbig = 'just inserted'
 
12311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12312
DELETE FROM t0_aux
 
12313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12315
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12316
'just inserted' FROM t0_template
 
12317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12318
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12319
BEGIN
 
12320
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12321
f_charbig = 'updated by trigger'
 
12322
      WHERE f_int1 = - old.f_int1;
 
12323
END|
 
12324
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12325
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12326
        
 
12327
# check trigger-4 success:      1
 
12328
DROP TRIGGER trg_1;
 
12329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12331
f_charbig = 'just inserted'
 
12332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12333
DELETE FROM t0_aux
 
12334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12335
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12336
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12337
'just inserted' FROM t0_template
 
12338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12339
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12340
BEGIN
 
12341
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12342
f_charbig = 'updated by trigger'
 
12343
      WHERE f_int1 = new.f_int1;
 
12344
END|
 
12345
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12346
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12347
        
 
12348
# check trigger-5 success:      1
 
12349
DROP TRIGGER trg_1;
 
12350
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12351
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12352
f_charbig = 'just inserted'
 
12353
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12354
DELETE FROM t0_aux
 
12355
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12356
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12357
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12358
'just inserted' FROM t0_template
 
12359
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12360
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12361
BEGIN
 
12362
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12363
f_charbig = 'updated by trigger'
 
12364
      WHERE f_int1 = - old.f_int1;
 
12365
END|
 
12366
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12367
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12368
        
 
12369
# check trigger-6 success:      1
 
12370
DROP TRIGGER trg_1;
 
12371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12373
f_charbig = 'just inserted'
 
12374
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12375
DELETE FROM t0_aux
 
12376
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12377
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12378
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12379
'just inserted' FROM t0_template
 
12380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12381
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12382
BEGIN
 
12383
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12384
f_charbig = 'updated by trigger'
 
12385
      WHERE f_int1 = - old.f_int1;
 
12386
END|
 
12387
DELETE FROM t0_aux
 
12388
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12389
        
 
12390
# check trigger-7 success:      1
 
12391
DROP TRIGGER trg_1;
 
12392
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12393
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12394
f_charbig = 'just inserted'
 
12395
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12396
DELETE FROM t0_aux
 
12397
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12399
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12400
'just inserted' FROM t0_template
 
12401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12402
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12403
BEGIN
 
12404
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12405
f_charbig = 'updated by trigger'
 
12406
      WHERE f_int1 = - old.f_int1;
 
12407
END|
 
12408
DELETE FROM t0_aux
 
12409
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12410
        
 
12411
# check trigger-8 success:      1
 
12412
DROP TRIGGER trg_1;
 
12413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12415
f_charbig = 'just inserted'
 
12416
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12417
DELETE FROM t0_aux
 
12418
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12419
DELETE FROM t1
 
12420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12421
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12422
BEGIN
 
12423
SET new.f_int1 = old.f_int1 + @max_row,
 
12424
new.f_int2 = old.f_int2 - @max_row,
 
12425
new.f_charbig = '####updated per update trigger####';
 
12426
END|
 
12427
UPDATE t1
 
12428
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12429
f_charbig = '####updated per update statement itself####';
 
12430
        
 
12431
# check trigger-9 success:      1
 
12432
DROP TRIGGER trg_2;
 
12433
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12434
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12435
f_charbig = CONCAT('===',f_char1,'===');
 
12436
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12437
BEGIN
 
12438
SET new.f_int1 = new.f_int1 + @max_row,
 
12439
new.f_int2 = new.f_int2 - @max_row,
 
12440
new.f_charbig = '####updated per update trigger####';
 
12441
END|
 
12442
UPDATE t1
 
12443
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12444
f_charbig = '####updated per update statement itself####';
 
12445
        
 
12446
# check trigger-10 success:     1
 
12447
DROP TRIGGER trg_2;
 
12448
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12449
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12450
f_charbig = CONCAT('===',f_char1,'===');
 
12451
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12452
BEGIN
 
12453
SET new.f_int1 = @my_max1 + @counter,
 
12454
new.f_int2 = @my_min2 - @counter,
 
12455
new.f_charbig = '####updated per insert trigger####';
 
12456
SET @counter = @counter + 1;
 
12457
END|
 
12458
SET @counter = 1;
 
12459
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12460
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12461
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12462
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12464
ORDER BY f_int1;
 
12465
DROP TRIGGER trg_3;
 
12466
        
 
12467
# check trigger-11 success:     1
 
12468
DELETE FROM t1
 
12469
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12470
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12471
AND f_charbig = '####updated per insert trigger####';
 
12472
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12473
BEGIN
 
12474
SET new.f_int1 = @my_max1 + @counter,
 
12475
new.f_int2 = @my_min2 - @counter,
 
12476
new.f_charbig = '####updated per insert trigger####';
 
12477
SET @counter = @counter + 1;
 
12478
END|
 
12479
SET @counter = 1;
 
12480
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12481
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12482
SELECT CAST(f_int1 AS CHAR),
 
12483
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12485
ORDER BY f_int1;
 
12486
DROP TRIGGER trg_3;
 
12487
        
 
12488
# check trigger-12 success:     1
 
12489
DELETE FROM t1
 
12490
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12491
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12492
AND f_charbig = '####updated per insert trigger####';
 
12493
ANALYZE  TABLE t1;
 
12494
Table   Op      Msg_type        Msg_text
 
12495
test.t1 analyze status  OK
 
12496
CHECK    TABLE t1 EXTENDED;
 
12497
Table   Op      Msg_type        Msg_text
 
12498
test.t1 check   status  OK
 
12499
CHECKSUM TABLE t1 EXTENDED;
 
12500
Table   Checksum
 
12501
test.t1 <some_value>
 
12502
OPTIMIZE TABLE t1;
 
12503
Table   Op      Msg_type        Msg_text
 
12504
test.t1 optimize        status  OK
 
12505
# check layout success:    1
 
12506
REPAIR   TABLE t1 EXTENDED;
 
12507
Table   Op      Msg_type        Msg_text
 
12508
test.t1 repair  status  OK
 
12509
# check layout success:    1
 
12510
TRUNCATE t1;
 
12511
        
 
12512
# check TRUNCATE success:       1
 
12513
# check layout success:    1
 
12514
# End usability test (inc/partition_check.inc)
 
12515
DROP TABLE t1;
 
12516
CREATE TABLE t1 (
 
12517
f_int1 INTEGER,
 
12518
f_int2 INTEGER,
 
12519
f_char1 CHAR(20),
 
12520
f_char2 CHAR(20),
 
12521
f_charbig VARCHAR(1000)
 
12522
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
12523
)
 
12524
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
12525
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12526
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
12527
# Start usability test (inc/partition_check.inc)
 
12528
create_command
 
12529
SHOW CREATE TABLE t1;
 
12530
Table   Create Table
 
12531
t1      CREATE TABLE `t1` (
 
12532
  `f_int1` int(11) DEFAULT NULL,
 
12533
  `f_int2` int(11) DEFAULT NULL,
 
12534
  `f_char1` char(20) DEFAULT NULL,
 
12535
  `f_char2` char(20) DEFAULT NULL,
 
12536
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12537
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
12538
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
12539
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
12540
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
12541
PARTITIONS 5 */
 
12542
 
 
12543
unified filelist
 
12544
t1#P#p0.MYD
 
12545
t1#P#p0.MYI
 
12546
t1#P#p1.MYD
 
12547
t1#P#p1.MYI
 
12548
t1#P#p2.MYD
 
12549
t1#P#p2.MYI
 
12550
t1#P#p3.MYD
 
12551
t1#P#p3.MYI
 
12552
t1#P#p4.MYD
 
12553
t1#P#p4.MYI
 
12554
t1.frm
 
12555
t1.par
 
12556
 
 
12557
# check prerequisites-1 success:    1
 
12558
# check COUNT(*) success:    1
 
12559
# check MIN/MAX(f_int1) success:    1
 
12560
# check MIN/MAX(f_int2) success:    1
 
12561
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12562
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12563
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12564
WHERE f_int1 IN (2,3);
 
12565
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
12566
# check prerequisites-3 success:    1
 
12567
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12568
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12569
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12570
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12571
WHERE f_int1 IN (2,3);
 
12572
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12573
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12574
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12575
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12576
WHERE f_int1 IN (2,3);
 
12577
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12578
# check read via f_int1 success: 1
 
12579
# check read via f_int2 success: 1
 
12580
        
 
12581
# check multiple-1 success:     1
 
12582
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12583
        
 
12584
# check multiple-2 success:     1
 
12585
INSERT INTO t1 SELECT * FROM t0_template
 
12586
WHERE MOD(f_int1,3) = 0;
 
12587
        
 
12588
# check multiple-3 success:     1
 
12589
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12590
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12591
AND @max_row_div2 + @max_row_div4;
 
12592
        
 
12593
# check multiple-4 success:     1
 
12594
DELETE FROM t1
 
12595
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12596
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12597
        
 
12598
# check multiple-5 success:     1
 
12599
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12600
WHERE MOD(f_int1,3) = 0
 
12601
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12602
SELECT COUNT(*) INTO @clash_count
 
12603
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12604
WHERE MOD(f_int1,3) = 0
 
12605
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12606
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12607
INSERT INTO t1
 
12608
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12609
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12610
f_charbig = '#SINGLE#';
 
12611
        
 
12612
# check single-1 success:       1
 
12613
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12614
INSERT INTO t1
 
12615
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12616
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12617
f_charbig = '#SINGLE#';
 
12618
        
 
12619
# check single-2 success:       1
 
12620
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12621
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12622
UPDATE t1 SET f_int1 = @cur_value2
 
12623
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12624
        
 
12625
# check single-3 success:       1
 
12626
SET @cur_value1= -1;
 
12627
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12628
UPDATE t1 SET f_int1 = @cur_value1
 
12629
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12630
        
 
12631
# check single-4 success:       1
 
12632
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12633
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12634
        
 
12635
# check single-5 success:       1
 
12636
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12637
        
 
12638
# check single-6 success:       1
 
12639
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12640
        
 
12641
# check single-7 success:       1
 
12642
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12643
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12644
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12645
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12646
f_charbig = '#NULL#';
 
12647
INSERT INTO t1
 
12648
SET f_int1 = NULL , f_int2 = -@max_row,
 
12649
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12650
f_charbig = '#NULL#';
 
12651
# check null success:    1
 
12652
        
 
12653
# check null-1 success:         1
 
12654
UPDATE t1 SET f_int1 = -@max_row
 
12655
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12656
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12657
        
 
12658
# check null-2 success:         1
 
12659
UPDATE t1 SET f_int1 = NULL
 
12660
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12661
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12662
        
 
12663
# check null-3 success:         1
 
12664
DELETE FROM t1
 
12665
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12666
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12667
        
 
12668
# check null-4 success:         1
 
12669
DELETE FROM t1
 
12670
WHERE f_int1 = 0 AND f_int2 = 0
 
12671
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12672
AND f_charbig = '#NULL#';
 
12673
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12674
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12675
   FROM t0_template source_tab
 
12676
WHERE MOD(f_int1,3) = 0
 
12677
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12678
ON DUPLICATE KEY
 
12679
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12680
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12681
f_charbig = 'was updated';
 
12682
        
 
12683
# check unique-1-a success:     1
 
12684
        
 
12685
# check unique-1-b success:     1
 
12686
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12687
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12688
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12689
f_charbig = CONCAT('===',f_char1,'===')
 
12690
WHERE f_charbig = 'was updated';
 
12691
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12692
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
12693
   FROM t0_template source_tab
 
12694
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12695
        
 
12696
# check replace success:        1
 
12697
DELETE FROM t1
 
12698
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12699
DELETE FROM t1
 
12700
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12701
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12702
UPDATE t1 SET f_int2 = f_int1,
 
12703
f_char1 = CAST(f_int1 AS CHAR),
 
12704
f_char2 = CAST(f_int1 AS CHAR),
 
12705
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12706
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12707
SET AUTOCOMMIT= 0;
 
12708
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12709
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12710
FROM t0_template source_tab
 
12711
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12712
        
 
12713
# check transactions-1 success:         1
 
12714
COMMIT WORK;
 
12715
        
 
12716
# check transactions-2 success:         1
 
12717
ROLLBACK WORK;
 
12718
        
 
12719
# check transactions-3 success:         1
 
12720
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12721
COMMIT WORK;
 
12722
ROLLBACK WORK;
 
12723
        
 
12724
# check transactions-4 success:         1
 
12725
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12726
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12727
FROM t0_template source_tab
 
12728
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12729
        
 
12730
# check transactions-5 success:         1
 
12731
ROLLBACK WORK;
 
12732
Warnings:
 
12733
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12734
        
 
12735
# check transactions-6 success:         1
 
12736
# INFO: Storage engine used for t1 seems to be not transactional.
 
12737
COMMIT;
 
12738
        
 
12739
# check transactions-7 success:         1
 
12740
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12741
COMMIT WORK;
 
12742
SET @@session.sql_mode = 'traditional';
 
12743
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12744
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12745
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12746
'', '', 'was inserted' FROM t0_template
 
12747
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12748
ERROR 22012: Division by 0
 
12749
COMMIT;
 
12750
        
 
12751
# check transactions-8 success:         1
 
12752
# INFO: Storage engine used for t1 seems to be unable to revert
 
12753
#       changes made by the failing statement.
 
12754
SET @@session.sql_mode = '';
 
12755
SET AUTOCOMMIT= 1;
 
12756
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12757
COMMIT WORK;
 
12758
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12759
        
 
12760
# check special-1 success:      1
 
12761
UPDATE t1 SET f_charbig = '';
 
12762
        
 
12763
# check special-2 success:      1
 
12764
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12765
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12766
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12770
'just inserted' FROM t0_template
 
12771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12772
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12773
BEGIN
 
12774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12775
f_charbig = 'updated by trigger'
 
12776
      WHERE f_int1 = new.f_int1;
 
12777
END|
 
12778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12779
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12780
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12781
        
 
12782
# check trigger-1 success:      1
 
12783
DROP TRIGGER trg_1;
 
12784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12786
f_charbig = 'just inserted'
 
12787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12788
DELETE FROM t0_aux
 
12789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12790
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12791
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12792
'just inserted' FROM t0_template
 
12793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12794
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12795
BEGIN
 
12796
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12797
f_charbig = 'updated by trigger'
 
12798
      WHERE f_int1 = new.f_int1;
 
12799
END|
 
12800
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12801
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12803
        
 
12804
# check trigger-2 success:      1
 
12805
DROP TRIGGER trg_1;
 
12806
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12807
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12808
f_charbig = 'just inserted'
 
12809
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12810
DELETE FROM t0_aux
 
12811
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12812
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12813
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12814
'just inserted' FROM t0_template
 
12815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12816
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12817
BEGIN
 
12818
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12819
f_charbig = 'updated by trigger'
 
12820
      WHERE f_int1 = new.f_int1;
 
12821
END|
 
12822
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12823
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12824
        
 
12825
# check trigger-3 success:      1
 
12826
DROP TRIGGER trg_1;
 
12827
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12828
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12829
f_charbig = 'just inserted'
 
12830
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12831
DELETE FROM t0_aux
 
12832
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12834
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12835
'just inserted' FROM t0_template
 
12836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12837
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12838
BEGIN
 
12839
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12840
f_charbig = 'updated by trigger'
 
12841
      WHERE f_int1 = - old.f_int1;
 
12842
END|
 
12843
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12844
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12845
        
 
12846
# check trigger-4 success:      1
 
12847
DROP TRIGGER trg_1;
 
12848
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12849
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12850
f_charbig = 'just inserted'
 
12851
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12852
DELETE FROM t0_aux
 
12853
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12854
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12855
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12856
'just inserted' FROM t0_template
 
12857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12858
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12859
BEGIN
 
12860
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12861
f_charbig = 'updated by trigger'
 
12862
      WHERE f_int1 = new.f_int1;
 
12863
END|
 
12864
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12865
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12866
        
 
12867
# check trigger-5 success:      1
 
12868
DROP TRIGGER trg_1;
 
12869
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12870
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12871
f_charbig = 'just inserted'
 
12872
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12873
DELETE FROM t0_aux
 
12874
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12875
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12876
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12877
'just inserted' FROM t0_template
 
12878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12879
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12880
BEGIN
 
12881
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12882
f_charbig = 'updated by trigger'
 
12883
      WHERE f_int1 = - old.f_int1;
 
12884
END|
 
12885
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12886
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12887
        
 
12888
# check trigger-6 success:      1
 
12889
DROP TRIGGER trg_1;
 
12890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12892
f_charbig = 'just inserted'
 
12893
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12894
DELETE FROM t0_aux
 
12895
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12896
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12897
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12898
'just inserted' FROM t0_template
 
12899
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12900
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12901
BEGIN
 
12902
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12903
f_charbig = 'updated by trigger'
 
12904
      WHERE f_int1 = - old.f_int1;
 
12905
END|
 
12906
DELETE FROM t0_aux
 
12907
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12908
        
 
12909
# check trigger-7 success:      1
 
12910
DROP TRIGGER trg_1;
 
12911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12912
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12913
f_charbig = 'just inserted'
 
12914
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12915
DELETE FROM t0_aux
 
12916
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12917
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12918
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12919
'just inserted' FROM t0_template
 
12920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12921
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12922
BEGIN
 
12923
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12924
f_charbig = 'updated by trigger'
 
12925
      WHERE f_int1 = - old.f_int1;
 
12926
END|
 
12927
DELETE FROM t0_aux
 
12928
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12929
        
 
12930
# check trigger-8 success:      1
 
12931
DROP TRIGGER trg_1;
 
12932
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12933
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12934
f_charbig = 'just inserted'
 
12935
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12936
DELETE FROM t0_aux
 
12937
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12938
DELETE FROM t1
 
12939
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12940
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12941
BEGIN
 
12942
SET new.f_int1 = old.f_int1 + @max_row,
 
12943
new.f_int2 = old.f_int2 - @max_row,
 
12944
new.f_charbig = '####updated per update trigger####';
 
12945
END|
 
12946
UPDATE t1
 
12947
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12948
f_charbig = '####updated per update statement itself####';
 
12949
        
 
12950
# check trigger-9 success:      1
 
12951
DROP TRIGGER trg_2;
 
12952
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12953
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12954
f_charbig = CONCAT('===',f_char1,'===');
 
12955
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12956
BEGIN
 
12957
SET new.f_int1 = new.f_int1 + @max_row,
 
12958
new.f_int2 = new.f_int2 - @max_row,
 
12959
new.f_charbig = '####updated per update trigger####';
 
12960
END|
 
12961
UPDATE t1
 
12962
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12963
f_charbig = '####updated per update statement itself####';
 
12964
        
 
12965
# check trigger-10 success:     1
 
12966
DROP TRIGGER trg_2;
 
12967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12969
f_charbig = CONCAT('===',f_char1,'===');
 
12970
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12971
BEGIN
 
12972
SET new.f_int1 = @my_max1 + @counter,
 
12973
new.f_int2 = @my_min2 - @counter,
 
12974
new.f_charbig = '####updated per insert trigger####';
 
12975
SET @counter = @counter + 1;
 
12976
END|
 
12977
SET @counter = 1;
 
12978
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12979
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12980
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12981
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12983
ORDER BY f_int1;
 
12984
DROP TRIGGER trg_3;
 
12985
        
 
12986
# check trigger-11 success:     1
 
12987
DELETE FROM t1
 
12988
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12989
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12990
AND f_charbig = '####updated per insert trigger####';
 
12991
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12992
BEGIN
 
12993
SET new.f_int1 = @my_max1 + @counter,
 
12994
new.f_int2 = @my_min2 - @counter,
 
12995
new.f_charbig = '####updated per insert trigger####';
 
12996
SET @counter = @counter + 1;
 
12997
END|
 
12998
SET @counter = 1;
 
12999
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13000
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13001
SELECT CAST(f_int1 AS CHAR),
 
13002
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13004
ORDER BY f_int1;
 
13005
DROP TRIGGER trg_3;
 
13006
        
 
13007
# check trigger-12 success:     1
 
13008
DELETE FROM t1
 
13009
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13010
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13011
AND f_charbig = '####updated per insert trigger####';
 
13012
ANALYZE  TABLE t1;
 
13013
Table   Op      Msg_type        Msg_text
 
13014
test.t1 analyze status  OK
 
13015
CHECK    TABLE t1 EXTENDED;
 
13016
Table   Op      Msg_type        Msg_text
 
13017
test.t1 check   status  OK
 
13018
CHECKSUM TABLE t1 EXTENDED;
 
13019
Table   Checksum
 
13020
test.t1 <some_value>
 
13021
OPTIMIZE TABLE t1;
 
13022
Table   Op      Msg_type        Msg_text
 
13023
test.t1 optimize        status  OK
 
13024
# check layout success:    1
 
13025
REPAIR   TABLE t1 EXTENDED;
 
13026
Table   Op      Msg_type        Msg_text
 
13027
test.t1 repair  status  OK
 
13028
# check layout success:    1
 
13029
TRUNCATE t1;
 
13030
        
 
13031
# check TRUNCATE success:       1
 
13032
# check layout success:    1
 
13033
# End usability test (inc/partition_check.inc)
 
13034
DROP TABLE t1;
 
13035
CREATE TABLE t1 (
 
13036
f_int1 INTEGER,
 
13037
f_int2 INTEGER,
 
13038
f_char1 CHAR(20),
 
13039
f_char2 CHAR(20),
 
13040
f_charbig VARCHAR(1000)
 
13041
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
13042
)
 
13043
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
13044
(PARTITION part_3 VALUES IN (-3),
 
13045
PARTITION part_2 VALUES IN (-2),
 
13046
PARTITION part_1 VALUES IN (-1),
 
13047
PARTITION part_N VALUES IN (NULL),
 
13048
PARTITION part0 VALUES IN (0),
 
13049
PARTITION part1 VALUES IN (1),
 
13050
PARTITION part2 VALUES IN (2),
 
13051
PARTITION part3 VALUES IN (3));
 
13052
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13053
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
13054
# Start usability test (inc/partition_check.inc)
 
13055
create_command
 
13056
SHOW CREATE TABLE t1;
 
13057
Table   Create Table
 
13058
t1      CREATE TABLE `t1` (
 
13059
  `f_int1` int(11) DEFAULT NULL,
 
13060
  `f_int2` int(11) DEFAULT NULL,
 
13061
  `f_char1` char(20) DEFAULT NULL,
 
13062
  `f_char2` char(20) DEFAULT NULL,
 
13063
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13064
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
13065
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
13066
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
13067
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
13068
(PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM,
 
13069
 PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM,
 
13070
 PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM,
 
13071
 PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM,
 
13072
 PARTITION part0 VALUES IN (0) ENGINE = MyISAM,
 
13073
 PARTITION part1 VALUES IN (1) ENGINE = MyISAM,
 
13074
 PARTITION part2 VALUES IN (2) ENGINE = MyISAM,
 
13075
 PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
13076
 
 
13077
unified filelist
 
13078
t1#P#part0.MYD
 
13079
t1#P#part0.MYI
 
13080
t1#P#part1.MYD
 
13081
t1#P#part1.MYI
 
13082
t1#P#part2.MYD
 
13083
t1#P#part2.MYI
 
13084
t1#P#part3.MYD
 
13085
t1#P#part3.MYI
 
13086
t1#P#part_1.MYD
 
13087
t1#P#part_1.MYI
 
13088
t1#P#part_2.MYD
 
13089
t1#P#part_2.MYI
 
13090
t1#P#part_3.MYD
 
13091
t1#P#part_3.MYI
 
13092
t1#P#part_N.MYD
 
13093
t1#P#part_N.MYI
 
13094
t1.frm
 
13095
t1.par
 
13096
 
 
13097
# check prerequisites-1 success:    1
 
13098
# check COUNT(*) success:    1
 
13099
# check MIN/MAX(f_int1) success:    1
 
13100
# check MIN/MAX(f_int2) success:    1
 
13101
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13102
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13103
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13104
WHERE f_int1 IN (2,3);
 
13105
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
13106
# check prerequisites-3 success:    1
 
13107
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
13108
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13109
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13110
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13111
WHERE f_int1 IN (2,3);
 
13112
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13113
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13114
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13115
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13116
WHERE f_int1 IN (2,3);
 
13117
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13118
# check read via f_int1 success: 1
 
13119
# check read via f_int2 success: 1
 
13120
        
 
13121
# check multiple-1 success:     1
 
13122
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13123
        
 
13124
# check multiple-2 success:     1
 
13125
INSERT INTO t1 SELECT * FROM t0_template
 
13126
WHERE MOD(f_int1,3) = 0;
 
13127
        
 
13128
# check multiple-3 success:     1
 
13129
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13130
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13131
AND @max_row_div2 + @max_row_div4;
 
13132
        
 
13133
# check multiple-4 success:     1
 
13134
DELETE FROM t1
 
13135
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13136
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13137
        
 
13138
# check multiple-5 success:     1
 
13139
SELECT COUNT(*) INTO @try_count FROM t0_template
 
13140
WHERE MOD(f_int1,3) = 0
 
13141
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13142
SELECT COUNT(*) INTO @clash_count
 
13143
FROM t1 INNER JOIN t0_template USING(f_int1)
 
13144
WHERE MOD(f_int1,3) = 0
 
13145
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13146
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13147
INSERT INTO t1
 
13148
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13149
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13150
f_charbig = '#SINGLE#';
 
13151
        
 
13152
# check single-1 success:       1
 
13153
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13154
INSERT INTO t1
 
13155
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13156
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13157
f_charbig = '#SINGLE#';
 
13158
        
 
13159
# check single-2 success:       1
 
13160
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13161
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13162
UPDATE t1 SET f_int1 = @cur_value2
 
13163
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13164
        
 
13165
# check single-3 success:       1
 
13166
SET @cur_value1= -1;
 
13167
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13168
UPDATE t1 SET f_int1 = @cur_value1
 
13169
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13170
        
 
13171
# check single-4 success:       1
 
13172
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13173
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13174
        
 
13175
# check single-5 success:       1
 
13176
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13177
        
 
13178
# check single-6 success:       1
 
13179
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13180
        
 
13181
# check single-7 success:       1
 
13182
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13183
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13184
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13185
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13186
f_charbig = '#NULL#';
 
13187
INSERT INTO t1
 
13188
SET f_int1 = NULL , f_int2 = -@max_row,
 
13189
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13190
f_charbig = '#NULL#';
 
13191
# check null success:    1
 
13192
        
 
13193
# check null-1 success:         1
 
13194
UPDATE t1 SET f_int1 = -@max_row
 
13195
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13196
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13197
        
 
13198
# check null-2 success:         1
 
13199
UPDATE t1 SET f_int1 = NULL
 
13200
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13201
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13202
        
 
13203
# check null-3 success:         1
 
13204
DELETE FROM t1
 
13205
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13206
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13207
        
 
13208
# check null-4 success:         1
 
13209
DELETE FROM t1
 
13210
WHERE f_int1 = 0 AND f_int2 = 0
 
13211
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13212
AND f_charbig = '#NULL#';
 
13213
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13214
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13215
   FROM t0_template source_tab
 
13216
WHERE MOD(f_int1,3) = 0
 
13217
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
13218
ON DUPLICATE KEY
 
13219
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
13220
f_int2 = 2 * @max_row + source_tab.f_int1,
 
13221
f_charbig = 'was updated';
 
13222
        
 
13223
# check unique-1-a success:     1
 
13224
        
 
13225
# check unique-1-b success:     1
 
13226
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13227
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13228
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13229
f_charbig = CONCAT('===',f_char1,'===')
 
13230
WHERE f_charbig = 'was updated';
 
13231
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13232
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13233
   FROM t0_template source_tab
 
13234
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13235
        
 
13236
# check replace success:        1
 
13237
DELETE FROM t1
 
13238
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13239
DELETE FROM t1
 
13240
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13241
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13242
UPDATE t1 SET f_int2 = f_int1,
 
13243
f_char1 = CAST(f_int1 AS CHAR),
 
13244
f_char2 = CAST(f_int1 AS CHAR),
 
13245
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13246
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13247
SET AUTOCOMMIT= 0;
 
13248
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13249
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13250
FROM t0_template source_tab
 
13251
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13252
        
 
13253
# check transactions-1 success:         1
 
13254
COMMIT WORK;
 
13255
        
 
13256
# check transactions-2 success:         1
 
13257
ROLLBACK WORK;
 
13258
        
 
13259
# check transactions-3 success:         1
 
13260
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13261
COMMIT WORK;
 
13262
ROLLBACK WORK;
 
13263
        
 
13264
# check transactions-4 success:         1
 
13265
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13266
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13267
FROM t0_template source_tab
 
13268
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13269
        
 
13270
# check transactions-5 success:         1
 
13271
ROLLBACK WORK;
 
13272
Warnings:
 
13273
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13274
        
 
13275
# check transactions-6 success:         1
 
13276
# INFO: Storage engine used for t1 seems to be not transactional.
 
13277
COMMIT;
 
13278
        
 
13279
# check transactions-7 success:         1
 
13280
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13281
COMMIT WORK;
 
13282
SET @@session.sql_mode = 'traditional';
 
13283
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13284
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13285
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13286
'', '', 'was inserted' FROM t0_template
 
13287
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13288
ERROR 22012: Division by 0
 
13289
COMMIT;
 
13290
        
 
13291
# check transactions-8 success:         1
 
13292
# INFO: Storage engine used for t1 seems to be unable to revert
 
13293
#       changes made by the failing statement.
 
13294
SET @@session.sql_mode = '';
 
13295
SET AUTOCOMMIT= 1;
 
13296
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13297
COMMIT WORK;
 
13298
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13299
        
 
13300
# check special-1 success:      1
 
13301
UPDATE t1 SET f_charbig = '';
 
13302
        
 
13303
# check special-2 success:      1
 
13304
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13305
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13306
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13308
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13309
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13310
'just inserted' FROM t0_template
 
13311
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13312
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13313
BEGIN
 
13314
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13315
f_charbig = 'updated by trigger'
 
13316
      WHERE f_int1 = new.f_int1;
 
13317
END|
 
13318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13319
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13321
        
 
13322
# check trigger-1 success:      1
 
13323
DROP TRIGGER trg_1;
 
13324
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13325
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13326
f_charbig = 'just inserted'
 
13327
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13328
DELETE FROM t0_aux
 
13329
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13331
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13332
'just inserted' FROM t0_template
 
13333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13334
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13335
BEGIN
 
13336
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13337
f_charbig = 'updated by trigger'
 
13338
      WHERE f_int1 = new.f_int1;
 
13339
END|
 
13340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13341
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13343
        
 
13344
# check trigger-2 success:      1
 
13345
DROP TRIGGER trg_1;
 
13346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13348
f_charbig = 'just inserted'
 
13349
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13350
DELETE FROM t0_aux
 
13351
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13352
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13353
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13354
'just inserted' FROM t0_template
 
13355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13356
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13357
BEGIN
 
13358
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13359
f_charbig = 'updated by trigger'
 
13360
      WHERE f_int1 = new.f_int1;
 
13361
END|
 
13362
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13363
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13364
        
 
13365
# check trigger-3 success:      1
 
13366
DROP TRIGGER trg_1;
 
13367
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13368
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13369
f_charbig = 'just inserted'
 
13370
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13371
DELETE FROM t0_aux
 
13372
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13373
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13374
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13375
'just inserted' FROM t0_template
 
13376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13377
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13378
BEGIN
 
13379
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13380
f_charbig = 'updated by trigger'
 
13381
      WHERE f_int1 = - old.f_int1;
 
13382
END|
 
13383
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13384
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13385
        
 
13386
# check trigger-4 success:      1
 
13387
DROP TRIGGER trg_1;
 
13388
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13389
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13390
f_charbig = 'just inserted'
 
13391
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13392
DELETE FROM t0_aux
 
13393
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13394
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13395
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13396
'just inserted' FROM t0_template
 
13397
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13398
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13399
BEGIN
 
13400
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13401
f_charbig = 'updated by trigger'
 
13402
      WHERE f_int1 = new.f_int1;
 
13403
END|
 
13404
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13405
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13406
        
 
13407
# check trigger-5 success:      1
 
13408
DROP TRIGGER trg_1;
 
13409
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13410
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13411
f_charbig = 'just inserted'
 
13412
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13413
DELETE FROM t0_aux
 
13414
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13415
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13416
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13417
'just inserted' FROM t0_template
 
13418
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13419
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13420
BEGIN
 
13421
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13422
f_charbig = 'updated by trigger'
 
13423
      WHERE f_int1 = - old.f_int1;
 
13424
END|
 
13425
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13426
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13427
        
 
13428
# check trigger-6 success:      1
 
13429
DROP TRIGGER trg_1;
 
13430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13432
f_charbig = 'just inserted'
 
13433
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13434
DELETE FROM t0_aux
 
13435
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13436
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13437
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13438
'just inserted' FROM t0_template
 
13439
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13440
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13441
BEGIN
 
13442
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13443
f_charbig = 'updated by trigger'
 
13444
      WHERE f_int1 = - old.f_int1;
 
13445
END|
 
13446
DELETE FROM t0_aux
 
13447
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13448
        
 
13449
# check trigger-7 success:      1
 
13450
DROP TRIGGER trg_1;
 
13451
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13452
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13453
f_charbig = 'just inserted'
 
13454
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13455
DELETE FROM t0_aux
 
13456
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13457
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13458
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13459
'just inserted' FROM t0_template
 
13460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13461
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13462
BEGIN
 
13463
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13464
f_charbig = 'updated by trigger'
 
13465
      WHERE f_int1 = - old.f_int1;
 
13466
END|
 
13467
DELETE FROM t0_aux
 
13468
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13469
        
 
13470
# check trigger-8 success:      1
 
13471
DROP TRIGGER trg_1;
 
13472
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13473
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13474
f_charbig = 'just inserted'
 
13475
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13476
DELETE FROM t0_aux
 
13477
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13478
DELETE FROM t1
 
13479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13480
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13481
BEGIN
 
13482
SET new.f_int1 = old.f_int1 + @max_row,
 
13483
new.f_int2 = old.f_int2 - @max_row,
 
13484
new.f_charbig = '####updated per update trigger####';
 
13485
END|
 
13486
UPDATE t1
 
13487
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13488
f_charbig = '####updated per update statement itself####';
 
13489
        
 
13490
# check trigger-9 success:      1
 
13491
DROP TRIGGER trg_2;
 
13492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13494
f_charbig = CONCAT('===',f_char1,'===');
 
13495
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13496
BEGIN
 
13497
SET new.f_int1 = new.f_int1 + @max_row,
 
13498
new.f_int2 = new.f_int2 - @max_row,
 
13499
new.f_charbig = '####updated per update trigger####';
 
13500
END|
 
13501
UPDATE t1
 
13502
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13503
f_charbig = '####updated per update statement itself####';
 
13504
        
 
13505
# check trigger-10 success:     1
 
13506
DROP TRIGGER trg_2;
 
13507
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13508
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13509
f_charbig = CONCAT('===',f_char1,'===');
 
13510
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13511
BEGIN
 
13512
SET new.f_int1 = @my_max1 + @counter,
 
13513
new.f_int2 = @my_min2 - @counter,
 
13514
new.f_charbig = '####updated per insert trigger####';
 
13515
SET @counter = @counter + 1;
 
13516
END|
 
13517
SET @counter = 1;
 
13518
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13519
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13520
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13521
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13523
ORDER BY f_int1;
 
13524
DROP TRIGGER trg_3;
 
13525
        
 
13526
# check trigger-11 success:     1
 
13527
DELETE FROM t1
 
13528
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13529
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13530
AND f_charbig = '####updated per insert trigger####';
 
13531
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13532
BEGIN
 
13533
SET new.f_int1 = @my_max1 + @counter,
 
13534
new.f_int2 = @my_min2 - @counter,
 
13535
new.f_charbig = '####updated per insert trigger####';
 
13536
SET @counter = @counter + 1;
 
13537
END|
 
13538
SET @counter = 1;
 
13539
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13540
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13541
SELECT CAST(f_int1 AS CHAR),
 
13542
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13544
ORDER BY f_int1;
 
13545
DROP TRIGGER trg_3;
 
13546
        
 
13547
# check trigger-12 success:     1
 
13548
DELETE FROM t1
 
13549
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13550
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13551
AND f_charbig = '####updated per insert trigger####';
 
13552
ANALYZE  TABLE t1;
 
13553
Table   Op      Msg_type        Msg_text
 
13554
test.t1 analyze status  OK
 
13555
CHECK    TABLE t1 EXTENDED;
 
13556
Table   Op      Msg_type        Msg_text
 
13557
test.t1 check   status  OK
 
13558
CHECKSUM TABLE t1 EXTENDED;
 
13559
Table   Checksum
 
13560
test.t1 <some_value>
 
13561
OPTIMIZE TABLE t1;
 
13562
Table   Op      Msg_type        Msg_text
 
13563
test.t1 optimize        status  OK
 
13564
# check layout success:    1
 
13565
REPAIR   TABLE t1 EXTENDED;
 
13566
Table   Op      Msg_type        Msg_text
 
13567
test.t1 repair  status  OK
 
13568
# check layout success:    1
 
13569
TRUNCATE t1;
 
13570
        
 
13571
# check TRUNCATE success:       1
 
13572
# check layout success:    1
 
13573
# End usability test (inc/partition_check.inc)
 
13574
DROP TABLE t1;
 
13575
CREATE TABLE t1 (
 
13576
f_int1 INTEGER,
 
13577
f_int2 INTEGER,
 
13578
f_char1 CHAR(20),
 
13579
f_char2 CHAR(20),
 
13580
f_charbig VARCHAR(1000)
 
13581
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
13582
)
 
13583
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
13584
(PARTITION parta VALUES LESS THAN (0),
 
13585
PARTITION partb VALUES LESS THAN (5),
 
13586
PARTITION partc VALUES LESS THAN (10),
 
13587
PARTITION partd VALUES LESS THAN (10 + 5),
 
13588
PARTITION parte VALUES LESS THAN (20),
 
13589
PARTITION partf VALUES LESS THAN (2147483646));
 
13590
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13591
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
13592
# Start usability test (inc/partition_check.inc)
 
13593
create_command
 
13594
SHOW CREATE TABLE t1;
 
13595
Table   Create Table
 
13596
t1      CREATE TABLE `t1` (
 
13597
  `f_int1` int(11) DEFAULT NULL,
 
13598
  `f_int2` int(11) DEFAULT NULL,
 
13599
  `f_char1` char(20) DEFAULT NULL,
 
13600
  `f_char2` char(20) DEFAULT NULL,
 
13601
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13602
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
13603
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
13604
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
13605
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
13606
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
13607
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
13608
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
13609
 PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM,
 
13610
 PARTITION parte VALUES LESS THAN (20) ENGINE = MyISAM,
 
13611
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
13612
 
 
13613
unified filelist
 
13614
t1#P#parta.MYD
 
13615
t1#P#parta.MYI
 
13616
t1#P#partb.MYD
 
13617
t1#P#partb.MYI
 
13618
t1#P#partc.MYD
 
13619
t1#P#partc.MYI
 
13620
t1#P#partd.MYD
 
13621
t1#P#partd.MYI
 
13622
t1#P#parte.MYD
 
13623
t1#P#parte.MYI
 
13624
t1#P#partf.MYD
 
13625
t1#P#partf.MYI
 
13626
t1.frm
 
13627
t1.par
 
13628
 
 
13629
# check prerequisites-1 success:    1
 
13630
# check COUNT(*) success:    1
 
13631
# check MIN/MAX(f_int1) success:    1
 
13632
# check MIN/MAX(f_int2) success:    1
 
13633
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13634
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13635
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13636
WHERE f_int1 IN (2,3);
 
13637
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
13638
# check prerequisites-3 success:    1
 
13639
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
13640
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13641
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13642
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13643
WHERE f_int1 IN (2,3);
 
13644
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13645
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13646
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13647
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13648
WHERE f_int1 IN (2,3);
 
13649
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13650
# check read via f_int1 success: 1
 
13651
# check read via f_int2 success: 1
 
13652
        
 
13653
# check multiple-1 success:     1
 
13654
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13655
        
 
13656
# check multiple-2 success:     1
 
13657
INSERT INTO t1 SELECT * FROM t0_template
 
13658
WHERE MOD(f_int1,3) = 0;
 
13659
        
 
13660
# check multiple-3 success:     1
 
13661
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13662
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13663
AND @max_row_div2 + @max_row_div4;
 
13664
        
 
13665
# check multiple-4 success:     1
 
13666
DELETE FROM t1
 
13667
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13668
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13669
        
 
13670
# check multiple-5 success:     1
 
13671
SELECT COUNT(*) INTO @try_count FROM t0_template
 
13672
WHERE MOD(f_int1,3) = 0
 
13673
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13674
SELECT COUNT(*) INTO @clash_count
 
13675
FROM t1 INNER JOIN t0_template USING(f_int1)
 
13676
WHERE MOD(f_int1,3) = 0
 
13677
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13678
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13679
INSERT INTO t1
 
13680
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13681
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13682
f_charbig = '#SINGLE#';
 
13683
        
 
13684
# check single-1 success:       1
 
13685
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13686
INSERT INTO t1
 
13687
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13688
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13689
f_charbig = '#SINGLE#';
 
13690
        
 
13691
# check single-2 success:       1
 
13692
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13693
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13694
UPDATE t1 SET f_int1 = @cur_value2
 
13695
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13696
        
 
13697
# check single-3 success:       1
 
13698
SET @cur_value1= -1;
 
13699
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13700
UPDATE t1 SET f_int1 = @cur_value1
 
13701
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13702
        
 
13703
# check single-4 success:       1
 
13704
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13705
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13706
        
 
13707
# check single-5 success:       1
 
13708
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13709
        
 
13710
# check single-6 success:       1
 
13711
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13712
ERROR HY000: Table has no partition for value 2147483647
 
13713
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13714
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13715
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13716
f_charbig = '#NULL#';
 
13717
INSERT INTO t1
 
13718
SET f_int1 = NULL , f_int2 = -@max_row,
 
13719
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13720
f_charbig = '#NULL#';
 
13721
# check null success:    1
 
13722
        
 
13723
# check null-1 success:         1
 
13724
UPDATE t1 SET f_int1 = -@max_row
 
13725
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13726
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13727
        
 
13728
# check null-2 success:         1
 
13729
UPDATE t1 SET f_int1 = NULL
 
13730
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13731
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13732
        
 
13733
# check null-3 success:         1
 
13734
DELETE FROM t1
 
13735
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13736
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13737
        
 
13738
# check null-4 success:         1
 
13739
DELETE FROM t1
 
13740
WHERE f_int1 = 0 AND f_int2 = 0
 
13741
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13742
AND f_charbig = '#NULL#';
 
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 MOD(f_int1,3) = 0
 
13747
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
13748
ON DUPLICATE KEY
 
13749
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
13750
f_int2 = 2 * @max_row + source_tab.f_int1,
 
13751
f_charbig = 'was updated';
 
13752
        
 
13753
# check unique-1-a success:     1
 
13754
        
 
13755
# check unique-1-b success:     1
 
13756
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13759
f_charbig = CONCAT('===',f_char1,'===')
 
13760
WHERE f_charbig = 'was updated';
 
13761
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13762
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13763
   FROM t0_template source_tab
 
13764
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13765
        
 
13766
# check replace success:        1
 
13767
DELETE FROM t1
 
13768
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13769
DELETE FROM t1
 
13770
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13771
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13772
UPDATE t1 SET f_int2 = f_int1,
 
13773
f_char1 = CAST(f_int1 AS CHAR),
 
13774
f_char2 = CAST(f_int1 AS CHAR),
 
13775
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13776
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13777
SET AUTOCOMMIT= 0;
 
13778
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13779
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13780
FROM t0_template source_tab
 
13781
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13782
        
 
13783
# check transactions-1 success:         1
 
13784
COMMIT WORK;
 
13785
        
 
13786
# check transactions-2 success:         1
 
13787
ROLLBACK WORK;
 
13788
        
 
13789
# check transactions-3 success:         1
 
13790
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13791
COMMIT WORK;
 
13792
ROLLBACK WORK;
 
13793
        
 
13794
# check transactions-4 success:         1
 
13795
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13796
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13797
FROM t0_template source_tab
 
13798
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13799
        
 
13800
# check transactions-5 success:         1
 
13801
ROLLBACK WORK;
 
13802
Warnings:
 
13803
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13804
        
 
13805
# check transactions-6 success:         1
 
13806
# INFO: Storage engine used for t1 seems to be not transactional.
 
13807
COMMIT;
 
13808
        
 
13809
# check transactions-7 success:         1
 
13810
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13811
COMMIT WORK;
 
13812
SET @@session.sql_mode = 'traditional';
 
13813
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13814
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13815
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13816
'', '', 'was inserted' FROM t0_template
 
13817
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13818
ERROR 22012: Division by 0
 
13819
COMMIT;
 
13820
        
 
13821
# check transactions-8 success:         1
 
13822
# INFO: Storage engine used for t1 seems to be unable to revert
 
13823
#       changes made by the failing statement.
 
13824
SET @@session.sql_mode = '';
 
13825
SET AUTOCOMMIT= 1;
 
13826
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13827
COMMIT WORK;
 
13828
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13829
        
 
13830
# check special-1 success:      1
 
13831
UPDATE t1 SET f_charbig = '';
 
13832
        
 
13833
# check special-2 success:      1
 
13834
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13835
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13836
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13838
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13839
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13840
'just inserted' FROM t0_template
 
13841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13842
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13843
BEGIN
 
13844
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13845
f_charbig = 'updated by trigger'
 
13846
      WHERE f_int1 = new.f_int1;
 
13847
END|
 
13848
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13849
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13851
        
 
13852
# check trigger-1 success:      1
 
13853
DROP TRIGGER trg_1;
 
13854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13856
f_charbig = 'just inserted'
 
13857
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13858
DELETE FROM t0_aux
 
13859
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13860
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13861
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13862
'just inserted' FROM t0_template
 
13863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13864
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13865
BEGIN
 
13866
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13867
f_charbig = 'updated by trigger'
 
13868
      WHERE f_int1 = new.f_int1;
 
13869
END|
 
13870
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13871
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13873
        
 
13874
# check trigger-2 success:      1
 
13875
DROP TRIGGER trg_1;
 
13876
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13877
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13878
f_charbig = 'just inserted'
 
13879
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13880
DELETE FROM t0_aux
 
13881
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13882
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13883
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13884
'just inserted' FROM t0_template
 
13885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13886
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13887
BEGIN
 
13888
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13889
f_charbig = 'updated by trigger'
 
13890
      WHERE f_int1 = new.f_int1;
 
13891
END|
 
13892
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13893
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13894
        
 
13895
# check trigger-3 success:      1
 
13896
DROP TRIGGER trg_1;
 
13897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13899
f_charbig = 'just inserted'
 
13900
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13901
DELETE FROM t0_aux
 
13902
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13904
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13905
'just inserted' FROM t0_template
 
13906
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13907
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13908
BEGIN
 
13909
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13910
f_charbig = 'updated by trigger'
 
13911
      WHERE f_int1 = - old.f_int1;
 
13912
END|
 
13913
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13914
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13915
        
 
13916
# check trigger-4 success:      1
 
13917
DROP TRIGGER trg_1;
 
13918
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13919
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13920
f_charbig = 'just inserted'
 
13921
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13922
DELETE FROM t0_aux
 
13923
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13924
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13925
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13926
'just inserted' FROM t0_template
 
13927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13928
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13929
BEGIN
 
13930
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13931
f_charbig = 'updated by trigger'
 
13932
      WHERE f_int1 = new.f_int1;
 
13933
END|
 
13934
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13935
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13936
        
 
13937
# check trigger-5 success:      1
 
13938
DROP TRIGGER trg_1;
 
13939
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13940
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13941
f_charbig = 'just inserted'
 
13942
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13943
DELETE FROM t0_aux
 
13944
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13946
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13947
'just inserted' FROM t0_template
 
13948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13949
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13950
BEGIN
 
13951
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13952
f_charbig = 'updated by trigger'
 
13953
      WHERE f_int1 = - old.f_int1;
 
13954
END|
 
13955
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13956
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13957
        
 
13958
# check trigger-6 success:      1
 
13959
DROP TRIGGER trg_1;
 
13960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13962
f_charbig = 'just inserted'
 
13963
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13964
DELETE FROM t0_aux
 
13965
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13966
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13967
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13968
'just inserted' FROM t0_template
 
13969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13970
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13971
BEGIN
 
13972
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13973
f_charbig = 'updated by trigger'
 
13974
      WHERE f_int1 = - old.f_int1;
 
13975
END|
 
13976
DELETE FROM t0_aux
 
13977
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13978
        
 
13979
# check trigger-7 success:      1
 
13980
DROP TRIGGER trg_1;
 
13981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13982
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13983
f_charbig = 'just inserted'
 
13984
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13985
DELETE FROM t0_aux
 
13986
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13987
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13988
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13989
'just inserted' FROM t0_template
 
13990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13991
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13992
BEGIN
 
13993
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13994
f_charbig = 'updated by trigger'
 
13995
      WHERE f_int1 = - old.f_int1;
 
13996
END|
 
13997
DELETE FROM t0_aux
 
13998
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13999
        
 
14000
# check trigger-8 success:      1
 
14001
DROP TRIGGER trg_1;
 
14002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14003
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14004
f_charbig = 'just inserted'
 
14005
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14006
DELETE FROM t0_aux
 
14007
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14008
DELETE FROM t1
 
14009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14010
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14011
BEGIN
 
14012
SET new.f_int1 = old.f_int1 + @max_row,
 
14013
new.f_int2 = old.f_int2 - @max_row,
 
14014
new.f_charbig = '####updated per update trigger####';
 
14015
END|
 
14016
UPDATE t1
 
14017
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14018
f_charbig = '####updated per update statement itself####';
 
14019
        
 
14020
# check trigger-9 success:      1
 
14021
DROP TRIGGER trg_2;
 
14022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14024
f_charbig = CONCAT('===',f_char1,'===');
 
14025
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14026
BEGIN
 
14027
SET new.f_int1 = new.f_int1 + @max_row,
 
14028
new.f_int2 = new.f_int2 - @max_row,
 
14029
new.f_charbig = '####updated per update trigger####';
 
14030
END|
 
14031
UPDATE t1
 
14032
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14033
f_charbig = '####updated per update statement itself####';
 
14034
        
 
14035
# check trigger-10 success:     1
 
14036
DROP TRIGGER trg_2;
 
14037
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14038
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14039
f_charbig = CONCAT('===',f_char1,'===');
 
14040
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14041
BEGIN
 
14042
SET new.f_int1 = @my_max1 + @counter,
 
14043
new.f_int2 = @my_min2 - @counter,
 
14044
new.f_charbig = '####updated per insert trigger####';
 
14045
SET @counter = @counter + 1;
 
14046
END|
 
14047
SET @counter = 1;
 
14048
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14049
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14050
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14051
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14053
ORDER BY f_int1;
 
14054
DROP TRIGGER trg_3;
 
14055
        
 
14056
# check trigger-11 success:     1
 
14057
DELETE FROM t1
 
14058
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14059
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14060
AND f_charbig = '####updated per insert trigger####';
 
14061
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14062
BEGIN
 
14063
SET new.f_int1 = @my_max1 + @counter,
 
14064
new.f_int2 = @my_min2 - @counter,
 
14065
new.f_charbig = '####updated per insert trigger####';
 
14066
SET @counter = @counter + 1;
 
14067
END|
 
14068
SET @counter = 1;
 
14069
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14070
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14071
SELECT CAST(f_int1 AS CHAR),
 
14072
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14074
ORDER BY f_int1;
 
14075
DROP TRIGGER trg_3;
 
14076
        
 
14077
# check trigger-12 success:     1
 
14078
DELETE FROM t1
 
14079
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14080
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14081
AND f_charbig = '####updated per insert trigger####';
 
14082
ANALYZE  TABLE t1;
 
14083
Table   Op      Msg_type        Msg_text
 
14084
test.t1 analyze status  OK
 
14085
CHECK    TABLE t1 EXTENDED;
 
14086
Table   Op      Msg_type        Msg_text
 
14087
test.t1 check   status  OK
 
14088
CHECKSUM TABLE t1 EXTENDED;
 
14089
Table   Checksum
 
14090
test.t1 <some_value>
 
14091
OPTIMIZE TABLE t1;
 
14092
Table   Op      Msg_type        Msg_text
 
14093
test.t1 optimize        status  OK
 
14094
# check layout success:    1
 
14095
REPAIR   TABLE t1 EXTENDED;
 
14096
Table   Op      Msg_type        Msg_text
 
14097
test.t1 repair  status  OK
 
14098
# check layout success:    1
 
14099
TRUNCATE t1;
 
14100
        
 
14101
# check TRUNCATE success:       1
 
14102
# check layout success:    1
 
14103
# End usability test (inc/partition_check.inc)
 
14104
DROP TABLE t1;
 
14105
CREATE TABLE t1 (
 
14106
f_int1 INTEGER,
 
14107
f_int2 INTEGER,
 
14108
f_char1 CHAR(20),
 
14109
f_char2 CHAR(20),
 
14110
f_charbig VARCHAR(1000)
 
14111
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
14112
)
 
14113
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
14114
(PARTITION parta VALUES LESS THAN (0),
 
14115
PARTITION partb VALUES LESS THAN (5),
 
14116
PARTITION partc VALUES LESS THAN (10),
 
14117
PARTITION partd VALUES LESS THAN (2147483646));
 
14118
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14119
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
14120
# Start usability test (inc/partition_check.inc)
 
14121
create_command
 
14122
SHOW CREATE TABLE t1;
 
14123
Table   Create Table
 
14124
t1      CREATE TABLE `t1` (
 
14125
  `f_int1` int(11) DEFAULT NULL,
 
14126
  `f_int2` int(11) DEFAULT NULL,
 
14127
  `f_char1` char(20) DEFAULT NULL,
 
14128
  `f_char2` char(20) DEFAULT NULL,
 
14129
  `f_charbig` varchar(1000) DEFAULT NULL,
 
14130
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
14131
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
14132
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
14133
/*!50100 PARTITION BY RANGE (f_int1)
 
14134
SUBPARTITION BY HASH (f_int2)
 
14135
SUBPARTITIONS 2
 
14136
(PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM,
 
14137
 PARTITION partb VALUES LESS THAN (5) ENGINE = MyISAM,
 
14138
 PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM,
 
14139
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
14140
 
 
14141
unified filelist
 
14142
t1#P#parta#SP#partasp0.MYD
 
14143
t1#P#parta#SP#partasp0.MYI
 
14144
t1#P#parta#SP#partasp1.MYD
 
14145
t1#P#parta#SP#partasp1.MYI
 
14146
t1#P#partb#SP#partbsp0.MYD
 
14147
t1#P#partb#SP#partbsp0.MYI
 
14148
t1#P#partb#SP#partbsp1.MYD
 
14149
t1#P#partb#SP#partbsp1.MYI
 
14150
t1#P#partc#SP#partcsp0.MYD
 
14151
t1#P#partc#SP#partcsp0.MYI
 
14152
t1#P#partc#SP#partcsp1.MYD
 
14153
t1#P#partc#SP#partcsp1.MYI
 
14154
t1#P#partd#SP#partdsp0.MYD
 
14155
t1#P#partd#SP#partdsp0.MYI
 
14156
t1#P#partd#SP#partdsp1.MYD
 
14157
t1#P#partd#SP#partdsp1.MYI
 
14158
t1.frm
 
14159
t1.par
 
14160
 
 
14161
# check prerequisites-1 success:    1
 
14162
# check COUNT(*) success:    1
 
14163
# check MIN/MAX(f_int1) success:    1
 
14164
# check MIN/MAX(f_int2) success:    1
 
14165
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14166
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14167
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14168
WHERE f_int1 IN (2,3);
 
14169
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
14170
# check prerequisites-3 success:    1
 
14171
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14172
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14173
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14174
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14175
WHERE f_int1 IN (2,3);
 
14176
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14177
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14178
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14179
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14180
WHERE f_int1 IN (2,3);
 
14181
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14182
# check read via f_int1 success: 1
 
14183
# check read via f_int2 success: 1
 
14184
        
 
14185
# check multiple-1 success:     1
 
14186
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14187
        
 
14188
# check multiple-2 success:     1
 
14189
INSERT INTO t1 SELECT * FROM t0_template
 
14190
WHERE MOD(f_int1,3) = 0;
 
14191
        
 
14192
# check multiple-3 success:     1
 
14193
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14194
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14195
AND @max_row_div2 + @max_row_div4;
 
14196
        
 
14197
# check multiple-4 success:     1
 
14198
DELETE FROM t1
 
14199
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14200
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14201
        
 
14202
# check multiple-5 success:     1
 
14203
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14204
WHERE MOD(f_int1,3) = 0
 
14205
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14206
SELECT COUNT(*) INTO @clash_count
 
14207
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14208
WHERE MOD(f_int1,3) = 0
 
14209
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14210
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14211
INSERT INTO t1
 
14212
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14213
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14214
f_charbig = '#SINGLE#';
 
14215
        
 
14216
# check single-1 success:       1
 
14217
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14218
INSERT INTO t1
 
14219
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14220
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14221
f_charbig = '#SINGLE#';
 
14222
        
 
14223
# check single-2 success:       1
 
14224
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14225
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14226
UPDATE t1 SET f_int1 = @cur_value2
 
14227
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14228
        
 
14229
# check single-3 success:       1
 
14230
SET @cur_value1= -1;
 
14231
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14232
UPDATE t1 SET f_int1 = @cur_value1
 
14233
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14234
        
 
14235
# check single-4 success:       1
 
14236
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14237
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14238
        
 
14239
# check single-5 success:       1
 
14240
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14241
        
 
14242
# check single-6 success:       1
 
14243
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14244
ERROR HY000: Table has no partition for value 2147483647
 
14245
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14246
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14247
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14248
f_charbig = '#NULL#';
 
14249
INSERT INTO t1
 
14250
SET f_int1 = NULL , f_int2 = -@max_row,
 
14251
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14252
f_charbig = '#NULL#';
 
14253
# check null success:    1
 
14254
        
 
14255
# check null-1 success:         1
 
14256
UPDATE t1 SET f_int1 = -@max_row
 
14257
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14258
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14259
        
 
14260
# check null-2 success:         1
 
14261
UPDATE t1 SET f_int1 = NULL
 
14262
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14263
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14264
        
 
14265
# check null-3 success:         1
 
14266
DELETE FROM t1
 
14267
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14268
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14269
        
 
14270
# check null-4 success:         1
 
14271
DELETE FROM t1
 
14272
WHERE f_int1 = 0 AND f_int2 = 0
 
14273
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14274
AND f_charbig = '#NULL#';
 
14275
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14276
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14277
   FROM t0_template source_tab
 
14278
WHERE MOD(f_int1,3) = 0
 
14279
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14280
ON DUPLICATE KEY
 
14281
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14282
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14283
f_charbig = 'was updated';
 
14284
        
 
14285
# check unique-1-a success:     1
 
14286
        
 
14287
# check unique-1-b success:     1
 
14288
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14291
f_charbig = CONCAT('===',f_char1,'===')
 
14292
WHERE f_charbig = 'was updated';
 
14293
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14294
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14295
   FROM t0_template source_tab
 
14296
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14297
        
 
14298
# check replace success:        1
 
14299
DELETE FROM t1
 
14300
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14301
DELETE FROM t1
 
14302
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14303
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14304
UPDATE t1 SET f_int2 = f_int1,
 
14305
f_char1 = CAST(f_int1 AS CHAR),
 
14306
f_char2 = CAST(f_int1 AS CHAR),
 
14307
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14308
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14309
SET AUTOCOMMIT= 0;
 
14310
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14311
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14312
FROM t0_template source_tab
 
14313
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14314
        
 
14315
# check transactions-1 success:         1
 
14316
COMMIT WORK;
 
14317
        
 
14318
# check transactions-2 success:         1
 
14319
ROLLBACK WORK;
 
14320
        
 
14321
# check transactions-3 success:         1
 
14322
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14323
COMMIT WORK;
 
14324
ROLLBACK WORK;
 
14325
        
 
14326
# check transactions-4 success:         1
 
14327
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14328
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14329
FROM t0_template source_tab
 
14330
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14331
        
 
14332
# check transactions-5 success:         1
 
14333
ROLLBACK WORK;
 
14334
Warnings:
 
14335
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14336
        
 
14337
# check transactions-6 success:         1
 
14338
# INFO: Storage engine used for t1 seems to be not transactional.
 
14339
COMMIT;
 
14340
        
 
14341
# check transactions-7 success:         1
 
14342
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14343
COMMIT WORK;
 
14344
SET @@session.sql_mode = 'traditional';
 
14345
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14346
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14347
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14348
'', '', 'was inserted' FROM t0_template
 
14349
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14350
ERROR 22012: Division by 0
 
14351
COMMIT;
 
14352
        
 
14353
# check transactions-8 success:         1
 
14354
# INFO: Storage engine used for t1 seems to be unable to revert
 
14355
#       changes made by the failing statement.
 
14356
SET @@session.sql_mode = '';
 
14357
SET AUTOCOMMIT= 1;
 
14358
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14359
COMMIT WORK;
 
14360
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14361
        
 
14362
# check special-1 success:      1
 
14363
UPDATE t1 SET f_charbig = '';
 
14364
        
 
14365
# check special-2 success:      1
 
14366
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14367
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14368
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14370
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14371
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14372
'just inserted' FROM t0_template
 
14373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14374
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14375
BEGIN
 
14376
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14377
f_charbig = 'updated by trigger'
 
14378
      WHERE f_int1 = new.f_int1;
 
14379
END|
 
14380
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14381
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14383
        
 
14384
# check trigger-1 success:      1
 
14385
DROP TRIGGER trg_1;
 
14386
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14387
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14388
f_charbig = 'just inserted'
 
14389
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14390
DELETE FROM t0_aux
 
14391
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14392
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14393
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14394
'just inserted' FROM t0_template
 
14395
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14396
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14397
BEGIN
 
14398
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14399
f_charbig = 'updated by trigger'
 
14400
      WHERE f_int1 = new.f_int1;
 
14401
END|
 
14402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14403
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14404
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14405
        
 
14406
# check trigger-2 success:      1
 
14407
DROP TRIGGER trg_1;
 
14408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14410
f_charbig = 'just inserted'
 
14411
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14412
DELETE FROM t0_aux
 
14413
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14414
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14415
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14416
'just inserted' FROM t0_template
 
14417
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14418
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14419
BEGIN
 
14420
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14421
f_charbig = 'updated by trigger'
 
14422
      WHERE f_int1 = new.f_int1;
 
14423
END|
 
14424
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14425
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14426
        
 
14427
# check trigger-3 success:      1
 
14428
DROP TRIGGER trg_1;
 
14429
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14430
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14431
f_charbig = 'just inserted'
 
14432
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14433
DELETE FROM t0_aux
 
14434
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14436
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14437
'just inserted' FROM t0_template
 
14438
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14439
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14440
BEGIN
 
14441
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14442
f_charbig = 'updated by trigger'
 
14443
      WHERE f_int1 = - old.f_int1;
 
14444
END|
 
14445
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14446
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14447
        
 
14448
# check trigger-4 success:      1
 
14449
DROP TRIGGER trg_1;
 
14450
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14451
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14452
f_charbig = 'just inserted'
 
14453
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14454
DELETE FROM t0_aux
 
14455
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14456
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14457
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14458
'just inserted' FROM t0_template
 
14459
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14460
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14461
BEGIN
 
14462
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14463
f_charbig = 'updated by trigger'
 
14464
      WHERE f_int1 = new.f_int1;
 
14465
END|
 
14466
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14467
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14468
        
 
14469
# check trigger-5 success:      1
 
14470
DROP TRIGGER trg_1;
 
14471
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14472
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14473
f_charbig = 'just inserted'
 
14474
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14475
DELETE FROM t0_aux
 
14476
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14477
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14478
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14479
'just inserted' FROM t0_template
 
14480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14481
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14482
BEGIN
 
14483
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14484
f_charbig = 'updated by trigger'
 
14485
      WHERE f_int1 = - old.f_int1;
 
14486
END|
 
14487
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14488
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14489
        
 
14490
# check trigger-6 success:      1
 
14491
DROP TRIGGER trg_1;
 
14492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14494
f_charbig = 'just inserted'
 
14495
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14496
DELETE FROM t0_aux
 
14497
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14498
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14499
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14500
'just inserted' FROM t0_template
 
14501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14502
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14503
BEGIN
 
14504
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14505
f_charbig = 'updated by trigger'
 
14506
      WHERE f_int1 = - old.f_int1;
 
14507
END|
 
14508
DELETE FROM t0_aux
 
14509
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14510
        
 
14511
# check trigger-7 success:      1
 
14512
DROP TRIGGER trg_1;
 
14513
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14514
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14515
f_charbig = 'just inserted'
 
14516
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14517
DELETE FROM t0_aux
 
14518
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14521
'just inserted' FROM t0_template
 
14522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14523
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14524
BEGIN
 
14525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14526
f_charbig = 'updated by trigger'
 
14527
      WHERE f_int1 = - old.f_int1;
 
14528
END|
 
14529
DELETE FROM t0_aux
 
14530
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14531
        
 
14532
# check trigger-8 success:      1
 
14533
DROP TRIGGER trg_1;
 
14534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14536
f_charbig = 'just inserted'
 
14537
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14538
DELETE FROM t0_aux
 
14539
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14540
DELETE FROM t1
 
14541
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14542
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14543
BEGIN
 
14544
SET new.f_int1 = old.f_int1 + @max_row,
 
14545
new.f_int2 = old.f_int2 - @max_row,
 
14546
new.f_charbig = '####updated per update trigger####';
 
14547
END|
 
14548
UPDATE t1
 
14549
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14550
f_charbig = '####updated per update statement itself####';
 
14551
        
 
14552
# check trigger-9 success:      1
 
14553
DROP TRIGGER trg_2;
 
14554
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14555
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14556
f_charbig = CONCAT('===',f_char1,'===');
 
14557
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14558
BEGIN
 
14559
SET new.f_int1 = new.f_int1 + @max_row,
 
14560
new.f_int2 = new.f_int2 - @max_row,
 
14561
new.f_charbig = '####updated per update trigger####';
 
14562
END|
 
14563
UPDATE t1
 
14564
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14565
f_charbig = '####updated per update statement itself####';
 
14566
        
 
14567
# check trigger-10 success:     1
 
14568
DROP TRIGGER trg_2;
 
14569
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14570
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14571
f_charbig = CONCAT('===',f_char1,'===');
 
14572
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14573
BEGIN
 
14574
SET new.f_int1 = @my_max1 + @counter,
 
14575
new.f_int2 = @my_min2 - @counter,
 
14576
new.f_charbig = '####updated per insert trigger####';
 
14577
SET @counter = @counter + 1;
 
14578
END|
 
14579
SET @counter = 1;
 
14580
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14581
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14582
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14583
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14585
ORDER BY f_int1;
 
14586
DROP TRIGGER trg_3;
 
14587
        
 
14588
# check trigger-11 success:     1
 
14589
DELETE FROM t1
 
14590
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14591
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14592
AND f_charbig = '####updated per insert trigger####';
 
14593
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14594
BEGIN
 
14595
SET new.f_int1 = @my_max1 + @counter,
 
14596
new.f_int2 = @my_min2 - @counter,
 
14597
new.f_charbig = '####updated per insert trigger####';
 
14598
SET @counter = @counter + 1;
 
14599
END|
 
14600
SET @counter = 1;
 
14601
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14602
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14603
SELECT CAST(f_int1 AS CHAR),
 
14604
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14606
ORDER BY f_int1;
 
14607
DROP TRIGGER trg_3;
 
14608
        
 
14609
# check trigger-12 success:     1
 
14610
DELETE FROM t1
 
14611
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14612
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14613
AND f_charbig = '####updated per insert trigger####';
 
14614
ANALYZE  TABLE t1;
 
14615
Table   Op      Msg_type        Msg_text
 
14616
test.t1 analyze status  OK
 
14617
CHECK    TABLE t1 EXTENDED;
 
14618
Table   Op      Msg_type        Msg_text
 
14619
test.t1 check   status  OK
 
14620
CHECKSUM TABLE t1 EXTENDED;
 
14621
Table   Checksum
 
14622
test.t1 <some_value>
 
14623
OPTIMIZE TABLE t1;
 
14624
Table   Op      Msg_type        Msg_text
 
14625
test.t1 optimize        status  OK
 
14626
# check layout success:    1
 
14627
REPAIR   TABLE t1 EXTENDED;
 
14628
Table   Op      Msg_type        Msg_text
 
14629
test.t1 repair  status  OK
 
14630
# check layout success:    1
 
14631
TRUNCATE t1;
 
14632
        
 
14633
# check TRUNCATE success:       1
 
14634
# check layout success:    1
 
14635
# End usability test (inc/partition_check.inc)
 
14636
DROP TABLE t1;
 
14637
CREATE TABLE t1 (
 
14638
f_int1 INTEGER,
 
14639
f_int2 INTEGER,
 
14640
f_char1 CHAR(20),
 
14641
f_char2 CHAR(20),
 
14642
f_charbig VARCHAR(1000)
 
14643
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
14644
)
 
14645
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
14646
(PARTITION part1 VALUES LESS THAN (0)
 
14647
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
14648
PARTITION part2 VALUES LESS THAN (5)
 
14649
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
14650
PARTITION part3 VALUES LESS THAN (10)
 
14651
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
14652
PARTITION part4 VALUES LESS THAN (2147483646)
 
14653
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
14654
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14655
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
14656
# Start usability test (inc/partition_check.inc)
 
14657
create_command
 
14658
SHOW CREATE TABLE t1;
 
14659
Table   Create Table
 
14660
t1      CREATE TABLE `t1` (
 
14661
  `f_int1` int(11) DEFAULT NULL,
 
14662
  `f_int2` int(11) DEFAULT NULL,
 
14663
  `f_char1` char(20) DEFAULT NULL,
 
14664
  `f_char2` char(20) DEFAULT NULL,
 
14665
  `f_charbig` varchar(1000) DEFAULT NULL,
 
14666
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
14667
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
14668
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
14669
/*!50100 PARTITION BY RANGE (f_int1)
 
14670
SUBPARTITION BY KEY (f_int2)
 
14671
(PARTITION part1 VALUES LESS THAN (0)
 
14672
 (SUBPARTITION subpart11 ENGINE = MyISAM,
 
14673
  SUBPARTITION subpart12 ENGINE = MyISAM),
 
14674
 PARTITION part2 VALUES LESS THAN (5)
 
14675
 (SUBPARTITION subpart21 ENGINE = MyISAM,
 
14676
  SUBPARTITION subpart22 ENGINE = MyISAM),
 
14677
 PARTITION part3 VALUES LESS THAN (10)
 
14678
 (SUBPARTITION subpart31 ENGINE = MyISAM,
 
14679
  SUBPARTITION subpart32 ENGINE = MyISAM),
 
14680
 PARTITION part4 VALUES LESS THAN (2147483646)
 
14681
 (SUBPARTITION subpart41 ENGINE = MyISAM,
 
14682
  SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
14683
 
 
14684
unified filelist
 
14685
t1#P#part1#SP#subpart11.MYD
 
14686
t1#P#part1#SP#subpart11.MYI
 
14687
t1#P#part1#SP#subpart12.MYD
 
14688
t1#P#part1#SP#subpart12.MYI
 
14689
t1#P#part2#SP#subpart21.MYD
 
14690
t1#P#part2#SP#subpart21.MYI
 
14691
t1#P#part2#SP#subpart22.MYD
 
14692
t1#P#part2#SP#subpart22.MYI
 
14693
t1#P#part3#SP#subpart31.MYD
 
14694
t1#P#part3#SP#subpart31.MYI
 
14695
t1#P#part3#SP#subpart32.MYD
 
14696
t1#P#part3#SP#subpart32.MYI
 
14697
t1#P#part4#SP#subpart41.MYD
 
14698
t1#P#part4#SP#subpart41.MYI
 
14699
t1#P#part4#SP#subpart42.MYD
 
14700
t1#P#part4#SP#subpart42.MYI
 
14701
t1.frm
 
14702
t1.par
 
14703
 
 
14704
# check prerequisites-1 success:    1
 
14705
# check COUNT(*) success:    1
 
14706
# check MIN/MAX(f_int1) success:    1
 
14707
# check MIN/MAX(f_int2) success:    1
 
14708
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14709
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14710
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14711
WHERE f_int1 IN (2,3);
 
14712
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
14713
# check prerequisites-3 success:    1
 
14714
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14715
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14716
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14717
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14718
WHERE f_int1 IN (2,3);
 
14719
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14720
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14721
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14722
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14723
WHERE f_int1 IN (2,3);
 
14724
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14725
# check read via f_int1 success: 1
 
14726
# check read via f_int2 success: 1
 
14727
        
 
14728
# check multiple-1 success:     1
 
14729
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14730
        
 
14731
# check multiple-2 success:     1
 
14732
INSERT INTO t1 SELECT * FROM t0_template
 
14733
WHERE MOD(f_int1,3) = 0;
 
14734
        
 
14735
# check multiple-3 success:     1
 
14736
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14737
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14738
AND @max_row_div2 + @max_row_div4;
 
14739
        
 
14740
# check multiple-4 success:     1
 
14741
DELETE FROM t1
 
14742
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14743
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14744
        
 
14745
# check multiple-5 success:     1
 
14746
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14747
WHERE MOD(f_int1,3) = 0
 
14748
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14749
SELECT COUNT(*) INTO @clash_count
 
14750
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14751
WHERE MOD(f_int1,3) = 0
 
14752
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14753
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14754
INSERT INTO t1
 
14755
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14756
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14757
f_charbig = '#SINGLE#';
 
14758
        
 
14759
# check single-1 success:       1
 
14760
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14761
INSERT INTO t1
 
14762
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14763
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14764
f_charbig = '#SINGLE#';
 
14765
        
 
14766
# check single-2 success:       1
 
14767
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14768
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14769
UPDATE t1 SET f_int1 = @cur_value2
 
14770
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14771
        
 
14772
# check single-3 success:       1
 
14773
SET @cur_value1= -1;
 
14774
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14775
UPDATE t1 SET f_int1 = @cur_value1
 
14776
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14777
        
 
14778
# check single-4 success:       1
 
14779
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14780
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14781
        
 
14782
# check single-5 success:       1
 
14783
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14784
        
 
14785
# check single-6 success:       1
 
14786
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14787
ERROR HY000: Table has no partition for value 2147483647
 
14788
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14789
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14790
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14791
f_charbig = '#NULL#';
 
14792
INSERT INTO t1
 
14793
SET f_int1 = NULL , f_int2 = -@max_row,
 
14794
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14795
f_charbig = '#NULL#';
 
14796
# check null success:    1
 
14797
        
 
14798
# check null-1 success:         1
 
14799
UPDATE t1 SET f_int1 = -@max_row
 
14800
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14801
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14802
        
 
14803
# check null-2 success:         1
 
14804
UPDATE t1 SET f_int1 = NULL
 
14805
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14806
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14807
        
 
14808
# check null-3 success:         1
 
14809
DELETE FROM t1
 
14810
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14811
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14812
        
 
14813
# check null-4 success:         1
 
14814
DELETE FROM t1
 
14815
WHERE f_int1 = 0 AND f_int2 = 0
 
14816
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14817
AND f_charbig = '#NULL#';
 
14818
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14819
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14820
   FROM t0_template source_tab
 
14821
WHERE MOD(f_int1,3) = 0
 
14822
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14823
ON DUPLICATE KEY
 
14824
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14825
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14826
f_charbig = 'was updated';
 
14827
        
 
14828
# check unique-1-a success:     1
 
14829
        
 
14830
# check unique-1-b success:     1
 
14831
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14832
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14833
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14834
f_charbig = CONCAT('===',f_char1,'===')
 
14835
WHERE f_charbig = 'was updated';
 
14836
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14837
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14838
   FROM t0_template source_tab
 
14839
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14840
        
 
14841
# check replace success:        1
 
14842
DELETE FROM t1
 
14843
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14844
DELETE FROM t1
 
14845
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14846
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14847
UPDATE t1 SET f_int2 = f_int1,
 
14848
f_char1 = CAST(f_int1 AS CHAR),
 
14849
f_char2 = CAST(f_int1 AS CHAR),
 
14850
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14851
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14852
SET AUTOCOMMIT= 0;
 
14853
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14854
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14855
FROM t0_template source_tab
 
14856
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14857
        
 
14858
# check transactions-1 success:         1
 
14859
COMMIT WORK;
 
14860
        
 
14861
# check transactions-2 success:         1
 
14862
ROLLBACK WORK;
 
14863
        
 
14864
# check transactions-3 success:         1
 
14865
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14866
COMMIT WORK;
 
14867
ROLLBACK WORK;
 
14868
        
 
14869
# check transactions-4 success:         1
 
14870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14871
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14872
FROM t0_template source_tab
 
14873
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14874
        
 
14875
# check transactions-5 success:         1
 
14876
ROLLBACK WORK;
 
14877
Warnings:
 
14878
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14879
        
 
14880
# check transactions-6 success:         1
 
14881
# INFO: Storage engine used for t1 seems to be not transactional.
 
14882
COMMIT;
 
14883
        
 
14884
# check transactions-7 success:         1
 
14885
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14886
COMMIT WORK;
 
14887
SET @@session.sql_mode = 'traditional';
 
14888
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14890
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14891
'', '', 'was inserted' FROM t0_template
 
14892
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14893
ERROR 22012: Division by 0
 
14894
COMMIT;
 
14895
        
 
14896
# check transactions-8 success:         1
 
14897
# INFO: Storage engine used for t1 seems to be unable to revert
 
14898
#       changes made by the failing statement.
 
14899
SET @@session.sql_mode = '';
 
14900
SET AUTOCOMMIT= 1;
 
14901
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14902
COMMIT WORK;
 
14903
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14904
        
 
14905
# check special-1 success:      1
 
14906
UPDATE t1 SET f_charbig = '';
 
14907
        
 
14908
# check special-2 success:      1
 
14909
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14910
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14911
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14913
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14914
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14915
'just inserted' FROM t0_template
 
14916
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14917
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14918
BEGIN
 
14919
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14920
f_charbig = 'updated by trigger'
 
14921
      WHERE f_int1 = new.f_int1;
 
14922
END|
 
14923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14924
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14925
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14926
        
 
14927
# check trigger-1 success:      1
 
14928
DROP TRIGGER trg_1;
 
14929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14931
f_charbig = 'just inserted'
 
14932
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14933
DELETE FROM t0_aux
 
14934
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14935
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14936
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14937
'just inserted' FROM t0_template
 
14938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14939
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14940
BEGIN
 
14941
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14942
f_charbig = 'updated by trigger'
 
14943
      WHERE f_int1 = new.f_int1;
 
14944
END|
 
14945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14946
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14948
        
 
14949
# check trigger-2 success:      1
 
14950
DROP TRIGGER trg_1;
 
14951
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14952
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14953
f_charbig = 'just inserted'
 
14954
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14955
DELETE FROM t0_aux
 
14956
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14957
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14958
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14959
'just inserted' FROM t0_template
 
14960
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14961
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14962
BEGIN
 
14963
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14964
f_charbig = 'updated by trigger'
 
14965
      WHERE f_int1 = new.f_int1;
 
14966
END|
 
14967
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14968
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14969
        
 
14970
# check trigger-3 success:      1
 
14971
DROP TRIGGER trg_1;
 
14972
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14973
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14974
f_charbig = 'just inserted'
 
14975
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14976
DELETE FROM t0_aux
 
14977
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14978
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14979
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14980
'just inserted' FROM t0_template
 
14981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14982
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14983
BEGIN
 
14984
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14985
f_charbig = 'updated by trigger'
 
14986
      WHERE f_int1 = - old.f_int1;
 
14987
END|
 
14988
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14989
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14990
        
 
14991
# check trigger-4 success:      1
 
14992
DROP TRIGGER trg_1;
 
14993
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14994
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14995
f_charbig = 'just inserted'
 
14996
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14997
DELETE FROM t0_aux
 
14998
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14999
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15000
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15001
'just inserted' FROM t0_template
 
15002
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15003
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15004
BEGIN
 
15005
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15006
f_charbig = 'updated by trigger'
 
15007
      WHERE f_int1 = new.f_int1;
 
15008
END|
 
15009
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15010
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15011
        
 
15012
# check trigger-5 success:      1
 
15013
DROP TRIGGER trg_1;
 
15014
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15015
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15016
f_charbig = 'just inserted'
 
15017
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15018
DELETE FROM t0_aux
 
15019
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15020
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15021
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15022
'just inserted' FROM t0_template
 
15023
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15024
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15025
BEGIN
 
15026
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15027
f_charbig = 'updated by trigger'
 
15028
      WHERE f_int1 = - old.f_int1;
 
15029
END|
 
15030
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15031
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15032
        
 
15033
# check trigger-6 success:      1
 
15034
DROP TRIGGER trg_1;
 
15035
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15036
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15037
f_charbig = 'just inserted'
 
15038
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15039
DELETE FROM t0_aux
 
15040
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15041
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15042
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15043
'just inserted' FROM t0_template
 
15044
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15045
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15046
BEGIN
 
15047
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15048
f_charbig = 'updated by trigger'
 
15049
      WHERE f_int1 = - old.f_int1;
 
15050
END|
 
15051
DELETE FROM t0_aux
 
15052
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15053
        
 
15054
# check trigger-7 success:      1
 
15055
DROP TRIGGER trg_1;
 
15056
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15057
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15058
f_charbig = 'just inserted'
 
15059
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15060
DELETE FROM t0_aux
 
15061
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15063
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15064
'just inserted' FROM t0_template
 
15065
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15066
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15067
BEGIN
 
15068
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15069
f_charbig = 'updated by trigger'
 
15070
      WHERE f_int1 = - old.f_int1;
 
15071
END|
 
15072
DELETE FROM t0_aux
 
15073
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15074
        
 
15075
# check trigger-8 success:      1
 
15076
DROP TRIGGER trg_1;
 
15077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15079
f_charbig = 'just inserted'
 
15080
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15081
DELETE FROM t0_aux
 
15082
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15083
DELETE FROM t1
 
15084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15085
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15086
BEGIN
 
15087
SET new.f_int1 = old.f_int1 + @max_row,
 
15088
new.f_int2 = old.f_int2 - @max_row,
 
15089
new.f_charbig = '####updated per update trigger####';
 
15090
END|
 
15091
UPDATE t1
 
15092
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15093
f_charbig = '####updated per update statement itself####';
 
15094
        
 
15095
# check trigger-9 success:      1
 
15096
DROP TRIGGER trg_2;
 
15097
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15098
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15099
f_charbig = CONCAT('===',f_char1,'===');
 
15100
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15101
BEGIN
 
15102
SET new.f_int1 = new.f_int1 + @max_row,
 
15103
new.f_int2 = new.f_int2 - @max_row,
 
15104
new.f_charbig = '####updated per update trigger####';
 
15105
END|
 
15106
UPDATE t1
 
15107
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15108
f_charbig = '####updated per update statement itself####';
 
15109
        
 
15110
# check trigger-10 success:     1
 
15111
DROP TRIGGER trg_2;
 
15112
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15113
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15114
f_charbig = CONCAT('===',f_char1,'===');
 
15115
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15116
BEGIN
 
15117
SET new.f_int1 = @my_max1 + @counter,
 
15118
new.f_int2 = @my_min2 - @counter,
 
15119
new.f_charbig = '####updated per insert trigger####';
 
15120
SET @counter = @counter + 1;
 
15121
END|
 
15122
SET @counter = 1;
 
15123
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15124
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15125
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15126
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15127
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15128
ORDER BY f_int1;
 
15129
DROP TRIGGER trg_3;
 
15130
        
 
15131
# check trigger-11 success:     1
 
15132
DELETE FROM t1
 
15133
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15134
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15135
AND f_charbig = '####updated per insert trigger####';
 
15136
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15137
BEGIN
 
15138
SET new.f_int1 = @my_max1 + @counter,
 
15139
new.f_int2 = @my_min2 - @counter,
 
15140
new.f_charbig = '####updated per insert trigger####';
 
15141
SET @counter = @counter + 1;
 
15142
END|
 
15143
SET @counter = 1;
 
15144
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15145
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15146
SELECT CAST(f_int1 AS CHAR),
 
15147
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15149
ORDER BY f_int1;
 
15150
DROP TRIGGER trg_3;
 
15151
        
 
15152
# check trigger-12 success:     1
 
15153
DELETE FROM t1
 
15154
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15155
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15156
AND f_charbig = '####updated per insert trigger####';
 
15157
ANALYZE  TABLE t1;
 
15158
Table   Op      Msg_type        Msg_text
 
15159
test.t1 analyze status  OK
 
15160
CHECK    TABLE t1 EXTENDED;
 
15161
Table   Op      Msg_type        Msg_text
 
15162
test.t1 check   status  OK
 
15163
CHECKSUM TABLE t1 EXTENDED;
 
15164
Table   Checksum
 
15165
test.t1 <some_value>
 
15166
OPTIMIZE TABLE t1;
 
15167
Table   Op      Msg_type        Msg_text
 
15168
test.t1 optimize        status  OK
 
15169
# check layout success:    1
 
15170
REPAIR   TABLE t1 EXTENDED;
 
15171
Table   Op      Msg_type        Msg_text
 
15172
test.t1 repair  status  OK
 
15173
# check layout success:    1
 
15174
TRUNCATE t1;
 
15175
        
 
15176
# check TRUNCATE success:       1
 
15177
# check layout success:    1
 
15178
# End usability test (inc/partition_check.inc)
 
15179
DROP TABLE t1;
 
15180
CREATE TABLE t1 (
 
15181
f_int1 INTEGER,
 
15182
f_int2 INTEGER,
 
15183
f_char1 CHAR(20),
 
15184
f_char2 CHAR(20),
 
15185
f_charbig VARCHAR(1000)
 
15186
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
15187
)
 
15188
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
15189
(PARTITION part1 VALUES IN (0)
 
15190
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15191
PARTITION part2 VALUES IN (1)
 
15192
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15193
PARTITION part3 VALUES IN (2)
 
15194
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15195
PARTITION part4 VALUES IN (NULL)
 
15196
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15197
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15198
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
15199
# Start usability test (inc/partition_check.inc)
 
15200
create_command
 
15201
SHOW CREATE TABLE t1;
 
15202
Table   Create Table
 
15203
t1      CREATE TABLE `t1` (
 
15204
  `f_int1` int(11) DEFAULT NULL,
 
15205
  `f_int2` int(11) DEFAULT NULL,
 
15206
  `f_char1` char(20) DEFAULT NULL,
 
15207
  `f_char2` char(20) DEFAULT NULL,
 
15208
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15209
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
15210
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
15211
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
15212
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
15213
SUBPARTITION BY HASH (f_int2 + 1)
 
15214
(PARTITION part1 VALUES IN (0)
 
15215
 (SUBPARTITION sp11 ENGINE = MyISAM,
 
15216
  SUBPARTITION sp12 ENGINE = MyISAM),
 
15217
 PARTITION part2 VALUES IN (1)
 
15218
 (SUBPARTITION sp21 ENGINE = MyISAM,
 
15219
  SUBPARTITION sp22 ENGINE = MyISAM),
 
15220
 PARTITION part3 VALUES IN (2)
 
15221
 (SUBPARTITION sp31 ENGINE = MyISAM,
 
15222
  SUBPARTITION sp32 ENGINE = MyISAM),
 
15223
 PARTITION part4 VALUES IN (NULL)
 
15224
 (SUBPARTITION sp41 ENGINE = MyISAM,
 
15225
  SUBPARTITION sp42 ENGINE = MyISAM)) */
 
15226
 
 
15227
unified filelist
 
15228
t1#P#part1#SP#sp11.MYD
 
15229
t1#P#part1#SP#sp11.MYI
 
15230
t1#P#part1#SP#sp12.MYD
 
15231
t1#P#part1#SP#sp12.MYI
 
15232
t1#P#part2#SP#sp21.MYD
 
15233
t1#P#part2#SP#sp21.MYI
 
15234
t1#P#part2#SP#sp22.MYD
 
15235
t1#P#part2#SP#sp22.MYI
 
15236
t1#P#part3#SP#sp31.MYD
 
15237
t1#P#part3#SP#sp31.MYI
 
15238
t1#P#part3#SP#sp32.MYD
 
15239
t1#P#part3#SP#sp32.MYI
 
15240
t1#P#part4#SP#sp41.MYD
 
15241
t1#P#part4#SP#sp41.MYI
 
15242
t1#P#part4#SP#sp42.MYD
 
15243
t1#P#part4#SP#sp42.MYI
 
15244
t1.frm
 
15245
t1.par
 
15246
 
 
15247
# check prerequisites-1 success:    1
 
15248
# check COUNT(*) success:    1
 
15249
# check MIN/MAX(f_int1) success:    1
 
15250
# check MIN/MAX(f_int2) success:    1
 
15251
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15252
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15253
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15254
WHERE f_int1 IN (2,3);
 
15255
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
15256
# check prerequisites-3 success:    1
 
15257
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15259
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15260
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15261
WHERE f_int1 IN (2,3);
 
15262
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15263
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15264
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15265
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15266
WHERE f_int1 IN (2,3);
 
15267
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15268
# check read via f_int1 success: 1
 
15269
# check read via f_int2 success: 1
 
15270
        
 
15271
# check multiple-1 success:     1
 
15272
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15273
        
 
15274
# check multiple-2 success:     1
 
15275
INSERT INTO t1 SELECT * FROM t0_template
 
15276
WHERE MOD(f_int1,3) = 0;
 
15277
        
 
15278
# check multiple-3 success:     1
 
15279
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15280
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15281
AND @max_row_div2 + @max_row_div4;
 
15282
        
 
15283
# check multiple-4 success:     1
 
15284
DELETE FROM t1
 
15285
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15286
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15287
        
 
15288
# check multiple-5 success:     1
 
15289
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15290
WHERE MOD(f_int1,3) = 0
 
15291
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15292
SELECT COUNT(*) INTO @clash_count
 
15293
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15294
WHERE MOD(f_int1,3) = 0
 
15295
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15296
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15297
INSERT INTO t1
 
15298
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15299
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15300
f_charbig = '#SINGLE#';
 
15301
        
 
15302
# check single-1 success:       1
 
15303
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15304
INSERT INTO t1
 
15305
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15306
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15307
f_charbig = '#SINGLE#';
 
15308
        
 
15309
# check single-2 success:       1
 
15310
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15311
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15312
UPDATE t1 SET f_int1 = @cur_value2
 
15313
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15314
        
 
15315
# check single-3 success:       1
 
15316
SET @cur_value1= -1;
 
15317
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15318
UPDATE t1 SET f_int1 = @cur_value1
 
15319
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15320
        
 
15321
# check single-4 success:       1
 
15322
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15323
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15324
        
 
15325
# check single-5 success:       1
 
15326
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15327
        
 
15328
# check single-6 success:       1
 
15329
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15330
        
 
15331
# check single-7 success:       1
 
15332
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15333
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15334
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15335
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15336
f_charbig = '#NULL#';
 
15337
INSERT INTO t1
 
15338
SET f_int1 = NULL , f_int2 = -@max_row,
 
15339
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15340
f_charbig = '#NULL#';
 
15341
# check null success:    1
 
15342
        
 
15343
# check null-1 success:         1
 
15344
UPDATE t1 SET f_int1 = -@max_row
 
15345
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15346
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15347
        
 
15348
# check null-2 success:         1
 
15349
UPDATE t1 SET f_int1 = NULL
 
15350
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15351
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15352
        
 
15353
# check null-3 success:         1
 
15354
DELETE FROM t1
 
15355
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15356
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15357
        
 
15358
# check null-4 success:         1
 
15359
DELETE FROM t1
 
15360
WHERE f_int1 = 0 AND f_int2 = 0
 
15361
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15362
AND f_charbig = '#NULL#';
 
15363
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15364
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15365
   FROM t0_template source_tab
 
15366
WHERE MOD(f_int1,3) = 0
 
15367
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15368
ON DUPLICATE KEY
 
15369
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15370
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15371
f_charbig = 'was updated';
 
15372
        
 
15373
# check unique-1-a success:     1
 
15374
        
 
15375
# check unique-1-b success:     1
 
15376
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15377
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15378
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15379
f_charbig = CONCAT('===',f_char1,'===')
 
15380
WHERE f_charbig = 'was updated';
 
15381
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15382
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15383
   FROM t0_template source_tab
 
15384
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15385
        
 
15386
# check replace success:        1
 
15387
DELETE FROM t1
 
15388
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15389
DELETE FROM t1
 
15390
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15391
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15392
UPDATE t1 SET f_int2 = f_int1,
 
15393
f_char1 = CAST(f_int1 AS CHAR),
 
15394
f_char2 = CAST(f_int1 AS CHAR),
 
15395
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15396
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15397
SET AUTOCOMMIT= 0;
 
15398
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15399
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15400
FROM t0_template source_tab
 
15401
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15402
        
 
15403
# check transactions-1 success:         1
 
15404
COMMIT WORK;
 
15405
        
 
15406
# check transactions-2 success:         1
 
15407
ROLLBACK WORK;
 
15408
        
 
15409
# check transactions-3 success:         1
 
15410
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15411
COMMIT WORK;
 
15412
ROLLBACK WORK;
 
15413
        
 
15414
# check transactions-4 success:         1
 
15415
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15416
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15417
FROM t0_template source_tab
 
15418
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15419
        
 
15420
# check transactions-5 success:         1
 
15421
ROLLBACK WORK;
 
15422
Warnings:
 
15423
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
15424
        
 
15425
# check transactions-6 success:         1
 
15426
# INFO: Storage engine used for t1 seems to be not transactional.
 
15427
COMMIT;
 
15428
        
 
15429
# check transactions-7 success:         1
 
15430
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15431
COMMIT WORK;
 
15432
SET @@session.sql_mode = 'traditional';
 
15433
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15434
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15435
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15436
'', '', 'was inserted' FROM t0_template
 
15437
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15438
ERROR 22012: Division by 0
 
15439
COMMIT;
 
15440
        
 
15441
# check transactions-8 success:         1
 
15442
# INFO: Storage engine used for t1 seems to be unable to revert
 
15443
#       changes made by the failing statement.
 
15444
SET @@session.sql_mode = '';
 
15445
SET AUTOCOMMIT= 1;
 
15446
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15447
COMMIT WORK;
 
15448
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15449
        
 
15450
# check special-1 success:      1
 
15451
UPDATE t1 SET f_charbig = '';
 
15452
        
 
15453
# check special-2 success:      1
 
15454
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15455
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15456
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15458
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15459
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15460
'just inserted' FROM t0_template
 
15461
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15462
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15463
BEGIN
 
15464
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15465
f_charbig = 'updated by trigger'
 
15466
      WHERE f_int1 = new.f_int1;
 
15467
END|
 
15468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15469
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15471
        
 
15472
# check trigger-1 success:      1
 
15473
DROP TRIGGER trg_1;
 
15474
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15475
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15476
f_charbig = 'just inserted'
 
15477
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15478
DELETE FROM t0_aux
 
15479
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15480
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15481
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15482
'just inserted' FROM t0_template
 
15483
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15484
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15485
BEGIN
 
15486
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15487
f_charbig = 'updated by trigger'
 
15488
      WHERE f_int1 = new.f_int1;
 
15489
END|
 
15490
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15491
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15493
        
 
15494
# check trigger-2 success:      1
 
15495
DROP TRIGGER trg_1;
 
15496
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15497
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15498
f_charbig = 'just inserted'
 
15499
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15500
DELETE FROM t0_aux
 
15501
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15503
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15504
'just inserted' FROM t0_template
 
15505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15506
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15507
BEGIN
 
15508
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15509
f_charbig = 'updated by trigger'
 
15510
      WHERE f_int1 = new.f_int1;
 
15511
END|
 
15512
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15513
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15514
        
 
15515
# check trigger-3 success:      1
 
15516
DROP TRIGGER trg_1;
 
15517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15519
f_charbig = 'just inserted'
 
15520
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15521
DELETE FROM t0_aux
 
15522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15525
'just inserted' FROM t0_template
 
15526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15527
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15528
BEGIN
 
15529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15530
f_charbig = 'updated by trigger'
 
15531
      WHERE f_int1 = - old.f_int1;
 
15532
END|
 
15533
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15534
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15535
        
 
15536
# check trigger-4 success:      1
 
15537
DROP TRIGGER trg_1;
 
15538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15539
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15540
f_charbig = 'just inserted'
 
15541
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15542
DELETE FROM t0_aux
 
15543
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15545
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15546
'just inserted' FROM t0_template
 
15547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15548
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15549
BEGIN
 
15550
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15551
f_charbig = 'updated by trigger'
 
15552
      WHERE f_int1 = new.f_int1;
 
15553
END|
 
15554
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15555
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15556
        
 
15557
# check trigger-5 success:      1
 
15558
DROP TRIGGER trg_1;
 
15559
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15560
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15561
f_charbig = 'just inserted'
 
15562
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15563
DELETE FROM t0_aux
 
15564
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15566
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15567
'just inserted' FROM t0_template
 
15568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15569
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15570
BEGIN
 
15571
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15572
f_charbig = 'updated by trigger'
 
15573
      WHERE f_int1 = - old.f_int1;
 
15574
END|
 
15575
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15576
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15577
        
 
15578
# check trigger-6 success:      1
 
15579
DROP TRIGGER trg_1;
 
15580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15581
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15582
f_charbig = 'just inserted'
 
15583
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15584
DELETE FROM t0_aux
 
15585
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15587
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15588
'just inserted' FROM t0_template
 
15589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15590
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15591
BEGIN
 
15592
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15593
f_charbig = 'updated by trigger'
 
15594
      WHERE f_int1 = - old.f_int1;
 
15595
END|
 
15596
DELETE FROM t0_aux
 
15597
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15598
        
 
15599
# check trigger-7 success:      1
 
15600
DROP TRIGGER trg_1;
 
15601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15602
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15603
f_charbig = 'just inserted'
 
15604
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15605
DELETE FROM t0_aux
 
15606
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15607
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15608
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15609
'just inserted' FROM t0_template
 
15610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15611
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15612
BEGIN
 
15613
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15614
f_charbig = 'updated by trigger'
 
15615
      WHERE f_int1 = - old.f_int1;
 
15616
END|
 
15617
DELETE FROM t0_aux
 
15618
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15619
        
 
15620
# check trigger-8 success:      1
 
15621
DROP TRIGGER trg_1;
 
15622
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15623
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15624
f_charbig = 'just inserted'
 
15625
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15626
DELETE FROM t0_aux
 
15627
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15628
DELETE FROM t1
 
15629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15630
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15631
BEGIN
 
15632
SET new.f_int1 = old.f_int1 + @max_row,
 
15633
new.f_int2 = old.f_int2 - @max_row,
 
15634
new.f_charbig = '####updated per update trigger####';
 
15635
END|
 
15636
UPDATE t1
 
15637
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15638
f_charbig = '####updated per update statement itself####';
 
15639
        
 
15640
# check trigger-9 success:      1
 
15641
DROP TRIGGER trg_2;
 
15642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15644
f_charbig = CONCAT('===',f_char1,'===');
 
15645
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15646
BEGIN
 
15647
SET new.f_int1 = new.f_int1 + @max_row,
 
15648
new.f_int2 = new.f_int2 - @max_row,
 
15649
new.f_charbig = '####updated per update trigger####';
 
15650
END|
 
15651
UPDATE t1
 
15652
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15653
f_charbig = '####updated per update statement itself####';
 
15654
        
 
15655
# check trigger-10 success:     1
 
15656
DROP TRIGGER trg_2;
 
15657
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15658
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15659
f_charbig = CONCAT('===',f_char1,'===');
 
15660
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15661
BEGIN
 
15662
SET new.f_int1 = @my_max1 + @counter,
 
15663
new.f_int2 = @my_min2 - @counter,
 
15664
new.f_charbig = '####updated per insert trigger####';
 
15665
SET @counter = @counter + 1;
 
15666
END|
 
15667
SET @counter = 1;
 
15668
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15669
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15670
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15671
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15673
ORDER BY f_int1;
 
15674
DROP TRIGGER trg_3;
 
15675
        
 
15676
# check trigger-11 success:     1
 
15677
DELETE FROM t1
 
15678
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15679
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15680
AND f_charbig = '####updated per insert trigger####';
 
15681
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15682
BEGIN
 
15683
SET new.f_int1 = @my_max1 + @counter,
 
15684
new.f_int2 = @my_min2 - @counter,
 
15685
new.f_charbig = '####updated per insert trigger####';
 
15686
SET @counter = @counter + 1;
 
15687
END|
 
15688
SET @counter = 1;
 
15689
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15690
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15691
SELECT CAST(f_int1 AS CHAR),
 
15692
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15694
ORDER BY f_int1;
 
15695
DROP TRIGGER trg_3;
 
15696
        
 
15697
# check trigger-12 success:     1
 
15698
DELETE FROM t1
 
15699
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15700
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15701
AND f_charbig = '####updated per insert trigger####';
 
15702
ANALYZE  TABLE t1;
 
15703
Table   Op      Msg_type        Msg_text
 
15704
test.t1 analyze status  OK
 
15705
CHECK    TABLE t1 EXTENDED;
 
15706
Table   Op      Msg_type        Msg_text
 
15707
test.t1 check   status  OK
 
15708
CHECKSUM TABLE t1 EXTENDED;
 
15709
Table   Checksum
 
15710
test.t1 <some_value>
 
15711
OPTIMIZE TABLE t1;
 
15712
Table   Op      Msg_type        Msg_text
 
15713
test.t1 optimize        status  OK
 
15714
# check layout success:    1
 
15715
REPAIR   TABLE t1 EXTENDED;
 
15716
Table   Op      Msg_type        Msg_text
 
15717
test.t1 repair  status  OK
 
15718
# check layout success:    1
 
15719
TRUNCATE t1;
 
15720
        
 
15721
# check TRUNCATE success:       1
 
15722
# check layout success:    1
 
15723
# End usability test (inc/partition_check.inc)
 
15724
DROP TABLE t1;
 
15725
CREATE TABLE t1 (
 
15726
f_int1 INTEGER,
 
15727
f_int2 INTEGER,
 
15728
f_char1 CHAR(20),
 
15729
f_char2 CHAR(20),
 
15730
f_charbig VARCHAR(1000)
 
15731
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
15732
)
 
15733
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15734
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
15735
(PARTITION part1 VALUES IN (0),
 
15736
PARTITION part2 VALUES IN (1),
 
15737
PARTITION part3 VALUES IN (NULL));
 
15738
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15739
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
15740
# Start usability test (inc/partition_check.inc)
 
15741
create_command
 
15742
SHOW CREATE TABLE t1;
 
15743
Table   Create Table
 
15744
t1      CREATE TABLE `t1` (
 
15745
  `f_int1` int(11) DEFAULT NULL,
 
15746
  `f_int2` int(11) DEFAULT NULL,
 
15747
  `f_char1` char(20) DEFAULT NULL,
 
15748
  `f_char2` char(20) DEFAULT NULL,
 
15749
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15750
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
15751
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
15752
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
15753
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
15754
SUBPARTITION BY KEY (f_int2)
 
15755
SUBPARTITIONS 3
 
15756
(PARTITION part1 VALUES IN (0) ENGINE = MyISAM,
 
15757
 PARTITION part2 VALUES IN (1) ENGINE = MyISAM,
 
15758
 PARTITION part3 VALUES IN (NULL) ENGINE = MyISAM) */
 
15759
 
 
15760
unified filelist
 
15761
t1#P#part1#SP#part1sp0.MYD
 
15762
t1#P#part1#SP#part1sp0.MYI
 
15763
t1#P#part1#SP#part1sp1.MYD
 
15764
t1#P#part1#SP#part1sp1.MYI
 
15765
t1#P#part1#SP#part1sp2.MYD
 
15766
t1#P#part1#SP#part1sp2.MYI
 
15767
t1#P#part2#SP#part2sp0.MYD
 
15768
t1#P#part2#SP#part2sp0.MYI
 
15769
t1#P#part2#SP#part2sp1.MYD
 
15770
t1#P#part2#SP#part2sp1.MYI
 
15771
t1#P#part2#SP#part2sp2.MYD
 
15772
t1#P#part2#SP#part2sp2.MYI
 
15773
t1#P#part3#SP#part3sp0.MYD
 
15774
t1#P#part3#SP#part3sp0.MYI
 
15775
t1#P#part3#SP#part3sp1.MYD
 
15776
t1#P#part3#SP#part3sp1.MYI
 
15777
t1#P#part3#SP#part3sp2.MYD
 
15778
t1#P#part3#SP#part3sp2.MYI
 
15779
t1.frm
 
15780
t1.par
 
15781
 
 
15782
# check prerequisites-1 success:    1
 
15783
# check COUNT(*) success:    1
 
15784
# check MIN/MAX(f_int1) success:    1
 
15785
# check MIN/MAX(f_int2) success:    1
 
15786
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15787
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15788
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15789
WHERE f_int1 IN (2,3);
 
15790
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
 
15791
# check prerequisites-3 success:    1
 
15792
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15793
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15794
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15795
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15796
WHERE f_int1 IN (2,3);
 
15797
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15798
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15799
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15800
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15801
WHERE f_int1 IN (2,3);
 
15802
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15803
# check read via f_int1 success: 1
 
15804
# check read via f_int2 success: 1
 
15805
        
 
15806
# check multiple-1 success:     1
 
15807
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15808
        
 
15809
# check multiple-2 success:     1
 
15810
INSERT INTO t1 SELECT * FROM t0_template
 
15811
WHERE MOD(f_int1,3) = 0;
 
15812
        
 
15813
# check multiple-3 success:     1
 
15814
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15815
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15816
AND @max_row_div2 + @max_row_div4;
 
15817
        
 
15818
# check multiple-4 success:     1
 
15819
DELETE FROM t1
 
15820
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15821
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15822
        
 
15823
# check multiple-5 success:     1
 
15824
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15825
WHERE MOD(f_int1,3) = 0
 
15826
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15827
SELECT COUNT(*) INTO @clash_count
 
15828
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15829
WHERE MOD(f_int1,3) = 0
 
15830
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15831
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15832
INSERT INTO t1
 
15833
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15834
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15835
f_charbig = '#SINGLE#';
 
15836
        
 
15837
# check single-1 success:       1
 
15838
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15839
INSERT INTO t1
 
15840
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15841
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15842
f_charbig = '#SINGLE#';
 
15843
        
 
15844
# check single-2 success:       1
 
15845
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15846
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15847
UPDATE t1 SET f_int1 = @cur_value2
 
15848
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15849
        
 
15850
# check single-3 success:       1
 
15851
SET @cur_value1= -1;
 
15852
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15853
UPDATE t1 SET f_int1 = @cur_value1
 
15854
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15855
        
 
15856
# check single-4 success:       1
 
15857
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15858
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15859
        
 
15860
# check single-5 success:       1
 
15861
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15862
        
 
15863
# check single-6 success:       1
 
15864
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15865
        
 
15866
# check single-7 success:       1
 
15867
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15868
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15869
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15870
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15871
f_charbig = '#NULL#';
 
15872
INSERT INTO t1
 
15873
SET f_int1 = NULL , f_int2 = -@max_row,
 
15874
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15875
f_charbig = '#NULL#';
 
15876
# check null success:    1
 
15877
        
 
15878
# check null-1 success:         1
 
15879
UPDATE t1 SET f_int1 = -@max_row
 
15880
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15881
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15882
        
 
15883
# check null-2 success:         1
 
15884
UPDATE t1 SET f_int1 = NULL
 
15885
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15886
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15887
        
 
15888
# check null-3 success:         1
 
15889
DELETE FROM t1
 
15890
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15891
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15892
        
 
15893
# check null-4 success:         1
 
15894
DELETE FROM t1
 
15895
WHERE f_int1 = 0 AND f_int2 = 0
 
15896
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15897
AND f_charbig = '#NULL#';
 
15898
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15899
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15900
   FROM t0_template source_tab
 
15901
WHERE MOD(f_int1,3) = 0
 
15902
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15903
ON DUPLICATE KEY
 
15904
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15905
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15906
f_charbig = 'was updated';
 
15907
        
 
15908
# check unique-1-a success:     1
 
15909
        
 
15910
# check unique-1-b success:     1
 
15911
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15912
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15913
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15914
f_charbig = CONCAT('===',f_char1,'===')
 
15915
WHERE f_charbig = 'was updated';
 
15916
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15917
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15918
   FROM t0_template source_tab
 
15919
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15920
        
 
15921
# check replace success:        1
 
15922
DELETE FROM t1
 
15923
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15924
DELETE FROM t1
 
15925
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15926
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15927
UPDATE t1 SET f_int2 = f_int1,
 
15928
f_char1 = CAST(f_int1 AS CHAR),
 
15929
f_char2 = CAST(f_int1 AS CHAR),
 
15930
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15931
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15932
SET AUTOCOMMIT= 0;
 
15933
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15934
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15935
FROM t0_template source_tab
 
15936
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15937
        
 
15938
# check transactions-1 success:         1
 
15939
COMMIT WORK;
 
15940
        
 
15941
# check transactions-2 success:         1
 
15942
ROLLBACK WORK;
 
15943
        
 
15944
# check transactions-3 success:         1
 
15945
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15946
COMMIT WORK;
 
15947
ROLLBACK WORK;
 
15948
        
 
15949
# check transactions-4 success:         1
 
15950
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15951
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15952
FROM t0_template source_tab
 
15953
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15954
        
 
15955
# check transactions-5 success:         1
 
15956
ROLLBACK WORK;
 
15957
Warnings:
 
15958
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
15959
        
 
15960
# check transactions-6 success:         1
 
15961
# INFO: Storage engine used for t1 seems to be not transactional.
 
15962
COMMIT;
 
15963
        
 
15964
# check transactions-7 success:         1
 
15965
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15966
COMMIT WORK;
 
15967
SET @@session.sql_mode = 'traditional';
 
15968
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15969
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15970
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15971
'', '', 'was inserted' FROM t0_template
 
15972
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15973
ERROR 22012: Division by 0
 
15974
COMMIT;
 
15975
        
 
15976
# check transactions-8 success:         1
 
15977
# INFO: Storage engine used for t1 seems to be unable to revert
 
15978
#       changes made by the failing statement.
 
15979
SET @@session.sql_mode = '';
 
15980
SET AUTOCOMMIT= 1;
 
15981
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15982
COMMIT WORK;
 
15983
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15984
        
 
15985
# check special-1 success:      1
 
15986
UPDATE t1 SET f_charbig = '';
 
15987
        
 
15988
# check special-2 success:      1
 
15989
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15990
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15991
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15993
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15994
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15995
'just inserted' FROM t0_template
 
15996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15997
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15998
BEGIN
 
15999
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16000
f_charbig = 'updated by trigger'
 
16001
      WHERE f_int1 = new.f_int1;
 
16002
END|
 
16003
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16004
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16006
        
 
16007
# check trigger-1 success:      1
 
16008
DROP TRIGGER trg_1;
 
16009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16011
f_charbig = 'just inserted'
 
16012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16013
DELETE FROM t0_aux
 
16014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16017
'just inserted' FROM t0_template
 
16018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16019
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16020
BEGIN
 
16021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16022
f_charbig = 'updated by trigger'
 
16023
      WHERE f_int1 = new.f_int1;
 
16024
END|
 
16025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16026
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16028
        
 
16029
# check trigger-2 success:      1
 
16030
DROP TRIGGER trg_1;
 
16031
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16032
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16033
f_charbig = 'just inserted'
 
16034
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16035
DELETE FROM t0_aux
 
16036
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16037
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16038
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16039
'just inserted' FROM t0_template
 
16040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16041
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16042
BEGIN
 
16043
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16044
f_charbig = 'updated by trigger'
 
16045
      WHERE f_int1 = new.f_int1;
 
16046
END|
 
16047
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16048
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16049
        
 
16050
# check trigger-3 success:      1
 
16051
DROP TRIGGER trg_1;
 
16052
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16053
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16054
f_charbig = 'just inserted'
 
16055
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16056
DELETE FROM t0_aux
 
16057
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16059
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16060
'just inserted' FROM t0_template
 
16061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16062
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16063
BEGIN
 
16064
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16065
f_charbig = 'updated by trigger'
 
16066
      WHERE f_int1 = - old.f_int1;
 
16067
END|
 
16068
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16069
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16070
        
 
16071
# check trigger-4 success:      1
 
16072
DROP TRIGGER trg_1;
 
16073
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16074
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16075
f_charbig = 'just inserted'
 
16076
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16077
DELETE FROM t0_aux
 
16078
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16080
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16081
'just inserted' FROM t0_template
 
16082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16083
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16084
BEGIN
 
16085
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16086
f_charbig = 'updated by trigger'
 
16087
      WHERE f_int1 = new.f_int1;
 
16088
END|
 
16089
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16090
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16091
        
 
16092
# check trigger-5 success:      1
 
16093
DROP TRIGGER trg_1;
 
16094
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16095
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16096
f_charbig = 'just inserted'
 
16097
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16098
DELETE FROM t0_aux
 
16099
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16100
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16101
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16102
'just inserted' FROM t0_template
 
16103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16104
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16105
BEGIN
 
16106
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16107
f_charbig = 'updated by trigger'
 
16108
      WHERE f_int1 = - old.f_int1;
 
16109
END|
 
16110
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16111
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16112
        
 
16113
# check trigger-6 success:      1
 
16114
DROP TRIGGER trg_1;
 
16115
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16116
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16117
f_charbig = 'just inserted'
 
16118
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16119
DELETE FROM t0_aux
 
16120
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16121
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16122
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16123
'just inserted' FROM t0_template
 
16124
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16125
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16126
BEGIN
 
16127
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16128
f_charbig = 'updated by trigger'
 
16129
      WHERE f_int1 = - old.f_int1;
 
16130
END|
 
16131
DELETE FROM t0_aux
 
16132
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16133
        
 
16134
# check trigger-7 success:      1
 
16135
DROP TRIGGER trg_1;
 
16136
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16137
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16138
f_charbig = 'just inserted'
 
16139
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16140
DELETE FROM t0_aux
 
16141
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16142
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16143
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16144
'just inserted' FROM t0_template
 
16145
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16146
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16147
BEGIN
 
16148
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16149
f_charbig = 'updated by trigger'
 
16150
      WHERE f_int1 = - old.f_int1;
 
16151
END|
 
16152
DELETE FROM t0_aux
 
16153
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16154
        
 
16155
# check trigger-8 success:      1
 
16156
DROP TRIGGER trg_1;
 
16157
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16158
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16159
f_charbig = 'just inserted'
 
16160
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16161
DELETE FROM t0_aux
 
16162
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16163
DELETE FROM t1
 
16164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16165
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16166
BEGIN
 
16167
SET new.f_int1 = old.f_int1 + @max_row,
 
16168
new.f_int2 = old.f_int2 - @max_row,
 
16169
new.f_charbig = '####updated per update trigger####';
 
16170
END|
 
16171
UPDATE t1
 
16172
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16173
f_charbig = '####updated per update statement itself####';
 
16174
        
 
16175
# check trigger-9 success:      1
 
16176
DROP TRIGGER trg_2;
 
16177
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16178
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16179
f_charbig = CONCAT('===',f_char1,'===');
 
16180
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16181
BEGIN
 
16182
SET new.f_int1 = new.f_int1 + @max_row,
 
16183
new.f_int2 = new.f_int2 - @max_row,
 
16184
new.f_charbig = '####updated per update trigger####';
 
16185
END|
 
16186
UPDATE t1
 
16187
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16188
f_charbig = '####updated per update statement itself####';
 
16189
        
 
16190
# check trigger-10 success:     1
 
16191
DROP TRIGGER trg_2;
 
16192
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16193
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16194
f_charbig = CONCAT('===',f_char1,'===');
 
16195
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16196
BEGIN
 
16197
SET new.f_int1 = @my_max1 + @counter,
 
16198
new.f_int2 = @my_min2 - @counter,
 
16199
new.f_charbig = '####updated per insert trigger####';
 
16200
SET @counter = @counter + 1;
 
16201
END|
 
16202
SET @counter = 1;
 
16203
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16204
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16205
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16206
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16207
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16208
ORDER BY f_int1;
 
16209
DROP TRIGGER trg_3;
 
16210
        
 
16211
# check trigger-11 success:     1
 
16212
DELETE FROM t1
 
16213
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16214
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16215
AND f_charbig = '####updated per insert trigger####';
 
16216
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16217
BEGIN
 
16218
SET new.f_int1 = @my_max1 + @counter,
 
16219
new.f_int2 = @my_min2 - @counter,
 
16220
new.f_charbig = '####updated per insert trigger####';
 
16221
SET @counter = @counter + 1;
 
16222
END|
 
16223
SET @counter = 1;
 
16224
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16225
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16226
SELECT CAST(f_int1 AS CHAR),
 
16227
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16228
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16229
ORDER BY f_int1;
 
16230
DROP TRIGGER trg_3;
 
16231
        
 
16232
# check trigger-12 success:     1
 
16233
DELETE FROM t1
 
16234
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16235
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16236
AND f_charbig = '####updated per insert trigger####';
 
16237
ANALYZE  TABLE t1;
 
16238
Table   Op      Msg_type        Msg_text
 
16239
test.t1 analyze status  OK
 
16240
CHECK    TABLE t1 EXTENDED;
 
16241
Table   Op      Msg_type        Msg_text
 
16242
test.t1 check   status  OK
 
16243
CHECKSUM TABLE t1 EXTENDED;
 
16244
Table   Checksum
 
16245
test.t1 <some_value>
 
16246
OPTIMIZE TABLE t1;
 
16247
Table   Op      Msg_type        Msg_text
 
16248
test.t1 optimize        status  OK
 
16249
# check layout success:    1
 
16250
REPAIR   TABLE t1 EXTENDED;
 
16251
Table   Op      Msg_type        Msg_text
 
16252
test.t1 repair  status  OK
 
16253
# check layout success:    1
 
16254
TRUNCATE t1;
 
16255
        
 
16256
# check TRUNCATE success:       1
 
16257
# check layout success:    1
 
16258
# End usability test (inc/partition_check.inc)
 
16259
DROP TABLE t1;
 
16260
DROP VIEW  IF EXISTS v1;
 
16261
DROP TABLE IF EXISTS t1;
 
16262
DROP TABLE IF EXISTS t0_aux;
 
16263
DROP TABLE IF EXISTS t0_definition;
 
16264
DROP TABLE IF EXISTS t0_template;