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

« back to all changes in this revision

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

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

Show diffs side-by-side

added added

removed removed

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